mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
vaapivideobufferpool: share options flag with pluginbase
Originally, vaapivideobufferpool has a set of boolean variables for the buffer configuration options. This pach changes these boolean variables for a single bitwise, just as it is used in pluginbase. Hence, the internal enum was moved to vaapivideobufferpool header. https://bugzilla.gnome.org/show_bug.cgi?id=765435
This commit is contained in:
parent
d0c72182a4
commit
6c5b6232da
3 changed files with 37 additions and 29 deletions
|
@ -37,13 +37,6 @@
|
||||||
/* Environment variable for disable driver white-list */
|
/* Environment variable for disable driver white-list */
|
||||||
#define GST_VAAPI_ALL_DRIVERS_ENV "GST_VAAPI_ALL_DRIVERS"
|
#define GST_VAAPI_ALL_DRIVERS_ENV "GST_VAAPI_ALL_DRIVERS"
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
GST_VAAPI_OPTION_VIDEO_META = (1u << 0),
|
|
||||||
GST_VAAPI_OPTION_VIDEO_ALIGNMENT = (1u << 1),
|
|
||||||
GST_VAAPI_OPTION_GL_TEXTURE_UPLOAD = (1u << 2),
|
|
||||||
};
|
|
||||||
|
|
||||||
/* GstVideoContext interface */
|
/* GstVideoContext interface */
|
||||||
static void
|
static void
|
||||||
plugin_set_display (GstVaapiPluginBase * plugin, GstVaapiDisplay * display)
|
plugin_set_display (GstVaapiPluginBase * plugin, GstVaapiDisplay * display)
|
||||||
|
@ -520,7 +513,7 @@ gst_vaapi_buffer_pool_caps_is_equal (GstBufferPool * pool, GstCaps * newcaps)
|
||||||
* @plugin: a #GstVaapiPluginBase
|
* @plugin: a #GstVaapiPluginBase
|
||||||
* @caps: the initial #GstCaps for the resulting buffer pool
|
* @caps: the initial #GstCaps for the resulting buffer pool
|
||||||
* @size: the size of each buffer, not including prefix and padding
|
* @size: the size of each buffer, not including prefix and padding
|
||||||
* @options: #GstBufferPool options encoded as bit-wise flags
|
* @options: a set of #GstVaapiVideoBufferPoolOption encoded as bit-wise
|
||||||
* @allocator: (allow-none): the #GstAllocator to use or %NULL
|
* @allocator: (allow-none): the #GstAllocator to use or %NULL
|
||||||
*
|
*
|
||||||
* Create an instance of #GstVaapiVideoBufferPool
|
* Create an instance of #GstVaapiVideoBufferPool
|
||||||
|
@ -543,16 +536,16 @@ gst_vaapi_plugin_base_create_pool (GstVaapiPluginBase * plugin, GstCaps * caps,
|
||||||
max_buffers);
|
max_buffers);
|
||||||
gst_buffer_pool_config_add_option (config,
|
gst_buffer_pool_config_add_option (config,
|
||||||
GST_BUFFER_POOL_OPTION_VAAPI_VIDEO_META);
|
GST_BUFFER_POOL_OPTION_VAAPI_VIDEO_META);
|
||||||
if (options & GST_VAAPI_OPTION_VIDEO_META) {
|
if (options & GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META) {
|
||||||
gst_buffer_pool_config_add_option (config,
|
gst_buffer_pool_config_add_option (config,
|
||||||
GST_BUFFER_POOL_OPTION_VIDEO_META);
|
GST_BUFFER_POOL_OPTION_VIDEO_META);
|
||||||
}
|
}
|
||||||
if (options & GST_VAAPI_OPTION_VIDEO_ALIGNMENT) {
|
if (options & GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT) {
|
||||||
gst_buffer_pool_config_add_option (config,
|
gst_buffer_pool_config_add_option (config,
|
||||||
GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
|
GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
|
||||||
}
|
}
|
||||||
#if (USE_GLX || USE_EGL)
|
#if (USE_GLX || USE_EGL)
|
||||||
if (options & GST_VAAPI_OPTION_GL_TEXTURE_UPLOAD) {
|
if (options & GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_GL_TEXTURE_UPLOAD) {
|
||||||
gst_buffer_pool_config_add_option (config,
|
gst_buffer_pool_config_add_option (config,
|
||||||
GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META);
|
GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META);
|
||||||
}
|
}
|
||||||
|
@ -620,7 +613,8 @@ ensure_sinkpad_buffer_pool (GstVaapiPluginBase * plugin, GstCaps * caps)
|
||||||
goto error_create_allocator;
|
goto error_create_allocator;
|
||||||
|
|
||||||
pool = gst_vaapi_plugin_base_create_pool (plugin, caps,
|
pool = gst_vaapi_plugin_base_create_pool (plugin, caps,
|
||||||
GST_VIDEO_INFO_SIZE (&vi), 0, 0, GST_VAAPI_OPTION_VIDEO_META, allocator);
|
GST_VIDEO_INFO_SIZE (&vi), 0, 0,
|
||||||
|
GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META, allocator);
|
||||||
gst_object_unref (allocator);
|
gst_object_unref (allocator);
|
||||||
if (!pool)
|
if (!pool)
|
||||||
goto error_create_pool;
|
goto error_create_pool;
|
||||||
|
@ -766,17 +760,17 @@ gst_vaapi_plugin_base_decide_allocation (GstVaapiPluginBase * plugin,
|
||||||
|
|
||||||
pool_options = 0;
|
pool_options = 0;
|
||||||
if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL))
|
if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL))
|
||||||
pool_options |= GST_VAAPI_OPTION_VIDEO_META;
|
pool_options |= GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META;
|
||||||
|
|
||||||
#if (USE_GLX || USE_EGL)
|
#if (USE_GLX || USE_EGL)
|
||||||
if (gst_query_find_allocation_meta (query,
|
if (gst_query_find_allocation_meta (query,
|
||||||
GST_VIDEO_GL_TEXTURE_UPLOAD_META_API_TYPE, &idx) &&
|
GST_VIDEO_GL_TEXTURE_UPLOAD_META_API_TYPE, &idx) &&
|
||||||
gst_vaapi_caps_feature_contains (caps,
|
gst_vaapi_caps_feature_contains (caps,
|
||||||
GST_VAAPI_CAPS_FEATURE_GL_TEXTURE_UPLOAD_META))
|
GST_VAAPI_CAPS_FEATURE_GL_TEXTURE_UPLOAD_META))
|
||||||
pool_options |= GST_VAAPI_OPTION_GL_TEXTURE_UPLOAD;
|
pool_options |= GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_GL_TEXTURE_UPLOAD;
|
||||||
|
|
||||||
#if USE_GST_GL_HELPERS
|
#if USE_GST_GL_HELPERS
|
||||||
if (pool_options & GST_VAAPI_OPTION_GL_TEXTURE_UPLOAD) {
|
if (pool_options & GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_GL_TEXTURE_UPLOAD) {
|
||||||
const GstStructure *params;
|
const GstStructure *params;
|
||||||
GstObject *gl_context;
|
GstObject *gl_context;
|
||||||
|
|
||||||
|
@ -811,7 +805,7 @@ gst_vaapi_plugin_base_decide_allocation (GstVaapiPluginBase * plugin,
|
||||||
not provide a correct propose_allocation() implementation */
|
not provide a correct propose_allocation() implementation */
|
||||||
if (gst_buffer_pool_has_option (pool,
|
if (gst_buffer_pool_has_option (pool,
|
||||||
GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT))
|
GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT))
|
||||||
pool_options |= GST_VAAPI_OPTION_VIDEO_ALIGNMENT;
|
pool_options |= GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT;
|
||||||
|
|
||||||
/* GstVaapiVideoMeta is mandatory, and this implies VA surface memory */
|
/* GstVaapiVideoMeta is mandatory, and this implies VA surface memory */
|
||||||
if (!gst_buffer_pool_has_option (pool,
|
if (!gst_buffer_pool_has_option (pool,
|
||||||
|
|
|
@ -48,9 +48,7 @@ struct _GstVaapiVideoBufferPoolPrivate
|
||||||
GstAllocator *allocator;
|
GstAllocator *allocator;
|
||||||
GstVideoInfo alloc_info;
|
GstVideoInfo alloc_info;
|
||||||
GstVaapiDisplay *display;
|
GstVaapiDisplay *display;
|
||||||
guint has_video_meta:1;
|
guint options;
|
||||||
guint has_video_alignment:1;
|
|
||||||
guint has_texture_upload_meta:1;
|
|
||||||
guint use_dmabuf_memory:1;
|
guint use_dmabuf_memory:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -182,19 +180,20 @@ gst_vaapi_video_buffer_pool_set_config (GstBufferPool * pool,
|
||||||
if (!priv->allocator)
|
if (!priv->allocator)
|
||||||
goto error_no_allocator;
|
goto error_no_allocator;
|
||||||
|
|
||||||
priv->has_video_meta = gst_buffer_pool_config_has_option (config,
|
priv->options = 0;
|
||||||
GST_BUFFER_POOL_OPTION_VIDEO_META);
|
if (gst_buffer_pool_config_has_option (config,
|
||||||
|
GST_BUFFER_POOL_OPTION_VIDEO_META))
|
||||||
|
priv->options |= GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META;
|
||||||
|
|
||||||
priv->has_video_alignment = gst_buffer_pool_config_has_option (config,
|
if (gst_buffer_pool_config_has_option (config,
|
||||||
GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
|
GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT)) {
|
||||||
if (priv->has_video_alignment) {
|
|
||||||
fill_video_alignment (GST_VAAPI_VIDEO_BUFFER_POOL (pool), &align);
|
fill_video_alignment (GST_VAAPI_VIDEO_BUFFER_POOL (pool), &align);
|
||||||
gst_buffer_pool_config_set_video_alignment (config, &align);
|
gst_buffer_pool_config_set_video_alignment (config, &align);
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->has_texture_upload_meta = !priv->use_dmabuf_memory
|
if (!priv->use_dmabuf_memory && gst_buffer_pool_config_has_option (config,
|
||||||
&& gst_buffer_pool_config_has_option (config,
|
GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META))
|
||||||
GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META);
|
priv->options |= GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_GL_TEXTURE_UPLOAD;
|
||||||
|
|
||||||
return
|
return
|
||||||
GST_BUFFER_POOL_CLASS
|
GST_BUFFER_POOL_CLASS
|
||||||
|
@ -277,7 +276,7 @@ gst_vaapi_video_buffer_pool_alloc_buffer (GstBufferPool * pool,
|
||||||
gst_vaapi_video_meta_replace (&meta, NULL);
|
gst_vaapi_video_meta_replace (&meta, NULL);
|
||||||
gst_buffer_append_memory (buffer, mem);
|
gst_buffer_append_memory (buffer, mem);
|
||||||
|
|
||||||
if (priv->has_video_meta) {
|
if (priv->options & GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META) {
|
||||||
GstVideoInfo *const vip = &priv->alloc_info;
|
GstVideoInfo *const vip = &priv->alloc_info;
|
||||||
GstVideoMeta *vmeta;
|
GstVideoMeta *vmeta;
|
||||||
|
|
||||||
|
@ -293,7 +292,7 @@ gst_vaapi_video_buffer_pool_alloc_buffer (GstBufferPool * pool,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if (USE_GLX || USE_EGL)
|
#if (USE_GLX || USE_EGL)
|
||||||
if (priv->has_texture_upload_meta)
|
if (priv->options & GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_GL_TEXTURE_UPLOAD)
|
||||||
gst_buffer_add_texture_upload_meta (buffer);
|
gst_buffer_add_texture_upload_meta (buffer);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,21 @@ typedef enum {
|
||||||
GST_BUFFER_POOL_ACQUIRE_FLAG_LAST << 0,
|
GST_BUFFER_POOL_ACQUIRE_FLAG_LAST << 0,
|
||||||
} GstVaapiVideoBufferPoolAcquireFlags;
|
} GstVaapiVideoBufferPoolAcquireFlags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstVaapiVideoBufferPoolOption:
|
||||||
|
* @GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META:
|
||||||
|
* @GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT:
|
||||||
|
* @GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_GL_TEXTURE_UPLOAD:
|
||||||
|
*
|
||||||
|
* Helper enum to handle the buffer pool options using bit operation.
|
||||||
|
**/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META = (1u << 0),
|
||||||
|
GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT = (1u << 1),
|
||||||
|
GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_GL_TEXTURE_UPLOAD = (1u << 2),
|
||||||
|
} GstVaapiVideoBufferPoolOption;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstVaapiVideoBufferPool:
|
* GstVaapiVideoBufferPool:
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue