diff options
author | Nick Kallen <nickkallen@me.com> | 2017-02-10 11:32:23 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2017-02-14 12:25:55 +0200 |
commit | 487e57f1b7ffe7199718f7f4b01eb3697dd3c68e (patch) | |
tree | af90cb96e861bad51a32b28d1817f2aa023dab80 /sys/applemedia | |
parent | ef739e726fb52305245f8bbf7d26f8e2ae0f71e2 (diff) | |
download | gstreamer-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.c | 12 | ||||
-rw-r--r-- | sys/applemedia/iosglmemory.h | 4 | ||||
-rw-r--r-- | sys/applemedia/videotexturecache.m | 4 |
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: |