gstreamer/gst/vaapi/gstvaapivideobufferpool.h
Víctor Manuel Jáquez Leal 50b2423a2b pluginbase negotiates allocator with bufferpool
Originally vaapivideobufferpool instantiates its own allocator regardless the
received configuration, and it relies in custom configuration options to
choose which kind of allocator instantiate.

This patch transfers the responsibility of the allocator instantiate to
vaapipluginbase and pass it to the vaapivideobufferpool through its
configuration.

* gst/vaapi/gstvaapipluginbase.c
  + set_dmabuf_allocator(): inserts a dmabuf allocator in the bufferpool
  + ensure_sinkpad_buffer_pool(): set a normal vaapi video allocator in
    bufferpool configuration
  + gst_vaapi_plugin_base_propose_allocation(): call set_dmabuf_allocator() if
    needed.
  + gst_vaapi_plugin_base_decide_allocation(): set a normal vaapi video
    allocator in bufferpool configuration
* gst/vaapi/gstvaapivideobufferpool.c
  + gst_vaapi_video_buffer_pool_set_config(): instead of instantiate the
    allocator, process the received one through its configuration.
* gst/vaapi/gstvaapivideobufferpool.h: removed
  GST_BUFFER_POOL_OPTION_DMABUF_MEMORY since it is not used anymore.
* gst/vaapi/gstvaapivideomemory.c
  + gst_vaapi_is_dmabuf_allocator(): new helper function to identify a dmabuf
    allocator with the vaapi qdata.

https://bugzilla.gnome.org/show_bug.cgi?id=765435
2016-06-08 10:19:01 +02:00

104 lines
3.2 KiB
C

/*
* gstvaapivideobufferpool.h - Gstreamer/VA video buffer pool
*
* Copyright (C) 2013 Intel Corporation
* Author: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
#ifndef GST_VAAPI_VIDEO_BUFFER_POOL_H
#define GST_VAAPI_VIDEO_BUFFER_POOL_H
#include <gst/video/gstvideopool.h>
#include <gst/vaapi/gstvaapidisplay.h>
G_BEGIN_DECLS
#define GST_VAAPI_TYPE_VIDEO_BUFFER_POOL \
(gst_vaapi_video_buffer_pool_get_type ())
#define GST_VAAPI_VIDEO_BUFFER_POOL(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_VAAPI_TYPE_VIDEO_BUFFER_POOL, \
GstVaapiVideoBufferPool))
#define GST_VAAPI_VIDEO_BUFFER_POOL_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), GST_VAAPI_TYPE_VIDEO_BUFFER_POOL, \
GstVaapiVideoBufferPoolClass))
#define GST_VAAPI_IS_VIDEO_BUFFER_POOL(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_VAAPI_TYPE_VIDEO_BUFFER_POOL))
#define GST_VAAPI_IS_VIDEO_BUFFER_POOL_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_VAAPI_TYPE_VIDEO_BUFFER_POOL))
typedef struct _GstVaapiVideoBufferPool GstVaapiVideoBufferPool;
typedef struct _GstVaapiVideoBufferPoolClass GstVaapiVideoBufferPoolClass;
typedef struct _GstVaapiVideoBufferPoolPrivate GstVaapiVideoBufferPoolPrivate;
/**
* GST_BUFFER_POOL_OPTION_VAAPI_VIDEO_META:
*
* An option that can be activated on bufferpool to request vaapi
* video metadata on buffers from the pool.
*/
#define GST_BUFFER_POOL_OPTION_VAAPI_VIDEO_META \
"GstBufferPoolOptionVaapiVideoMeta"
/**
* GstVaapiVideoBufferPoolAcquireFlags:
* @GST_VAAPI_VIDEO_BUFFER_POOL_ACQUIRE_FLAG_NO_ALLOC: option to
* request that vaapi video metadata are not initially allocated,
* but are subsequently provided by the user.
*
* The set of #GstVaapiVideoBufferPool specific flags for
* gst_buffer_pool_acquire_buffer().
*/
typedef enum {
GST_VAAPI_VIDEO_BUFFER_POOL_ACQUIRE_FLAG_NO_ALLOC =
GST_BUFFER_POOL_ACQUIRE_FLAG_LAST << 0,
} GstVaapiVideoBufferPoolAcquireFlags;
/**
* GstVaapiVideoBufferPool:
*
* A VA video buffer pool object.
*/
struct _GstVaapiVideoBufferPool
{
GstBufferPool parent_instance;
/*< private >*/
GstVaapiVideoBufferPoolPrivate *priv;
};
/**
* GstVaapiVideoBufferPoolClass:
*
* A VA video buffer pool class.
*/
struct _GstVaapiVideoBufferPoolClass
{
GstBufferPoolClass parent_class;
};
G_GNUC_INTERNAL
GType
gst_vaapi_video_buffer_pool_get_type (void) G_GNUC_CONST;
G_GNUC_INTERNAL
GstBufferPool *
gst_vaapi_video_buffer_pool_new (GstVaapiDisplay * display) G_GNUC_CONST;
G_END_DECLS
#endif /* GST_VAAPI_VIDEO_BUFFER_POOL_H */