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.
This commit is contained in:
Matthew Waters 2017-03-13 14:28:47 +11:00
parent 04f8c7d729
commit 956c4d0bde
31 changed files with 232 additions and 304 deletions

View file

@ -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
<SUBSECTION Standard>
@ -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

View file

@ -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);

View file

@ -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])

View file

@ -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);

View file

@ -393,7 +393,7 @@ gst_qt_src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query)
glparams =
gst_gl_video_allocation_params_new (qt_src->context, &params, &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);

View file

@ -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 */

View file

@ -53,7 +53,7 @@ struct _GstEGLImage
GstGLContext *context;
EGLImageKHR image;
GstVideoGLTextureType type;
GstGLFormat format;
/* <private> */
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);

View file

@ -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);

View file

@ -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);
}

View file

@ -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 ();

View file

@ -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,

View file

@ -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, &params, &src->info, src->plane, &src->valign, NULL, NULL);
src->tex_format, &params, &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;

View file

@ -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;
/* <private> */
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);

View file

@ -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, &params,
src->mem.mem.context, src->mem.tex_target, src->mem.tex_format, &params,
&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;

View file

@ -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,

View file

@ -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 =

View file

@ -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;

View file

@ -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

View file

@ -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,

View file

@ -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);
}

View file

@ -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);

View file

@ -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

View file

@ -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);
}

View file

@ -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,

View file

@ -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);

View file

@ -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,

View file

@ -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);

View file

@ -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,

View file

@ -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);

View file

@ -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);

View file

@ -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);