diff --git a/gst/rawparse/gstrawvideoparse.c b/gst/rawparse/gstrawvideoparse.c index 445db751c3..cb090af00f 100644 --- a/gst/rawparse/gstrawvideoparse.c +++ b/gst/rawparse/gstrawvideoparse.c @@ -93,7 +93,8 @@ enum PROP_TOP_FIELD_FIRST, PROP_PLANE_STRIDES, PROP_PLANE_OFFSETS, - PROP_FRAME_SIZE + PROP_FRAME_SIZE, + PROP_COLORIMETRY, }; #define DEFAULT_WIDTH 320 @@ -309,6 +310,13 @@ gst_raw_video_parse_class_init (GstRawVideoParseClass * klass) 0, G_MAXUINT, DEFAULT_FRAME_STRIDE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS) ); + g_object_class_install_property (object_class, + PROP_COLORIMETRY, + g_param_spec_string ("colorimetry", + "Colorimetry", + "The video source colorimetry", + NULL, G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS) + ); gst_element_class_set_static_metadata (element_class, "rawvideoparse", @@ -610,6 +618,28 @@ gst_raw_video_parse_set_property (GObject * object, guint prop_id, break; } + case PROP_COLORIMETRY: + { + GstVideoColorimetry new_cinfo; + + if (!gst_video_colorimetry_from_string (&new_cinfo, + g_value_get_string (value))) + break; + + GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object); + if (!gst_video_colorimetry_is_equal (&new_cinfo, + &(props_cfg->info.colorimetry))) { + + props_cfg->colorimetry = new_cinfo; + gst_raw_video_parse_update_info (props_cfg); + + if (!gst_raw_video_parse_is_using_sink_caps (raw_video_parse)) + gst_raw_base_parse_invalidate_src_caps (raw_base_parse); + } + GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object); + + break; + } default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1078,6 +1108,8 @@ gst_raw_video_parse_update_info (GstRawVideoParseConfig * config) gst_video_info_set_format (info, config->format, config->width, config->height); + info->colorimetry = config->colorimetry; + GST_VIDEO_INFO_PAR_N (info) = config->pixel_aspect_ratio_n; GST_VIDEO_INFO_PAR_D (info) = config->pixel_aspect_ratio_d; GST_VIDEO_INFO_FPS_N (info) = config->framerate_n; diff --git a/gst/rawparse/gstrawvideoparse.h b/gst/rawparse/gstrawvideoparse.h index 0921315c6f..3694dc2fc0 100644 --- a/gst/rawparse/gstrawvideoparse.h +++ b/gst/rawparse/gstrawvideoparse.h @@ -62,6 +62,7 @@ struct _GstRawVideoParseConfig gboolean interlaced; gsize plane_offsets[GST_VIDEO_MAX_PLANES]; gint plane_strides[GST_VIDEO_MAX_PLANES]; + GstVideoColorimetry colorimetry; /* If TRUE, then TFF flags are added to outgoing buffers and * their video metadata */