[FFmpeg-devel] [PATCH] cuviddec: Properly check capability for chroma format

2019-10-03 Thread Holy Wu
Chroma format was not checked properly as it's always set to
cudaVideoChromaFormat_420 regardless of the input pixel format.


0001-cuviddec-Properly-check-capability-for-chroma-format.patch
Description: Binary data
___
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".

[FFmpeg-devel] [PATCH] avcodec/cuviddec: Properly check capability for chroma format

2019-10-04 Thread Holy Wu
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".