diff options
author | Alessandro Decina <alessandro.d@gmail.com> | 2015-01-15 14:09:43 +1100 |
---|---|---|
committer | Alessandro Decina <alessandro.d@gmail.com> | 2015-01-15 14:10:43 +1100 |
commit | d95a12e185d8c30b14f912bc187b4b3f28a01b0d (patch) | |
tree | 0c9a2c8d0cf92bce2ee36977079e7b1280d62f63 /sys/applemedia/corevideotexturecache.m | |
parent | cdfe90aaba18949ed5f5ae962a1d89aa2ef196a6 (diff) | |
download | gstreamer-plugins-bad-d95a12e185d8c30b14f912bc187b4b3f28a01b0d.tar.gz |
vtdec: implement the GL texture upload meta
Diffstat (limited to 'sys/applemedia/corevideotexturecache.m')
-rw-r--r-- | sys/applemedia/corevideotexturecache.m | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/sys/applemedia/corevideotexturecache.m b/sys/applemedia/corevideotexturecache.m index 821aca5c9..e55ca69ba 100644 --- a/sys/applemedia/corevideotexturecache.m +++ b/sys/applemedia/corevideotexturecache.m @@ -26,12 +26,11 @@ #endif #include "corevideotexturecache.h" #include "coremediabuffer.h" +#include "corevideobuffer.h" GstCoreVideoTextureCache * gst_core_video_texture_cache_new (GstGLContext * ctx) { - CVReturn err; - g_return_val_if_fail (ctx != NULL, NULL); GstCoreVideoTextureCache *cache = g_new0 (GstCoreVideoTextureCache, 1); @@ -41,21 +40,21 @@ gst_core_video_texture_cache_new (GstGLContext * ctx) CGLPixelFormatAttribute attribs[1] = { 0 }; int numPixelFormats; CGLPixelFormatObj pixelFormat; - CGLChoosePixelFormat (attribs, &pixelFormat, &numPixelFormats); // 5 - NSOpenGLContext *platform_ctx = (NSOpenGLContext *) gst_gl_context_get_gl_context (ctx); - err = CVOpenGLTextureCacheCreate (kCFAllocatorDefault, NULL, - [platform_ctx CGLContextObj], pixelFormat, - NULL, &cache->cache); + CGLChoosePixelFormat (attribs, &pixelFormat, &numPixelFormats); // 5 + NSOpenGLContext *platform_ctx = + (NSOpenGLContext *) gst_gl_context_get_gl_context (ctx); + CVOpenGLTextureCacheCreate (kCFAllocatorDefault, NULL, + [platform_ctx CGLContextObj], pixelFormat, NULL, &cache->cache); #else - err = CVOpenGLESTextureCacheCreate (kCFAllocatorDefault, NULL, - (CVEAGLContext) gst_gl_context_get_gl_context (ctx), - NULL, &cache->cache); + CVOpenGLESTextureCacheCreate (kCFAllocatorDefault, NULL, + (CVEAGLContext) gst_gl_context_get_gl_context (ctx), NULL, &cache->cache); #endif return cache; } -void gst_core_video_texture_cache_free (GstCoreVideoTextureCache * cache) +void +gst_core_video_texture_cache_free (GstCoreVideoTextureCache * cache) { g_return_if_fail (cache != NULL); @@ -69,11 +68,13 @@ void gst_core_video_texture_cache_free (GstCoreVideoTextureCache * cache) } gboolean -gst_core_video_texture_cache_upload (GstVideoGLTextureUploadMeta * meta, guint texture_id[4]) +gst_core_video_texture_cache_upload (GstVideoGLTextureUploadMeta * meta, + guint texture_id[4]) { g_return_val_if_fail (meta != NULL, FALSE); - GstCoreVideoTextureCache *cache = (GstCoreVideoTextureCache *) meta->user_data; + GstCoreVideoTextureCache *cache = + (GstCoreVideoTextureCache *) meta->user_data; const GstGLFuncs *gl = cache->ctx->gl_vtable; #if !HAVE_IOS CVOpenGLTextureRef texture = NULL; @@ -81,16 +82,25 @@ gst_core_video_texture_cache_upload (GstVideoGLTextureUploadMeta * meta, guint t CVOpenGLESTextureRef texture = NULL; #endif GstVideoMeta *video_meta = gst_buffer_get_video_meta (meta->buffer); - GstCoreMediaMeta *cv_meta = (GstCoreMediaMeta *) gst_buffer_get_meta (meta->buffer, - gst_core_media_meta_api_get_type ()); + GstCoreMediaMeta *cm_meta = + (GstCoreMediaMeta *) gst_buffer_get_meta (meta->buffer, + gst_core_media_meta_api_get_type ()); + GstCoreVideoMeta *cv_meta = + (GstCoreVideoMeta *) gst_buffer_get_meta (meta->buffer, + gst_core_video_meta_api_get_type ()); + CVPixelBufferRef pixel_buf; + if (cm_meta) + pixel_buf = cm_meta->pixel_buf; + else + pixel_buf = cv_meta->pixbuf; #if !HAVE_IOS CVOpenGLTextureCacheCreateTextureFromImage (kCFAllocatorDefault, - cache->cache, cv_meta->pixel_buf, NULL, &texture); + cache->cache, pixel_buf, NULL, &texture); #else CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault, - cache->cache, cv_meta->image_buf, NULL, GL_TEXTURE_2D, - GL_RGBA, video_meta->width, video_meta->height, GL_RGBA, GL_UNSIGNED_BYTE, - 0, &texture); + cache->cache, cm_meta->image_buf, NULL, GL_TEXTURE_2D, + GL_RGBA, video_meta->width, video_meta->height, GL_RGBA, GL_UNSIGNED_BYTE, + 0, &texture); #endif GLuint fboId; gl->GenFramebuffers (1, &fboId); @@ -98,13 +108,14 @@ gst_core_video_texture_cache_upload (GstVideoGLTextureUploadMeta * meta, guint t gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, #if !HAVE_IOS - CVOpenGLTextureGetTarget(texture), CVOpenGLTextureGetName(texture), + CVOpenGLTextureGetTarget (texture), CVOpenGLTextureGetName (texture), #else - CVOpenGLESTextureGetTarget(texture), CVOpenGLESTextureGetName(texture), + CVOpenGLESTextureGetTarget (texture), CVOpenGLESTextureGetName (texture), #endif 0); gl->BindTexture (GL_TEXTURE_2D, texture_id[0]); - gl->CopyTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, video_meta->width, video_meta->height, 0); + gl->CopyTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, video_meta->width, + video_meta->height, 0); gl->BindTexture (GL_TEXTURE_2D, 0); gl->BindFramebuffer (GL_FRAMEBUFFER, 0); gl->DeleteFramebuffers (1, &fboId); |