diff --git a/libavcodec/cuvid.c b/libavcodec/cuvid.c index 58a84aeb06c386656c8ef125b9352e10a29da3ae..94606a9b02d96c32353349a477a63089001dba06 100644 --- a/libavcodec/cuvid.c +++ b/libavcodec/cuvid.c @@ -664,6 +664,21 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx) const AVBitStreamFilter *bsf; int ret = 0; + enum AVPixelFormat pix_fmts[3] = { AV_PIX_FMT_CUDA, + AV_PIX_FMT_NV12, + AV_PIX_FMT_NONE }; + + // Accelerated transcoding scenarios with 'ffmpeg' require that the + // pix_fmt be set to AV_PIX_FMT_CUDA early. The sw_pix_fmt, and the + // pix_fmt for non-accelerated transcoding, do not need to be correct + // but need to be set to something. We arbitrarily pick NV12. + ret = ff_get_format(avctx, pix_fmts); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, "ff_get_format failed: %d\n", ret); + return ret; + } + avctx->pix_fmt = ret; + ret = cuvid_load_functions(&ctx->cvdl); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Failed loading nvcuvid.\n");