首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFMPEG和DXVA2

FFMPEG和DXVA2
EN

Stack Overflow用户
提问于 2016-01-11 10:40:29
回答 1查看 4.9K关注 0票数 1

我制作了一个带有FFMPEG I代码的IP相机播放器(fullHD H264),在windows下使用is,我需要尽可能低的延迟,并且我能得到的最好的结果是:

  • 我收到了live555的包裹,
  • 用ffmpeg解码
  • 用SDL显示它。

但是对于“慢”CPU,如果比特率太高或者不能处理1080 p,我就会有很多延迟。

我真的很想用DXVA2来尝试硬件加速,看看我是否能获得更好的性能,尤其是在最慢的CPU中。

但我真的不知道该怎么做。我必须用--启用-dxva2 2和-启用-hwaccel=H 264_dxva2 2构建FFMPEG?或者Zeranoe构建--我从来没有使用过Direct,我需要直接X知识,还是使用--启用-dxva2 2和--启用-hwaccel=H 264_dxva2 2来照顾所有的东西?

谢谢

编辑:

你好,我用这篇文章来帮助我使用FFMPEG Failed to execute: 0x80070057, when decoding video via ffmpeg with dxva2进行HW加速。

我用

代码语言:javascript
复制
avcodec_decode_video2(pCodecCtx, pFrame, &gotPic, &packet);

我要用我的解码帧

代码语言:javascript
复制
dxva2_retrieve_data_call(pCodecCtx, pFrame, &gotPic, &packet);

我试着改变它

代码语言:javascript
复制
sws_scale(img_convert_affic, pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);

并将缓冲区复制到Qimage中。

代码语言:javascript
复制
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);中出现了一个分割错误

编辑:问题解决了,我没有检查我是否有一张照片,然后才收回它。但是在我的桌面计算机(英特尔核心i5 650,4GB内存,ATI HD5800)上性能非常差,它消耗了5%的CPU,3倍的内存,以及很多损坏的帧。它在较新的计算机上更好,但软解码器更好。dxva2_retrieve_data_call和sws_swale在启用hwaccel时消耗大量时间.

有没有一种方法可以在Qt中显示NV12图片(没有sws_scale转换),并且有一种优化dxva_retrieve_data_call的方法?

EN

回答 1

Stack Overflow用户

发布于 2016-02-05 20:20:58

如果您想要真正的GPU加速(没有副本返回),您需要通过IDirect3DDeviceManager9(Directx9)/IMFDXGIDeviceManager(Directx11).提供DirectX曲面QT和FFMPEG不为您提供它。您还需要提供DirectX显示机制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34719449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档