summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorJan Schmidt <jan@centricular.com>2018-04-28 01:15:44 +1000
committerJan Schmidt <jan@centricular.com>2018-04-28 23:11:15 +1000
commit7cebaa4fb4fe5cf45bc9600e07d6a3b174c8bd3a (patch)
tree8b7f5c765bb4e420285ebd3b253b5654cce58601 /sys
parentde1b0e34474a6e3ff40428345653e0ce14a34fdc (diff)
downloadgstreamer-plugins-bad-7cebaa4fb4fe5cf45bc9600e07d6a3b174c8bd3a.tar.gz
nvdec: Add colorimetry info to the caps
Output any colorimetry information extracted from the stream into the caps.
Diffstat (limited to 'sys')
-rw-r--r--sys/nvdec/gstnvdec.c98
1 files changed, 98 insertions, 0 deletions
diff --git a/sys/nvdec/gstnvdec.c b/sys/nvdec/gstnvdec.c
index f43ee5de1..cfb6f8247 100644
--- a/sys/nvdec/gstnvdec.c
+++ b/sys/nvdec/gstnvdec.c
@@ -703,6 +703,104 @@ handle_pending_frames (GstNvDec * nvdec)
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,