summaryrefslogtreecommitdiff
path: root/sys/applemedia
diff options
context:
space:
mode:
authorNick Kallen <nickkallen@me.com>2017-02-10 11:32:23 +0100
committerSebastian Dröge <sebastian@centricular.com>2017-02-14 12:25:55 +0200
commit487e57f1b7ffe7199718f7f4b01eb3697dd3c68e (patch)
treeaf90cb96e861bad51a32b28d1817f2aa023dab80 /sys/applemedia
parentef739e726fb52305245f8bbf7d26f8e2ae0f71e2 (diff)
downloadgstreamer-plugins-bad-487e57f1b7ffe7199718f7f4b01eb3697dd3c68e.tar.gz
applemedia: free videotexturecache texture in gl thread
The cached texture was treated as user_data passed to GstGLBaseMemory and freed with a GDestroyNotify function. However, this data must be treated specially: it must be destroyed in the GL thread. https://bugzilla.gnome.org/show_bug.cgi?id=778434
Diffstat (limited to 'sys/applemedia')
-rw-r--r--sys/applemedia/iosglmemory.c12
-rw-r--r--sys/applemedia/iosglmemory.h4
-rw-r--r--sys/applemedia/videotexturecache.m4
3 files changed, 10 insertions, 10 deletions
diff --git a/sys/applemedia/iosglmemory.c b/sys/applemedia/iosglmemory.c
index 65507b485..ac753670a 100644
--- a/sys/applemedia/iosglmemory.c
+++ b/sys/applemedia/iosglmemory.c
@@ -42,6 +42,7 @@ _ios_gl_memory_destroy (GstGLBaseMemory * gl_mem)
{
GstIOSGLMemory *mem = (GstIOSGLMemory *) gl_mem;
+ CFRelease (mem->texture);
gst_memory_unref (GST_MEMORY_CAST (mem->cv_mem));
GST_GL_BASE_MEMORY_ALLOCATOR_CLASS
(gst_ios_gl_memory_allocator_parent_class)->destroy (gl_mem);
@@ -134,8 +135,7 @@ _ios_gl_memory_new (GstGLContext * context,
GstVideoGLTextureType tex_type,
guint tex_id,
GstVideoInfo * info,
- guint plane,
- GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify)
+ guint plane, GstVideoAlignment * valign, CVOpenGLESTextureRef texture)
{
GstIOSGLMemory *mem;
@@ -143,8 +143,9 @@ _ios_gl_memory_new (GstGLContext * context,
mem->gl_mem.tex_id = tex_id;
mem->gl_mem.texture_wrapped = TRUE;
gst_gl_memory_init (&mem->gl_mem, _ios_gl_memory_allocator, NULL, context,
- target, tex_type, NULL, info, plane, valign, user_data, notify);
+ target, tex_type, NULL, info, plane, valign, NULL, NULL);
mem->cv_mem = cv_mem;
+ mem->texture = texture;
GST_MINI_OBJECT_FLAG_SET (mem, GST_MEMORY_FLAG_READONLY);
@@ -158,9 +159,8 @@ gst_ios_gl_memory_new_wrapped (GstGLContext * context,
GstVideoGLTextureType tex_type,
guint tex_id,
GstVideoInfo * info,
- guint plane,
- GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify)
+ guint plane, GstVideoAlignment * valign, CVOpenGLESTextureRef texture)
{
return _ios_gl_memory_new (context, cv_mem, target, tex_type, tex_id, info,
- plane, valign, user_data, notify);
+ plane, valign, texture);
}
diff --git a/sys/applemedia/iosglmemory.h b/sys/applemedia/iosglmemory.h
index ae9816a0b..f55d4fd3d 100644
--- a/sys/applemedia/iosglmemory.h
+++ b/sys/applemedia/iosglmemory.h
@@ -43,6 +43,7 @@ typedef struct _GstIOSGLMemory
{
GstGLMemory gl_mem;
GstAppleCoreVideoMemory *cv_mem;
+ CVOpenGLESTextureRef texture;
} GstIOSGLMemory;
#define GST_IOS_GL_MEMORY_ALLOCATOR_NAME "IOSGLMemory"
@@ -58,8 +59,7 @@ gst_ios_gl_memory_new_wrapped (GstGLContext * context,
GstVideoInfo * info,
guint plane,
GstVideoAlignment *valign,
- gpointer user_data,
- GDestroyNotify notify);
+ CVOpenGLESTextureRef texture);
gboolean gst_is_ios_gl_memory (GstMemory * mem);
diff --git a/sys/applemedia/videotexturecache.m b/sys/applemedia/videotexturecache.m
index 8315a3bba..529a1033e 100644
--- a/sys/applemedia/videotexturecache.m
+++ b/sys/applemedia/videotexturecache.m
@@ -157,7 +157,7 @@ _do_create_memory (GstGLContext * context, ContextThreadData * data)
gl_target, GST_VIDEO_GL_TEXTURE_TYPE_RGBA,
CVOpenGLESTextureGetName (texture),
&cache->input_info,
- 0, NULL, texture, (GDestroyNotify) CFRelease);
+ 0, NULL, texture);
break;
case GST_VIDEO_FORMAT_NV12: {
GstVideoGLTextureType textype;
@@ -181,7 +181,7 @@ _do_create_memory (GstGLContext * context, ContextThreadData * data)
memory = gst_apple_core_video_memory_new_wrapped (gpixbuf, plane, size);
gl_memory = gst_ios_gl_memory_new_wrapped (context, memory,
gl_target, textype, CVOpenGLESTextureGetName (texture), &cache->input_info,
- plane, NULL, texture, (GDestroyNotify) CFRelease);
+ plane, NULL, texture);
break;
}
default: