FFMPEG и DXVA2

Я сделал плеер для IP-камеры (fullHD H264) с FFMPEG
Я кодирую под Windows с помощью Qt. Мне нужно как можно меньшее время ожидания, и лучший результат, который я могу получить, достигается с помощью:

  • Я получил пакет с live555,
  • декодировать с помощью ffmpeg
  • показать его с SDL.

Но с «медленным» процессором у меня большая задержка, если битрейт слишком высок или он не может обрабатывать 1080p.

Я действительно хочу попробовать аппаратное ускорение с DXVA2, чтобы посмотреть, смогу ли я получить более высокую производительность, особенно на самых медленных процессорах.

Но я действительно не знаю, как поступить. Я должен собрать FFMPEG с —enable-dxva2 и —enable-hwaccel = h264_dxva2? или зераное строение
Я никогда не использовал Direct X, мне нужно знание Direct X или ffmpeg с опциями —enable-dxva2 и —enable-hwaccel = h264_dxva2?

Спасибо

Редактировать :

Здравствуйте, я использую этот пост, чтобы помочь мне в моем ускорении HW с FFMPEG
Не удалось выполнить: 0x80070057, при декодировании видео через ffmpeg с помощью dxva2

Я декодирую пакет с

avcodec_decode_video2(pCodecCtx, pFrame, &gotPic, &packet);

и я получаю свою расшифрованную рамку с

dxva2_retrieve_data_call(pCodecCtx, pFrame, &gotPic, &packet);

Я пытался преобразовать это

sws_scale(img_convert_affic, pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);

и скопировать буфер в Qimage

LastFrame=QImage(w,h,QImage::Format_RGB888);
for(int y=0;y<h;y++)
memcpy(LastFrame.scanLine(y),pFrameRGB->data[0]+y*pFrameRGB->linesize[0],w*3);

Я получил свою фотографию, но с большим количеством артефактов, и через несколько секунд я получил ошибку сегментации в dxva2_retrieve_data_call(pCodecCtx, pFrame, &gotPic, &packet);

Редактировать :
Проблема решена. Я не проверял, получил ли я фотографию, прежде чем ее получить.
Но производительность моего настольного компьютера очень низкая (Intel Core i5 650, 4 ГБ ОЗУ, ATI HD5800), он потребляет на 5% больше ЦП, в 3 раза больше ОЗУ и много поврежденных кадров.
Это лучше на более новом компьютере, но мягкий декодер лучше.
dxva2_retrieve_data_call и sws_swale занимают много времени, когда включен hwaccel …

Есть ли способ отобразить картинку NV12 в Qt (без преобразования sws_scale) и есть способ оптимизировать dxva_retrieve_data_call?

0

Решение

Если вы хотите реального ускорения графического процессора (без копирования), вам необходимо предоставить DirectX Surface через IDirect3DDeviceManager9 (Directx9) / IMFDXGIDeviceManager (Directx11). QT и FFMPEG не предоставляют его вам. Вам также потребуется предоставить механизм отображения DirectX.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector