videometa: Implement copying of GstVideoGLTextureUploadMeta
This commit is contained in:
parent
5f79a8cb93
commit
3d1322f08e
@ -399,8 +399,36 @@ gst_video_gl_texture_upload_meta_free (GstMeta * meta, GstBuffer * buffer)
|
|||||||
{
|
{
|
||||||
GstVideoGLTextureUploadMeta *vmeta = (GstVideoGLTextureUploadMeta *) meta;
|
GstVideoGLTextureUploadMeta *vmeta = (GstVideoGLTextureUploadMeta *) meta;
|
||||||
|
|
||||||
if (vmeta->destroy_notify)
|
if (vmeta->user_data_free)
|
||||||
vmeta->destroy_notify (vmeta->user_data);
|
vmeta->user_data_free (vmeta->user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_video_gl_texture_upload_meta_transform (GstBuffer * dest, GstMeta * meta,
|
||||||
|
GstBuffer * buffer, GQuark type, gpointer data)
|
||||||
|
{
|
||||||
|
GstVideoGLTextureUploadMeta *dmeta, *smeta;
|
||||||
|
|
||||||
|
smeta = (GstVideoGLTextureUploadMeta *) meta;
|
||||||
|
|
||||||
|
if (GST_META_TRANSFORM_IS_COPY (type)) {
|
||||||
|
GstMetaTransformCopy *copy = data;
|
||||||
|
|
||||||
|
if (!copy->region) {
|
||||||
|
/* only copy if the complete data is copied as well */
|
||||||
|
dmeta =
|
||||||
|
(GstVideoGLTextureUploadMeta *) gst_buffer_add_meta (dest,
|
||||||
|
GST_VIDEO_GL_TEXTURE_UPLOAD_META_INFO, NULL);
|
||||||
|
dmeta->buffer = dest;
|
||||||
|
dmeta->upload = smeta->upload;
|
||||||
|
dmeta->user_data = smeta->user_data;
|
||||||
|
dmeta->user_data_copy = smeta->user_data_copy;
|
||||||
|
dmeta->user_data_free = smeta->user_data_free;
|
||||||
|
if (dmeta->user_data_copy)
|
||||||
|
dmeta->user_data = dmeta->user_data_copy (dmeta->user_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
const GstMetaInfo *
|
const GstMetaInfo *
|
||||||
@ -415,7 +443,7 @@ gst_video_gl_texture_upload_meta_get_info (void)
|
|||||||
sizeof (GstVideoGLTextureUploadMeta),
|
sizeof (GstVideoGLTextureUploadMeta),
|
||||||
NULL,
|
NULL,
|
||||||
gst_video_gl_texture_upload_meta_free,
|
gst_video_gl_texture_upload_meta_free,
|
||||||
NULL);
|
gst_video_gl_texture_upload_meta_transform);
|
||||||
g_once_init_leave (&info, meta);
|
g_once_init_leave (&info, meta);
|
||||||
}
|
}
|
||||||
return info;
|
return info;
|
||||||
@ -440,7 +468,7 @@ gst_video_gl_texture_upload_meta_get_info (void)
|
|||||||
GstVideoGLTextureUploadMeta *
|
GstVideoGLTextureUploadMeta *
|
||||||
gst_buffer_add_video_gl_texture_upload_meta (GstBuffer * buffer,
|
gst_buffer_add_video_gl_texture_upload_meta (GstBuffer * buffer,
|
||||||
GstVideoGLTextureUpload upload, gpointer user_data,
|
GstVideoGLTextureUpload upload, gpointer user_data,
|
||||||
GDestroyNotify destroy_notify)
|
GBoxedCopyFunc user_data_copy, GBoxedFreeFunc user_data_free)
|
||||||
{
|
{
|
||||||
GstVideoGLTextureUploadMeta *meta;
|
GstVideoGLTextureUploadMeta *meta;
|
||||||
|
|
||||||
@ -454,7 +482,8 @@ gst_buffer_add_video_gl_texture_upload_meta (GstBuffer * buffer,
|
|||||||
meta->buffer = buffer;
|
meta->buffer = buffer;
|
||||||
meta->upload = upload;
|
meta->upload = upload;
|
||||||
meta->user_data = user_data;
|
meta->user_data = user_data;
|
||||||
meta->destroy_notify = destroy_notify;
|
meta->user_data_copy = user_data_copy;
|
||||||
|
meta->user_data_free = user_data_free;
|
||||||
|
|
||||||
return meta;
|
return meta;
|
||||||
}
|
}
|
||||||
|
@ -165,11 +165,12 @@ struct _GstVideoGLTextureUploadMeta {
|
|||||||
GstVideoGLTextureUpload upload;
|
GstVideoGLTextureUpload upload;
|
||||||
|
|
||||||
gpointer user_data;
|
gpointer user_data;
|
||||||
GDestroyNotify destroy_notify;
|
GBoxedCopyFunc user_data_copy;
|
||||||
|
GBoxedFreeFunc user_data_free;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define gst_buffer_get_video_gl_texture_upload_meta(b) ((GstVideoGLTextureUploadMeta*)gst_buffer_get_meta((b),GST_VIDEO_GL_TEXTURE_UPLOAD_META_API_TYPE))
|
#define gst_buffer_get_video_gl_texture_upload_meta(b) ((GstVideoGLTextureUploadMeta*)gst_buffer_get_meta((b),GST_VIDEO_GL_TEXTURE_UPLOAD_META_API_TYPE))
|
||||||
GstVideoGLTextureUploadMeta * gst_buffer_add_video_gl_texture_upload_meta (GstBuffer *buffer, GstVideoGLTextureUpload upload, gpointer user_data, GDestroyNotify destroy_notify);
|
GstVideoGLTextureUploadMeta * gst_buffer_add_video_gl_texture_upload_meta (GstBuffer *buffer, GstVideoGLTextureUpload upload, gpointer user_data, GBoxedCopyFunc copy_user_data, GBoxedFreeFunc free_user_data);
|
||||||
gboolean gst_video_gl_texture_upload_meta_upload (GstVideoGLTextureUploadMeta *meta, guint format, guint texture_id);
|
gboolean gst_video_gl_texture_upload_meta_upload (GstVideoGLTextureUploadMeta *meta, guint format, guint texture_id);
|
||||||
|
|
||||||
GType gst_video_gl_texture_upload_meta_api_get_type (void);
|
GType gst_video_gl_texture_upload_meta_api_get_type (void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user