mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-30 05:31:15 +00:00
libs: remove surface's parent context
In commit 18031dc6
surface's parent context is not assigned because of
circular references. Since then (2013), there's has no issue with
subpictures attached to a context, the current only users of this API.
This patch cleans up all of related code with the unused surface's
parent context.
This commit is contained in:
parent
e8b52f59f5
commit
dae057588b
6 changed files with 5 additions and 69 deletions
|
@ -34,7 +34,6 @@
|
||||||
#include "gstvaapidisplay_priv.h"
|
#include "gstvaapidisplay_priv.h"
|
||||||
#include "gstvaapiobject_priv.h"
|
#include "gstvaapiobject_priv.h"
|
||||||
#include "gstvaapisurface.h"
|
#include "gstvaapisurface.h"
|
||||||
#include "gstvaapisurface_priv.h"
|
|
||||||
#include "gstvaapisurfacepool.h"
|
#include "gstvaapisurfacepool.h"
|
||||||
#include "gstvaapisurfaceproxy.h"
|
#include "gstvaapisurfaceproxy.h"
|
||||||
#include "gstvaapivideopool_priv.h"
|
#include "gstvaapivideopool_priv.h"
|
||||||
|
@ -61,13 +60,6 @@ ensure_attributes (GstVaapiContext * context)
|
||||||
return (context->attribs != NULL);
|
return (context->attribs != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
unref_surface_cb (GstVaapiSurface * surface)
|
|
||||||
{
|
|
||||||
gst_vaapi_surface_set_parent_context (surface, NULL);
|
|
||||||
gst_vaapi_object_unref (surface);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline gboolean
|
static inline gboolean
|
||||||
context_get_attribute (GstVaapiContext * context, VAConfigAttribType type,
|
context_get_attribute (GstVaapiContext * context, VAConfigAttribType type,
|
||||||
guint * out_value_ptr)
|
guint * out_value_ptr)
|
||||||
|
@ -141,7 +133,6 @@ context_ensure_surfaces (GstVaapiContext * context)
|
||||||
cip->chroma_type, cip->width, cip->height, context->attribs->formats);
|
cip->chroma_type, cip->width, cip->height, context->attribs->formats);
|
||||||
if (!surface)
|
if (!surface)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
gst_vaapi_surface_set_parent_context (surface, context);
|
|
||||||
g_ptr_array_add (context->surfaces, surface);
|
g_ptr_array_add (context->surfaces, surface);
|
||||||
if (!gst_vaapi_video_pool_add_object (context->surfaces_pool, surface))
|
if (!gst_vaapi_video_pool_add_object (context->surfaces_pool, surface))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -163,7 +154,7 @@ context_create_surfaces (GstVaapiContext * context)
|
||||||
num_surfaces = cip->ref_frames + SCRATCH_SURFACES_COUNT;
|
num_surfaces = cip->ref_frames + SCRATCH_SURFACES_COUNT;
|
||||||
if (!context->surfaces) {
|
if (!context->surfaces) {
|
||||||
context->surfaces = g_ptr_array_new_full (num_surfaces,
|
context->surfaces = g_ptr_array_new_full (num_surfaces,
|
||||||
(GDestroyNotify) unref_surface_cb);
|
(GDestroyNotify) gst_vaapi_object_unref);
|
||||||
if (!context->surfaces)
|
if (!context->surfaces)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
#include "gstvaapicontext.h"
|
#include "gstvaapicontext.h"
|
||||||
#include "gstvaapiimage.h"
|
#include "gstvaapiimage.h"
|
||||||
#include "gstvaapiimage_priv.h"
|
#include "gstvaapiimage_priv.h"
|
||||||
#include "gstvaapicontext_overlay.h"
|
|
||||||
#include "gstvaapibufferproxy_priv.h"
|
#include "gstvaapibufferproxy_priv.h"
|
||||||
|
|
||||||
#define DEBUG 1
|
#define DEBUG 1
|
||||||
|
@ -78,7 +77,6 @@ gst_vaapi_surface_destroy (GstVaapiSurface * surface)
|
||||||
GST_DEBUG ("surface %" GST_VAAPI_ID_FORMAT, GST_VAAPI_ID_ARGS (surface_id));
|
GST_DEBUG ("surface %" GST_VAAPI_ID_FORMAT, GST_VAAPI_ID_ARGS (surface_id));
|
||||||
|
|
||||||
gst_vaapi_surface_destroy_subpictures (surface);
|
gst_vaapi_surface_destroy_subpictures (surface);
|
||||||
gst_vaapi_surface_set_parent_context (surface, NULL);
|
|
||||||
|
|
||||||
if (surface_id != VA_INVALID_SURFACE) {
|
if (surface_id != VA_INVALID_SURFACE) {
|
||||||
GST_VAAPI_DISPLAY_LOCK (display);
|
GST_VAAPI_DISPLAY_LOCK (display);
|
||||||
|
@ -619,42 +617,6 @@ gst_vaapi_surface_get_size (GstVaapiSurface * surface,
|
||||||
*height_ptr = GST_VAAPI_SURFACE_HEIGHT (surface);
|
*height_ptr = GST_VAAPI_SURFACE_HEIGHT (surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_vaapi_surface_set_parent_context:
|
|
||||||
* @surface: a #GstVaapiSurface
|
|
||||||
* @context: a #GstVaapiContext
|
|
||||||
*
|
|
||||||
* Sets new parent context, or clears any parent context if @context
|
|
||||||
* is %NULL. This function owns an extra reference to the context,
|
|
||||||
* which will be released when the surface is destroyed.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
gst_vaapi_surface_set_parent_context (GstVaapiSurface * surface,
|
|
||||||
GstVaapiContext * context)
|
|
||||||
{
|
|
||||||
g_return_if_fail (surface != NULL);
|
|
||||||
|
|
||||||
surface->parent_context = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_vaapi_surface_get_parent_context:
|
|
||||||
* @surface: a #GstVaapiSurface
|
|
||||||
*
|
|
||||||
* Retrieves the parent #GstVaapiContext, or %NULL if there is
|
|
||||||
* none. The surface shall still own a reference to the context.
|
|
||||||
* i.e. the caller shall not unreference the returned context object.
|
|
||||||
*
|
|
||||||
* Return value: the parent context, if any.
|
|
||||||
*/
|
|
||||||
GstVaapiContext *
|
|
||||||
gst_vaapi_surface_get_parent_context (GstVaapiSurface * surface)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (surface != NULL, NULL);
|
|
||||||
|
|
||||||
return surface->parent_context;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_vaapi_surface_derive_image:
|
* gst_vaapi_surface_derive_image:
|
||||||
* @surface: a #GstVaapiSurface
|
* @surface: a #GstVaapiSurface
|
||||||
|
@ -1026,8 +988,6 @@ gst_vaapi_surface_query_status (GstVaapiSurface * surface,
|
||||||
* gst_vaapi_surface_set_subpictures_from_composition:
|
* gst_vaapi_surface_set_subpictures_from_composition:
|
||||||
* @surface: a #GstVaapiSurface
|
* @surface: a #GstVaapiSurface
|
||||||
* @compostion: a #GstVideoOverlayCompositon
|
* @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
|
* Helper to update the subpictures from #GstVideoOverlayCompositon. Sending
|
||||||
* a NULL composition will clear all the current subpictures. Note that this
|
* a NULL composition will clear all the current subpictures. Note that this
|
||||||
|
@ -1037,17 +997,13 @@ gst_vaapi_surface_query_status (GstVaapiSurface * surface,
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_vaapi_surface_set_subpictures_from_composition (GstVaapiSurface * surface,
|
gst_vaapi_surface_set_subpictures_from_composition (GstVaapiSurface * surface,
|
||||||
GstVideoOverlayComposition * composition, gboolean propagate_context)
|
GstVideoOverlayComposition * composition)
|
||||||
{
|
{
|
||||||
GstVaapiDisplay *display;
|
GstVaapiDisplay *display;
|
||||||
guint n, nb_rectangles;
|
guint n, nb_rectangles;
|
||||||
|
|
||||||
g_return_val_if_fail (surface != NULL, FALSE);
|
g_return_val_if_fail (surface != NULL, FALSE);
|
||||||
|
|
||||||
if (propagate_context && surface->parent_context)
|
|
||||||
return gst_vaapi_context_apply_composition (surface->parent_context,
|
|
||||||
composition);
|
|
||||||
|
|
||||||
display = GST_VAAPI_OBJECT_DISPLAY (surface);
|
display = GST_VAAPI_OBJECT_DISPLAY (surface);
|
||||||
if (!display)
|
if (!display)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -247,7 +247,7 @@ gst_vaapi_surface_query_status (GstVaapiSurface * surface,
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
gst_vaapi_surface_set_subpictures_from_composition (GstVaapiSurface * surface,
|
gst_vaapi_surface_set_subpictures_from_composition (GstVaapiSurface * surface,
|
||||||
GstVideoOverlayComposition * composition, gboolean propagate_context);
|
GstVideoOverlayComposition * composition);
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_vaapi_surface_set_buffer_proxy (GstVaapiSurface * surface,
|
gst_vaapi_surface_set_buffer_proxy (GstVaapiSurface * surface,
|
||||||
|
|
|
@ -47,7 +47,6 @@ struct _GstVaapiSurface
|
||||||
guint height;
|
guint height;
|
||||||
GstVaapiChromaType chroma_type;
|
GstVaapiChromaType chroma_type;
|
||||||
GPtrArray *subpictures;
|
GPtrArray *subpictures;
|
||||||
GstVaapiContext *parent_context;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -109,15 +108,6 @@ struct _GstVaapiSurfaceClass
|
||||||
#define GST_VAAPI_SURFACE_HEIGHT(surface) \
|
#define GST_VAAPI_SURFACE_HEIGHT(surface) \
|
||||||
(GST_VAAPI_SURFACE (surface)->height)
|
(GST_VAAPI_SURFACE (surface)->height)
|
||||||
|
|
||||||
G_GNUC_INTERNAL
|
|
||||||
void
|
|
||||||
gst_vaapi_surface_set_parent_context (GstVaapiSurface * surface,
|
|
||||||
GstVaapiContext * context);
|
|
||||||
|
|
||||||
G_GNUC_INTERNAL
|
|
||||||
GstVaapiContext *
|
|
||||||
gst_vaapi_surface_get_parent_context (GstVaapiSurface * surface);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* GST_VAAPI_SURFACE_PRIV_H */
|
#endif /* GST_VAAPI_SURFACE_PRIV_H */
|
||||||
|
|
|
@ -482,7 +482,7 @@ gst_vaapi_apply_composition (GstVaapiSurface * surface, GstBuffer * buffer)
|
||||||
if (cmeta)
|
if (cmeta)
|
||||||
composition = cmeta->overlay;
|
composition = cmeta->overlay;
|
||||||
return gst_vaapi_surface_set_subpictures_from_composition (surface,
|
return gst_vaapi_surface_set_subpictures_from_composition (surface,
|
||||||
composition, TRUE);
|
composition);
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
|
|
@ -149,8 +149,7 @@ main (int argc, char *argv[])
|
||||||
g_error ("could not create video overlay composition");
|
g_error ("could not create video overlay composition");
|
||||||
gst_video_overlay_rectangle_unref (overlay);
|
gst_video_overlay_rectangle_unref (overlay);
|
||||||
|
|
||||||
if (!gst_vaapi_surface_set_subpictures_from_composition (surface, compo,
|
if (!gst_vaapi_surface_set_subpictures_from_composition (surface, compo))
|
||||||
FALSE))
|
|
||||||
g_error ("could not create subpictures from video overlay compoition");
|
g_error ("could not create subpictures from video overlay compoition");
|
||||||
|
|
||||||
gst_vaapi_window_show (window);
|
gst_vaapi_window_show (window);
|
||||||
|
|
Loading…
Reference in a new issue