首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用DXVA2和ffmpeg对帧进行解码和获取

如何利用DXVA2和ffmpeg对帧进行解码和获取
EN

Stack Overflow用户
提问于 2016-06-22 09:11:11
回答 1查看 5.1K关注 0票数 1

我已经搜索了一个简单的例子,说明如何在Windows中使用ffmpeg来解码硬件加速的H264流,但是我找不到。我知道我应该使用dxva2和ffmpeg来加速硬件。

我可以在CPU上用ffmpeg解码H264,然后将NV12格式转换为post格式,并将帧保存为bmp文件,这要感谢post中提供的示例项目。

为了获得关于dxva2的帮助,我遵循了以下文章中提供的内容:post

我相信我可以用dxva2成功地解码;但是,当我想要得到解码的帧并将其转换为RGBA格式并将其保存为bmp文件时,我会得到一个关于源指针的错误。

我解码和检索帧如下:

代码语言:javascript
复制
int videoFrameBytes = avcodec_decode_video2(pCodecCtx_hwaccel, pFrameYuv, &got_picture_ptr, avpkt);

if (got_picture_ptr==1)
{
    if(dxva2_retrieve_data_call(pCodecCtx_hwaccel, pFrameYuv) == 0)
    {
        fprintf(stderr, "Got frame successfully\n");
        result = true;
    }
}

并将输出帧输入到:

代码语言:javascript
复制
sws_scale(pImgConvertCtx, pFrameYuv->data, pFrameYuv->linesize, 0, height, frame->data, frame->linesize);  

我知道这个错误:

swscaler @ 030c5c20坏的src图像指针

显然,pFrameYuv->data有问题,但我不知道是什么。

如何将用DXVA2解码的NV12帧转换为用sws_scale解码的RGBA?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-23 13:56:32

问题解决了。

这是由于像素格式类型不正确造成的。在创建sws_context时,我使用了编解码器上下文的像素格式,如下所示:(这对于SW解码是可以的)

代码语言:javascript
复制
// initialize SWS context for software scaling
sws_ctx = sws_getContext(pCodecCtx->width,
    pCodecCtx->height,
    pCodecCtx->pix_fmt,
    pCodecCtx->width,
    pCodecCtx->height,
    AV_PIX_FMT_RGB24,
    SWS_BILINEAR,
    NULL,
    NULL,
    NULL
    );

pCodecCtx->pix_fmt为AV_PIX_FMT_YUV420P,而解码后的帧格式为AV_PIX_FMT_NV12 + DXVA2。设置正确的格式后,我可以使用sws_scale将NV12帧转换为RGB。

正确参数:

代码语言:javascript
复制
// initialize SWS context for software scaling
sws_ctx = sws_getContext(pCodecCtx->width,
    pCodecCtx->height,
    AV_PIX_FMT_NV12,
    pCodecCtx->width,
    pCodecCtx->height,
    AV_PIX_FMT_RGB24,
    SWS_BILINEAR,
    NULL,
    NULL,
    NULL
    );

另外,请注意取消输出检索帧,如下所示:

代码语言:javascript
复制
av_frame_unref(pFrameYuv);

否则你就会有内存泄漏。

此外,正如post中所述,dxva2_retrieve_data_call效率很低。您应该寻找从GPU获取数据的另一种方法。

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

https://stackoverflow.com/questions/37963492

复制
相关文章

相似问题

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