From: Gwenole Beauchesne Date: Tue, 4 Dec 2012 10:01:42 +0000 (+0100) Subject: vaapisink: handle sub video-buffers. X-Git-Tag: 1.19.3~503^2~2841 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d19c59ba318375f3a5ff2ba5baf5279828b7fa43;p=platform%2Fupstream%2Fgstreamer.git vaapisink: handle sub video-buffers. Intermediate elements may produce a sub-buffer from a valid GstVaapiVideoBuffer for non raw YUV cases. Make sure vaapisink now understands those buffers. --- diff --git a/gst/vaapi/gstvaapisink.c b/gst/vaapi/gstvaapisink.c index b74927a..22284da 100644 --- a/gst/vaapi/gstvaapisink.c +++ b/gst/vaapi/gstvaapisink.c @@ -854,32 +854,31 @@ gst_vaapisink_put_surface( } static GstFlowReturn -gst_vaapisink_show_frame(GstBaseSink *base_sink, GstBuffer *buffer) +gst_vaapisink_show_frame(GstBaseSink *base_sink, GstBuffer *src_buffer) { GstVaapiSink * const sink = GST_VAAPISINK(base_sink); + GstVideoOverlayComposition *composition; GstVaapiVideoBuffer *vbuffer; GstVaapiSurface *surface; + GstBuffer *buffer; guint flags; gboolean success; - GstVideoOverlayComposition * const composition = - gst_video_buffer_get_overlay_composition(buffer); - if (!sink->use_video_raw) - buffer = gst_buffer_ref(buffer); - else { - GstBuffer * const src_buffer = buffer; - if (GST_VAAPI_IS_VIDEO_BUFFER(buffer)) - buffer = gst_buffer_ref(src_buffer); - else if (GST_VAAPI_IS_VIDEO_BUFFER(buffer->parent)) - buffer = gst_buffer_ref(src_buffer->parent); - else { - buffer = gst_vaapi_uploader_get_buffer(sink->uploader); - if (!buffer) - return GST_FLOW_UNEXPECTED; - } - if (!gst_vaapi_uploader_process(sink->uploader, src_buffer, buffer)) - goto error; - } + if (GST_VAAPI_IS_VIDEO_BUFFER(src_buffer)) + buffer = gst_buffer_ref(src_buffer); + else if (GST_VAAPI_IS_VIDEO_BUFFER(src_buffer->parent)) + buffer = gst_buffer_ref(src_buffer->parent); + else if (sink->use_video_raw) + buffer = gst_vaapi_uploader_get_buffer(sink->uploader); + else + buffer = NULL; + if (!buffer) + return GST_FLOW_UNEXPECTED; + + if (sink->use_video_raw && !gst_vaapi_uploader_process(sink->uploader, + src_buffer, buffer)) + goto error; + vbuffer = GST_VAAPI_VIDEO_BUFFER(buffer); g_return_val_if_fail(vbuffer != NULL, GST_FLOW_UNEXPECTED); @@ -902,6 +901,7 @@ gst_vaapisink_show_frame(GstBaseSink *base_sink, GstBuffer *buffer) flags = gst_vaapi_video_buffer_get_render_flags(vbuffer); + composition = gst_video_buffer_get_overlay_composition(src_buffer); if (!gst_vaapi_surface_set_subpictures_from_composition(surface, composition, TRUE)) GST_WARNING("could not update subtitles");