From ac7c4cfe785e134319b3e232389056e4d9bd99e5 Mon Sep 17 00:00:00 2001 From: Gwenole Beauchesne Date: Wed, 14 Dec 2011 14:40:37 +0100 Subject: [PATCH] surface: apply composition to the parent context, if requested. --- gst-libs/gst/vaapi/gstvaapisurface.c | 13 +++++++++++-- gst-libs/gst/vaapi/gstvaapisurface.h | 5 +++-- gst-libs/gst/vaapi/gstvaapivideoconverter_glx.c | 3 ++- gst/vaapi/gstvaapisink.c | 3 ++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/gst-libs/gst/vaapi/gstvaapisurface.c b/gst-libs/gst/vaapi/gstvaapisurface.c index 57eab42..c29b1ba 100644 --- a/gst-libs/gst/vaapi/gstvaapisurface.c +++ b/gst-libs/gst/vaapi/gstvaapisurface.c @@ -875,6 +875,8 @@ gst_vaapi_surface_query_status( * gst_vaapi_surface_set_subpictures_from_composition: * @surface: a #GstVaapiSurface * @compostion: a #GstVideoOverlayCompositon + * @propagate_context: a flag specifying whether to apply composition + * to the parent context, if any * * Helper to update the subpictures from #GstVideoOverlayCompositon. Sending * a NULL composition will clear all the current subpictures. Note that this @@ -884,8 +886,9 @@ gst_vaapi_surface_query_status( */ gboolean gst_vaapi_surface_set_subpictures_from_composition( - GstVaapiSurface *surface, - GstVideoOverlayComposition *composition + GstVaapiSurface *surface, + GstVideoOverlayComposition *composition, + gboolean propagate_context ) { GstVaapiDisplay *display; @@ -893,6 +896,12 @@ gst_vaapi_surface_set_subpictures_from_composition( g_return_val_if_fail(GST_VAAPI_IS_SURFACE(surface), FALSE); + if (propagate_context) { + GstVaapiContext * const context = surface->priv->parent_context; + if (context) + return gst_vaapi_context_apply_composition(context, composition); + } + display = GST_VAAPI_OBJECT_DISPLAY(surface); if (!display) return FALSE; diff --git a/gst-libs/gst/vaapi/gstvaapisurface.h b/gst-libs/gst/vaapi/gstvaapisurface.h index 0741878..ce9bd9e 100644 --- a/gst-libs/gst/vaapi/gstvaapisurface.h +++ b/gst-libs/gst/vaapi/gstvaapisurface.h @@ -235,8 +235,9 @@ gst_vaapi_surface_query_status( gboolean gst_vaapi_surface_set_subpictures_from_composition( - GstVaapiSurface *surface, - GstVideoOverlayComposition *composition + GstVaapiSurface *surface, + GstVideoOverlayComposition *composition, + gboolean propagate_context ); G_END_DECLS diff --git a/gst-libs/gst/vaapi/gstvaapivideoconverter_glx.c b/gst-libs/gst/vaapi/gstvaapivideoconverter_glx.c index a4d3562..fdeb817 100644 --- a/gst-libs/gst/vaapi/gstvaapivideoconverter_glx.c +++ b/gst-libs/gst/vaapi/gstvaapivideoconverter_glx.c @@ -135,7 +135,8 @@ gst_vaapi_video_converter_glx_upload (GstSurfaceConverter *converter, GL_BGRA); } - if (!gst_vaapi_surface_set_subpictures_from_composition (surface, composition)) + if (!gst_vaapi_surface_set_subpictures_from_composition (surface, + composition, TRUE)) GST_WARNING ("could not update subtitles"); return gst_vaapi_texture_put_surface (priv->texture, surface, diff --git a/gst/vaapi/gstvaapisink.c b/gst/vaapi/gstvaapisink.c index c174924..7dab271 100644 --- a/gst/vaapi/gstvaapisink.c +++ b/gst/vaapi/gstvaapisink.c @@ -679,7 +679,8 @@ gst_vaapisink_show_frame(GstBaseSink *base_sink, GstBuffer *buffer) flags = GST_VAAPI_PICTURE_STRUCTURE_FRAME; - if (!gst_vaapi_surface_set_subpictures_from_composition(surface, composition)) + if (!gst_vaapi_surface_set_subpictures_from_composition(surface, + composition, TRUE)) GST_WARNING("could not update subtitles"); #if USE_VAAPISINK_GLX -- 2.7.4