diff options
author | Holger Kaelberer <hk@getslash.de> | 2014-01-15 12:09:14 +0100 |
---|---|---|
committer | Gwenole Beauchesne <gwenole.beauchesne@intel.com> | 2014-01-15 14:24:32 +0100 |
commit | b1d3f7d4c0f3be8ec1f82aa00516596cafb7a0a2 (patch) | |
tree | a7842801f5cf00d8de5ac9f698ae6b43f9ffce8d /gst/vaapi/gstvaapisink.c | |
parent | 751aa05937d736503fce22ba784820f7184f0b40 (diff) | |
download | gst-vaapi-b1d3f7d4c0f3be8ec1f82aa00516596cafb7a0a2.tar.gz |
vaapisink: set csc render flags from sinkpad caps.
This maps GstVideoColorimetry information in vaapisink's sinkpad caps
to GST_VAAPI_COLOR_STANDARD_* flags, if per-buffer information was not
available.
https://bugzilla.gnome.org/show_bug.cgi?id=722255
[factored out code, added SMPTE240M, handle per-buffer flags]
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
Diffstat (limited to 'gst/vaapi/gstvaapisink.c')
-rw-r--r-- | gst/vaapi/gstvaapisink.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gst/vaapi/gstvaapisink.c b/gst/vaapi/gstvaapisink.c index 9c5ecd2a..36c35bd8 100644 --- a/gst/vaapi/gstvaapisink.c +++ b/gst/vaapi/gstvaapisink.c @@ -674,6 +674,26 @@ gst_vaapisink_get_caps(GstBaseSink *base_sink, GstCaps *filter) #define gst_vaapisink_get_caps gst_vaapisink_get_caps_impl #endif +static void +update_colorimetry(GstVaapiSink *sink, GstVideoColorimetry *cinfo) +{ +#if GST_CHECK_VERSION(1,0,0) + if (gst_video_colorimetry_matches(cinfo, + GST_VIDEO_COLORIMETRY_BT601)) + sink->color_standard = GST_VAAPI_COLOR_STANDARD_ITUR_BT_601; + else if (gst_video_colorimetry_matches(cinfo, + GST_VIDEO_COLORIMETRY_BT709)) + sink->color_standard = GST_VAAPI_COLOR_STANDARD_ITUR_BT_709; + else if (gst_video_colorimetry_matches(cinfo, + GST_VIDEO_COLORIMETRY_SMPTE240M)) + sink->color_standard = GST_VAAPI_COLOR_STANDARD_SMPTE_240M; + else + sink->color_standard = 0; + + GST_DEBUG("colorimetry %s", gst_video_colorimetry_to_string(cinfo)); +#endif +} + static gboolean gst_vaapisink_set_caps(GstBaseSink *base_sink, GstCaps *caps) { @@ -702,6 +722,7 @@ gst_vaapisink_set_caps(GstBaseSink *base_sink, GstCaps *caps) GST_DEBUG("video pixel-aspect-ratio %d/%d", sink->video_par_n, sink->video_par_d); + update_colorimetry(sink, &vip->colorimetry); gst_caps_replace(&sink->caps, caps); gst_vaapisink_ensure_rotation(sink, FALSE); @@ -1006,6 +1027,11 @@ gst_vaapisink_show_frame(GstBaseSink *base_sink, GstBuffer *src_buffer) flags = gst_vaapi_video_meta_get_render_flags(meta); + /* Append default color standard obtained from caps if none was + available on a per-buffer basis */ + if (!(flags & GST_VAAPI_COLOR_STANDARD_MASK)) + flags |= sink->color_standard; + if (!gst_vaapi_apply_composition(surface, src_buffer)) GST_WARNING("could not update subtitles"); |