summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHolger Kaelberer <hk@getslash.de>2014-01-15 12:09:14 +0100
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2014-01-15 14:24:32 +0100
commitb1d3f7d4c0f3be8ec1f82aa00516596cafb7a0a2 (patch)
treea7842801f5cf00d8de5ac9f698ae6b43f9ffce8d
parent751aa05937d736503fce22ba784820f7184f0b40 (diff)
downloadgst-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>
-rw-r--r--gst/vaapi/gstvaapisink.c26
-rw-r--r--gst/vaapi/gstvaapisink.h1
2 files changed, 27 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");
diff --git a/gst/vaapi/gstvaapisink.h b/gst/vaapi/gstvaapisink.h
index bcabe089..832689e3 100644
--- a/gst/vaapi/gstvaapisink.h
+++ b/gst/vaapi/gstvaapisink.h
@@ -86,6 +86,7 @@ struct _GstVaapiSink {
GstVaapiRectangle display_rect;
GstVaapiRotation rotation;
GstVaapiRotation rotation_req;
+ guint color_standard;
guint foreign_window : 1;
guint fullscreen : 1;
guint synchronous : 1;