From: Holy Wu <hol...@users.noreply.github.com> --- libavcodec/cuviddec.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index acee78cf2c..c14e381bb5 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -722,6 +722,7 @@ static av_cold int cuvid_decode_end(AVCodecContext *avctx) static int cuvid_test_capabilities(AVCodecContext *avctx, const CUVIDPARSERPARAMS *cuparseinfo, + cudaVideoChromaFormat probed_chroma_format, int probed_width, int probed_height, int bit_depth) @@ -748,7 +749,7 @@ static int cuvid_test_capabilities(AVCodecContext *avctx, ctx->caps8.eCodecType = ctx->caps10.eCodecType = ctx->caps12.eCodecType = cuparseinfo->CodecType; ctx->caps8.eChromaFormat = ctx->caps10.eChromaFormat = ctx->caps12.eChromaFormat - = cudaVideoChromaFormat_420; + = probed_chroma_format; ctx->caps8.nBitDepthMinus8 = 0; ctx->caps10.nBitDepthMinus8 = 2; @@ -783,13 +784,8 @@ static int cuvid_test_capabilities(AVCodecContext *avctx, return res8; } - if (!ctx->caps8.bIsSupported) { - av_log(avctx, AV_LOG_ERROR, "Codec %s is not supported.\n", avctx->codec->name); - return AVERROR(EINVAL); - } - if (!caps->bIsSupported) { - av_log(avctx, AV_LOG_ERROR, "Bit depth %d is not supported.\n", bit_depth); + av_log(avctx, AV_LOG_ERROR, "Hardware is lacking required capabilities\n"); return AVERROR(EINVAL); } @@ -830,13 +826,21 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx) AV_PIX_FMT_NV12, AV_PIX_FMT_NONE }; + cudaVideoChromaFormat probed_chroma_format = cudaVideoChromaFormat_420; int probed_width = avctx->coded_width ? avctx->coded_width : 1280; int probed_height = avctx->coded_height ? avctx->coded_height : 720; int probed_bit_depth = 8; const AVPixFmtDescriptor *probe_desc = av_pix_fmt_desc_get(avctx->pix_fmt); - if (probe_desc && probe_desc->nb_components) - probed_bit_depth = probe_desc->comp[0].depth; + if (probe_desc) { + if (probe_desc->log2_chroma_w == 1 && probe_desc->log2_chroma_h == 0) + probed_chroma_format = cudaVideoChromaFormat_422; + else if (probe_desc->log2_chroma_w == 0 && probe_desc->log2_chroma_h == 0) + probed_chroma_format = cudaVideoChromaFormat_444; + + if (probe_desc->nb_components) + probed_bit_depth = probe_desc->comp[0].depth; + } // Accelerated transcoding scenarios with 'ffmpeg' require that the // pix_fmt be set to AV_PIX_FMT_CUDA early. The sw_pix_fmt, and the @@ -1023,6 +1027,7 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx) goto error; ret = cuvid_test_capabilities(avctx, &ctx->cuparseinfo, + probed_chroma_format, probed_width, probed_height, probed_bit_depth); -- 2.23.0.windows.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".