libav:使用cuda / cuvid时,在哪里可以获得对AV_PIX_FMT_NV12的引用?

时间:2019-03-27 21:30:59

标签: ffmpeg libav

假设我正在使用av_hwdevice_find_type_by_name("cuda"),就像here一样。我需要使用SwsContext将解码的帧转换为RGB。根据经验,我知道使用cuda / cuvid解码器时,即使我查看的每个结构都表示AV_PIX_FMT_NV12AV_PIX_FMT_NONE,我都会得到AV_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;

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

1 个答案:

答案 0 :(得分:0)

对于CUDA,最好的选择是当在AV_PIX_FMT_YUV420P上看到AVHWFramesContext::sw_format时将其视为AV_PIX_FMT_NV12,而当AV_PIX_FMT_YUV420P10实际上是AV_PIX_FMT_P010时。 / p>

据我所知,CUDA和NVDEC(都是CUVID)都不支持420格式以外的任何其他格式作为解码帧。