priv->render_flags = 0;
}
+static inline gboolean
+gst_vaapi_video_buffer_is_a(GstBuffer *buffer, GType type)
+{
+ return G_TYPE_CHECK_INSTANCE_TYPE(buffer, type);
+}
+
+static inline gpointer
+_gst_vaapi_video_buffer_typed_new(GType type)
+{
+ g_return_val_if_fail(g_type_is_a(type, GST_VAAPI_TYPE_VIDEO_BUFFER), NULL);
+
+ return gst_mini_object_new(type);
+}
+
/**
* gst_vaapi_video_buffer_new:
* @display: a #GstVaapiDisplay
*
* Return value: the newly allocated #GstBuffer, or %NULL or error
*/
-static inline gpointer
-_gst_vaapi_video_buffer_new(void)
-{
- return gst_mini_object_new(GST_VAAPI_TYPE_VIDEO_BUFFER);
-}
-
GstBuffer *
-gst_vaapi_video_buffer_new(GstVaapiDisplay *display)
+gst_vaapi_video_buffer_typed_new(GType type, GstVaapiDisplay *display)
{
GstBuffer *buffer;
g_return_val_if_fail(GST_VAAPI_IS_DISPLAY(display), NULL);
- buffer = _gst_vaapi_video_buffer_new();
+ buffer = _gst_vaapi_video_buffer_typed_new(type);
if (!buffer)
return NULL;
return buffer;
}
+GstBuffer *
+gst_vaapi_video_buffer_new(GstVaapiDisplay *display)
+{
+ return gst_vaapi_video_buffer_typed_new(
+ GST_VAAPI_TYPE_VIDEO_BUFFER, display);
+}
+
/**
* gst_vaapi_video_buffer_new_from_pool:
* @pool: a #GstVaapiVideoPool
* Return value: the newly allocated #GstBuffer, or %NULL on error
*/
GstBuffer *
-gst_vaapi_video_buffer_new_from_pool(GstVaapiVideoPool *pool)
+gst_vaapi_video_buffer_typed_new_from_pool(GType type, GstVaapiVideoPool *pool)
{
GstVaapiVideoBuffer *buffer;
gboolean is_image_pool, is_surface_pool;
if (!is_image_pool && !is_surface_pool)
return NULL;
- buffer = _gst_vaapi_video_buffer_new();
+ buffer = _gst_vaapi_video_buffer_typed_new(type);
if (buffer &&
((is_image_pool &&
gst_vaapi_video_buffer_set_image_from_pool(buffer, pool)) ||
return NULL;
}
+GstBuffer *
+gst_vaapi_video_buffer_new_from_pool(GstVaapiVideoPool *pool)
+{
+ return gst_vaapi_video_buffer_typed_new_from_pool(
+ GST_VAAPI_TYPE_VIDEO_BUFFER, pool);
+}
+
/**
* gst_vaapi_video_buffer_new_from_buffer:
* @buffer: a #GstBuffer
* Return value: the newly allocated #GstBuffer, or %NULL on error
*/
GstBuffer *
-gst_vaapi_video_buffer_new_from_buffer(GstBuffer *buffer)
+gst_vaapi_video_buffer_typed_new_from_buffer(GType type, GstBuffer *buffer)
{
GstVaapiVideoBuffer *inbuf, *outbuf;
- if (!GST_VAAPI_IS_VIDEO_BUFFER(buffer)) {
- if (!buffer->parent || !GST_VAAPI_IS_VIDEO_BUFFER(buffer->parent))
+ if (!gst_vaapi_video_buffer_is_a(buffer, type)) {
+ if (!buffer->parent ||
+ !gst_vaapi_video_buffer_is_a(buffer->parent, type))
return NULL;
buffer = buffer->parent;
}
inbuf = GST_VAAPI_VIDEO_BUFFER(buffer);
- outbuf = _gst_vaapi_video_buffer_new();
+ outbuf = _gst_vaapi_video_buffer_typed_new(type);
if (!outbuf)
return NULL;
return GST_BUFFER(outbuf);
}
+GstBuffer *
+gst_vaapi_video_buffer_new_from_buffer(GstBuffer *buffer)
+{
+ return gst_vaapi_video_buffer_typed_new_from_buffer(
+ GST_VAAPI_TYPE_VIDEO_BUFFER, buffer);
+}
+
/**
* gst_vaapi_video_buffer_new_with_image:
* @image: a #GstVaapiImage
* Return value: the newly allocated #GstBuffer, or %NULL on error
*/
GstBuffer *
-gst_vaapi_video_buffer_new_with_image(GstVaapiImage *image)
+gst_vaapi_video_buffer_typed_new_with_image(GType type, GstVaapiImage *image)
{
GstVaapiVideoBuffer *buffer;
g_return_val_if_fail(GST_VAAPI_IS_IMAGE(image), NULL);
- buffer = _gst_vaapi_video_buffer_new();
+ buffer = _gst_vaapi_video_buffer_typed_new(type);
if (buffer)
gst_vaapi_video_buffer_set_image(buffer, image);
return GST_BUFFER(buffer);
}
+GstBuffer *
+gst_vaapi_video_buffer_new_with_image(GstVaapiImage *image)
+{
+ return gst_vaapi_video_buffer_typed_new_with_image(
+ GST_VAAPI_TYPE_VIDEO_BUFFER, image);
+}
+
/**
* gst_vaapi_video_buffer_new_with_surface:
* @surface: a #GstVaapiSurface
* Return value: the newly allocated #GstBuffer, or %NULL on error
*/
GstBuffer *
-gst_vaapi_video_buffer_new_with_surface(GstVaapiSurface *surface)
+gst_vaapi_video_buffer_typed_new_with_surface(
+ GType type,
+ GstVaapiSurface *surface
+)
{
GstVaapiVideoBuffer *buffer;
g_return_val_if_fail(GST_VAAPI_IS_SURFACE(surface), NULL);
- buffer = _gst_vaapi_video_buffer_new();
+ buffer = _gst_vaapi_video_buffer_typed_new(type);
if (buffer)
gst_vaapi_video_buffer_set_surface(buffer, surface);
return GST_BUFFER(buffer);
}
+GstBuffer *
+gst_vaapi_video_buffer_new_with_surface(GstVaapiSurface *surface)
+{
+ return gst_vaapi_video_buffer_typed_new_with_surface(
+ GST_VAAPI_TYPE_VIDEO_BUFFER, surface);
+}
+
/**
* gst_vaapi_video_buffer_new_with_surface_proxy:
* @proxy: a #GstVaapiSurfaceProxy
* Return value: the newly allocated #GstBuffer, or %NULL on error
*/
GstBuffer *
-gst_vaapi_video_buffer_new_with_surface_proxy(GstVaapiSurfaceProxy *proxy)
+gst_vaapi_video_buffer_typed_new_with_surface_proxy(
+ GType type,
+ GstVaapiSurfaceProxy *proxy
+)
{
GstVaapiVideoBuffer *buffer;
g_return_val_if_fail(GST_VAAPI_IS_SURFACE_PROXY(proxy), NULL);
- buffer = _gst_vaapi_video_buffer_new();
+ buffer = _gst_vaapi_video_buffer_typed_new(type);
if (buffer)
gst_vaapi_video_buffer_set_surface_proxy(buffer, proxy);
return GST_BUFFER(buffer);
}
+GstBuffer *
+gst_vaapi_video_buffer_new_with_surface_proxy(GstVaapiSurfaceProxy *proxy)
+{
+ return gst_vaapi_video_buffer_typed_new_with_surface_proxy(
+ GST_VAAPI_TYPE_VIDEO_BUFFER, proxy);
+}
+
/**
* gst_vaapi_video_buffer_get_display:
* @buffer: a #GstVaapiVideoBuffer
}
/**
- * gst_vaapi_video_buffer_set_display:
- * @buffer: a #GstVaapiVideoBuffer
- * @display a #GstVaapiDisplay
- *
- * For subclass only, don't use.
- */
-void
-gst_vaapi_video_buffer_set_display(
- GstVaapiVideoBuffer *buffer,
- GstVaapiDisplay *display
-)
-{
- set_display(buffer, display);
-}
-
-/**
- * gst_vaapi_video_buffer_set_display:
- * @buffer: a #GstVaapiVideoBuffer
- * @other_buffer: a #GstBuffer
- *
- * For subclass only, don't use.
- */
-void
-gst_vaapi_video_buffer_set_buffer(
- GstVaapiVideoBuffer *buffer,
- GstBuffer *other_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
*
#include "sysdeps.h"
#include "gstvaapivideobuffer_glx.h"
-#include "gstvaapivideobuffer_priv.h"
#include "gstvaapivideoconverter_glx.h"
-#include "gstvaapiobject_priv.h"
-#include "gstvaapiimagepool.h"
-#include "gstvaapisurfacepool.h"
+#include "gstvaapivideopool.h"
+#include "gstvaapivideobuffer_priv.h"
+#include "gstvaapidisplay_priv.h"
#define DEBUG 1
#include "gstvaapidebug.h"
-G_DEFINE_TYPE (GstVaapiVideoBufferGLX, gst_vaapi_video_buffer_glx,
- GST_VAAPI_TYPE_VIDEO_BUFFER);
+G_DEFINE_TYPE(GstVaapiVideoBufferGLX,
+ gst_vaapi_video_buffer_glx,
+ GST_VAAPI_TYPE_VIDEO_BUFFER);
static void
-gst_vaapi_video_buffer_glx_class_init(GstVaapiVideoBufferGLXClass * klass)
+gst_vaapi_video_buffer_glx_class_init(GstVaapiVideoBufferGLXClass *klass)
{
- GstSurfaceBufferClass * const surface_class = GST_SURFACE_BUFFER_CLASS (klass);
- surface_class->create_converter = gst_vaapi_video_converter_glx_new;
-}
+ GstSurfaceBufferClass * const surface_class =
+ GST_SURFACE_BUFFER_CLASS(klass);
-static void
-gst_vaapi_video_buffer_glx_init (GstVaapiVideoBufferGLX * buffer)
-{
+ surface_class->create_converter = gst_vaapi_video_converter_glx_new;
}
-static inline gpointer
-_gst_vaapi_video_buffer_glx_new (void)
+static void
+gst_vaapi_video_buffer_glx_init(GstVaapiVideoBufferGLX *buffer)
{
- return gst_mini_object_new (GST_VAAPI_TYPE_VIDEO_BUFFER_GLX);
}
/**
* Return value: the newly allocated #GstBuffer, or %NULL or error
*/
GstBuffer *
-gst_vaapi_video_buffer_glx_new(GstVaapiDisplayGLX * display)
+gst_vaapi_video_buffer_glx_new(GstVaapiDisplayGLX *display)
{
- GstBuffer *buffer;
-
- g_return_val_if_fail (GST_VAAPI_IS_DISPLAY_GLX (display), NULL);
+ g_return_val_if_fail(GST_VAAPI_IS_DISPLAY_GLX(display), NULL);
- buffer = _gst_vaapi_video_buffer_glx_new ();
- if (!buffer)
- return NULL;
-
- gst_vaapi_video_buffer_set_display (GST_VAAPI_VIDEO_BUFFER (buffer),
- GST_VAAPI_DISPLAY (display));
- return buffer;
+ return gst_vaapi_video_buffer_typed_new(
+ GST_VAAPI_TYPE_VIDEO_BUFFER_GLX, GST_VAAPI_DISPLAY_CAST(display));
}
/**
* Return value: the newly allocated #GstBuffer, or %NULL on error
*/
GstBuffer *
-gst_vaapi_video_buffer_glx_new_from_pool (GstVaapiVideoPool * pool)
+gst_vaapi_video_buffer_glx_new_from_pool(GstVaapiVideoPool *pool)
{
- GstVaapiVideoBuffer *buffer;
- gboolean is_image_pool, is_surface_pool;
-
- g_return_val_if_fail (GST_VAAPI_IS_VIDEO_POOL (pool), NULL);
-
- is_image_pool = GST_VAAPI_IS_IMAGE_POOL (pool);
- is_surface_pool = GST_VAAPI_IS_SURFACE_POOL (pool);
-
- if (!is_image_pool && !is_surface_pool)
- return NULL;
-
- buffer = _gst_vaapi_video_buffer_glx_new ();
- if (buffer &&
- ((is_image_pool &&
- gst_vaapi_video_buffer_set_image_from_pool (buffer, pool)) ||
- (is_surface_pool &&
- gst_vaapi_video_buffer_set_surface_from_pool (buffer, pool)))) {
- gst_vaapi_video_buffer_set_display (buffer,
- gst_vaapi_video_pool_get_display (pool));
- return GST_BUFFER (buffer);
- }
-
- gst_mini_object_unref (GST_MINI_OBJECT(buffer));
- return NULL;
+ return gst_vaapi_video_buffer_typed_new_from_pool(
+ GST_VAAPI_TYPE_VIDEO_BUFFER_GLX, pool);
}
/**
* Return value: the newly allocated #GstBuffer, or %NULL on error
*/
GstBuffer *
-gst_vaapi_video_buffer_glx_new_from_buffer (GstBuffer * buffer)
+gst_vaapi_video_buffer_glx_new_from_buffer(GstBuffer *buffer)
{
- GstVaapiVideoBuffer *inbuf, *outbuf;
- GstVaapiImage *image;
- GstVaapiSurface *surface;
- GstVaapiSurfaceProxy *proxy;
-
- if (!GST_VAAPI_IS_VIDEO_BUFFER_GLX (buffer)) {
- if (!buffer->parent || !GST_VAAPI_IS_VIDEO_BUFFER_GLX (buffer->parent))
- return NULL;
- buffer = buffer->parent;
- }
- inbuf = GST_VAAPI_VIDEO_BUFFER (buffer);
-
- outbuf = _gst_vaapi_video_buffer_glx_new ();
- if (!outbuf)
- return NULL;
-
- image = gst_vaapi_video_buffer_get_image (inbuf);
- surface = gst_vaapi_video_buffer_get_surface (inbuf);
- proxy =
- gst_vaapi_video_buffer_get_surface_proxy (inbuf);
-
- if (image)
- gst_vaapi_video_buffer_set_image (outbuf, image);
- if (surface)
- gst_vaapi_video_buffer_set_surface (outbuf, surface);
- if (proxy)
- gst_vaapi_video_buffer_set_surface_proxy (outbuf, proxy);
-
- gst_vaapi_video_buffer_set_buffer (outbuf, buffer);
- return GST_BUFFER (outbuf);
+ return gst_vaapi_video_buffer_typed_new_from_buffer(
+ GST_VAAPI_TYPE_VIDEO_BUFFER_GLX, buffer);
}