summaryrefslogtreecommitdiff
path: root/sys/applemedia/corevideotexturecache.m
diff options
context:
space:
mode:
authorAlessandro Decina <alessandro.d@gmail.com>2015-01-15 14:09:43 +1100
committerAlessandro Decina <alessandro.d@gmail.com>2015-01-15 14:10:43 +1100
commitd95a12e185d8c30b14f912bc187b4b3f28a01b0d (patch)
tree0c9a2c8d0cf92bce2ee36977079e7b1280d62f63 /sys/applemedia/corevideotexturecache.m
parentcdfe90aaba18949ed5f5ae962a1d89aa2ef196a6 (diff)
downloadgstreamer-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.m55
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);