nvdec: Add colorimetry info to the caps
Output any colorimetry information extracted from the stream
into the caps.
diff --git a/sys/nvdec/gstnvdec.c b/sys/nvdec/gstnvdec.c
index 7c07973..0ec83a8 100644
--- a/sys/nvdec/gstnvdec.c
+++ b/sys/nvdec/gstnvdec.c
@@ -698,6 +698,104 @@
else
vinfo->interlace_mode = GST_VIDEO_INTERLACE_MODE_MIXED;
+ GST_LOG_OBJECT (decoder,
+ "Reading colorimetry information full-range %d matrix %d transfer %d primaries %d",
+ format->video_signal_description.video_full_range_flag,
+ format->video_signal_description.matrix_coefficients,
+ format->video_signal_description.transfer_characteristics,
+ format->video_signal_description.color_primaries);
+
+ switch (format->video_signal_description.color_primaries) {
+ case 1:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT709;
+ break;
+ case 4:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470M;
+ break;
+ case 5:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470BG;
+ break;
+ case 6:
+ vinfo->colorimetry.primaries =
+ GST_VIDEO_COLOR_PRIMARIES_SMPTE170M;
+ break;
+ case 7:
+ vinfo->colorimetry.primaries =
+ GST_VIDEO_COLOR_PRIMARIES_SMPTE240M;
+ break;
+ case 8:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_FILM;
+ break;
+ case 9:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT2020;
+ break;
+ default:
+ vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
+
+ }
+
+ if (format->video_signal_description.video_full_range_flag)
+ vinfo->colorimetry.range = GST_VIDEO_COLOR_RANGE_0_255;
+ else
+ vinfo->colorimetry.range = GST_VIDEO_COLOR_RANGE_16_235;
+
+ switch (format->video_signal_description.transfer_characteristics) {
+ case 1:
+ case 6:
+ case 16:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT709;
+ break;
+ case 4:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA22;
+ break;
+ case 5:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA28;
+ break;
+ case 7:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_SMPTE240M;
+ break;
+ case 8:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA10;
+ break;
+ case 9:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_LOG100;
+ break;
+ case 10:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_LOG316;
+ break;
+ case 15:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT2020_12;
+ break;
+ default:
+ vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_UNKNOWN;
+ break;
+ }
+ switch (format->video_signal_description.matrix_coefficients) {
+ case 0:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_RGB;
+ break;
+ case 1:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT709;
+ break;
+ case 4:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_FCC;
+ break;
+ case 5:
+ case 6:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT601;
+ break;
+ case 7:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_SMPTE240M;
+ break;
+ case 9:
+ case 10:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT2020;
+ break;
+ default:
+ vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_UNKNOWN;
+ break;
+ }
+
state->caps = gst_video_info_to_caps (&state->info);
gst_caps_set_features (state->caps, 0,