mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-09 07:52:36 +00:00
gltextureupload: use an array for texture type
Instead of using a single value for the texture type, use an array with 4 elements, just as the GstVideoGLTextureUploadMeta, avoiding a buffer overflow. https://bugzilla.gnome.org/show_bug.cgi?id=764231
This commit is contained in:
parent
959d14ce8a
commit
ddddb0415b
1 changed files with 7 additions and 5 deletions
|
@ -40,7 +40,7 @@
|
||||||
struct _GstVaapiVideoMetaTexture
|
struct _GstVaapiVideoMetaTexture
|
||||||
{
|
{
|
||||||
GstVaapiTexture *texture;
|
GstVaapiTexture *texture;
|
||||||
GstVideoGLTextureType texture_type;
|
GstVideoGLTextureType texture_type[4];
|
||||||
guint gl_format;
|
guint gl_format;
|
||||||
guint width;
|
guint width;
|
||||||
guint height;
|
guint height;
|
||||||
|
@ -73,15 +73,17 @@ static gboolean
|
||||||
meta_texture_ensure_format (GstVaapiVideoMetaTexture * meta,
|
meta_texture_ensure_format (GstVaapiVideoMetaTexture * meta,
|
||||||
GstVideoFormat format)
|
GstVideoFormat format)
|
||||||
{
|
{
|
||||||
|
memset (meta->texture_type, 0, sizeof (meta->texture_type));
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case GST_VIDEO_FORMAT_RGBA:
|
case GST_VIDEO_FORMAT_RGBA:
|
||||||
meta->gl_format = GL_RGBA;
|
meta->gl_format = GL_RGBA;
|
||||||
meta->texture_type = GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
|
meta->texture_type[0] = GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_BGRA:
|
case GST_VIDEO_FORMAT_BGRA:
|
||||||
meta->gl_format = GL_BGRA_EXT;
|
meta->gl_format = GL_BGRA_EXT;
|
||||||
/* FIXME: add GST_VIDEO_GL_TEXTURE_TYPE_BGRA extension */
|
/* FIXME: add GST_VIDEO_GL_TEXTURE_TYPE_BGRA extension */
|
||||||
meta->texture_type = GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
|
meta->texture_type[0] = GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
goto error_unsupported_format;
|
goto error_unsupported_format;
|
||||||
|
@ -155,7 +157,7 @@ meta_texture_copy (GstVaapiVideoMetaTexture * meta)
|
||||||
if (!copy)
|
if (!copy)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
copy->texture_type = meta->texture_type;
|
memcpy (copy->texture_type, meta->texture_type, sizeof (meta->texture_type));
|
||||||
copy->gl_format = meta->gl_format;
|
copy->gl_format = meta->gl_format;
|
||||||
copy->width = meta->width;
|
copy->width = meta->width;
|
||||||
copy->height = meta->height;
|
copy->height = meta->height;
|
||||||
|
@ -220,7 +222,7 @@ gst_buffer_add_texture_upload_meta (GstBuffer * buffer)
|
||||||
|
|
||||||
meta = gst_buffer_add_video_gl_texture_upload_meta (buffer,
|
meta = gst_buffer_add_video_gl_texture_upload_meta (buffer,
|
||||||
GST_VIDEO_GL_TEXTURE_ORIENTATION_X_NORMAL_Y_NORMAL,
|
GST_VIDEO_GL_TEXTURE_ORIENTATION_X_NORMAL_Y_NORMAL,
|
||||||
1, &meta_texture->texture_type, gst_vaapi_texture_upload,
|
1, meta_texture->texture_type, gst_vaapi_texture_upload,
|
||||||
meta_texture, (GBoxedCopyFunc) meta_texture_copy,
|
meta_texture, (GBoxedCopyFunc) meta_texture_copy,
|
||||||
(GBoxedFreeFunc) meta_texture_free);
|
(GBoxedFreeFunc) meta_texture_free);
|
||||||
if (!meta)
|
if (!meta)
|
||||||
|
|
Loading…
Reference in a new issue