【发布时间】:2016-10-24 03:03:37
【问题描述】:
我已经搜索了一个关于如何在 Windows 中使用 ffmpeg 使用硬件加速解码 H264 流的简单示例,但我找不到任何示例。 我知道我应该使用 dxva2 和 ffmpeg 来进行硬件加速。
我可以在 CPU 上使用 ffmpeg 解码 H264,然后将 NV12 格式转换为 RGBA 并将帧保存为 bmp 文件,这要感谢 post 中提供的示例项目。
我已按照以下帖子中提供的内容获取有关 dxva2 的帮助:post
我相信我可以用 dxva2 成功解码;但是,当我想获取解码帧并将其转换为 RGBA 格式并将其保存为 bmp 文件时,我会收到有关源指针的错误。
我解码和检索帧如下:
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;
}
}
并将输出帧提供给:
sws_scale(pImgConvertCtx, pFrameYuv->data, pFrameYuv->linesize, 0, height, frame->data, frame->linesize);
我收到此错误:
[swscaler @ 030c5c20] 错误的 src 图像指针
pFrameYuv->data 显然有问题,但我不知道是什么问题。
我们如何将使用 DXVA2 解码的 NV12 帧转换为使用 sws_scale 的 RGBA?
【问题讨论】:
标签: c++ ffmpeg hardware-acceleration dxva swscale