Re: [FFmpeg-devel] [PATCH v5 1/2] avformat/mxfdec: Read video range from CDCIEssenceDescriptor

2020-08-24 Thread Tomas Härdin
tor 2020-08-20 klockan 14:58 +0100 skrev Harry Mallon:
> * Capture black_ref, white_ref and color_range and recognise
>   full and narrow range.
> 
> Signed-off-by: Harry Mallon 
> ---
>  libavformat/mxfdec.c   | 37 ++
>  tests/ref/fate/mxf-probe-dnxhd |  2 +-
>  tests/ref/fate/mxf-probe-dv25  |  2 +-
>  3 files changed, 39 insertions(+), 2 deletions(-)
> 
> [...]
> +static enum AVColorRange mxf_get_color_range(MXFContext *mxf, MXFDescriptor 
> *descriptor)
> +{
> +if (descriptor->black_ref_level || descriptor->white_ref_level || 
> descriptor->color_range) {
> +/* CDCI range metadata */
> +if (!descriptor->component_depth)
> +return AVCOL_RANGE_UNSPECIFIED;
> +if (descriptor->black_ref_level == 0 &&
> +descriptor->white_ref_level == ((1 - 1) &&
> +(descriptor->color_range== (1 ||
> + descriptor->color_range== ((1 - 1)))
> +return AVCOL_RANGE_JPEG;
> +if (descriptor->component_depth >= 8 &&
> +descriptor->black_ref_level == (1  
> <<(descriptor->component_depth - 4)) &&
> +descriptor->white_ref_level == 
> (235<<(descriptor->component_depth - 8)) &&
> +descriptor->color_range == 
> ((14<<(descriptor->component_depth - 4)) + 1))
> +return AVCOL_RANGE_MPEG;
> +avpriv_request_sample(mxf->fc, "Unrecognized CDCI color range (color 
> diff range %d, b %d, w %d, depth %d)",
> +  descriptor->color_range, 
> descriptor->black_ref_level,
> +  descriptor->white_ref_level, 
> descriptor->component_depth);
> +}

Looks OK. Sorry about the late reply. I'll push tomorrow if there isn't
more feedback

/Tomas

___
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 v5 1/2] avformat/mxfdec: Read video range from CDCIEssenceDescriptor

2020-08-20 Thread Harry Mallon
* Capture black_ref, white_ref and color_range and recognise
  full and narrow range.

Signed-off-by: Harry Mallon 
---
 libavformat/mxfdec.c   | 37 ++
 tests/ref/fate/mxf-probe-dnxhd |  2 +-
 tests/ref/fate/mxf-probe-dv25  |  2 +-
 3 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 4b56984b77..7e1686f0df 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -199,6 +199,9 @@ typedef struct MXFDescriptor {
 int bits_per_sample;
 int64_t duration; /* ContainerDuration optional property */
 unsigned int component_depth;
+unsigned int black_ref_level;
+unsigned int white_ref_level;
+unsigned int color_range;
 unsigned int horiz_subsampling;
 unsigned int vert_subsampling;
 UID *sub_descriptors_refs;
@@ -1222,6 +1225,15 @@ static int mxf_read_generic_descriptor(void *arg, 
AVIOContext *pb, int tag, int
 case 0x3302:
 descriptor->horiz_subsampling = avio_rb32(pb);
 break;
+case 0x3304:
+descriptor->black_ref_level = avio_rb32(pb);
+break;
+case 0x3305:
+descriptor->white_ref_level = avio_rb32(pb);
+break;
+case 0x3306:
+descriptor->color_range = avio_rb32(pb);
+break;
 case 0x3308:
 descriptor->vert_subsampling = avio_rb32(pb);
 break;
@@ -2157,6 +2169,30 @@ static int mxf_add_metadata_stream(MXFContext *mxf, 
MXFTrack *track)
 return 0;
 }
 
+static enum AVColorRange mxf_get_color_range(MXFContext *mxf, MXFDescriptor 
*descriptor)
+{
+if (descriptor->black_ref_level || descriptor->white_ref_level || 
descriptor->color_range) {
+/* CDCI range metadata */
+if (!descriptor->component_depth)
+return AVCOL_RANGE_UNSPECIFIED;
+if (descriptor->black_ref_level == 0 &&
+descriptor->white_ref_level == ((1color_range== (1color_range== ((1component_depth >= 8 &&
+descriptor->black_ref_level == (1  <<(descriptor->component_depth 
- 4)) &&
+descriptor->white_ref_level == (235<<(descriptor->component_depth 
- 8)) &&
+descriptor->color_range == ((14<<(descriptor->component_depth 
- 4)) + 1))
+return AVCOL_RANGE_MPEG;
+avpriv_request_sample(mxf->fc, "Unrecognized CDCI color range (color 
diff range %d, b %d, w %d, depth %d)",
+  descriptor->color_range, 
descriptor->black_ref_level,
+  descriptor->white_ref_level, 
descriptor->component_depth);
+}
+
+return AVCOL_RANGE_UNSPECIFIED;
+}
+
 static int mxf_parse_structural_metadata(MXFContext *mxf)
 {
 MXFPackage *material_package = NULL;
@@ -2492,6 +2528,7 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
 }
 if (descriptor->aspect_ratio.num && descriptor->aspect_ratio.den)
 st->display_aspect_ratio = descriptor->aspect_ratio;
+st->codecpar->color_range = mxf_get_color_range(mxf, 
descriptor);
 st->codecpar->color_primaries = 
mxf_get_codec_ul(ff_mxf_color_primaries_uls, 
&descriptor->color_primaries_ul)->id;
 st->codecpar->color_trc   = 
mxf_get_codec_ul(ff_mxf_color_trc_uls, &descriptor->color_trc_ul)->id;
 st->codecpar->color_space = 
mxf_get_codec_ul(ff_mxf_color_space_uls, &descriptor->color_space_ul)->id;
diff --git a/tests/ref/fate/mxf-probe-dnxhd b/tests/ref/fate/mxf-probe-dnxhd
index 012d3ea1d9..5a6221b1d5 100644
--- a/tests/ref/fate/mxf-probe-dnxhd
+++ b/tests/ref/fate/mxf-probe-dnxhd
@@ -124,7 +124,7 @@ sample_aspect_ratio=1:1
 display_aspect_ratio=4:3
 pix_fmt=yuv422p
 level=-99
-color_range=unknown
+color_range=tv
 color_space=bt709
 color_transfer=bt709
 color_primaries=bt709
diff --git a/tests/ref/fate/mxf-probe-dv25 b/tests/ref/fate/mxf-probe-dv25
index 810f145f41..ffd26c4dfd 100644
--- a/tests/ref/fate/mxf-probe-dv25
+++ b/tests/ref/fate/mxf-probe-dv25
@@ -16,7 +16,7 @@ sample_aspect_ratio=16:15
 display_aspect_ratio=4:3
 pix_fmt=yuv420p
 level=-99
-color_range=unknown
+color_range=tv
 color_space=unknown
 color_transfer=bt470m
 color_primaries=unknown
-- 
2.28.0

___
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".