Преобразование искаженного изображения YUV в RGB с использованием libav и qtC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Преобразование искаженного изображения YUV в RGB с использованием libav и qt

Сообщение Гость »


Я пытаюсь получить этот поток ffmpeg с помощью qt:

ffmpeg -stream_loop -1 -re -i Загрузки/SampleVideo_360x240_2mb.mp4 -c:v libxvid -g 2 -vf yadif -b:v 2500k -s 352x288 -cmp 4 -pix_fmt yuv420p -preset медленный -aspect 4:3 -f mpeg -марка mp41 udp://225.1.1.40:8001 и мне удалось получить поток, но, как вы можете видеть, он искажен и умножен:


Изображение


но желаемый результат будет следующим:


Изображение


Я использую эту функцию для отображения кадров с помощью метки qt:

int numBytes = av_image_get_buffer_size(AV_PIX_FMT_YUV420P, ширина, высота, 1); буфер = (uint8_t *)av_malloc(numBytes * sizeof(uint8_t)); если (!буфер) { qDebug() pix_fmt, ширина, высота, AV_PIX_FMT_RGB444LE, SWS_FAST_BILINEAR | SWS_FULL_CHR_H_INT | SWS_ACCURATE_RND, NULL, NULL, NULL); если (!swsContext) { qDebug() данные[0], фрейм->данные[1], фрейм->данные[2], NULL }; int srcLinesize[4] = {frame->линейный размер[0], фрейм->линейный размер[1], фрейм->линейный размер[2], 0 }; sws_scale(swsContext, srcData, srcLinesize, 0, высота, &buffer, &width); // Создаем QImage из преобразованных данных кадра Изображение QImage (буфер, ширина, высота, QImage::Format_RGB444); Что-то не так с формулами преобразования цветового пространства?
P.S: если вы знаете какой-либо другой способ отображения потока ffmpeg в qt, сообщите мне (я не могу использовать gstreamer или Qt6.5, в качестве бэкэнда которого используется ffmpeg, поскольку я работаю над встроенным устройством на базе манипулятора)< /п>
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»