applemedia: fix vtdec texture sharing on ios 9.1
authorAlessandro Decina <alessandro.d@gmail.com>
Tue, 10 Nov 2015 03:21:33 +0000 (14:21 +1100)
committerAlessandro Decina <alessandro.d@gmail.com>
Tue, 10 Nov 2015 03:24:42 +0000 (14:24 +1100)
Use gst_gl_sized_gl_format_from_gl_format_type to get the format passed to
CVOpenGLESTextureCacheCreateTextureFromImage. Before this change extracting the
second texture from the pixel buffer was failing on ios 9.1.

sys/applemedia/corevideotexturecache.m

index 4d9547a2b34d144e7110b507c11992d37382d32c..706b6d68f34ef594d4e789d812a4353b1dbb26eb 100644 (file)
@@ -187,34 +187,37 @@ gl_mem_from_buffer (GstCoreVideoTextureCache * cache,
         break;
       case GST_VIDEO_FORMAT_NV12: {
         GstVideoGLTextureType textype;
-        GLenum texfmt;
+        GLenum texifmt, texfmt;
 
         textype = gst_gl_texture_type_from_format (cache->ctx, GST_VIDEO_FORMAT_NV12, 0);
-        texfmt = gst_gl_format_from_gl_texture_type (textype);
-        gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture));
+        texifmt = gst_gl_format_from_gl_texture_type (textype);
+        texfmt = gst_gl_sized_gl_format_from_gl_format_type (cache->ctx, texifmt, GL_UNSIGNED_BYTE);
 
         /* vtdec does NV12 on iOS when doing GLMemory */
         if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
-              cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texfmt,
+              cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texifmt,
               GST_VIDEO_INFO_WIDTH (&cache->input_info),
               GST_VIDEO_INFO_HEIGHT (&cache->input_info),
               texfmt, GL_UNSIGNED_BYTE, 0, &texture) != kCVReturnSuccess)
           goto error;
 
+        gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture));
         *mem1 = (GstMemory *) gst_gl_memory_wrapped_texture (cache->ctx,
             CVOpenGLESTextureGetName (texture), gl_target,
             &cache->input_info, 0, NULL, texture, (GDestroyNotify) CFRelease);
 
         textype = gst_gl_texture_type_from_format (cache->ctx, GST_VIDEO_FORMAT_NV12, 1);
-        texfmt = gst_gl_format_from_gl_texture_type (textype);
+        texifmt = gst_gl_format_from_gl_texture_type (textype);
+        texfmt = gst_gl_sized_gl_format_from_gl_format_type (cache->ctx, texifmt, GL_UNSIGNED_BYTE);
 
         if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
-              cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texfmt,
+              cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texifmt,
               GST_VIDEO_INFO_WIDTH (&cache->input_info) / 2,
               GST_VIDEO_INFO_HEIGHT (&cache->input_info) / 2,
               texfmt, GL_UNSIGNED_BYTE, 1, &texture) != kCVReturnSuccess)
           goto error;
 
+        gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture));
         *mem2 = (GstMemory *) gst_gl_memory_wrapped_texture (cache->ctx,
             CVOpenGLESTextureGetName (texture), gl_target,
             &cache->input_info, 0, NULL, texture, (GDestroyNotify) CFRelease);