libav:使用cuda / cuvid时在哪里获取对AV_PIX_FMT_NV12的引用?

问题描述 投票:0回答:1

假设我正在使用av_hwdevice_find_type_by_name("cuda"),就像在here中一样。我需要使用SwsContext将解码后的帧转换为RGB。我知道,根据经验,当使用cuda / cuvid解码器时,我得到AV_PIX_FMT_NV12格式的帧,即使我看到的每个结构都说AV_PIX_FMT_NONEAV_PIX_FMT_YUV420P

在什么结构的哪个领域我可以获得AV_PIX_FMT_NV12值,所以我可以在调用SwsContext.sws_scale时删除我的硬编码源格式?谢谢!

更新:

看起来我可以通过:

AVCodecContext* avctx;
...
frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data;
AVPixelFormat pixel_fmt = frames_ctx->sw_format;

...一旦解码了至少一帧。不确定这是否是正确的方法。

ffmpeg libav
1个回答
0
投票

至于CUDA,你最好的选择是当AV_PIX_FMT_YUV420P上的AVHWFramesContext::sw_format认为它是AV_PIX_FMT_NV12而当AV_PIX_FMT_YUV420P10它实际上是AV_PIX_FMT_P010

据我所知,无论是CUDA还是NVDEC(CUVID)都不支持420格式以外的任何解码帧。

© www.soinside.com 2019 - 2024. All rights reserved.