From 956c4d0bde4d6707ccae2b4ae6dfba8500e55217 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Mon, 13 Mar 2017 14:28:47 +1100 Subject: [PATCH] gl/format: use our own GL format enum's instead of gstvideo's They can describe in more detail (such as component sizes) the requested format. --- docs/libs/gst-plugins-bad-libs-sections.txt | 8 +- ext/gl/gstgldifferencematte.c | 8 +- ext/gl/gstgleffects.c | 3 +- ext/gl/gstgloverlay.c | 6 +- ext/qt/gstqtsrc.cc | 2 +- gst-libs/gst/gl/egl/gsteglimage.c | 16 +-- gst-libs/gst/gl/egl/gsteglimage.h | 4 +- gst-libs/gst/gl/egl/gstglmemoryegl.c | 2 +- gst-libs/gst/gl/gstglcolorconvert.c | 53 +++----- gst-libs/gst/gl/gstglformat.c | 73 ++-------- gst-libs/gst/gl/gstglformat.h | 8 +- gst-libs/gst/gl/gstglmemory.c | 139 ++++++++++---------- gst-libs/gst/gl/gstglmemory.h | 26 ++-- gst-libs/gst/gl/gstglmemorypbo.c | 30 ++--- gst-libs/gst/gl/gstglmemorypbo.h | 2 +- gst-libs/gst/gl/gstgloverlaycompositor.c | 2 +- gst-libs/gst/gl/gstglrenderbuffer.c | 52 ++++---- gst-libs/gst/gl/gstglrenderbuffer.h | 10 +- gst-libs/gst/gl/gstglupload.c | 5 +- gst-libs/gst/gl/gstglviewconvert.c | 9 +- sys/androidmedia/gstamcvideodec.c | 2 +- sys/applemedia/corevideobuffer.c | 7 +- sys/applemedia/iosglmemory.c | 8 +- sys/applemedia/iosglmemory.h | 2 +- sys/applemedia/iosurfacememory.c | 11 +- sys/applemedia/iosurfacememory.h | 2 +- sys/applemedia/videotexturecache.m | 17 ++- tests/check/libs/gstglcolorconvert.c | 6 +- tests/check/libs/gstglcontext.c | 2 +- tests/check/libs/gstglmemory.c | 17 ++- tests/check/libs/gstglupload.c | 4 +- 31 files changed, 232 insertions(+), 304 deletions(-) diff --git a/docs/libs/gst-plugins-bad-libs-sections.txt b/docs/libs/gst-plugins-bad-libs-sections.txt index 44f4258e17..3f0faa1d51 100644 --- a/docs/libs/gst-plugins-bad-libs-sections.txt +++ b/docs/libs/gst-plugins-bad-libs-sections.txt @@ -1212,9 +1212,7 @@ GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES GstGLFormat gst_gl_format_type_n_bytes -gst_gl_texture_type_n_bytes -gst_gl_format_from_gl_texture_type -gst_gl_texture_type_from_format +gst_gl_format_from_video_info gst_gl_sized_gl_format_from_gl_format_type gst_gl_texture_target_from_string gst_gl_texture_target_to_string @@ -1331,7 +1329,7 @@ gst_gl_memory_texsubimage gst_gl_memory_get_texture_height gst_gl_memory_get_texture_id gst_gl_memory_get_texture_target -gst_gl_memory_get_texture_type +gst_gl_memory_get_texture_format gst_gl_memory_get_texture_width gst_gl_memory_setup_buffer @@ -1441,7 +1439,7 @@ gst_gl_renderbuffer_allocation_params_new gst_gl_renderbuffer_allocation_params_new_wrapped gst_gl_renderbuffer_get_height gst_gl_renderbuffer_get_id -gst_gl_renderbuffer_get_type +gst_gl_renderbuffer_get_format gst_gl_renderbuffer_get_width gst_gl_renderbuffer_init_once gst_is_gl_renderbuffer diff --git a/ext/gl/gstgldifferencematte.c b/ext/gl/gstgldifferencematte.c index 039c6bdf79..b50e69bf74 100644 --- a/ext/gl/gstgldifferencematte.c +++ b/ext/gl/gstgldifferencematte.c @@ -93,8 +93,7 @@ gst_gl_differencematte_gl_start (GstGLBaseFilter * base_filter) gst_gl_memory_allocator_get_default (context); params = (GstGLAllocationParams *) gst_gl_video_allocation_params_new (context, - NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA); for (i = 0; i < 4; i++) differencematte->midtexture[i] = @@ -306,8 +305,7 @@ init_pixbuf_texture (GstGLDifferenceMatte * differencematte) differencematte->pbuf_width, differencematte->pbuf_height); params = (GstGLAllocationParams *) gst_gl_video_allocation_params_new (context, - NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA); differencematte->newbgtexture = (GstGLMemory *) gst_gl_base_memory_alloc (tex_alloc, params); @@ -317,7 +315,7 @@ init_pixbuf_texture (GstGLDifferenceMatte * differencematte) params = (GstGLAllocationParams *) gst_gl_video_allocation_params_new (context, NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + GST_GL_RGBA); differencematte->savedbgtexture = (GstGLMemory *) gst_gl_base_memory_alloc (tex_alloc, params); diff --git a/ext/gl/gstgleffects.c b/ext/gl/gstgleffects.c index 382402330a..2af3368afa 100644 --- a/ext/gl/gstgleffects.c +++ b/ext/gl/gstgleffects.c @@ -286,8 +286,7 @@ gst_gl_effects_gl_start (GstGLBaseFilter * base_filter) gst_allocator_find (GST_GL_MEMORY_ALLOCATOR_NAME); params = (GstGLAllocationParams *) gst_gl_video_allocation_params_new (context, - NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA); for (i = 0; i < NEEDED_TEXTURES; i++) { if (effects->midtexture[i]) diff --git a/ext/gl/gstgloverlay.c b/ext/gl/gstgloverlay.c index 34b20fadec..9846f53654 100644 --- a/ext/gl/gstgloverlay.c +++ b/ext/gl/gstgloverlay.c @@ -688,8 +688,7 @@ gst_gl_overlay_load_jpeg (GstGLOverlay * overlay, FILE * fp) (GST_GL_BASE_FILTER (overlay)->context)); params = gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context, - NULL, &v_info, 0, &v_align, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + NULL, &v_info, 0, &v_align, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA); overlay->image_memory = (GstGLMemory *) gst_gl_base_memory_alloc (mem_allocator, (GstGLAllocationParams *) params); @@ -804,8 +803,7 @@ gst_gl_overlay_load_png (GstGLOverlay * overlay, FILE * fp) (GST_GL_BASE_FILTER (overlay)->context)); params = gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context, - NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA); overlay->image_memory = (GstGLMemory *) gst_gl_base_memory_alloc (mem_allocator, (GstGLAllocationParams *) params); diff --git a/ext/qt/gstqtsrc.cc b/ext/qt/gstqtsrc.cc index 518a5f3faf..1cf9592b56 100644 --- a/ext/qt/gstqtsrc.cc +++ b/ext/qt/gstqtsrc.cc @@ -393,7 +393,7 @@ gst_qt_src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query) glparams = gst_gl_video_allocation_params_new (qt_src->context, ¶ms, &vinfo, 0, - NULL, GST_GL_TEXTURE_TARGET_2D, GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA); gst_buffer_pool_config_set_gl_allocation_params (config, (GstGLAllocationParams *) glparams); gst_gl_allocation_params_free ((GstGLAllocationParams *) glparams); diff --git a/gst-libs/gst/gl/egl/gsteglimage.c b/gst-libs/gst/gl/egl/gsteglimage.c index c87adf3b95..f5707189a0 100644 --- a/gst-libs/gst/gl/egl/gsteglimage.c +++ b/gst-libs/gst/gl/egl/gsteglimage.c @@ -144,7 +144,7 @@ _gst_egl_image_copy (GstMiniObject * obj) * gst_egl_image_new_wrapped: * @context: a #GstGLContext (must be an EGL context) * @image: the image to wrap - * @type: the #GstVideoGLTextureType + * @format: the #GstGLFormat * @user_data: user data * @user_data_destroy: called when @user_data is no longer needed * @@ -152,7 +152,7 @@ _gst_egl_image_copy (GstMiniObject * obj) */ GstEGLImage * gst_egl_image_new_wrapped (GstGLContext * context, EGLImageKHR image, - GstVideoGLTextureType type, gpointer user_data, + GstGLFormat format, gpointer user_data, GstEGLImageDestroyNotify user_data_destroy) { GstEGLImage *img = NULL; @@ -169,7 +169,7 @@ gst_egl_image_new_wrapped (GstGLContext * context, EGLImageKHR image, img->context = gst_object_ref (context); img->image = image; - img->type = type; + img->format = format; img->destroy_data = user_data; img->destroy_notify = user_data_destroy; @@ -329,7 +329,7 @@ gst_egl_image_from_texture (GstGLContext * context, GstGLMemory * gl_mem, if (!img) return NULL; - return gst_egl_image_new_wrapped (context, img, gl_mem->tex_type, NULL, + return gst_egl_image_new_wrapped (context, img, gl_mem->tex_format, NULL, (GstEGLImageDestroyNotify) _destroy_egl_image); } @@ -418,7 +418,7 @@ GstEGLImage * gst_egl_image_from_dmabuf (GstGLContext * context, gint dmabuf, GstVideoInfo * in_info, gint plane, gsize offset) { - GstVideoGLTextureType type; + GstGLFormat format; guintptr attribs[13]; EGLImageKHR img; gint atti = 0; @@ -426,9 +426,7 @@ gst_egl_image_from_dmabuf (GstGLContext * context, gint i; fourcc = _drm_fourcc_from_info (in_info, plane); - type = - gst_gl_texture_type_from_format (context, GST_VIDEO_INFO_FORMAT (in_info), - plane); + format = gst_gl_format_from_video_info (context, in_info, plane); GST_DEBUG ("fourcc %.4s (%d) plane %d (%dx%d)", (char *) &fourcc, fourcc, plane, @@ -461,7 +459,7 @@ gst_egl_image_from_dmabuf (GstGLContext * context, return NULL; } - return gst_egl_image_new_wrapped (context, img, type, NULL, + return gst_egl_image_new_wrapped (context, img, format, NULL, (GstEGLImageDestroyNotify) _destroy_egl_image); } #endif /* GST_GL_HAVE_DMABUF */ diff --git a/gst-libs/gst/gl/egl/gsteglimage.h b/gst-libs/gst/gl/egl/gsteglimage.h index 9499952fc9..56ec7e1c08 100644 --- a/gst-libs/gst/gl/egl/gsteglimage.h +++ b/gst-libs/gst/gl/egl/gsteglimage.h @@ -53,7 +53,7 @@ struct _GstEGLImage GstGLContext *context; EGLImageKHR image; - GstVideoGLTextureType type; + GstGLFormat format; /* */ gpointer destroy_data; @@ -64,7 +64,7 @@ struct _GstEGLImage GstEGLImage * gst_egl_image_new_wrapped (GstGLContext * context, EGLImageKHR image, - GstVideoGLTextureType type, + GstGLFormat format, gpointer user_data, GstEGLImageDestroyNotify user_data_destroy); EGLImageKHR gst_egl_image_get_image (GstEGLImage * image); diff --git a/gst-libs/gst/gl/egl/gstglmemoryegl.c b/gst-libs/gst/gl/egl/gstglmemoryegl.c index 8ce752317f..414d76b157 100644 --- a/gst-libs/gst/gl/egl/gstglmemoryegl.c +++ b/gst-libs/gst/gl/egl/gstglmemoryegl.c @@ -151,7 +151,7 @@ _gl_mem_egl_alloc (GstGLBaseMemoryAllocator * allocator, } gst_gl_memory_init (GST_GL_MEMORY_CAST (mem), GST_ALLOCATOR_CAST (allocator), - NULL, params->parent.context, params->target, params->tex_type, + NULL, params->parent.context, params->target, params->tex_format, params->parent.alloc_params, params->v_info, params->plane, params->valign, params->parent.user_data, params->parent.notify); diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c index 17138614f2..b04e414bbd 100644 --- a/gst-libs/gst/gl/gstglcolorconvert.c +++ b/gst-libs/gst/gl/gstglcolorconvert.c @@ -419,7 +419,7 @@ struct _GstGLColorConvertPrivate GstGLMemory *in_tex[GST_VIDEO_MAX_PLANES]; GstGLMemory *out_tex[GST_VIDEO_MAX_PLANES]; - GstVideoGLTextureType in_tex_types[GST_VIDEO_MAX_PLANES]; + GstGLFormat in_tex_formats[GST_VIDEO_MAX_PLANES]; GLuint vao; GLuint vertex_buffer; @@ -1521,9 +1521,7 @@ _YUV_to_RGB (GstGLColorConvert * convert) break; case GST_VIDEO_FORMAT_YUY2: { - char uv_val = - convert->priv->in_tex_types[0] == - GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a'; + char uv_val = convert->priv->in_tex_formats[0] == GST_GL_RG ? 'g' : 'a'; info->templ = &templ_YUY2_UYVY_to_RGB; info->frag_body = g_strdup_printf (info->templ->body, 'r', uv_val, uv_val, 'g', 'a', pixel_order[0], pixel_order[1], pixel_order[2], @@ -1533,9 +1531,7 @@ _YUV_to_RGB (GstGLColorConvert * convert) } case GST_VIDEO_FORMAT_UYVY: { - char y_val = - convert->priv->in_tex_types[0] == - GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a'; + char y_val = convert->priv->in_tex_formats[0] == GST_GL_RG ? 'g' : 'a'; info->templ = &templ_YUY2_UYVY_to_RGB; info->frag_body = g_strdup_printf (info->templ->body, y_val, 'g', 'g', 'r', 'b', pixel_order[0], pixel_order[1], pixel_order[2], @@ -1545,9 +1541,7 @@ _YUV_to_RGB (GstGLColorConvert * convert) } case GST_VIDEO_FORMAT_NV12: { - char val2 = - convert->priv->in_tex_types[1] == - GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a'; + char val2 = convert->priv->in_tex_formats[1] == GST_GL_RG ? 'g' : 'a'; info->templ = &templ_NV12_NV21_to_RGB; info->frag_body = g_strdup_printf (info->templ->body, 'r', val2, pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]); @@ -1557,9 +1551,7 @@ _YUV_to_RGB (GstGLColorConvert * convert) } case GST_VIDEO_FORMAT_NV21: { - char val2 = - convert->priv->in_tex_types[1] == - GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a'; + char val2 = convert->priv->in_tex_formats[1] == GST_GL_RG ? 'g' : 'a'; info->templ = &templ_NV12_NV21_to_RGB; info->frag_body = g_strdup_printf (info->templ->body, val2, 'r', pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]); @@ -1733,9 +1725,7 @@ _GRAY_to_RGB (GstGLColorConvert * convert) break; case GST_VIDEO_FORMAT_GRAY16_LE: { - char val2 = - convert->priv->in_tex_types[0] == - GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a'; + char val2 = convert->priv->in_tex_formats[0] == GST_GL_RG ? 'g' : 'a'; info->templ = &templ_COMPOSE; info->frag_body = g_strdup_printf (info->templ->body, val2, 'r', pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]); @@ -1743,9 +1733,7 @@ _GRAY_to_RGB (GstGLColorConvert * convert) } case GST_VIDEO_FORMAT_GRAY16_BE: { - char val2 = - convert->priv->in_tex_types[0] == - GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a'; + char val2 = convert->priv->in_tex_formats[0] == GST_GL_RG ? 'g' : 'a'; info->templ = &templ_COMPOSE; info->frag_body = g_strdup_printf (info->templ->body, 'r', val2, pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]); @@ -2195,8 +2183,8 @@ _do_convert_one_view (GstGLContext * context, GstGLColorConvert * convert, mem_width = gst_gl_memory_get_texture_width (out_tex); mem_height = gst_gl_memory_get_texture_height (out_tex); - if (out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE - || out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA + if (out_tex->tex_format == GST_GL_LUMINANCE + || out_tex->tex_format == GST_GL_LUMINANCE_ALPHA || out_width != mem_width || out_height != mem_height) { /* Luminance formats are not color renderable */ /* renderering to a framebuffer only renders the intersection of all @@ -2213,8 +2201,7 @@ _do_convert_one_view (GstGLContext * context, GstGLColorConvert * convert, allocator = gst_allocator_find (GST_GL_MEMORY_ALLOCATOR_NAME); base_mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator); params = gst_gl_video_allocation_params_new (context, NULL, &temp_info, - 0, NULL, convert->priv->to_texture_target, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + 0, NULL, convert->priv->to_texture_target, GST_GL_RGBA); convert->priv->out_tex[j] = (GstGLMemory *) gst_gl_base_memory_alloc (base_mem_allocator, @@ -2258,8 +2245,8 @@ out: mem_width = gst_gl_memory_get_texture_width (out_tex); mem_height = gst_gl_memory_get_texture_height (out_tex); - if (out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE - || out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA + if (out_tex->tex_format == GST_GL_LUMINANCE + || out_tex->tex_format == GST_GL_LUMINANCE_ALPHA || out_width != mem_width || out_height != mem_height) { GstMapInfo to_info, from_info; @@ -2276,8 +2263,8 @@ out: continue; } gst_gl_memory_copy_into (convert->priv->out_tex[j], - out_tex->tex_id, convert->priv->to_texture_target, out_tex->tex_type, - mem_width, mem_height); + out_tex->tex_id, convert->priv->to_texture_target, + out_tex->tex_format, mem_width, mem_height); gst_memory_unmap ((GstMemory *) convert->priv->out_tex[j], &from_info); gst_memory_unmap ((GstMemory *) out_tex, &to_info); } else { @@ -2329,7 +2316,7 @@ _do_convert (GstGLContext * context, GstGLColorConvert * convert) _get_n_textures (GST_VIDEO_INFO_FORMAT (&convert->out_info)); { - gboolean tex_type_change = FALSE; + gboolean tex_format_change = FALSE; guint i, v; for (v = 0; v < views; v++) { @@ -2347,21 +2334,21 @@ _do_convert (GstGLContext * context, GstGLColorConvert * convert) /* our arrays aren't that big */ g_assert_not_reached (); - if (v > 0 && in_tex->tex_type != convert->priv->in_tex_types[i]) { + if (v > 0 && in_tex->tex_format != convert->priv->in_tex_formats[i]) { GST_ERROR_OBJECT (convert, "Cannot convert textures with " "different types"); convert->priv->result = FALSE; return; } - if (convert->priv->in_tex_types[j] != in_tex->tex_type) - tex_type_change = TRUE; + if (convert->priv->in_tex_formats[j] != in_tex->tex_format) + tex_format_change = TRUE; - convert->priv->in_tex_types[j] = in_tex->tex_type; + convert->priv->in_tex_formats[j] = in_tex->tex_format; } } - if (tex_type_change) + if (tex_format_change) gst_gl_color_convert_reset_shader (convert); } diff --git a/gst-libs/gst/gl/gstglformat.c b/gst-libs/gst/gl/gstglformat.c index ead990b023..8502122773 100644 --- a/gst-libs/gst/gl/gstglformat.c +++ b/gst-libs/gst/gl/gstglformat.c @@ -117,70 +117,23 @@ gst_gl_format_type_n_bytes (guint format, guint type) } /** - * gst_gl_texture_type_n_bytes: - * @tex_format: a #GstVideoGLTextureType - * - * Returns: the number of bytes @tex_format used per pixel - */ -guint -gst_gl_texture_type_n_bytes (GstVideoGLTextureType tex_format) -{ - guint format, type; - - format = gst_gl_format_from_gl_texture_type (tex_format); - type = GL_UNSIGNED_BYTE; - if (tex_format == GST_VIDEO_GL_TEXTURE_TYPE_RGB16) - type = GL_UNSIGNED_SHORT_5_6_5; - - return gst_gl_format_type_n_bytes (format, type); -} - -/** - * gst_gl_format_from_gl_texture_type: - * @tex_format: a #GstVideoGLTextureType - * - * Returns: the OpenGL format specified by @tex_format - */ -guint -gst_gl_format_from_gl_texture_type (GstVideoGLTextureType tex_format) -{ - switch (tex_format) { - case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA: - return GST_GL_LUMINANCE_ALPHA; - case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE: - return GST_GL_LUMINANCE; - case GST_VIDEO_GL_TEXTURE_TYPE_RGBA: - return GST_GL_RGBA; - case GST_VIDEO_GL_TEXTURE_TYPE_RGB: - case GST_VIDEO_GL_TEXTURE_TYPE_RGB16: - return GST_GL_RGB; - case GST_VIDEO_GL_TEXTURE_TYPE_RG: - return GST_GL_RG; - case GST_VIDEO_GL_TEXTURE_TYPE_R: - return GST_GL_RED; - default: - return tex_format; - } -} - -/** - * gst_gl_texture_type_from_format: + * gst_gl_format_from_video_info: * @context: a #GstGLContext - * @v_format: a #GstVideoFormat - * @plane: the plane number (starting from 0) + * @vinfo: a #GstVideoInfo + * @plane: the plane number in @vinfo * - * Returns: the #GstVideoGLTextureType for the specified @format and @plane - * that can be allocated using @context + * Returns: the #GstGLFormat necessary for holding the data in @plane of @vinfo */ -GstVideoGLTextureType -gst_gl_texture_type_from_format (GstGLContext * context, - GstVideoFormat v_format, guint plane) +GstGLFormat +gst_gl_format_from_video_info (GstGLContext * context, GstVideoInfo * vinfo, + guint plane) { gboolean texture_rg = gst_gl_context_check_feature (context, "GL_EXT_texture_rg") || gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0) || gst_gl_context_check_feature (context, "GL_ARB_texture_rg") || gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 0); + GstVideoFormat v_format = GST_VIDEO_INFO_FORMAT (vinfo); guint n_plane_components; switch (v_format) { @@ -228,18 +181,16 @@ gst_gl_texture_type_from_format (GstGLContext * context, switch (n_plane_components) { case 4: - return GST_VIDEO_GL_TEXTURE_TYPE_RGBA; + return GST_GL_RGBA; break; case 3: - return GST_VIDEO_GL_TEXTURE_TYPE_RGB; + return GST_GL_RGB; break; case 2: - return texture_rg ? GST_VIDEO_GL_TEXTURE_TYPE_RG : - GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA; + return texture_rg ? GST_GL_RG : GST_GL_LUMINANCE_ALPHA; break; case 1: - return texture_rg ? GST_VIDEO_GL_TEXTURE_TYPE_R : - GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE; + return texture_rg ? GST_GL_RED : GST_GL_LUMINANCE; break; default: g_assert_not_reached (); diff --git a/gst-libs/gst/gl/gstglformat.h b/gst-libs/gst/gl/gstglformat.h index f65de53dfd..9be626f0ed 100644 --- a/gst-libs/gst/gl/gstglformat.h +++ b/gst-libs/gst/gl/gstglformat.h @@ -101,12 +101,8 @@ GST_EXPORT guint gst_gl_format_type_n_bytes (guint format, guint type); GST_EXPORT -guint gst_gl_texture_type_n_bytes (GstVideoGLTextureType tex_format); -GST_EXPORT -guint gst_gl_format_from_gl_texture_type (GstVideoGLTextureType tex_format); -GST_EXPORT -GstVideoGLTextureType gst_gl_texture_type_from_format (GstGLContext * context, - GstVideoFormat v_format, +GstGLFormat gst_gl_format_from_video_info (GstGLContext * context, + GstVideoInfo * vinfo, guint plane); GST_EXPORT guint gst_gl_sized_gl_format_from_gl_format_type (GstGLContext * context, diff --git a/gst-libs/gst/gl/gstglmemory.c b/gst-libs/gst/gl/gstglmemory.c index b357b28ef6..25f67d7dc5 100644 --- a/gst-libs/gst/gl/gstglmemory.c +++ b/gst-libs/gst/gl/gstglmemory.c @@ -84,10 +84,10 @@ typedef struct { /* in */ GstGLMemory *src; - GstVideoGLTextureType out_format; + GstGLFormat out_format; guint out_width, out_height; GstGLTextureTarget tex_target; - GstVideoGLTextureType tex_type; + GstGLFormat tex_format; /* inout */ guint tex_id; /* out */ @@ -122,15 +122,20 @@ static inline void _calculate_unpack_length (GstGLMemory * gl_mem, GstGLContext * context) { guint n_gl_bytes; + guint tex_type; gl_mem->tex_scaling[0] = 1.0f; gl_mem->tex_scaling[1] = 1.0f; gl_mem->unpack_length = 1; gl_mem->tex_width = GL_MEM_WIDTH (gl_mem); - n_gl_bytes = gst_gl_texture_type_n_bytes (gl_mem->tex_type); + tex_type = GL_UNSIGNED_BYTE; + if (gl_mem->tex_format == GST_GL_RGB565) + tex_type = GL_UNSIGNED_SHORT_5_6_5; + + n_gl_bytes = gst_gl_format_type_n_bytes (gl_mem->tex_format, tex_type); if (n_gl_bytes == 0) { - GST_ERROR ("Unsupported texture type %d", gl_mem->tex_type); + GST_ERROR ("Unsupported texture type %d", gl_mem->tex_format); return; } @@ -237,9 +242,9 @@ _gl_tex_create (GstGLMemory * gl_mem, GError ** error) GLenum tex_format; GLenum tex_type; - tex_format = gst_gl_format_from_gl_texture_type (gl_mem->tex_type); + tex_format = gl_mem->tex_format; tex_type = GL_UNSIGNED_BYTE; - if (gl_mem->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16) + if (gl_mem->tex_format == GST_GL_RGB565) tex_type = GL_UNSIGNED_SHORT_5_6_5; internal_format = @@ -267,7 +272,7 @@ _gl_tex_create (GstGLMemory * gl_mem, GError ** error) * @parent: (allow-none): the parent #GstMemory to initialize with * @context: the #GstGLContext to initialize with * @target: the #GstGLTextureTarget for this #GstGLMemory - * @tex_type: the #GstVideoGLTextureType for this #GstGLMemory + * @tex_format: the #GstGLFormat for this #GstGLMemory * @params: (allow-none): the @GstAllocationParams to initialize with * @info: the #GstVideoInfo for this #GstGLMemory * @plane: the plane number (starting from 0) for this #GstGLMemory @@ -283,7 +288,7 @@ _gl_tex_create (GstGLMemory * gl_mem, GError ** error) void gst_gl_memory_init (GstGLMemory * mem, GstAllocator * allocator, GstMemory * parent, GstGLContext * context, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, GstAllocationParams * params, + GstGLFormat tex_format, GstAllocationParams * params, GstVideoInfo * info, guint plane, GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify) { @@ -316,7 +321,7 @@ gst_gl_memory_init (GstGLMemory * mem, GstAllocator * allocator, size = gst_gl_get_plane_data_size (info, valign, plane); mem->tex_target = target; - mem->tex_type = tex_type; + mem->tex_format = tex_format; mem->plane = plane; _calculate_unpack_length (mem, context); @@ -328,7 +333,7 @@ gst_gl_memory_init (GstGLMemory * mem, GstAllocator * allocator, GST_CAT_DEBUG (GST_CAT_GL_MEMORY, "new GL texture context:%" GST_PTR_FORMAT " memory:%p target:%s format:%u dimensions:%ux%u " "stride:%u size:%" G_GSIZE_FORMAT, context, mem, target_str, - mem->tex_type, mem->tex_width, GL_MEM_HEIGHT (mem), GL_MEM_STRIDE (mem), + mem->tex_format, mem->tex_width, GL_MEM_HEIGHT (mem), GL_MEM_STRIDE (mem), mem->mem.mem.size); } @@ -355,9 +360,9 @@ gst_gl_memory_read_pixels (GstGLMemory * gl_mem, gpointer read_pointer) guint format, type; guint fbo; - format = gst_gl_format_from_gl_texture_type (gl_mem->tex_type); + format = gl_mem->tex_format; type = GL_UNSIGNED_BYTE; - if (gl_mem->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16) + if (gl_mem->tex_format == GST_GL_RGB565) type = GL_UNSIGNED_SHORT_5_6_5; /* FIXME: avoid creating a framebuffer every download/copy */ @@ -420,8 +425,8 @@ _gl_tex_download_get_tex_image (GstGLMemory * gl_mem, GstMapInfo * info, return NULL; /* taken care of by read pixels */ - if (gl_mem->tex_type != GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE - && gl_mem->tex_type != GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA) + if (gl_mem->tex_format != GST_GL_LUMINANCE + && gl_mem->tex_format != GST_GL_LUMINANCE_ALPHA) return NULL; if (info->flags & GST_MAP_READ @@ -433,9 +438,9 @@ _gl_tex_download_get_tex_image (GstGLMemory * gl_mem, GstMapInfo * info, GST_CAT_TRACE (GST_CAT_GL_MEMORY, "attempting download of texture %u " "using glGetTexImage", gl_mem->tex_id); - format = gst_gl_format_from_gl_texture_type (gl_mem->tex_type); + format = gl_mem->tex_format; type = GL_UNSIGNED_BYTE; - if (gl_mem->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16) + if (gl_mem->tex_format == GST_GL_RGB565) type = GL_UNSIGNED_SHORT_5_6_5; target = gst_gl_texture_target_to_gl (gl_mem->tex_target); @@ -517,10 +522,10 @@ gst_gl_memory_texsubimage (GstGLMemory * gl_mem, gpointer read_pointer) gl = context->gl_vtable; gl_type = GL_UNSIGNED_BYTE; - if (gl_mem->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16) + if (gl_mem->tex_format == GST_GL_RGB565) gl_type = GL_UNSIGNED_SHORT_5_6_5; - gl_format = gst_gl_format_from_gl_texture_type (gl_mem->tex_type); + gl_format = gl_mem->tex_format; gl_target = gst_gl_texture_target_to_gl (gl_mem->tex_target); if (USING_OPENGL (context) || USING_GLES3 (context) @@ -614,12 +619,12 @@ _gl_tex_unmap (GstGLMemory * gl_mem, GstMapInfo * info) * @gl_mem: the source #GstGLMemory * @tex_id: the destination texture id * @out_target: the destination #GstGLTextureTarget - * @out_tex_type: the destination #GstVideoGLTextureType + * @out_tex_format: the destination #GstGLFormat * @out_width: the destination width * @out_height: the destination height * * Copies the texture in #GstGLMemory into the texture specified by @tex_id, - * @out_target, @out_tex_type, @out_width and @out_height. + * @out_target, @out_tex_format, @out_width and @out_height. * * Returns: whether the copy succeeded. * @@ -627,11 +632,11 @@ _gl_tex_unmap (GstGLMemory * gl_mem, GstMapInfo * info) */ gboolean gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id, - GstGLTextureTarget out_target, GstVideoGLTextureType out_tex_type, + GstGLTextureTarget out_target, GstGLFormat out_tex_format, gint out_width, gint out_height) { const GstGLFuncs *gl; - guint out_gl_format, out_tex_target; + guint out_tex_target; GstMapInfo sinfo; guint src_tex_id; guint fbo[2]; @@ -639,7 +644,6 @@ gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id, gl = src->mem.context->gl_vtable; out_tex_target = gst_gl_texture_target_to_gl (out_target); - out_gl_format = gst_gl_format_from_gl_texture_type (out_tex_type); if (!gl->GenFramebuffers) { GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Framebuffer objects not supported"); @@ -647,8 +651,8 @@ gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id, } if (USING_GLES2 (src->mem.context) - && (src->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE - || src->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA)) { + && (src->tex_format == GST_GL_LUMINANCE + || src->tex_format == GST_GL_LUMINANCE_ALPHA)) { GST_CAT_FIXME (GST_CAT_GL_MEMORY, "Cannot copy Luminance/Luminance Alpha textures in GLES"); goto error; @@ -682,7 +686,7 @@ gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id, gl->BindTexture (out_tex_target, tex_id); gst_gl_query_start_log (GST_GL_BASE_MEMORY_CAST (src)->query, GST_CAT_GL_MEMORY, GST_LEVEL_LOG, NULL, "%s", "CopyTexImage2D took"); - gl->CopyTexImage2D (out_tex_target, 0, out_gl_format, 0, 0, out_width, + gl->CopyTexImage2D (out_tex_target, 0, out_tex_format, 0, 0, out_width, out_height, 0); gst_gl_query_end (GST_GL_BASE_MEMORY_CAST (src)->query); @@ -759,10 +763,9 @@ _gl_tex_copy_thread (GstGLContext * context, gpointer data) guint internal_format, out_gl_format, out_gl_type, out_tex_target; out_tex_target = gst_gl_texture_target_to_gl (copy_params->tex_target); - out_gl_format = - gst_gl_format_from_gl_texture_type (copy_params->src->tex_type); + out_gl_format = copy_params->src->tex_format; out_gl_type = GL_UNSIGNED_BYTE; - if (copy_params->out_format == GST_VIDEO_GL_TEXTURE_TYPE_RGB16) + if (copy_params->out_format == GST_GL_RGB565) out_gl_type = GL_UNSIGNED_SHORT_5_6_5; internal_format = @@ -776,7 +779,7 @@ _gl_tex_copy_thread (GstGLContext * context, gpointer data) } copy_params->result = gst_gl_memory_copy_teximage (copy_params->src, - copy_params->tex_id, copy_params->tex_target, copy_params->tex_type, + copy_params->tex_id, copy_params->tex_target, copy_params->tex_format, copy_params->out_width, copy_params->out_height); } @@ -806,7 +809,8 @@ _default_gl_tex_copy (GstGLMemory * src, gssize offset, gssize size) dest = g_new0 (GstGLMemory, 1); gst_gl_memory_init (dest, allocator, NULL, src->mem.context, src->tex_target, - src->tex_type, ¶ms, &src->info, src->plane, &src->valign, NULL, NULL); + src->tex_format, ¶ms, &src->info, src->plane, &src->valign, NULL, + NULL); if (!GST_MEMORY_FLAG_IS_SET (src, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD)) { GstMapInfo dinfo; @@ -821,7 +825,7 @@ _default_gl_tex_copy (GstGLMemory * src, gssize offset, gssize size) if (!gst_gl_memory_copy_into ((GstGLMemory *) src, ((GstGLMemory *) dest)->tex_id, src->tex_target, - src->tex_type, src->tex_width, GL_MEM_HEIGHT (src))) { + src->tex_format, src->tex_width, GL_MEM_HEIGHT (src))) { GST_CAT_WARNING (GST_CAT_GL_MEMORY, "Could not copy GL Memory"); gst_memory_unmap (GST_MEMORY_CAST (dest), &dinfo); goto memcpy; @@ -894,7 +898,7 @@ _default_gl_tex_alloc (GstGLMemoryAllocator * allocator, } gst_gl_memory_init (mem, GST_ALLOCATOR_CAST (allocator), NULL, - params->parent.context, params->target, params->tex_type, + params->parent.context, params->target, params->tex_format, params->parent.alloc_params, params->v_info, params->plane, params->valign, params->parent.user_data, params->parent.notify); @@ -948,12 +952,12 @@ gst_gl_memory_allocator_init (GstGLMemoryAllocator * allocator) * @gl_mem:a #GstGLMemory * @tex_id:OpenGL texture id * @target: the #GstGLTextureTarget - * @tex_type: the #GstVideoGLTextureType + * @tex_format: the #GstGLFormat * @width: width of @tex_id * @height: height of @tex_id * * Copies @gl_mem into the texture specfified by @tex_id. The format of @tex_id - * is specified by @tex_type, @width and @height. + * is specified by @tex_format, @width and @height. * * Returns: Whether the copy suceeded * @@ -961,15 +965,14 @@ gst_gl_memory_allocator_init (GstGLMemoryAllocator * allocator) */ gboolean gst_gl_memory_copy_into (GstGLMemory * gl_mem, guint tex_id, - GstGLTextureTarget target, GstVideoGLTextureType tex_type, gint width, - gint height) + GstGLTextureTarget target, GstGLFormat tex_format, gint width, gint height) { GstGLMemoryCopyParams copy_params; copy_params.src = gl_mem; copy_params.tex_id = tex_id; copy_params.tex_target = target; - copy_params.tex_type = tex_type; + copy_params.tex_format = tex_format; copy_params.out_width = width; copy_params.out_height = height; @@ -1012,19 +1015,19 @@ gst_gl_memory_get_texture_height (GstGLMemory * gl_mem) } /** - * gst_gl_memory_get_texture_type: + * gst_gl_memory_get_texture_format: * @gl_mem: a #GstGLMemory * - * Returns: the #GstVideoGLTextureType of @gl_mem + * Returns: the #GstGLFormat of @gl_mem * - * Since: 1.8 + * Since: 1.12 */ -GstVideoGLTextureType -gst_gl_memory_get_texture_type (GstGLMemory * gl_mem) +GstGLFormat +gst_gl_memory_get_texture_format (GstGLMemory * gl_mem) { g_return_val_if_fail (gst_is_gl_memory ((GstMemory *) gl_mem), 0); - return gl_mem->tex_type; + return gl_mem->tex_format; } /** @@ -1135,7 +1138,7 @@ _gst_gl_video_allocation_params_set_video_alignment (GstGLVideoAllocationParams * @plane: the video plane @wrapped_data represents * @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @wrapped_data * @target: the #GstGLTextureTarget - * @tex_type: the #GstVideoGLTextureType + * @tex_format: the #GstGLFormat * @wrapped_data: (allow-none): the optional data pointer to wrap * @gl_handle: the optional OpenGL handle to wrap or 0 * @user_data: (allow-none): user data to call @notify with @@ -1153,7 +1156,7 @@ gst_gl_video_allocation_params_init_full (GstGLVideoAllocationParams * params, GstGLAllocationParamsFreeFunc free, GstGLContext * context, GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane, GstVideoAlignment * valign, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, gpointer wrapped_data, gpointer gl_handle, + GstGLFormat tex_format, gpointer wrapped_data, gpointer gl_handle, gpointer user_data, GDestroyNotify notify) { guint i; @@ -1179,7 +1182,7 @@ gst_gl_video_allocation_params_init_full (GstGLVideoAllocationParams * params, } _gst_gl_video_allocation_params_set_video_alignment (params, valign); params->target = target; - params->tex_type = tex_type; + params->tex_format = tex_format; params->plane = plane; return TRUE; @@ -1193,7 +1196,7 @@ gst_gl_video_allocation_params_init_full (GstGLVideoAllocationParams * params, * @plane: the video plane of @v_info to allocate * @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of the texture * @target: the #GstGLTextureTarget for the created textures - * @tex_type: the #GstVideoGLTextureType for the created textures + * @tex_format: the #GstGLFormat for the created textures * * Returns: a new #GstGLVideoAllocationParams for allocating #GstGLMemory's * @@ -1203,7 +1206,7 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new (GstGLContext * context, GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane, GstVideoAlignment * valign, GstGLTextureTarget target, - GstVideoGLTextureType tex_type) + GstGLFormat tex_format) { GstGLVideoAllocationParams *params = g_new0 (GstGLVideoAllocationParams, 1); @@ -1215,7 +1218,7 @@ gst_gl_video_allocation_params_new (GstGLContext * context, gst_gl_video_allocation_params_copy_data, (GstGLAllocationParamsFreeFunc) gst_gl_video_allocation_params_free_data, context, alloc_params, - v_info, plane, valign, target, tex_type, NULL, 0, NULL, NULL)) { + v_info, plane, valign, target, tex_format, NULL, 0, NULL, NULL)) { g_free (params); return NULL; } @@ -1231,7 +1234,7 @@ gst_gl_video_allocation_params_new (GstGLContext * context, * @plane: the video plane @wrapped_data represents * @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @wrapped_data * @target: the #GstGLTextureTarget for @wrapped_data - * @tex_type: the #GstVideoGLTextureType for @wrapped_data + * @tex_format: the #GstGLFormat for @wrapped_data * @wrapped_data: the data pointer to wrap * @user_data: (allow-none): user data to call @notify with * @notify: (allow-none): a #GDestroyNotify @@ -1244,7 +1247,7 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_data (GstGLContext * context, GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane, GstVideoAlignment * valign, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, gpointer wrapped_data, gpointer user_data, + GstGLFormat tex_format, gpointer wrapped_data, gpointer user_data, GDestroyNotify notify) { GstGLVideoAllocationParams *params = g_new0 (GstGLVideoAllocationParams, 1); @@ -1257,7 +1260,7 @@ gst_gl_video_allocation_params_new_wrapped_data (GstGLContext * context, gst_gl_video_allocation_params_copy_data, (GstGLAllocationParamsFreeFunc) gst_gl_video_allocation_params_free_data, context, alloc_params, - v_info, plane, valign, target, tex_type, wrapped_data, 0, user_data, + v_info, plane, valign, target, tex_format, wrapped_data, 0, user_data, notify)) { g_free (params); return NULL; @@ -1274,7 +1277,7 @@ gst_gl_video_allocation_params_new_wrapped_data (GstGLContext * context, * @plane: the video plane @tex_id represents * @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @tex_id * @target: the #GstGLTextureTarget for @tex_id - * @tex_type: the #GstVideoGLTextureType for @tex_id + * @tex_format: the #GstGLFormat for @tex_id * @gl_handle: the GL handle to wrap * @user_data: (allow-none): user data to call @notify with * @notify: (allow-none): a #GDestroyNotify @@ -1291,7 +1294,7 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_gl_handle (GstGLContext * context, GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane, GstVideoAlignment * valign, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, gpointer gl_handle, gpointer user_data, + GstGLFormat tex_format, gpointer gl_handle, gpointer user_data, GDestroyNotify notify) { GstGLVideoAllocationParams *params = g_new0 (GstGLVideoAllocationParams, 1); @@ -1304,7 +1307,7 @@ gst_gl_video_allocation_params_new_wrapped_gl_handle (GstGLContext * context, gst_gl_video_allocation_params_copy_data, (GstGLAllocationParamsFreeFunc) gst_gl_video_allocation_params_free_data, context, alloc_params, - v_info, plane, valign, target, tex_type, NULL, gl_handle, user_data, + v_info, plane, valign, target, tex_format, NULL, gl_handle, user_data, notify)) { g_free (params); return NULL; @@ -1321,7 +1324,7 @@ gst_gl_video_allocation_params_new_wrapped_gl_handle (GstGLContext * context, * @plane: the video plane @tex_id represents * @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @tex_id * @target: the #GstGLTextureTarget for @tex_id - * @tex_type: the #GstVideoGLTextureType for @tex_id + * @tex_format: the #GstGLFormat for @tex_id * @tex_id: the GL texture to wrap * @user_data: (allow-none): user data to call @notify with * @notify: (allow-none): a #GDestroyNotify @@ -1334,11 +1337,11 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_texture (GstGLContext * context, GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane, GstVideoAlignment * valign, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, guint tex_id, gpointer user_data, + GstGLFormat tex_format, guint tex_id, gpointer user_data, GDestroyNotify notify) { return gst_gl_video_allocation_params_new_wrapped_gl_handle (context, - alloc_params, v_info, plane, valign, target, tex_type, + alloc_params, v_info, plane, valign, target, tex_format, GUINT_TO_POINTER (tex_id), user_data, notify); } @@ -1389,7 +1392,7 @@ gst_gl_video_allocation_params_copy_data (GstGLVideoAllocationParams * src_vid, _gst_gl_video_allocation_params_set_video_alignment (dest_vid, src_vid->valign); dest_vid->target = src_vid->target; - dest_vid->tex_type = src_vid->tex_type; + dest_vid->tex_format = src_vid->tex_format; dest_vid->plane = src_vid->plane; } @@ -1398,9 +1401,9 @@ gst_gl_video_allocation_params_copy_data (GstGLVideoAllocationParams * src_vid, * @allocator: the @GstGLMemoryAllocator to allocate from * @buffer: a #GstBuffer to setup * @params: the #GstGLVideoAllocationParams to allocate with - * @tex_types: (allow-none): a list of #GstVideoGLTextureType's to allocate with. + * @tex_formats: (allow-none): a list of #GstGLFormat's to allocate with. * @wrapped_data: a list of wrapped data pointers - * @n_wrapped_pointers: the number of elements in @tex_types and @wrapped_data + * @n_wrapped_pointers: the number of elements in @tex_formats and @wrapped_data * * Returns: whether the buffer was correctly setup * @@ -1409,7 +1412,7 @@ gst_gl_video_allocation_params_copy_data (GstGLVideoAllocationParams * src_vid, gboolean gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator, GstBuffer * buffer, GstGLVideoAllocationParams * params, - GstVideoGLTextureType * tex_types, gpointer * wrapped_data, + GstGLFormat * tex_formats, gpointer * wrapped_data, gsize n_wrapped_pointers) { GstGLBaseMemoryAllocator *base_allocator; @@ -1436,12 +1439,12 @@ gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator, for (i = 0; i < n_mem; i++) { GstGLMemory *gl_mem; - if (tex_types) { - params->tex_type = tex_types[i]; + if (tex_formats) { + params->tex_format = tex_formats[i]; } else { - params->tex_type = - gst_gl_texture_type_from_format (params->parent.context, - GST_VIDEO_INFO_FORMAT (params->v_info), i); + params->tex_format = + gst_gl_format_from_video_info (params->parent.context, + params->v_info, i); } params->plane = i; diff --git a/gst-libs/gst/gl/gstglmemory.h b/gst-libs/gst/gl/gstglmemory.h index 9a55b9df56..c7de5c78c9 100644 --- a/gst-libs/gst/gl/gstglmemory.h +++ b/gst-libs/gst/gl/gstglmemory.h @@ -68,7 +68,7 @@ struct _GstGLMemory guint tex_id; GstGLTextureTarget tex_target; - GstVideoGLTextureType tex_type; + GstGLFormat tex_format; GstVideoInfo info; GstVideoAlignment valign; guint plane; @@ -99,7 +99,7 @@ typedef struct _GstGLVideoAllocationParams GstGLVideoAllocationParams; * @plane: the video plane index to allocate * @valign: the #GstVideoAlignment to align the system representation to (may be %NULL for the default) * @target: the #GstGLTextureTarget to allocate - * @tex_type: the #GstVideoGLTextureType to allocate + * @tex_fomrat: the #GstGLFormat to allocate */ struct _GstGLVideoAllocationParams { @@ -109,7 +109,7 @@ struct _GstGLVideoAllocationParams guint plane; GstVideoAlignment *valign; GstGLTextureTarget target; - GstVideoGLTextureType tex_type; + GstGLFormat tex_format; /* */ gpointer _padding[GST_PADDING]; @@ -127,7 +127,7 @@ gboolean gst_gl_video_allocation_params_init_full (GstGLVideoAlloc guint plane, GstVideoAlignment * valign, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, gpointer wrapped_data, gpointer gl_handle, gpointer user_data, @@ -139,7 +139,7 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new (GstGLContext * guint plane, GstVideoAlignment * valign, GstGLTextureTarget target, - GstVideoGLTextureType tex_type); + GstGLFormat tex_format); GST_EXPORT GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_data (GstGLContext * context, GstAllocationParams * alloc_params, @@ -147,7 +147,7 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_data guint plane, GstVideoAlignment * valign, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, gpointer wrapped_data, gpointer user_data, GDestroyNotify notify); @@ -159,7 +159,7 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_texture guint plane, GstVideoAlignment * valign, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, guint tex_id, gpointer user_data, GDestroyNotify notify); @@ -171,7 +171,7 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_gl_handl guint plane, GstVideoAlignment * valign, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, gpointer gl_handle, gpointer user_data, GDestroyNotify notify); @@ -237,7 +237,7 @@ void gst_gl_memory_init (GstGLMemory * mem, GstMemory * parent, GstGLContext * context, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, GstAllocationParams *params, GstVideoInfo * info, guint plane, @@ -249,14 +249,14 @@ GST_EXPORT gboolean gst_gl_memory_copy_into (GstGLMemory *gl_mem, guint tex_id, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, gint width, gint height); GST_EXPORT gboolean gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id, GstGLTextureTarget out_target, - GstVideoGLTextureType out_tex_type, + GstGLFormat out_tex_format, gint width, gint height); @@ -273,7 +273,7 @@ gint gst_gl_memory_get_texture_width (GstGLMemory * gl_me GST_EXPORT gint gst_gl_memory_get_texture_height (GstGLMemory * gl_mem); GST_EXPORT -GstVideoGLTextureType gst_gl_memory_get_texture_type (GstGLMemory * gl_mem); +GstGLFormat gst_gl_memory_get_texture_format (GstGLMemory * gl_mem); GST_EXPORT GstGLTextureTarget gst_gl_memory_get_texture_target (GstGLMemory * gl_mem); GST_EXPORT @@ -283,7 +283,7 @@ GST_EXPORT gboolean gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator, GstBuffer * buffer, GstGLVideoAllocationParams * params, - GstVideoGLTextureType *tex_types, + GstGLFormat *tex_formats, gpointer *wrapped_data, gsize n_wrapped_pointers); diff --git a/gst-libs/gst/gl/gstglmemorypbo.c b/gst-libs/gst/gl/gstglmemorypbo.c index 632f483fd6..7ccef27729 100644 --- a/gst-libs/gst/gl/gstglmemorypbo.c +++ b/gst-libs/gst/gl/gstglmemorypbo.c @@ -104,7 +104,7 @@ typedef struct { /* in */ GstGLMemoryPBO *src; - GstVideoGLTextureType out_format; + GstGLFormat out_format; guint out_width, out_height; guint out_stride; gboolean respecify; @@ -218,8 +218,8 @@ static gboolean _read_pixels_to_pbo (GstGLMemoryPBO * gl_mem) { if (!gl_mem->pbo || !CONTEXT_SUPPORTS_PBO_DOWNLOAD (gl_mem->mem.mem.context) - || gl_mem->mem.tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE - || gl_mem->mem.tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA) + || gl_mem->mem.tex_format == GST_GL_LUMINANCE + || gl_mem->mem.tex_format == GST_GL_LUMINANCE_ALPHA) /* unsupported */ return FALSE; @@ -416,13 +416,13 @@ _gl_mem_copy_thread (GstGLContext * context, gpointer data) out_stride = copy_params->out_stride; gl = context->gl_vtable; - out_gl_format = gst_gl_format_from_gl_texture_type (copy_params->out_format); + out_gl_format = copy_params->out_format; out_gl_type = GL_UNSIGNED_BYTE; - if (copy_params->out_format == GST_VIDEO_GL_TEXTURE_TYPE_RGB16) + if (copy_params->out_format == GST_GL_RGB565) out_gl_type = GL_UNSIGNED_SHORT_5_6_5; - in_gl_format = gst_gl_format_from_gl_texture_type (src->mem.tex_type); + in_gl_format = src->mem.tex_format; in_gl_type = GL_UNSIGNED_BYTE; - if (src->mem.tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16) + if (src->mem.tex_format == GST_GL_RGB565) in_gl_type = GL_UNSIGNED_SHORT_5_6_5; if (!gl->GenFramebuffers) { @@ -448,7 +448,7 @@ _gl_mem_copy_thread (GstGLContext * context, gpointer data) guint out_gl_type; out_gl_type = GL_UNSIGNED_BYTE; - if (copy_params->out_format == GST_VIDEO_GL_TEXTURE_TYPE_RGB16) + if (copy_params->out_format == GST_GL_RGB565) out_gl_type = GL_UNSIGNED_SHORT_5_6_5; internal_format = @@ -572,7 +572,7 @@ _gl_mem_copy (GstGLMemoryPBO * src, gssize offset, gssize size) dest = (GstMemory *) g_new0 (GstGLMemoryPBO, 1); gst_gl_memory_init (GST_GL_MEMORY_CAST (dest), allocator, NULL, - src->mem.mem.context, src->mem.tex_target, src->mem.tex_type, ¶ms, + src->mem.mem.context, src->mem.tex_target, src->mem.tex_format, ¶ms, &src->mem.info, src->mem.plane, &src->mem.valign, NULL, NULL); if (!GST_MEMORY_FLAG_IS_SET (src, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD)) { @@ -588,7 +588,7 @@ _gl_mem_copy (GstGLMemoryPBO * src, gssize offset, gssize size) if (!gst_gl_memory_copy_into ((GstGLMemory *) src, ((GstGLMemory *) dest)->tex_id, src->mem.tex_target, - src->mem.tex_type, src->mem.tex_width, GL_MEM_HEIGHT (src))) { + src->mem.tex_format, src->mem.tex_width, GL_MEM_HEIGHT (src))) { GST_CAT_WARNING (GST_CAT_GL_MEMORY, "Could not copy GL Memory"); gst_memory_unmap (GST_MEMORY_CAST (dest), &dinfo); goto memcpy; @@ -649,7 +649,7 @@ _gl_mem_pbo_alloc (GstGLBaseMemoryAllocator * allocator, } gst_gl_memory_init (GST_GL_MEMORY_CAST (mem), GST_ALLOCATOR_CAST (allocator), - NULL, params->parent.context, params->target, params->tex_type, + NULL, params->parent.context, params->target, params->tex_format, params->parent.alloc_params, params->v_info, params->plane, params->valign, params->parent.user_data, params->parent.notify); @@ -705,14 +705,14 @@ gst_gl_memory_pbo_allocator_init (GstGLMemoryPBOAllocator * allocator) * @gl_mem:a #GstGLMemoryPBO * @tex_id: the destination texture id * @target: the destination #GstGLTextureTarget - * @tex_type: the destination #GstVideoGLTextureType + * @tex_format: the destination #GstGLFormat * @width: width of @tex_id * @height: height of @tex_id * @stride: stride of the backing texture data * @respecify: whether to copy the data or copy per texel * * Copies @gl_mem into the texture specfified by @tex_id. The format of @tex_id - * is specified by @tex_type, @width and @height. + * is specified by @tex_format, @width and @height. * * If @respecify is %TRUE, then the copy is performed in terms of the texture * data. This is useful for splitting RGBA textures into RG or R textures or @@ -731,7 +731,7 @@ gst_gl_memory_pbo_allocator_init (GstGLMemoryPBOAllocator * allocator) */ gboolean gst_gl_memory_pbo_copy_into_texture (GstGLMemoryPBO * gl_mem, guint tex_id, - GstGLTextureTarget target, GstVideoGLTextureType tex_type, gint width, + GstGLTextureTarget target, GstGLFormat tex_format, gint width, gint height, gint stride, gboolean respecify) { GstGLMemoryPBOCopyParams copy_params; @@ -739,7 +739,7 @@ gst_gl_memory_pbo_copy_into_texture (GstGLMemoryPBO * gl_mem, guint tex_id, copy_params.src = gl_mem; copy_params.tex_target = target; copy_params.tex_id = tex_id; - copy_params.out_format = tex_type; + copy_params.out_format = tex_format; copy_params.out_width = width; copy_params.out_height = height; copy_params.out_stride = stride; diff --git a/gst-libs/gst/gl/gstglmemorypbo.h b/gst-libs/gst/gl/gstglmemorypbo.h index 7a76119c55..f8d9ed0e7a 100644 --- a/gst-libs/gst/gl/gstglmemorypbo.h +++ b/gst-libs/gst/gl/gstglmemorypbo.h @@ -78,7 +78,7 @@ GST_EXPORT gboolean gst_gl_memory_pbo_copy_into_texture (GstGLMemoryPBO *gl_mem, guint tex_id, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, gint width, gint height, gint stride, diff --git a/gst-libs/gst/gl/gstgloverlaycompositor.c b/gst-libs/gst/gl/gstgloverlaycompositor.c index 46bc7ff235..354c1efa58 100644 --- a/gst-libs/gst/gl/gstgloverlaycompositor.c +++ b/gst-libs/gst/gl/gstgloverlaycompositor.c @@ -362,7 +362,7 @@ gst_gl_composition_overlay_upload (GstGLCompositionOverlay * overlay, params = gst_gl_video_allocation_params_new_wrapped_data (overlay->context, NULL, &comp_frame->info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA, comp_frame->data[0], comp_frame, + GST_GL_RGBA, comp_frame->data[0], comp_frame, _video_frame_unmap_and_free); comp_gl_memory = diff --git a/gst-libs/gst/gl/gstglrenderbuffer.c b/gst-libs/gst/gl/gstglrenderbuffer.c index aca17c050a..154ec00496 100644 --- a/gst-libs/gst/gl/gstglrenderbuffer.c +++ b/gst-libs/gst/gl/gstglrenderbuffer.c @@ -83,9 +83,9 @@ _gl_rbo_create (GstGLRenderbuffer * gl_mem, GError ** error) GLenum tex_format; GLenum renderbuffer_type; - tex_format = gst_gl_format_from_gl_texture_type (gl_mem->renderbuffer_type); + tex_format = gl_mem->renderbuffer_format; renderbuffer_type = GL_UNSIGNED_BYTE; - if (gl_mem->renderbuffer_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16) + if (gl_mem->renderbuffer_format == GST_GL_RGB565) renderbuffer_type = GL_UNSIGNED_SHORT_5_6_5; internal_format = @@ -109,12 +109,20 @@ _gl_rbo_create (GstGLRenderbuffer * gl_mem, GError ** error) static void gst_gl_renderbuffer_init (GstGLRenderbuffer * mem, GstAllocator * allocator, GstMemory * parent, GstGLContext * context, - GstVideoGLTextureType renderbuffer_type, GstAllocationParams * params, + GstGLFormat renderbuffer_format, GstAllocationParams * params, guint width, guint height, gpointer user_data, GDestroyNotify notify) { - gsize size = gst_gl_texture_type_n_bytes (renderbuffer_type) * width * height; + gsize size; + guint tex_type; - mem->renderbuffer_type = renderbuffer_type; + tex_type = GL_UNSIGNED_BYTE; + if (renderbuffer_format == GST_GL_RGB565) + tex_type = GL_UNSIGNED_SHORT_5_6_5; + size = + gst_gl_format_type_n_bytes (renderbuffer_format, + tex_type) * width * height; + + mem->renderbuffer_format = renderbuffer_format; mem->width = width; mem->height = height; @@ -123,7 +131,7 @@ gst_gl_renderbuffer_init (GstGLRenderbuffer * mem, GstAllocator * allocator, GST_CAT_DEBUG (GST_CAT_GL_RENDERBUFFER, "new GL renderbuffer context:%" GST_PTR_FORMAT " memory:%p format:%u dimensions:%ux%u ", context, mem, - mem->renderbuffer_type, gst_gl_renderbuffer_get_width (mem), + mem->renderbuffer_format, gst_gl_renderbuffer_get_width (mem), gst_gl_renderbuffer_get_height (mem)); } @@ -184,7 +192,7 @@ _default_gl_rbo_alloc (GstGLRenderbufferAllocator * allocator, } gst_gl_renderbuffer_init (mem, GST_ALLOCATOR_CAST (allocator), NULL, - params->parent.context, params->renderbuffer_type, + params->parent.context, params->renderbuffer_format, params->parent.alloc_params, params->width, params->height, params->parent.user_data, params->parent.notify); @@ -256,19 +264,19 @@ gst_gl_renderbuffer_get_height (GstGLRenderbuffer * gl_mem) } /** - * gst_gl_renderbuffer_get_type: + * gst_gl_renderbuffer_get_format: * @gl_mem: a #GstGLRenderbuffer * - * Returns: the #GstVideoGLTextureType of @gl_mem + * Returns: the #GstGLFormat of @gl_mem * - * Since: 1.10 + * Since: 1.12 */ -GstVideoGLTextureType -gst_gl_renderbuffer_get_type (GstGLRenderbuffer * gl_mem) +GstGLFormat +gst_gl_renderbuffer_get_format (GstGLRenderbuffer * gl_mem) { g_return_val_if_fail (gst_is_gl_renderbuffer ((GstMemory *) gl_mem), 0); - return gl_mem->renderbuffer_type; + return gl_mem->renderbuffer_format; } /** @@ -354,7 +362,7 @@ _gst_gl_rb_alloc_params_copy_data (GstGLRenderbufferAllocationParams * src_vid, gst_gl_allocation_params_copy_data (src, dest); - dest_vid->renderbuffer_type = src_vid->renderbuffer_type; + dest_vid->renderbuffer_format = src_vid->renderbuffer_format; dest_vid->width = src_vid->width; dest_vid->height = src_vid->height; } @@ -365,7 +373,7 @@ static gboolean guint alloc_flags, GstGLAllocationParamsCopyFunc copy, GstGLAllocationParamsFreeFunc free, GstGLContext * context, GstAllocationParams * alloc_params, guint width, guint height, - GstVideoGLTextureType renderbuffer_type, gpointer wrapped_data, + GstGLFormat renderbuffer_format, gpointer wrapped_data, gpointer gl_handle, gpointer user_data, GDestroyNotify notify) { g_return_val_if_fail (params != NULL, FALSE); @@ -380,7 +388,7 @@ static gboolean wrapped_data, gl_handle, user_data, notify)) return FALSE; - params->renderbuffer_type = renderbuffer_type; + params->renderbuffer_format = renderbuffer_format; params->width = width; params->height = height; @@ -393,7 +401,7 @@ static gboolean * @alloc_params: (allow-none): the #GstAllocationParams for sysmem mappings of the texture * @width: the width of the renderbuffer * @height: the height of the renderbuffer - * @renderbuffer_type: the #GstVideoGLTextureType for the created textures + * @renderbuffer_format: the #GstGLFormat for the created textures * * Returns: a new #GstGLRenderbufferAllocationParams for allocating #GstGLRenderbuffer's * @@ -401,7 +409,7 @@ static gboolean */ GstGLRenderbufferAllocationParams * gst_gl_renderbuffer_allocation_params_new (GstGLContext * context, - GstAllocationParams * alloc_params, GstVideoGLTextureType renderbuffer_type, + GstAllocationParams * alloc_params, GstGLFormat renderbuffer_format, guint width, guint height) { GstGLRenderbufferAllocationParams *params = @@ -413,7 +421,7 @@ gst_gl_renderbuffer_allocation_params_new (GstGLContext * context, GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO, (GstGLAllocationParamsCopyFunc) _gst_gl_rb_alloc_params_copy_data, (GstGLAllocationParamsFreeFunc) _gst_gl_rb_alloc_params_free_data, - context, alloc_params, width, height, renderbuffer_type, NULL, 0, + context, alloc_params, width, height, renderbuffer_format, NULL, 0, NULL, NULL)) { g_free (params); return NULL; @@ -428,7 +436,7 @@ gst_gl_renderbuffer_allocation_params_new (GstGLContext * context, * @alloc_params: (allow-none): the #GstAllocationParams for @tex_id * @width: the width of the renderbuffer * @height: the height of the renderbuffer - * @renderbuffer_type: the #GstVideoGLTextureType for @tex_id + * @renderbuffer_format: the #GstGLFormat for @tex_id * @gl_handle: the GL handle to wrap * @user_data: (allow-none): user data to call @notify with * @notify: (allow-none): a #GDestroyNotify @@ -440,7 +448,7 @@ gst_gl_renderbuffer_allocation_params_new (GstGLContext * context, */ GstGLRenderbufferAllocationParams * gst_gl_renderbuffer_allocation_params_new_wrapped (GstGLContext * context, - GstAllocationParams * alloc_params, GstVideoGLTextureType renderbuffer_type, + GstAllocationParams * alloc_params, GstGLFormat renderbuffer_format, guint width, guint height, gpointer gl_handle, gpointer user_data, GDestroyNotify notify) { @@ -453,7 +461,7 @@ gst_gl_renderbuffer_allocation_params_new_wrapped (GstGLContext * context, GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO, (GstGLAllocationParamsCopyFunc) _gst_gl_rb_alloc_params_copy_data, (GstGLAllocationParamsFreeFunc) _gst_gl_rb_alloc_params_free_data, - context, alloc_params, width, height, renderbuffer_type, NULL, + context, alloc_params, width, height, renderbuffer_format, NULL, gl_handle, user_data, notify)) { g_free (params); return NULL; diff --git a/gst-libs/gst/gl/gstglrenderbuffer.h b/gst-libs/gst/gl/gstglrenderbuffer.h index b624120cab..2f15a2e556 100644 --- a/gst-libs/gst/gl/gstglrenderbuffer.h +++ b/gst-libs/gst/gl/gstglrenderbuffer.h @@ -63,7 +63,7 @@ struct _GstGLRenderbuffer GstGLBaseMemory mem; guint renderbuffer_id; - GstVideoGLTextureType renderbuffer_type; + GstGLFormat renderbuffer_format; guint width; guint height; @@ -109,7 +109,7 @@ typedef struct { GstGLAllocationParams parent; - GstVideoGLTextureType renderbuffer_type; + GstGLFormat renderbuffer_format; guint width; guint height; @@ -119,13 +119,13 @@ typedef struct GstGLRenderbufferAllocationParams * gst_gl_renderbuffer_allocation_params_new (GstGLContext * context, GstAllocationParams * alloc_params, - GstVideoGLTextureType renderbuffer_type, + GstGLFormat renderbuffer_format, guint width, guint height); GstGLRenderbufferAllocationParams * gst_gl_renderbuffer_allocation_params_new_wrapped (GstGLContext * context, GstAllocationParams * alloc_params, - GstVideoGLTextureType renderbuffer_type, + GstGLFormat renderbuffer_format, guint width, guint height, gpointer gl_handle, @@ -138,7 +138,7 @@ gboolean gst_is_gl_renderbuffer (GstMemory * mem); /* accessors */ gint gst_gl_renderbuffer_get_width (GstGLRenderbuffer * gl_mem); gint gst_gl_renderbuffer_get_height (GstGLRenderbuffer * gl_mem); -GstVideoGLTextureType gst_gl_renderbuffer_get_type (GstGLRenderbuffer * gl_mem); +GstGLFormat gst_gl_renderbuffer_get_format (GstGLRenderbuffer * gl_mem); guint gst_gl_renderbuffer_get_id (GstGLRenderbuffer * gl_mem); G_END_DECLS diff --git a/gst-libs/gst/gl/gstglupload.c b/gst-libs/gst/gl/gstglupload.c index 0ff969e908..9890acd795 100644 --- a/gst-libs/gst/gl/gstglupload.c +++ b/gst-libs/gst/gl/gstglupload.c @@ -1145,9 +1145,8 @@ _raw_data_upload_perform (gpointer impl, GstBuffer * buffer, raw->params->parent.wrapped_data = raw->in_frame->frame.data[i]; raw->params->plane = i; - raw->params->tex_type = - gst_gl_texture_type_from_format (raw->upload->context, - GST_VIDEO_INFO_FORMAT (in_info), i); + raw->params->tex_format = + gst_gl_format_from_video_info (raw->upload->context, in_info, i); tex = gst_gl_base_memory_alloc (allocator, diff --git a/gst-libs/gst/gl/gstglviewconvert.c b/gst-libs/gst/gl/gstglviewconvert.c index 64c64f7ed9..2d119e6114 100644 --- a/gst-libs/gst/gl/gstglviewconvert.c +++ b/gst-libs/gst/gl/gstglviewconvert.c @@ -2094,8 +2094,8 @@ _do_view_convert (GstGLContext * context, GstGLViewConvert * viewconvert) height = gst_gl_memory_get_texture_height (out_tex); gst_video_info_set_format (&temp_info, GST_VIDEO_FORMAT_RGBA, width, height); - if (out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE - || out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA + if (out_tex->tex_format == GST_GL_LUMINANCE + || out_tex->tex_format == GST_GL_LUMINANCE_ALPHA || out_width != width || out_height != height) { /* Luminance formats are not color renderable */ /* renderering to a framebuffer only renders the intersection of all @@ -2113,8 +2113,7 @@ _do_view_convert (GstGLContext * context, GstGLViewConvert * viewconvert) GST_ALLOCATOR (gst_gl_memory_allocator_get_default (context)); base_mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator); params = gst_gl_video_allocation_params_new (context, NULL, &temp_info, - 0, NULL, viewconvert->to_texture_target, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + 0, NULL, viewconvert->to_texture_target, GST_GL_RGBA); priv->out_tex[j] = (GstGLMemory *) gst_gl_base_memory_alloc (base_mem_allocator, @@ -2172,7 +2171,7 @@ out: continue; } gst_gl_memory_copy_into (priv->out_tex[j], out_tex->tex_id, - viewconvert->to_texture_target, out_tex->tex_type, width, height); + viewconvert->to_texture_target, out_tex->tex_format, width, height); gst_memory_unmap ((GstMemory *) out_tex, &to_info); } diff --git a/sys/androidmedia/gstamcvideodec.c b/sys/androidmedia/gstamcvideodec.c index 1bab383ae1..53d3879e2c 100644 --- a/sys/androidmedia/gstamcvideodec.c +++ b/sys/androidmedia/gstamcvideodec.c @@ -1357,7 +1357,7 @@ retry: params = gst_gl_video_allocation_params_new (self->gl_context, NULL, &state->info, 0, NULL, GST_GL_TEXTURE_TARGET_EXTERNAL_OES, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + GST_GL_RGBA); self->oes_mem = (GstGLMemory *) gst_gl_base_memory_alloc (base_mem_alloc, (GstGLAllocationParams *) params); diff --git a/sys/applemedia/corevideobuffer.c b/sys/applemedia/corevideobuffer.c index bf201395d4..eba2592fbf 100644 --- a/sys/applemedia/corevideobuffer.c +++ b/sys/applemedia/corevideobuffer.c @@ -107,15 +107,14 @@ _create_glmem (GstAppleCoreVideoPixelBuffer * gpixbuf, return gst_video_texture_cache_create_memory (cache, gpixbuf, plane, size); #else GstIOSurfaceMemory *mem; - GstVideoGLTextureType tex_type = - gst_gl_texture_type_from_format (cache->ctx, GST_VIDEO_INFO_FORMAT (info), - plane); + GstGLFormat tex_format = + gst_gl_format_from_video_info (cache->ctx, info, plane); CVPixelBufferRef pixel_buf = gpixbuf->buf; IOSurfaceRef surface = CVPixelBufferGetIOSurface (pixel_buf); CFRetain (pixel_buf); mem = gst_io_surface_memory_wrapped (cache->ctx, - surface, GST_GL_TEXTURE_TARGET_RECTANGLE, tex_type, + surface, GST_GL_TEXTURE_TARGET_RECTANGLE, tex_format, info, plane, NULL, pixel_buf, (GDestroyNotify) CFRelease); return GST_MEMORY_CAST (mem); #endif diff --git a/sys/applemedia/iosglmemory.c b/sys/applemedia/iosglmemory.c index c19f5f31d9..7b7db9bc65 100644 --- a/sys/applemedia/iosglmemory.c +++ b/sys/applemedia/iosglmemory.c @@ -132,7 +132,7 @@ static GstIOSGLMemory * _ios_gl_memory_new (GstGLContext * context, GstAppleCoreVideoMemory * cv_mem, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, guint tex_id, GstVideoInfo * info, guint plane, @@ -144,7 +144,7 @@ _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, NULL, NULL); + target, tex_format, NULL, info, plane, valign, NULL, NULL); mem->cv_mem = cv_mem; mem->gl_data = gl_data; mem->gl_notify = gl_notify; @@ -158,12 +158,12 @@ GstIOSGLMemory * gst_ios_gl_memory_new_wrapped (GstGLContext * context, GstAppleCoreVideoMemory * cv_mem, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, guint tex_id, GstVideoInfo * info, guint plane, GstVideoAlignment * valign, gpointer gl_data, GDestroyNotify gl_notify) { - return _ios_gl_memory_new (context, cv_mem, target, tex_type, tex_id, info, + return _ios_gl_memory_new (context, cv_mem, target, tex_format, tex_id, info, plane, valign, gl_data, gl_notify); } diff --git a/sys/applemedia/iosglmemory.h b/sys/applemedia/iosglmemory.h index 7e457d2bb4..ec1035dd54 100644 --- a/sys/applemedia/iosglmemory.h +++ b/sys/applemedia/iosglmemory.h @@ -55,7 +55,7 @@ GstIOSGLMemory * gst_ios_gl_memory_new_wrapped (GstGLContext * context, GstAppleCoreVideoMemory *cv_mem, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, guint tex_id, GstVideoInfo * info, guint plane, diff --git a/sys/applemedia/iosurfacememory.c b/sys/applemedia/iosurfacememory.c index e0d8b07c8a..18a7543019 100644 --- a/sys/applemedia/iosurfacememory.c +++ b/sys/applemedia/iosurfacememory.c @@ -166,7 +166,7 @@ static GstIOSurfaceMemory * _io_surface_memory_new (GstGLContext * context, IOSurfaceRef surface, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, GstVideoInfo * info, guint plane, GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify) @@ -177,7 +177,7 @@ _io_surface_memory_new (GstGLContext * context, mem = g_new0 (GstIOSurfaceMemory, 1); gst_gl_memory_init (&mem->gl_mem, _io_surface_memory_allocator, NULL, context, - target, tex_type, NULL, info, plane, valign, user_data, notify); + target, tex_format, NULL, info, plane, valign, user_data, notify); GST_MINI_OBJECT_FLAG_SET (mem, GST_MEMORY_FLAG_READONLY); @@ -191,7 +191,7 @@ GstIOSurfaceMemory * gst_io_surface_memory_wrapped (GstGLContext * context, IOSurfaceRef surface, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, GstVideoInfo * info, guint plane, GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify) @@ -214,15 +214,12 @@ _io_surface_memory_set_surface (GstIOSurfaceMemory * memory, if (surface) { GLuint tex_id, tex_target, texifmt, texfmt; guint plane; - GstVideoGLTextureType textype; CGLError cglError; plane = gl_mem->plane; tex_id = gl_mem->tex_id; tex_target = gst_gl_texture_target_to_gl (gl_mem->tex_target); - textype = gst_gl_texture_type_from_format (context, - GST_VIDEO_INFO_FORMAT (&gl_mem->info), plane); - texifmt = gst_gl_format_from_gl_texture_type (textype); + texifmt = gst_gl_format_from_video_info (context, &gl_mem->info, plane); texfmt = gst_gl_sized_gl_format_from_gl_format_type (context, texifmt, GL_UNSIGNED_BYTE); diff --git a/sys/applemedia/iosurfacememory.h b/sys/applemedia/iosurfacememory.h index 5d281acd06..7fc9e49585 100644 --- a/sys/applemedia/iosurfacememory.h +++ b/sys/applemedia/iosurfacememory.h @@ -53,7 +53,7 @@ GstIOSurfaceMemory * gst_io_surface_memory_wrapped (GstGLContext * context, IOSurfaceRef surface, GstGLTextureTarget target, - GstVideoGLTextureType tex_type, + GstGLFormat tex_format, GstVideoInfo * info, guint plane, GstVideoAlignment *valign, diff --git a/sys/applemedia/videotexturecache.m b/sys/applemedia/videotexturecache.m index 2aa87dd35d..89bc33efe7 100644 --- a/sys/applemedia/videotexturecache.m +++ b/sys/applemedia/videotexturecache.m @@ -159,7 +159,7 @@ _do_create_memory (GstGLContext * context, ContextThreadData * data) GstGLTextureTarget gl_target; GstAppleCoreVideoMemory *memory; GstIOSGLMemory *gl_memory; - GstVideoGLTextureType textype; + GstGLFormat texformat; switch (GST_VIDEO_INFO_FORMAT (&cache->input_info)) { case GST_VIDEO_FORMAT_BGRA: @@ -170,21 +170,20 @@ _do_create_memory (GstGLContext * context, ContextThreadData * data) GL_RGBA, GL_UNSIGNED_BYTE, 0, &texture) != kCVReturnSuccess) goto error; - textype = GST_VIDEO_GL_TEXTURE_TYPE_RGBA; + texformat = GST_GL_RGBA; plane = 0; goto success; case GST_VIDEO_FORMAT_NV12: { - GLenum texifmt, texfmt; + GstGLFormat texifmt, texfmt; if (plane == 0) - textype = GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE; + texformat = GST_GL_LUMINANCE; else - textype = GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA; - 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); + texformat = GST_GL_LUMINANCE_ALPHA; + texfmt = gst_gl_sized_gl_format_from_gl_format_type (cache->ctx, texformat, GL_UNSIGNED_BYTE); if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault, - cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texifmt, + cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texformat, GST_VIDEO_INFO_COMP_WIDTH (&cache->input_info, plane), GST_VIDEO_INFO_COMP_HEIGHT (&cache->input_info, plane), texfmt, GL_UNSIGNED_BYTE, plane, &texture) != kCVReturnSuccess) @@ -205,7 +204,7 @@ success: { gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture)); 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, + gl_target, texformat, CVOpenGLESTextureGetName (texture), &cache->input_info, plane, NULL, texture_data, (GDestroyNotify) gst_video_texture_cache_release_texture); data->memory = GST_MEMORY_CAST (gl_memory); diff --git a/tests/check/libs/gstglcolorconvert.c b/tests/check/libs/gstglcolorconvert.c index 98ec48ff9d..88289db9de 100644 --- a/tests/check/libs/gstglcolorconvert.c +++ b/tests/check/libs/gstglcolorconvert.c @@ -148,14 +148,14 @@ check_conversion (TestFrame * frames, guint size) /* create GL buffer */ inbuf = gst_buffer_new (); for (j = 0; j < GST_VIDEO_INFO_N_PLANES (&in_info); j++) { - GstVideoGLTextureType tex_type = gst_gl_texture_type_from_format (context, - GST_VIDEO_INFO_FORMAT (&in_info), j); + GstGLFormat tex_format = gst_gl_format_from_video_info (context, + &in_info, j); GstGLVideoAllocationParams *params; GstGLBaseMemory *mem; ref_count++; params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL, - &in_info, j, NULL, GST_GL_TEXTURE_TARGET_2D, tex_type, + &in_info, j, NULL, GST_GL_TEXTURE_TARGET_2D, tex_format, frames[i].data[j], &ref_count, _frame_unref); mem = gst_gl_base_memory_alloc (base_mem_alloc, diff --git a/tests/check/libs/gstglcontext.c b/tests/check/libs/gstglcontext.c index 6b4778f16f..96c5d92cd3 100644 --- a/tests/check/libs/gstglcontext.c +++ b/tests/check/libs/gstglcontext.c @@ -72,7 +72,7 @@ init (gpointer data) allocator = gst_gl_memory_allocator_get_default (context); params = gst_gl_video_allocation_params_new (context, NULL, &v_info, 0, NULL, - GST_GL_TEXTURE_TARGET_2D, GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA); /* has to be called in the thread that is going to use the framebuffer */ fbo = gst_gl_framebuffer_new_with_default_depth (context, 320, 240); diff --git a/tests/check/libs/gstglmemory.c b/tests/check/libs/gstglmemory.c index 0cdd1ddc8f..f1c3203a4d 100644 --- a/tests/check/libs/gstglmemory.c +++ b/tests/check/libs/gstglmemory.c @@ -75,12 +75,12 @@ GST_START_TEST (test_basic) gst_video_info_set_format (&v_info, formats[i], width, height); for (j = 0; j < GST_VIDEO_INFO_N_PLANES (&v_info); j++) { - GstVideoGLTextureType tex_type = gst_gl_texture_type_from_format (context, - GST_VIDEO_INFO_FORMAT (&v_info), j); + GstGLFormat tex_format = gst_gl_format_from_video_info (context, + &v_info, j); GstGLVideoAllocationParams *params; params = gst_gl_video_allocation_params_new (context, NULL, &v_info, j, - NULL, GST_GL_TEXTURE_TARGET_2D, tex_type); + NULL, GST_GL_TEXTURE_TARGET_2D, tex_format); mem = (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc, (GstGLAllocationParams *) params); @@ -135,7 +135,7 @@ test_transfer_allocator (const gchar * allocator_name) gst_video_info_set_format (&v_info, GST_VIDEO_FORMAT_RGBA, 1, 1); params = gst_gl_video_allocation_params_new (context, NULL, &v_info, 0, - NULL, GST_GL_TEXTURE_TARGET_2D, GST_VIDEO_GL_TEXTURE_TYPE_RGBA); + NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA); /* texture creation */ mem = (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc, @@ -149,7 +149,7 @@ test_transfer_allocator (const gchar * allocator_name) /* test wrapping raw data */ params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA, rgba_pixel, NULL, NULL); + GST_GL_RGBA, rgba_pixel, NULL, NULL); mem2 = (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc, (GstGLAllocationParams *) params); @@ -164,8 +164,7 @@ test_transfer_allocator (const gchar * allocator_name) /* wrapped texture creation */ params = gst_gl_video_allocation_params_new_wrapped_texture (context, NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA, ((GstGLMemory *) mem)->tex_id, NULL, - NULL); + GST_GL_RGBA, ((GstGLMemory *) mem)->tex_id, NULL, NULL); mem3 = (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc, (GstGLAllocationParams *) params); @@ -207,7 +206,7 @@ test_transfer_allocator (const gchar * allocator_name) /* test texture copy */ fail_unless (gst_gl_memory_copy_into ((GstGLMemory *) mem2, ((GstGLMemory *) mem)->tex_id, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA, 1, 1)); + GST_GL_RGBA, 1, 1)); GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD); fail_unless (!GST_MEMORY_FLAG_IS_SET (mem2, @@ -300,7 +299,7 @@ GST_START_TEST (test_separate_transfer) params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA, rgba_pixel, NULL, NULL); + GST_GL_RGBA, rgba_pixel, NULL, NULL); mem = (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc, (GstGLAllocationParams *) params); diff --git a/tests/check/libs/gstglupload.c b/tests/check/libs/gstglupload.c index af43221773..7508cf5b95 100644 --- a/tests/check/libs/gstglupload.c +++ b/tests/check/libs/gstglupload.c @@ -50,7 +50,7 @@ static const GLfloat vertices[] = { static GLushort indices[] = { 0, 1, 2, 0, 2, 3 }; -#define FORMAT GST_VIDEO_GL_TEXTURE_TYPE_RGBA +#define FORMAT GST_GL_RGBA #define WIDTH 10 #define HEIGHT 10 #define RED 0xff, 0x00, 0x00, 0xff @@ -334,7 +334,7 @@ GST_START_TEST (test_upload_gl_memory) buffer = gst_buffer_new (); params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL, &in_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, - GST_VIDEO_GL_TEXTURE_TYPE_RGBA, rgba_data, NULL, NULL); + GST_GL_RGBA, rgba_data, NULL, NULL); gl_mem = (GstGLMemory *) gst_gl_base_memory_alloc (base_mem_alloc, (GstGLAllocationParams *) params); gst_gl_allocation_params_free ((GstGLAllocationParams *) params);