From: Holy Wu
---
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".