mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-23 06:26:23 +00:00
videobuffer: add surface render flags.
Allow rendering flags, as a combination of GstVaapiSurfaceRenderFlags, to be set to the video buffer. In particular, this is mostly useful for basic deinterlacing.
This commit is contained in:
parent
3b67533d3d
commit
a5144358d1
5 changed files with 47 additions and 4 deletions
|
@ -200,6 +200,8 @@ gst_vaapi_video_buffer_get_surface_proxy
|
|||
gst_vaapi_video_buffer_set_surface
|
||||
gst_vaapi_video_buffer_set_surface_proxy
|
||||
gst_vaapi_video_buffer_set_surface_from_pool
|
||||
gst_vaapi_video_buffer_get_render_flags
|
||||
gst_vaapi_video_buffer_set_render_flags
|
||||
<SUBSECTION Standard>
|
||||
GST_VAAPI_VIDEO_BUFFER
|
||||
GST_VAAPI_IS_VIDEO_BUFFER
|
||||
|
|
|
@ -50,6 +50,7 @@ struct _GstVaapiVideoBufferPrivate {
|
|||
GstVaapiSurface *surface;
|
||||
GstVaapiSurfaceProxy *proxy;
|
||||
GstBuffer *buffer;
|
||||
guint render_flags;
|
||||
};
|
||||
|
||||
static void
|
||||
|
@ -168,6 +169,7 @@ gst_vaapi_video_buffer_init(GstVaapiVideoBuffer *buffer)
|
|||
priv->surface = NULL;
|
||||
priv->proxy = NULL;
|
||||
priv->buffer = NULL;
|
||||
priv->render_flags = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -597,3 +599,36 @@ gst_vaapi_video_buffer_set_buffer(
|
|||
g_return_if_fail (buffer->priv->buffer == NULL);
|
||||
buffer->priv->buffer = gst_buffer_ref (other_buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_vaapi_video_buffer_get_render_flags:
|
||||
* @buffer: a #GstVaapiVideoBuffer
|
||||
*
|
||||
* Retrieves the surface render flags bound to the @buffer.
|
||||
*
|
||||
* Return value: a combination for #GstVaapiSurfaceRenderFlags
|
||||
*/
|
||||
guint
|
||||
gst_vaapi_video_buffer_get_render_flags(GstVaapiVideoBuffer *buffer)
|
||||
{
|
||||
g_return_val_if_fail(GST_VAAPI_IS_VIDEO_BUFFER(buffer), 0);
|
||||
g_return_val_if_fail(GST_VAAPI_IS_SURFACE(buffer->priv->surface), 0);
|
||||
|
||||
return buffer->priv->render_flags;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_vaapi_video_buffer_set_render_flags:
|
||||
* @buffer: a #GstVaapiVideoBuffer
|
||||
* @flags: a set of surface render flags
|
||||
*
|
||||
* Sets #GstVaapiSurfaceRenderFlags to the @buffer.
|
||||
*/
|
||||
void
|
||||
gst_vaapi_video_buffer_set_render_flags(GstVaapiVideoBuffer *buffer, guint flags)
|
||||
{
|
||||
g_return_if_fail(GST_VAAPI_IS_VIDEO_BUFFER(buffer));
|
||||
g_return_if_fail(GST_VAAPI_IS_SURFACE(buffer->priv->surface));
|
||||
|
||||
buffer->priv->render_flags = flags;
|
||||
}
|
||||
|
|
|
@ -145,6 +145,12 @@ gst_vaapi_video_buffer_set_surface_proxy(
|
|||
GstVaapiSurfaceProxy *proxy
|
||||
);
|
||||
|
||||
guint
|
||||
gst_vaapi_video_buffer_get_render_flags(GstVaapiVideoBuffer *buffer);
|
||||
|
||||
void
|
||||
gst_vaapi_video_buffer_set_render_flags(GstVaapiVideoBuffer *buffer, guint flags);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* GST_VAAPI_VIDEO_BUFFER_H */
|
||||
|
|
|
@ -117,8 +117,8 @@ gst_vaapi_video_converter_glx_upload (GstSurfaceConverter *converter,
|
|||
{
|
||||
GstVaapiVideoConverterGLXPrivate *priv =
|
||||
GST_VAAPI_VIDEO_CONVERTER_GLX (converter)->priv;
|
||||
GstVaapiSurface *surface = gst_vaapi_video_buffer_get_surface (
|
||||
GST_VAAPI_VIDEO_BUFFER (buffer));
|
||||
GstVaapiVideoBuffer * const vbuffer = GST_VAAPI_VIDEO_BUFFER (buffer);
|
||||
GstVaapiSurface *surface = gst_vaapi_video_buffer_get_surface (vbuffer);
|
||||
GstVaapiDisplay *new_dpy, *old_dpy;
|
||||
GstVideoOverlayComposition * const composition =
|
||||
gst_video_buffer_get_overlay_composition (GST_BUFFER (buffer));
|
||||
|
@ -140,5 +140,5 @@ gst_vaapi_video_converter_glx_upload (GstSurfaceConverter *converter,
|
|||
GST_WARNING ("could not update subtitles");
|
||||
|
||||
return gst_vaapi_texture_put_surface (priv->texture, surface,
|
||||
GST_VAAPI_PICTURE_STRUCTURE_FRAME);
|
||||
gst_vaapi_video_buffer_get_render_flags (vbuffer));
|
||||
}
|
||||
|
|
|
@ -691,7 +691,7 @@ gst_vaapisink_show_frame(GstBaseSink *base_sink, GstBuffer *buffer)
|
|||
GST_DEBUG("render surface %" GST_VAAPI_ID_FORMAT,
|
||||
GST_VAAPI_ID_ARGS(gst_vaapi_surface_get_id(surface)));
|
||||
|
||||
flags = GST_VAAPI_PICTURE_STRUCTURE_FRAME;
|
||||
flags = gst_vaapi_video_buffer_get_render_flags(vbuffer);
|
||||
|
||||
if (!gst_vaapi_surface_set_subpictures_from_composition(surface,
|
||||
composition, TRUE))
|
||||
|
|
Loading…
Reference in a new issue