mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 09:10:36 +00:00
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:
parent
04f8c7d729
commit
956c4d0bde
31 changed files with 232 additions and 304 deletions
|
@ -1212,9 +1212,7 @@ GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE
|
||||||
GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES
|
GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES
|
||||||
GstGLFormat
|
GstGLFormat
|
||||||
gst_gl_format_type_n_bytes
|
gst_gl_format_type_n_bytes
|
||||||
gst_gl_texture_type_n_bytes
|
gst_gl_format_from_video_info
|
||||||
gst_gl_format_from_gl_texture_type
|
|
||||||
gst_gl_texture_type_from_format
|
|
||||||
gst_gl_sized_gl_format_from_gl_format_type
|
gst_gl_sized_gl_format_from_gl_format_type
|
||||||
gst_gl_texture_target_from_string
|
gst_gl_texture_target_from_string
|
||||||
gst_gl_texture_target_to_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_height
|
||||||
gst_gl_memory_get_texture_id
|
gst_gl_memory_get_texture_id
|
||||||
gst_gl_memory_get_texture_target
|
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_get_texture_width
|
||||||
gst_gl_memory_setup_buffer
|
gst_gl_memory_setup_buffer
|
||||||
<SUBSECTION Standard>
|
<SUBSECTION Standard>
|
||||||
|
@ -1441,7 +1439,7 @@ gst_gl_renderbuffer_allocation_params_new
|
||||||
gst_gl_renderbuffer_allocation_params_new_wrapped
|
gst_gl_renderbuffer_allocation_params_new_wrapped
|
||||||
gst_gl_renderbuffer_get_height
|
gst_gl_renderbuffer_get_height
|
||||||
gst_gl_renderbuffer_get_id
|
gst_gl_renderbuffer_get_id
|
||||||
gst_gl_renderbuffer_get_type
|
gst_gl_renderbuffer_get_format
|
||||||
gst_gl_renderbuffer_get_width
|
gst_gl_renderbuffer_get_width
|
||||||
gst_gl_renderbuffer_init_once
|
gst_gl_renderbuffer_init_once
|
||||||
gst_is_gl_renderbuffer
|
gst_is_gl_renderbuffer
|
||||||
|
|
|
@ -93,8 +93,7 @@ gst_gl_differencematte_gl_start (GstGLBaseFilter * base_filter)
|
||||||
gst_gl_memory_allocator_get_default (context);
|
gst_gl_memory_allocator_get_default (context);
|
||||||
params =
|
params =
|
||||||
(GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
|
(GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
|
||||||
NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA);
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
|
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
differencematte->midtexture[i] =
|
differencematte->midtexture[i] =
|
||||||
|
@ -306,8 +305,7 @@ init_pixbuf_texture (GstGLDifferenceMatte * differencematte)
|
||||||
differencematte->pbuf_width, differencematte->pbuf_height);
|
differencematte->pbuf_width, differencematte->pbuf_height);
|
||||||
params =
|
params =
|
||||||
(GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
|
(GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
|
||||||
NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA);
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
|
|
||||||
|
|
||||||
differencematte->newbgtexture =
|
differencematte->newbgtexture =
|
||||||
(GstGLMemory *) gst_gl_base_memory_alloc (tex_alloc, params);
|
(GstGLMemory *) gst_gl_base_memory_alloc (tex_alloc, params);
|
||||||
|
@ -317,7 +315,7 @@ init_pixbuf_texture (GstGLDifferenceMatte * differencematte)
|
||||||
params =
|
params =
|
||||||
(GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
|
(GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
|
||||||
NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
|
GST_GL_RGBA);
|
||||||
|
|
||||||
differencematte->savedbgtexture =
|
differencematte->savedbgtexture =
|
||||||
(GstGLMemory *) gst_gl_base_memory_alloc (tex_alloc, params);
|
(GstGLMemory *) gst_gl_base_memory_alloc (tex_alloc, params);
|
||||||
|
|
|
@ -286,8 +286,7 @@ gst_gl_effects_gl_start (GstGLBaseFilter * base_filter)
|
||||||
gst_allocator_find (GST_GL_MEMORY_ALLOCATOR_NAME);
|
gst_allocator_find (GST_GL_MEMORY_ALLOCATOR_NAME);
|
||||||
params =
|
params =
|
||||||
(GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
|
(GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
|
||||||
NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA);
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
|
|
||||||
|
|
||||||
for (i = 0; i < NEEDED_TEXTURES; i++) {
|
for (i = 0; i < NEEDED_TEXTURES; i++) {
|
||||||
if (effects->midtexture[i])
|
if (effects->midtexture[i])
|
||||||
|
|
|
@ -688,8 +688,7 @@ gst_gl_overlay_load_jpeg (GstGLOverlay * overlay, FILE * fp)
|
||||||
(GST_GL_BASE_FILTER (overlay)->context));
|
(GST_GL_BASE_FILTER (overlay)->context));
|
||||||
params =
|
params =
|
||||||
gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context,
|
gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context,
|
||||||
NULL, &v_info, 0, &v_align, GST_GL_TEXTURE_TARGET_2D,
|
NULL, &v_info, 0, &v_align, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA);
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
|
|
||||||
overlay->image_memory = (GstGLMemory *)
|
overlay->image_memory = (GstGLMemory *)
|
||||||
gst_gl_base_memory_alloc (mem_allocator,
|
gst_gl_base_memory_alloc (mem_allocator,
|
||||||
(GstGLAllocationParams *) params);
|
(GstGLAllocationParams *) params);
|
||||||
|
@ -804,8 +803,7 @@ gst_gl_overlay_load_png (GstGLOverlay * overlay, FILE * fp)
|
||||||
(GST_GL_BASE_FILTER (overlay)->context));
|
(GST_GL_BASE_FILTER (overlay)->context));
|
||||||
params =
|
params =
|
||||||
gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context,
|
gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context,
|
||||||
NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA);
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
|
|
||||||
overlay->image_memory = (GstGLMemory *)
|
overlay->image_memory = (GstGLMemory *)
|
||||||
gst_gl_base_memory_alloc (mem_allocator,
|
gst_gl_base_memory_alloc (mem_allocator,
|
||||||
(GstGLAllocationParams *) params);
|
(GstGLAllocationParams *) params);
|
||||||
|
|
|
@ -393,7 +393,7 @@ gst_qt_src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query)
|
||||||
|
|
||||||
glparams =
|
glparams =
|
||||||
gst_gl_video_allocation_params_new (qt_src->context, ¶ms, &vinfo, 0,
|
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,
|
gst_buffer_pool_config_set_gl_allocation_params (config,
|
||||||
(GstGLAllocationParams *) glparams);
|
(GstGLAllocationParams *) glparams);
|
||||||
gst_gl_allocation_params_free ((GstGLAllocationParams *) glparams);
|
gst_gl_allocation_params_free ((GstGLAllocationParams *) glparams);
|
||||||
|
|
|
@ -144,7 +144,7 @@ _gst_egl_image_copy (GstMiniObject * obj)
|
||||||
* gst_egl_image_new_wrapped:
|
* gst_egl_image_new_wrapped:
|
||||||
* @context: a #GstGLContext (must be an EGL context)
|
* @context: a #GstGLContext (must be an EGL context)
|
||||||
* @image: the image to wrap
|
* @image: the image to wrap
|
||||||
* @type: the #GstVideoGLTextureType
|
* @format: the #GstGLFormat
|
||||||
* @user_data: user data
|
* @user_data: user data
|
||||||
* @user_data_destroy: called when @user_data is no longer needed
|
* @user_data_destroy: called when @user_data is no longer needed
|
||||||
*
|
*
|
||||||
|
@ -152,7 +152,7 @@ _gst_egl_image_copy (GstMiniObject * obj)
|
||||||
*/
|
*/
|
||||||
GstEGLImage *
|
GstEGLImage *
|
||||||
gst_egl_image_new_wrapped (GstGLContext * context, EGLImageKHR image,
|
gst_egl_image_new_wrapped (GstGLContext * context, EGLImageKHR image,
|
||||||
GstVideoGLTextureType type, gpointer user_data,
|
GstGLFormat format, gpointer user_data,
|
||||||
GstEGLImageDestroyNotify user_data_destroy)
|
GstEGLImageDestroyNotify user_data_destroy)
|
||||||
{
|
{
|
||||||
GstEGLImage *img = NULL;
|
GstEGLImage *img = NULL;
|
||||||
|
@ -169,7 +169,7 @@ gst_egl_image_new_wrapped (GstGLContext * context, EGLImageKHR image,
|
||||||
|
|
||||||
img->context = gst_object_ref (context);
|
img->context = gst_object_ref (context);
|
||||||
img->image = image;
|
img->image = image;
|
||||||
img->type = type;
|
img->format = format;
|
||||||
|
|
||||||
img->destroy_data = user_data;
|
img->destroy_data = user_data;
|
||||||
img->destroy_notify = user_data_destroy;
|
img->destroy_notify = user_data_destroy;
|
||||||
|
@ -329,7 +329,7 @@ gst_egl_image_from_texture (GstGLContext * context, GstGLMemory * gl_mem,
|
||||||
if (!img)
|
if (!img)
|
||||||
return NULL;
|
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);
|
(GstEGLImageDestroyNotify) _destroy_egl_image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -418,7 +418,7 @@ GstEGLImage *
|
||||||
gst_egl_image_from_dmabuf (GstGLContext * context,
|
gst_egl_image_from_dmabuf (GstGLContext * context,
|
||||||
gint dmabuf, GstVideoInfo * in_info, gint plane, gsize offset)
|
gint dmabuf, GstVideoInfo * in_info, gint plane, gsize offset)
|
||||||
{
|
{
|
||||||
GstVideoGLTextureType type;
|
GstGLFormat format;
|
||||||
guintptr attribs[13];
|
guintptr attribs[13];
|
||||||
EGLImageKHR img;
|
EGLImageKHR img;
|
||||||
gint atti = 0;
|
gint atti = 0;
|
||||||
|
@ -426,9 +426,7 @@ gst_egl_image_from_dmabuf (GstGLContext * context,
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
fourcc = _drm_fourcc_from_info (in_info, plane);
|
fourcc = _drm_fourcc_from_info (in_info, plane);
|
||||||
type =
|
format = gst_gl_format_from_video_info (context, in_info, plane);
|
||||||
gst_gl_texture_type_from_format (context, GST_VIDEO_INFO_FORMAT (in_info),
|
|
||||||
plane);
|
|
||||||
|
|
||||||
GST_DEBUG ("fourcc %.4s (%d) plane %d (%dx%d)",
|
GST_DEBUG ("fourcc %.4s (%d) plane %d (%dx%d)",
|
||||||
(char *) &fourcc, fourcc, plane,
|
(char *) &fourcc, fourcc, plane,
|
||||||
|
@ -461,7 +459,7 @@ gst_egl_image_from_dmabuf (GstGLContext * context,
|
||||||
return NULL;
|
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);
|
(GstEGLImageDestroyNotify) _destroy_egl_image);
|
||||||
}
|
}
|
||||||
#endif /* GST_GL_HAVE_DMABUF */
|
#endif /* GST_GL_HAVE_DMABUF */
|
||||||
|
|
|
@ -53,7 +53,7 @@ struct _GstEGLImage
|
||||||
|
|
||||||
GstGLContext *context;
|
GstGLContext *context;
|
||||||
EGLImageKHR image;
|
EGLImageKHR image;
|
||||||
GstVideoGLTextureType type;
|
GstGLFormat format;
|
||||||
|
|
||||||
/* <private> */
|
/* <private> */
|
||||||
gpointer destroy_data;
|
gpointer destroy_data;
|
||||||
|
@ -64,7 +64,7 @@ struct _GstEGLImage
|
||||||
|
|
||||||
GstEGLImage * gst_egl_image_new_wrapped (GstGLContext * context,
|
GstEGLImage * gst_egl_image_new_wrapped (GstGLContext * context,
|
||||||
EGLImageKHR image,
|
EGLImageKHR image,
|
||||||
GstVideoGLTextureType type,
|
GstGLFormat format,
|
||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GstEGLImageDestroyNotify user_data_destroy);
|
GstEGLImageDestroyNotify user_data_destroy);
|
||||||
EGLImageKHR gst_egl_image_get_image (GstEGLImage * image);
|
EGLImageKHR gst_egl_image_get_image (GstEGLImage * image);
|
||||||
|
|
|
@ -151,7 +151,7 @@ _gl_mem_egl_alloc (GstGLBaseMemoryAllocator * allocator,
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_gl_memory_init (GST_GL_MEMORY_CAST (mem), GST_ALLOCATOR_CAST (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->parent.alloc_params, params->v_info, params->plane,
|
||||||
params->valign, params->parent.user_data, params->parent.notify);
|
params->valign, params->parent.user_data, params->parent.notify);
|
||||||
|
|
||||||
|
|
|
@ -419,7 +419,7 @@ struct _GstGLColorConvertPrivate
|
||||||
GstGLMemory *in_tex[GST_VIDEO_MAX_PLANES];
|
GstGLMemory *in_tex[GST_VIDEO_MAX_PLANES];
|
||||||
GstGLMemory *out_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 vao;
|
||||||
GLuint vertex_buffer;
|
GLuint vertex_buffer;
|
||||||
|
@ -1521,9 +1521,7 @@ _YUV_to_RGB (GstGLColorConvert * convert)
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_YUY2:
|
case GST_VIDEO_FORMAT_YUY2:
|
||||||
{
|
{
|
||||||
char uv_val =
|
char uv_val = convert->priv->in_tex_formats[0] == GST_GL_RG ? 'g' : 'a';
|
||||||
convert->priv->in_tex_types[0] ==
|
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a';
|
|
||||||
info->templ = &templ_YUY2_UYVY_to_RGB;
|
info->templ = &templ_YUY2_UYVY_to_RGB;
|
||||||
info->frag_body = g_strdup_printf (info->templ->body, 'r', uv_val,
|
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],
|
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:
|
case GST_VIDEO_FORMAT_UYVY:
|
||||||
{
|
{
|
||||||
char y_val =
|
char y_val = convert->priv->in_tex_formats[0] == GST_GL_RG ? 'g' : 'a';
|
||||||
convert->priv->in_tex_types[0] ==
|
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a';
|
|
||||||
info->templ = &templ_YUY2_UYVY_to_RGB;
|
info->templ = &templ_YUY2_UYVY_to_RGB;
|
||||||
info->frag_body = g_strdup_printf (info->templ->body, y_val, 'g',
|
info->frag_body = g_strdup_printf (info->templ->body, y_val, 'g',
|
||||||
'g', 'r', 'b', pixel_order[0], pixel_order[1], pixel_order[2],
|
'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:
|
case GST_VIDEO_FORMAT_NV12:
|
||||||
{
|
{
|
||||||
char val2 =
|
char val2 = convert->priv->in_tex_formats[1] == GST_GL_RG ? 'g' : 'a';
|
||||||
convert->priv->in_tex_types[1] ==
|
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a';
|
|
||||||
info->templ = &templ_NV12_NV21_to_RGB;
|
info->templ = &templ_NV12_NV21_to_RGB;
|
||||||
info->frag_body = g_strdup_printf (info->templ->body, 'r', val2,
|
info->frag_body = g_strdup_printf (info->templ->body, 'r', val2,
|
||||||
pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
|
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:
|
case GST_VIDEO_FORMAT_NV21:
|
||||||
{
|
{
|
||||||
char val2 =
|
char val2 = convert->priv->in_tex_formats[1] == GST_GL_RG ? 'g' : 'a';
|
||||||
convert->priv->in_tex_types[1] ==
|
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a';
|
|
||||||
info->templ = &templ_NV12_NV21_to_RGB;
|
info->templ = &templ_NV12_NV21_to_RGB;
|
||||||
info->frag_body = g_strdup_printf (info->templ->body, val2, 'r',
|
info->frag_body = g_strdup_printf (info->templ->body, val2, 'r',
|
||||||
pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
|
pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
|
||||||
|
@ -1733,9 +1725,7 @@ _GRAY_to_RGB (GstGLColorConvert * convert)
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_GRAY16_LE:
|
case GST_VIDEO_FORMAT_GRAY16_LE:
|
||||||
{
|
{
|
||||||
char val2 =
|
char val2 = convert->priv->in_tex_formats[0] == GST_GL_RG ? 'g' : 'a';
|
||||||
convert->priv->in_tex_types[0] ==
|
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a';
|
|
||||||
info->templ = &templ_COMPOSE;
|
info->templ = &templ_COMPOSE;
|
||||||
info->frag_body = g_strdup_printf (info->templ->body, val2, 'r',
|
info->frag_body = g_strdup_printf (info->templ->body, val2, 'r',
|
||||||
pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
|
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:
|
case GST_VIDEO_FORMAT_GRAY16_BE:
|
||||||
{
|
{
|
||||||
char val2 =
|
char val2 = convert->priv->in_tex_formats[0] == GST_GL_RG ? 'g' : 'a';
|
||||||
convert->priv->in_tex_types[0] ==
|
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RG ? 'g' : 'a';
|
|
||||||
info->templ = &templ_COMPOSE;
|
info->templ = &templ_COMPOSE;
|
||||||
info->frag_body = g_strdup_printf (info->templ->body, 'r', val2,
|
info->frag_body = g_strdup_printf (info->templ->body, 'r', val2,
|
||||||
pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
|
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_width = gst_gl_memory_get_texture_width (out_tex);
|
||||||
mem_height = gst_gl_memory_get_texture_height (out_tex);
|
mem_height = gst_gl_memory_get_texture_height (out_tex);
|
||||||
|
|
||||||
if (out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE
|
if (out_tex->tex_format == GST_GL_LUMINANCE
|
||||||
|| out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA
|
|| out_tex->tex_format == GST_GL_LUMINANCE_ALPHA
|
||||||
|| out_width != mem_width || out_height != mem_height) {
|
|| out_width != mem_width || out_height != mem_height) {
|
||||||
/* Luminance formats are not color renderable */
|
/* Luminance formats are not color renderable */
|
||||||
/* renderering to a framebuffer only renders the intersection of all
|
/* 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);
|
allocator = gst_allocator_find (GST_GL_MEMORY_ALLOCATOR_NAME);
|
||||||
base_mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
|
base_mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
|
||||||
params = gst_gl_video_allocation_params_new (context, NULL, &temp_info,
|
params = gst_gl_video_allocation_params_new (context, NULL, &temp_info,
|
||||||
0, NULL, convert->priv->to_texture_target,
|
0, NULL, convert->priv->to_texture_target, GST_GL_RGBA);
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
|
|
||||||
|
|
||||||
convert->priv->out_tex[j] =
|
convert->priv->out_tex[j] =
|
||||||
(GstGLMemory *) gst_gl_base_memory_alloc (base_mem_allocator,
|
(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_width = gst_gl_memory_get_texture_width (out_tex);
|
||||||
mem_height = gst_gl_memory_get_texture_height (out_tex);
|
mem_height = gst_gl_memory_get_texture_height (out_tex);
|
||||||
|
|
||||||
if (out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE
|
if (out_tex->tex_format == GST_GL_LUMINANCE
|
||||||
|| out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA
|
|| out_tex->tex_format == GST_GL_LUMINANCE_ALPHA
|
||||||
|| out_width != mem_width || out_height != mem_height) {
|
|| out_width != mem_width || out_height != mem_height) {
|
||||||
GstMapInfo to_info, from_info;
|
GstMapInfo to_info, from_info;
|
||||||
|
|
||||||
|
@ -2276,8 +2263,8 @@ out:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
gst_gl_memory_copy_into (convert->priv->out_tex[j],
|
gst_gl_memory_copy_into (convert->priv->out_tex[j],
|
||||||
out_tex->tex_id, convert->priv->to_texture_target, out_tex->tex_type,
|
out_tex->tex_id, convert->priv->to_texture_target,
|
||||||
mem_width, mem_height);
|
out_tex->tex_format, mem_width, mem_height);
|
||||||
gst_memory_unmap ((GstMemory *) convert->priv->out_tex[j], &from_info);
|
gst_memory_unmap ((GstMemory *) convert->priv->out_tex[j], &from_info);
|
||||||
gst_memory_unmap ((GstMemory *) out_tex, &to_info);
|
gst_memory_unmap ((GstMemory *) out_tex, &to_info);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2329,7 +2316,7 @@ _do_convert (GstGLContext * context, GstGLColorConvert * convert)
|
||||||
_get_n_textures (GST_VIDEO_INFO_FORMAT (&convert->out_info));
|
_get_n_textures (GST_VIDEO_INFO_FORMAT (&convert->out_info));
|
||||||
|
|
||||||
{
|
{
|
||||||
gboolean tex_type_change = FALSE;
|
gboolean tex_format_change = FALSE;
|
||||||
guint i, v;
|
guint i, v;
|
||||||
|
|
||||||
for (v = 0; v < views; v++) {
|
for (v = 0; v < views; v++) {
|
||||||
|
@ -2347,21 +2334,21 @@ _do_convert (GstGLContext * context, GstGLColorConvert * convert)
|
||||||
/* our arrays aren't that big */
|
/* our arrays aren't that big */
|
||||||
g_assert_not_reached ();
|
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 "
|
GST_ERROR_OBJECT (convert, "Cannot convert textures with "
|
||||||
"different types");
|
"different types");
|
||||||
convert->priv->result = FALSE;
|
convert->priv->result = FALSE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (convert->priv->in_tex_types[j] != in_tex->tex_type)
|
if (convert->priv->in_tex_formats[j] != in_tex->tex_format)
|
||||||
tex_type_change = TRUE;
|
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);
|
gst_gl_color_convert_reset_shader (convert);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -117,70 +117,23 @@ gst_gl_format_type_n_bytes (guint format, guint type)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_texture_type_n_bytes:
|
* gst_gl_format_from_video_info:
|
||||||
* @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:
|
|
||||||
* @context: a #GstGLContext
|
* @context: a #GstGLContext
|
||||||
* @v_format: a #GstVideoFormat
|
* @vinfo: a #GstVideoInfo
|
||||||
* @plane: the plane number (starting from 0)
|
* @plane: the plane number in @vinfo
|
||||||
*
|
*
|
||||||
* Returns: the #GstVideoGLTextureType for the specified @format and @plane
|
* Returns: the #GstGLFormat necessary for holding the data in @plane of @vinfo
|
||||||
* that can be allocated using @context
|
|
||||||
*/
|
*/
|
||||||
GstVideoGLTextureType
|
GstGLFormat
|
||||||
gst_gl_texture_type_from_format (GstGLContext * context,
|
gst_gl_format_from_video_info (GstGLContext * context, GstVideoInfo * vinfo,
|
||||||
GstVideoFormat v_format, guint plane)
|
guint plane)
|
||||||
{
|
{
|
||||||
gboolean texture_rg =
|
gboolean texture_rg =
|
||||||
gst_gl_context_check_feature (context, "GL_EXT_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_gl_version (context, GST_GL_API_GLES2, 3, 0)
|
||||||
|| gst_gl_context_check_feature (context, "GL_ARB_texture_rg")
|
|| gst_gl_context_check_feature (context, "GL_ARB_texture_rg")
|
||||||
|| gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 0);
|
|| 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;
|
guint n_plane_components;
|
||||||
|
|
||||||
switch (v_format) {
|
switch (v_format) {
|
||||||
|
@ -228,18 +181,16 @@ gst_gl_texture_type_from_format (GstGLContext * context,
|
||||||
|
|
||||||
switch (n_plane_components) {
|
switch (n_plane_components) {
|
||||||
case 4:
|
case 4:
|
||||||
return GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
|
return GST_GL_RGBA;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
return GST_VIDEO_GL_TEXTURE_TYPE_RGB;
|
return GST_GL_RGB;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
return texture_rg ? GST_VIDEO_GL_TEXTURE_TYPE_RG :
|
return texture_rg ? GST_GL_RG : GST_GL_LUMINANCE_ALPHA;
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA;
|
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
return texture_rg ? GST_VIDEO_GL_TEXTURE_TYPE_R :
|
return texture_rg ? GST_GL_RED : GST_GL_LUMINANCE;
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
|
|
|
@ -101,12 +101,8 @@ GST_EXPORT
|
||||||
guint gst_gl_format_type_n_bytes (guint format,
|
guint gst_gl_format_type_n_bytes (guint format,
|
||||||
guint type);
|
guint type);
|
||||||
GST_EXPORT
|
GST_EXPORT
|
||||||
guint gst_gl_texture_type_n_bytes (GstVideoGLTextureType tex_format);
|
GstGLFormat gst_gl_format_from_video_info (GstGLContext * context,
|
||||||
GST_EXPORT
|
GstVideoInfo * vinfo,
|
||||||
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,
|
|
||||||
guint plane);
|
guint plane);
|
||||||
GST_EXPORT
|
GST_EXPORT
|
||||||
guint gst_gl_sized_gl_format_from_gl_format_type (GstGLContext * context,
|
guint gst_gl_sized_gl_format_from_gl_format_type (GstGLContext * context,
|
||||||
|
|
|
@ -84,10 +84,10 @@ typedef struct
|
||||||
{
|
{
|
||||||
/* in */
|
/* in */
|
||||||
GstGLMemory *src;
|
GstGLMemory *src;
|
||||||
GstVideoGLTextureType out_format;
|
GstGLFormat out_format;
|
||||||
guint out_width, out_height;
|
guint out_width, out_height;
|
||||||
GstGLTextureTarget tex_target;
|
GstGLTextureTarget tex_target;
|
||||||
GstVideoGLTextureType tex_type;
|
GstGLFormat tex_format;
|
||||||
/* inout */
|
/* inout */
|
||||||
guint tex_id;
|
guint tex_id;
|
||||||
/* out */
|
/* out */
|
||||||
|
@ -122,15 +122,20 @@ static inline void
|
||||||
_calculate_unpack_length (GstGLMemory * gl_mem, GstGLContext * context)
|
_calculate_unpack_length (GstGLMemory * gl_mem, GstGLContext * context)
|
||||||
{
|
{
|
||||||
guint n_gl_bytes;
|
guint n_gl_bytes;
|
||||||
|
guint tex_type;
|
||||||
|
|
||||||
gl_mem->tex_scaling[0] = 1.0f;
|
gl_mem->tex_scaling[0] = 1.0f;
|
||||||
gl_mem->tex_scaling[1] = 1.0f;
|
gl_mem->tex_scaling[1] = 1.0f;
|
||||||
gl_mem->unpack_length = 1;
|
gl_mem->unpack_length = 1;
|
||||||
gl_mem->tex_width = GL_MEM_WIDTH (gl_mem);
|
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) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,9 +242,9 @@ _gl_tex_create (GstGLMemory * gl_mem, GError ** error)
|
||||||
GLenum tex_format;
|
GLenum tex_format;
|
||||||
GLenum tex_type;
|
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;
|
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;
|
tex_type = GL_UNSIGNED_SHORT_5_6_5;
|
||||||
|
|
||||||
internal_format =
|
internal_format =
|
||||||
|
@ -267,7 +272,7 @@ _gl_tex_create (GstGLMemory * gl_mem, GError ** error)
|
||||||
* @parent: (allow-none): the parent #GstMemory to initialize with
|
* @parent: (allow-none): the parent #GstMemory to initialize with
|
||||||
* @context: the #GstGLContext to initialize with
|
* @context: the #GstGLContext to initialize with
|
||||||
* @target: the #GstGLTextureTarget for this #GstGLMemory
|
* @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
|
* @params: (allow-none): the @GstAllocationParams to initialize with
|
||||||
* @info: the #GstVideoInfo for this #GstGLMemory
|
* @info: the #GstVideoInfo for this #GstGLMemory
|
||||||
* @plane: the plane number (starting from 0) 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
|
void
|
||||||
gst_gl_memory_init (GstGLMemory * mem, GstAllocator * allocator,
|
gst_gl_memory_init (GstGLMemory * mem, GstAllocator * allocator,
|
||||||
GstMemory * parent, GstGLContext * context, GstGLTextureTarget target,
|
GstMemory * parent, GstGLContext * context, GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type, GstAllocationParams * params,
|
GstGLFormat tex_format, GstAllocationParams * params,
|
||||||
GstVideoInfo * info, guint plane, GstVideoAlignment * valign,
|
GstVideoInfo * info, guint plane, GstVideoAlignment * valign,
|
||||||
gpointer user_data, GDestroyNotify notify)
|
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);
|
size = gst_gl_get_plane_data_size (info, valign, plane);
|
||||||
|
|
||||||
mem->tex_target = target;
|
mem->tex_target = target;
|
||||||
mem->tex_type = tex_type;
|
mem->tex_format = tex_format;
|
||||||
mem->plane = plane;
|
mem->plane = plane;
|
||||||
|
|
||||||
_calculate_unpack_length (mem, context);
|
_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_CAT_DEBUG (GST_CAT_GL_MEMORY, "new GL texture context:%"
|
||||||
GST_PTR_FORMAT " memory:%p target:%s format:%u dimensions:%ux%u "
|
GST_PTR_FORMAT " memory:%p target:%s format:%u dimensions:%ux%u "
|
||||||
"stride:%u size:%" G_GSIZE_FORMAT, context, mem, target_str,
|
"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);
|
mem->mem.mem.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,9 +360,9 @@ gst_gl_memory_read_pixels (GstGLMemory * gl_mem, gpointer read_pointer)
|
||||||
guint format, type;
|
guint format, type;
|
||||||
guint fbo;
|
guint fbo;
|
||||||
|
|
||||||
format = gst_gl_format_from_gl_texture_type (gl_mem->tex_type);
|
format = gl_mem->tex_format;
|
||||||
type = GL_UNSIGNED_BYTE;
|
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;
|
type = GL_UNSIGNED_SHORT_5_6_5;
|
||||||
|
|
||||||
/* FIXME: avoid creating a framebuffer every download/copy */
|
/* 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;
|
return NULL;
|
||||||
|
|
||||||
/* taken care of by read pixels */
|
/* taken care of by read pixels */
|
||||||
if (gl_mem->tex_type != GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE
|
if (gl_mem->tex_format != GST_GL_LUMINANCE
|
||||||
&& gl_mem->tex_type != GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA)
|
&& gl_mem->tex_format != GST_GL_LUMINANCE_ALPHA)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (info->flags & GST_MAP_READ
|
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 "
|
GST_CAT_TRACE (GST_CAT_GL_MEMORY, "attempting download of texture %u "
|
||||||
"using glGetTexImage", gl_mem->tex_id);
|
"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;
|
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;
|
type = GL_UNSIGNED_SHORT_5_6_5;
|
||||||
|
|
||||||
target = gst_gl_texture_target_to_gl (gl_mem->tex_target);
|
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 = context->gl_vtable;
|
||||||
|
|
||||||
gl_type = GL_UNSIGNED_BYTE;
|
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_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);
|
gl_target = gst_gl_texture_target_to_gl (gl_mem->tex_target);
|
||||||
|
|
||||||
if (USING_OPENGL (context) || USING_GLES3 (context)
|
if (USING_OPENGL (context) || USING_GLES3 (context)
|
||||||
|
@ -614,12 +619,12 @@ _gl_tex_unmap (GstGLMemory * gl_mem, GstMapInfo * info)
|
||||||
* @gl_mem: the source #GstGLMemory
|
* @gl_mem: the source #GstGLMemory
|
||||||
* @tex_id: the destination texture id
|
* @tex_id: the destination texture id
|
||||||
* @out_target: the destination #GstGLTextureTarget
|
* @out_target: the destination #GstGLTextureTarget
|
||||||
* @out_tex_type: the destination #GstVideoGLTextureType
|
* @out_tex_format: the destination #GstGLFormat
|
||||||
* @out_width: the destination width
|
* @out_width: the destination width
|
||||||
* @out_height: the destination height
|
* @out_height: the destination height
|
||||||
*
|
*
|
||||||
* Copies the texture in #GstGLMemory into the texture specified by @tex_id,
|
* 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.
|
* Returns: whether the copy succeeded.
|
||||||
*
|
*
|
||||||
|
@ -627,11 +632,11 @@ _gl_tex_unmap (GstGLMemory * gl_mem, GstMapInfo * info)
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id,
|
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)
|
gint out_width, gint out_height)
|
||||||
{
|
{
|
||||||
const GstGLFuncs *gl;
|
const GstGLFuncs *gl;
|
||||||
guint out_gl_format, out_tex_target;
|
guint out_tex_target;
|
||||||
GstMapInfo sinfo;
|
GstMapInfo sinfo;
|
||||||
guint src_tex_id;
|
guint src_tex_id;
|
||||||
guint fbo[2];
|
guint fbo[2];
|
||||||
|
@ -639,7 +644,6 @@ gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id,
|
||||||
|
|
||||||
gl = src->mem.context->gl_vtable;
|
gl = src->mem.context->gl_vtable;
|
||||||
out_tex_target = gst_gl_texture_target_to_gl (out_target);
|
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) {
|
if (!gl->GenFramebuffers) {
|
||||||
GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Framebuffer objects not supported");
|
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)
|
if (USING_GLES2 (src->mem.context)
|
||||||
&& (src->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE
|
&& (src->tex_format == GST_GL_LUMINANCE
|
||||||
|| src->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA)) {
|
|| src->tex_format == GST_GL_LUMINANCE_ALPHA)) {
|
||||||
GST_CAT_FIXME (GST_CAT_GL_MEMORY,
|
GST_CAT_FIXME (GST_CAT_GL_MEMORY,
|
||||||
"Cannot copy Luminance/Luminance Alpha textures in GLES");
|
"Cannot copy Luminance/Luminance Alpha textures in GLES");
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -682,7 +686,7 @@ gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id,
|
||||||
gl->BindTexture (out_tex_target, tex_id);
|
gl->BindTexture (out_tex_target, tex_id);
|
||||||
gst_gl_query_start_log (GST_GL_BASE_MEMORY_CAST (src)->query,
|
gst_gl_query_start_log (GST_GL_BASE_MEMORY_CAST (src)->query,
|
||||||
GST_CAT_GL_MEMORY, GST_LEVEL_LOG, NULL, "%s", "CopyTexImage2D took");
|
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);
|
out_height, 0);
|
||||||
gst_gl_query_end (GST_GL_BASE_MEMORY_CAST (src)->query);
|
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;
|
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_tex_target = gst_gl_texture_target_to_gl (copy_params->tex_target);
|
||||||
out_gl_format =
|
out_gl_format = copy_params->src->tex_format;
|
||||||
gst_gl_format_from_gl_texture_type (copy_params->src->tex_type);
|
|
||||||
out_gl_type = GL_UNSIGNED_BYTE;
|
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;
|
out_gl_type = GL_UNSIGNED_SHORT_5_6_5;
|
||||||
|
|
||||||
internal_format =
|
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->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);
|
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);
|
dest = g_new0 (GstGLMemory, 1);
|
||||||
|
|
||||||
gst_gl_memory_init (dest, allocator, NULL, src->mem.context, src->tex_target,
|
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)) {
|
if (!GST_MEMORY_FLAG_IS_SET (src, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD)) {
|
||||||
GstMapInfo dinfo;
|
GstMapInfo dinfo;
|
||||||
|
@ -821,7 +825,7 @@ _default_gl_tex_copy (GstGLMemory * src, gssize offset, gssize size)
|
||||||
|
|
||||||
if (!gst_gl_memory_copy_into ((GstGLMemory *) src,
|
if (!gst_gl_memory_copy_into ((GstGLMemory *) src,
|
||||||
((GstGLMemory *) dest)->tex_id, src->tex_target,
|
((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_CAT_WARNING (GST_CAT_GL_MEMORY, "Could not copy GL Memory");
|
||||||
gst_memory_unmap (GST_MEMORY_CAST (dest), &dinfo);
|
gst_memory_unmap (GST_MEMORY_CAST (dest), &dinfo);
|
||||||
goto memcpy;
|
goto memcpy;
|
||||||
|
@ -894,7 +898,7 @@ _default_gl_tex_alloc (GstGLMemoryAllocator * allocator,
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_gl_memory_init (mem, GST_ALLOCATOR_CAST (allocator), NULL,
|
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->parent.alloc_params, params->v_info, params->plane,
|
||||||
params->valign, params->parent.user_data, params->parent.notify);
|
params->valign, params->parent.user_data, params->parent.notify);
|
||||||
|
|
||||||
|
@ -948,12 +952,12 @@ gst_gl_memory_allocator_init (GstGLMemoryAllocator * allocator)
|
||||||
* @gl_mem:a #GstGLMemory
|
* @gl_mem:a #GstGLMemory
|
||||||
* @tex_id:OpenGL texture id
|
* @tex_id:OpenGL texture id
|
||||||
* @target: the #GstGLTextureTarget
|
* @target: the #GstGLTextureTarget
|
||||||
* @tex_type: the #GstVideoGLTextureType
|
* @tex_format: the #GstGLFormat
|
||||||
* @width: width of @tex_id
|
* @width: width of @tex_id
|
||||||
* @height: height of @tex_id
|
* @height: height of @tex_id
|
||||||
*
|
*
|
||||||
* Copies @gl_mem into the texture specfified by @tex_id. The format 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
|
* Returns: Whether the copy suceeded
|
||||||
*
|
*
|
||||||
|
@ -961,15 +965,14 @@ gst_gl_memory_allocator_init (GstGLMemoryAllocator * allocator)
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_gl_memory_copy_into (GstGLMemory * gl_mem, guint tex_id,
|
gst_gl_memory_copy_into (GstGLMemory * gl_mem, guint tex_id,
|
||||||
GstGLTextureTarget target, GstVideoGLTextureType tex_type, gint width,
|
GstGLTextureTarget target, GstGLFormat tex_format, gint width, gint height)
|
||||||
gint height)
|
|
||||||
{
|
{
|
||||||
GstGLMemoryCopyParams copy_params;
|
GstGLMemoryCopyParams copy_params;
|
||||||
|
|
||||||
copy_params.src = gl_mem;
|
copy_params.src = gl_mem;
|
||||||
copy_params.tex_id = tex_id;
|
copy_params.tex_id = tex_id;
|
||||||
copy_params.tex_target = target;
|
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_width = width;
|
||||||
copy_params.out_height = height;
|
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
|
* @gl_mem: a #GstGLMemory
|
||||||
*
|
*
|
||||||
* Returns: the #GstVideoGLTextureType of @gl_mem
|
* Returns: the #GstGLFormat of @gl_mem
|
||||||
*
|
*
|
||||||
* Since: 1.8
|
* Since: 1.12
|
||||||
*/
|
*/
|
||||||
GstVideoGLTextureType
|
GstGLFormat
|
||||||
gst_gl_memory_get_texture_type (GstGLMemory * gl_mem)
|
gst_gl_memory_get_texture_format (GstGLMemory * gl_mem)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (gst_is_gl_memory ((GstMemory *) gl_mem), 0);
|
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
|
* @plane: the video plane @wrapped_data represents
|
||||||
* @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @wrapped_data
|
* @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @wrapped_data
|
||||||
* @target: the #GstGLTextureTarget
|
* @target: the #GstGLTextureTarget
|
||||||
* @tex_type: the #GstVideoGLTextureType
|
* @tex_format: the #GstGLFormat
|
||||||
* @wrapped_data: (allow-none): the optional data pointer to wrap
|
* @wrapped_data: (allow-none): the optional data pointer to wrap
|
||||||
* @gl_handle: the optional OpenGL handle to wrap or 0
|
* @gl_handle: the optional OpenGL handle to wrap or 0
|
||||||
* @user_data: (allow-none): user data to call @notify with
|
* @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,
|
GstGLAllocationParamsFreeFunc free, GstGLContext * context,
|
||||||
GstAllocationParams * alloc_params, GstVideoInfo * v_info,
|
GstAllocationParams * alloc_params, GstVideoInfo * v_info,
|
||||||
guint plane, GstVideoAlignment * valign, GstGLTextureTarget target,
|
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)
|
gpointer user_data, GDestroyNotify notify)
|
||||||
{
|
{
|
||||||
guint i;
|
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);
|
_gst_gl_video_allocation_params_set_video_alignment (params, valign);
|
||||||
params->target = target;
|
params->target = target;
|
||||||
params->tex_type = tex_type;
|
params->tex_format = tex_format;
|
||||||
params->plane = plane;
|
params->plane = plane;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -1193,7 +1196,7 @@ gst_gl_video_allocation_params_init_full (GstGLVideoAllocationParams * params,
|
||||||
* @plane: the video plane of @v_info to allocate
|
* @plane: the video plane of @v_info to allocate
|
||||||
* @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of the texture
|
* @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of the texture
|
||||||
* @target: the #GstGLTextureTarget for the created textures
|
* @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
|
* Returns: a new #GstGLVideoAllocationParams for allocating #GstGLMemory's
|
||||||
*
|
*
|
||||||
|
@ -1203,7 +1206,7 @@ GstGLVideoAllocationParams *
|
||||||
gst_gl_video_allocation_params_new (GstGLContext * context,
|
gst_gl_video_allocation_params_new (GstGLContext * context,
|
||||||
GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane,
|
GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane,
|
||||||
GstVideoAlignment * valign, GstGLTextureTarget target,
|
GstVideoAlignment * valign, GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type)
|
GstGLFormat tex_format)
|
||||||
{
|
{
|
||||||
GstGLVideoAllocationParams *params = g_new0 (GstGLVideoAllocationParams, 1);
|
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,
|
gst_gl_video_allocation_params_copy_data,
|
||||||
(GstGLAllocationParamsFreeFunc)
|
(GstGLAllocationParamsFreeFunc)
|
||||||
gst_gl_video_allocation_params_free_data, context, alloc_params,
|
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);
|
g_free (params);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1231,7 +1234,7 @@ gst_gl_video_allocation_params_new (GstGLContext * context,
|
||||||
* @plane: the video plane @wrapped_data represents
|
* @plane: the video plane @wrapped_data represents
|
||||||
* @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @wrapped_data
|
* @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @wrapped_data
|
||||||
* @target: the #GstGLTextureTarget for @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
|
* @wrapped_data: the data pointer to wrap
|
||||||
* @user_data: (allow-none): user data to call @notify with
|
* @user_data: (allow-none): user data to call @notify with
|
||||||
* @notify: (allow-none): a #GDestroyNotify
|
* @notify: (allow-none): a #GDestroyNotify
|
||||||
|
@ -1244,7 +1247,7 @@ GstGLVideoAllocationParams *
|
||||||
gst_gl_video_allocation_params_new_wrapped_data (GstGLContext * context,
|
gst_gl_video_allocation_params_new_wrapped_data (GstGLContext * context,
|
||||||
GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane,
|
GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane,
|
||||||
GstVideoAlignment * valign, GstGLTextureTarget target,
|
GstVideoAlignment * valign, GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type, gpointer wrapped_data, gpointer user_data,
|
GstGLFormat tex_format, gpointer wrapped_data, gpointer user_data,
|
||||||
GDestroyNotify notify)
|
GDestroyNotify notify)
|
||||||
{
|
{
|
||||||
GstGLVideoAllocationParams *params = g_new0 (GstGLVideoAllocationParams, 1);
|
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,
|
gst_gl_video_allocation_params_copy_data,
|
||||||
(GstGLAllocationParamsFreeFunc)
|
(GstGLAllocationParamsFreeFunc)
|
||||||
gst_gl_video_allocation_params_free_data, context, alloc_params,
|
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)) {
|
notify)) {
|
||||||
g_free (params);
|
g_free (params);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1274,7 +1277,7 @@ gst_gl_video_allocation_params_new_wrapped_data (GstGLContext * context,
|
||||||
* @plane: the video plane @tex_id represents
|
* @plane: the video plane @tex_id represents
|
||||||
* @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @tex_id
|
* @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @tex_id
|
||||||
* @target: the #GstGLTextureTarget for @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
|
* @gl_handle: the GL handle to wrap
|
||||||
* @user_data: (allow-none): user data to call @notify with
|
* @user_data: (allow-none): user data to call @notify with
|
||||||
* @notify: (allow-none): a #GDestroyNotify
|
* @notify: (allow-none): a #GDestroyNotify
|
||||||
|
@ -1291,7 +1294,7 @@ GstGLVideoAllocationParams *
|
||||||
gst_gl_video_allocation_params_new_wrapped_gl_handle (GstGLContext * context,
|
gst_gl_video_allocation_params_new_wrapped_gl_handle (GstGLContext * context,
|
||||||
GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane,
|
GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane,
|
||||||
GstVideoAlignment * valign, GstGLTextureTarget target,
|
GstVideoAlignment * valign, GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type, gpointer gl_handle, gpointer user_data,
|
GstGLFormat tex_format, gpointer gl_handle, gpointer user_data,
|
||||||
GDestroyNotify notify)
|
GDestroyNotify notify)
|
||||||
{
|
{
|
||||||
GstGLVideoAllocationParams *params = g_new0 (GstGLVideoAllocationParams, 1);
|
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,
|
gst_gl_video_allocation_params_copy_data,
|
||||||
(GstGLAllocationParamsFreeFunc)
|
(GstGLAllocationParamsFreeFunc)
|
||||||
gst_gl_video_allocation_params_free_data, context, alloc_params,
|
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)) {
|
notify)) {
|
||||||
g_free (params);
|
g_free (params);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1321,7 +1324,7 @@ gst_gl_video_allocation_params_new_wrapped_gl_handle (GstGLContext * context,
|
||||||
* @plane: the video plane @tex_id represents
|
* @plane: the video plane @tex_id represents
|
||||||
* @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @tex_id
|
* @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @tex_id
|
||||||
* @target: the #GstGLTextureTarget for @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
|
* @tex_id: the GL texture to wrap
|
||||||
* @user_data: (allow-none): user data to call @notify with
|
* @user_data: (allow-none): user data to call @notify with
|
||||||
* @notify: (allow-none): a #GDestroyNotify
|
* @notify: (allow-none): a #GDestroyNotify
|
||||||
|
@ -1334,11 +1337,11 @@ GstGLVideoAllocationParams *
|
||||||
gst_gl_video_allocation_params_new_wrapped_texture (GstGLContext * context,
|
gst_gl_video_allocation_params_new_wrapped_texture (GstGLContext * context,
|
||||||
GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane,
|
GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane,
|
||||||
GstVideoAlignment * valign, GstGLTextureTarget target,
|
GstVideoAlignment * valign, GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type, guint tex_id, gpointer user_data,
|
GstGLFormat tex_format, guint tex_id, gpointer user_data,
|
||||||
GDestroyNotify notify)
|
GDestroyNotify notify)
|
||||||
{
|
{
|
||||||
return gst_gl_video_allocation_params_new_wrapped_gl_handle (context,
|
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);
|
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,
|
_gst_gl_video_allocation_params_set_video_alignment (dest_vid,
|
||||||
src_vid->valign);
|
src_vid->valign);
|
||||||
dest_vid->target = src_vid->target;
|
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;
|
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
|
* @allocator: the @GstGLMemoryAllocator to allocate from
|
||||||
* @buffer: a #GstBuffer to setup
|
* @buffer: a #GstBuffer to setup
|
||||||
* @params: the #GstGLVideoAllocationParams to allocate with
|
* @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
|
* @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
|
* Returns: whether the buffer was correctly setup
|
||||||
*
|
*
|
||||||
|
@ -1409,7 +1412,7 @@ gst_gl_video_allocation_params_copy_data (GstGLVideoAllocationParams * src_vid,
|
||||||
gboolean
|
gboolean
|
||||||
gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator,
|
gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator,
|
||||||
GstBuffer * buffer, GstGLVideoAllocationParams * params,
|
GstBuffer * buffer, GstGLVideoAllocationParams * params,
|
||||||
GstVideoGLTextureType * tex_types, gpointer * wrapped_data,
|
GstGLFormat * tex_formats, gpointer * wrapped_data,
|
||||||
gsize n_wrapped_pointers)
|
gsize n_wrapped_pointers)
|
||||||
{
|
{
|
||||||
GstGLBaseMemoryAllocator *base_allocator;
|
GstGLBaseMemoryAllocator *base_allocator;
|
||||||
|
@ -1436,12 +1439,12 @@ gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator,
|
||||||
for (i = 0; i < n_mem; i++) {
|
for (i = 0; i < n_mem; i++) {
|
||||||
GstGLMemory *gl_mem;
|
GstGLMemory *gl_mem;
|
||||||
|
|
||||||
if (tex_types) {
|
if (tex_formats) {
|
||||||
params->tex_type = tex_types[i];
|
params->tex_format = tex_formats[i];
|
||||||
} else {
|
} else {
|
||||||
params->tex_type =
|
params->tex_format =
|
||||||
gst_gl_texture_type_from_format (params->parent.context,
|
gst_gl_format_from_video_info (params->parent.context,
|
||||||
GST_VIDEO_INFO_FORMAT (params->v_info), i);
|
params->v_info, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
params->plane = i;
|
params->plane = i;
|
||||||
|
|
|
@ -68,7 +68,7 @@ struct _GstGLMemory
|
||||||
|
|
||||||
guint tex_id;
|
guint tex_id;
|
||||||
GstGLTextureTarget tex_target;
|
GstGLTextureTarget tex_target;
|
||||||
GstVideoGLTextureType tex_type;
|
GstGLFormat tex_format;
|
||||||
GstVideoInfo info;
|
GstVideoInfo info;
|
||||||
GstVideoAlignment valign;
|
GstVideoAlignment valign;
|
||||||
guint plane;
|
guint plane;
|
||||||
|
@ -99,7 +99,7 @@ typedef struct _GstGLVideoAllocationParams GstGLVideoAllocationParams;
|
||||||
* @plane: the video plane index to allocate
|
* @plane: the video plane index to allocate
|
||||||
* @valign: the #GstVideoAlignment to align the system representation to (may be %NULL for the default)
|
* @valign: the #GstVideoAlignment to align the system representation to (may be %NULL for the default)
|
||||||
* @target: the #GstGLTextureTarget to allocate
|
* @target: the #GstGLTextureTarget to allocate
|
||||||
* @tex_type: the #GstVideoGLTextureType to allocate
|
* @tex_fomrat: the #GstGLFormat to allocate
|
||||||
*/
|
*/
|
||||||
struct _GstGLVideoAllocationParams
|
struct _GstGLVideoAllocationParams
|
||||||
{
|
{
|
||||||
|
@ -109,7 +109,7 @@ struct _GstGLVideoAllocationParams
|
||||||
guint plane;
|
guint plane;
|
||||||
GstVideoAlignment *valign;
|
GstVideoAlignment *valign;
|
||||||
GstGLTextureTarget target;
|
GstGLTextureTarget target;
|
||||||
GstVideoGLTextureType tex_type;
|
GstGLFormat tex_format;
|
||||||
|
|
||||||
/* <private> */
|
/* <private> */
|
||||||
gpointer _padding[GST_PADDING];
|
gpointer _padding[GST_PADDING];
|
||||||
|
@ -127,7 +127,7 @@ gboolean gst_gl_video_allocation_params_init_full (GstGLVideoAlloc
|
||||||
guint plane,
|
guint plane,
|
||||||
GstVideoAlignment * valign,
|
GstVideoAlignment * valign,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
gpointer wrapped_data,
|
gpointer wrapped_data,
|
||||||
gpointer gl_handle,
|
gpointer gl_handle,
|
||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
|
@ -139,7 +139,7 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new (GstGLContext *
|
||||||
guint plane,
|
guint plane,
|
||||||
GstVideoAlignment * valign,
|
GstVideoAlignment * valign,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type);
|
GstGLFormat tex_format);
|
||||||
GST_EXPORT
|
GST_EXPORT
|
||||||
GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_data (GstGLContext * context,
|
GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_data (GstGLContext * context,
|
||||||
GstAllocationParams * alloc_params,
|
GstAllocationParams * alloc_params,
|
||||||
|
@ -147,7 +147,7 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_data
|
||||||
guint plane,
|
guint plane,
|
||||||
GstVideoAlignment * valign,
|
GstVideoAlignment * valign,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
gpointer wrapped_data,
|
gpointer wrapped_data,
|
||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GDestroyNotify notify);
|
GDestroyNotify notify);
|
||||||
|
@ -159,7 +159,7 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_texture
|
||||||
guint plane,
|
guint plane,
|
||||||
GstVideoAlignment * valign,
|
GstVideoAlignment * valign,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
guint tex_id,
|
guint tex_id,
|
||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GDestroyNotify notify);
|
GDestroyNotify notify);
|
||||||
|
@ -171,7 +171,7 @@ GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_gl_handl
|
||||||
guint plane,
|
guint plane,
|
||||||
GstVideoAlignment * valign,
|
GstVideoAlignment * valign,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
gpointer gl_handle,
|
gpointer gl_handle,
|
||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GDestroyNotify notify);
|
GDestroyNotify notify);
|
||||||
|
@ -237,7 +237,7 @@ void gst_gl_memory_init (GstGLMemory * mem,
|
||||||
GstMemory * parent,
|
GstMemory * parent,
|
||||||
GstGLContext * context,
|
GstGLContext * context,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
GstAllocationParams *params,
|
GstAllocationParams *params,
|
||||||
GstVideoInfo * info,
|
GstVideoInfo * info,
|
||||||
guint plane,
|
guint plane,
|
||||||
|
@ -249,14 +249,14 @@ GST_EXPORT
|
||||||
gboolean gst_gl_memory_copy_into (GstGLMemory *gl_mem,
|
gboolean gst_gl_memory_copy_into (GstGLMemory *gl_mem,
|
||||||
guint tex_id,
|
guint tex_id,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
gint width,
|
gint width,
|
||||||
gint height);
|
gint height);
|
||||||
GST_EXPORT
|
GST_EXPORT
|
||||||
gboolean gst_gl_memory_copy_teximage (GstGLMemory * src,
|
gboolean gst_gl_memory_copy_teximage (GstGLMemory * src,
|
||||||
guint tex_id,
|
guint tex_id,
|
||||||
GstGLTextureTarget out_target,
|
GstGLTextureTarget out_target,
|
||||||
GstVideoGLTextureType out_tex_type,
|
GstGLFormat out_tex_format,
|
||||||
gint width,
|
gint width,
|
||||||
gint height);
|
gint height);
|
||||||
|
|
||||||
|
@ -273,7 +273,7 @@ gint gst_gl_memory_get_texture_width (GstGLMemory * gl_me
|
||||||
GST_EXPORT
|
GST_EXPORT
|
||||||
gint gst_gl_memory_get_texture_height (GstGLMemory * gl_mem);
|
gint gst_gl_memory_get_texture_height (GstGLMemory * gl_mem);
|
||||||
GST_EXPORT
|
GST_EXPORT
|
||||||
GstVideoGLTextureType gst_gl_memory_get_texture_type (GstGLMemory * gl_mem);
|
GstGLFormat gst_gl_memory_get_texture_format (GstGLMemory * gl_mem);
|
||||||
GST_EXPORT
|
GST_EXPORT
|
||||||
GstGLTextureTarget gst_gl_memory_get_texture_target (GstGLMemory * gl_mem);
|
GstGLTextureTarget gst_gl_memory_get_texture_target (GstGLMemory * gl_mem);
|
||||||
GST_EXPORT
|
GST_EXPORT
|
||||||
|
@ -283,7 +283,7 @@ GST_EXPORT
|
||||||
gboolean gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator,
|
gboolean gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator,
|
||||||
GstBuffer * buffer,
|
GstBuffer * buffer,
|
||||||
GstGLVideoAllocationParams * params,
|
GstGLVideoAllocationParams * params,
|
||||||
GstVideoGLTextureType *tex_types,
|
GstGLFormat *tex_formats,
|
||||||
gpointer *wrapped_data,
|
gpointer *wrapped_data,
|
||||||
gsize n_wrapped_pointers);
|
gsize n_wrapped_pointers);
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
/* in */
|
/* in */
|
||||||
GstGLMemoryPBO *src;
|
GstGLMemoryPBO *src;
|
||||||
GstVideoGLTextureType out_format;
|
GstGLFormat out_format;
|
||||||
guint out_width, out_height;
|
guint out_width, out_height;
|
||||||
guint out_stride;
|
guint out_stride;
|
||||||
gboolean respecify;
|
gboolean respecify;
|
||||||
|
@ -218,8 +218,8 @@ static gboolean
|
||||||
_read_pixels_to_pbo (GstGLMemoryPBO * gl_mem)
|
_read_pixels_to_pbo (GstGLMemoryPBO * gl_mem)
|
||||||
{
|
{
|
||||||
if (!gl_mem->pbo || !CONTEXT_SUPPORTS_PBO_DOWNLOAD (gl_mem->mem.mem.context)
|
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_format == GST_GL_LUMINANCE
|
||||||
|| gl_mem->mem.tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA)
|
|| gl_mem->mem.tex_format == GST_GL_LUMINANCE_ALPHA)
|
||||||
/* unsupported */
|
/* unsupported */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -416,13 +416,13 @@ _gl_mem_copy_thread (GstGLContext * context, gpointer data)
|
||||||
out_stride = copy_params->out_stride;
|
out_stride = copy_params->out_stride;
|
||||||
|
|
||||||
gl = context->gl_vtable;
|
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;
|
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;
|
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;
|
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;
|
in_gl_type = GL_UNSIGNED_SHORT_5_6_5;
|
||||||
|
|
||||||
if (!gl->GenFramebuffers) {
|
if (!gl->GenFramebuffers) {
|
||||||
|
@ -448,7 +448,7 @@ _gl_mem_copy_thread (GstGLContext * context, gpointer data)
|
||||||
guint out_gl_type;
|
guint out_gl_type;
|
||||||
|
|
||||||
out_gl_type = GL_UNSIGNED_BYTE;
|
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;
|
out_gl_type = GL_UNSIGNED_SHORT_5_6_5;
|
||||||
|
|
||||||
internal_format =
|
internal_format =
|
||||||
|
@ -572,7 +572,7 @@ _gl_mem_copy (GstGLMemoryPBO * src, gssize offset, gssize size)
|
||||||
|
|
||||||
dest = (GstMemory *) g_new0 (GstGLMemoryPBO, 1);
|
dest = (GstMemory *) g_new0 (GstGLMemoryPBO, 1);
|
||||||
gst_gl_memory_init (GST_GL_MEMORY_CAST (dest), allocator, NULL,
|
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);
|
&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)) {
|
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,
|
if (!gst_gl_memory_copy_into ((GstGLMemory *) src,
|
||||||
((GstGLMemory *) dest)->tex_id, src->mem.tex_target,
|
((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_CAT_WARNING (GST_CAT_GL_MEMORY, "Could not copy GL Memory");
|
||||||
gst_memory_unmap (GST_MEMORY_CAST (dest), &dinfo);
|
gst_memory_unmap (GST_MEMORY_CAST (dest), &dinfo);
|
||||||
goto memcpy;
|
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),
|
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->parent.alloc_params, params->v_info, params->plane,
|
||||||
params->valign, params->parent.user_data, params->parent.notify);
|
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
|
* @gl_mem:a #GstGLMemoryPBO
|
||||||
* @tex_id: the destination texture id
|
* @tex_id: the destination texture id
|
||||||
* @target: the destination #GstGLTextureTarget
|
* @target: the destination #GstGLTextureTarget
|
||||||
* @tex_type: the destination #GstVideoGLTextureType
|
* @tex_format: the destination #GstGLFormat
|
||||||
* @width: width of @tex_id
|
* @width: width of @tex_id
|
||||||
* @height: height of @tex_id
|
* @height: height of @tex_id
|
||||||
* @stride: stride of the backing texture data
|
* @stride: stride of the backing texture data
|
||||||
* @respecify: whether to copy the data or copy per texel
|
* @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
|
* 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
|
* 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
|
* 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
|
gboolean
|
||||||
gst_gl_memory_pbo_copy_into_texture (GstGLMemoryPBO * gl_mem, guint tex_id,
|
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)
|
gint height, gint stride, gboolean respecify)
|
||||||
{
|
{
|
||||||
GstGLMemoryPBOCopyParams copy_params;
|
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.src = gl_mem;
|
||||||
copy_params.tex_target = target;
|
copy_params.tex_target = target;
|
||||||
copy_params.tex_id = tex_id;
|
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_width = width;
|
||||||
copy_params.out_height = height;
|
copy_params.out_height = height;
|
||||||
copy_params.out_stride = stride;
|
copy_params.out_stride = stride;
|
||||||
|
|
|
@ -78,7 +78,7 @@ GST_EXPORT
|
||||||
gboolean gst_gl_memory_pbo_copy_into_texture (GstGLMemoryPBO *gl_mem,
|
gboolean gst_gl_memory_pbo_copy_into_texture (GstGLMemoryPBO *gl_mem,
|
||||||
guint tex_id,
|
guint tex_id,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
gint width,
|
gint width,
|
||||||
gint height,
|
gint height,
|
||||||
gint stride,
|
gint stride,
|
||||||
|
|
|
@ -362,7 +362,7 @@ gst_gl_composition_overlay_upload (GstGLCompositionOverlay * overlay,
|
||||||
|
|
||||||
params = gst_gl_video_allocation_params_new_wrapped_data (overlay->context,
|
params = gst_gl_video_allocation_params_new_wrapped_data (overlay->context,
|
||||||
NULL, &comp_frame->info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
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);
|
_video_frame_unmap_and_free);
|
||||||
|
|
||||||
comp_gl_memory =
|
comp_gl_memory =
|
||||||
|
|
|
@ -83,9 +83,9 @@ _gl_rbo_create (GstGLRenderbuffer * gl_mem, GError ** error)
|
||||||
GLenum tex_format;
|
GLenum tex_format;
|
||||||
GLenum renderbuffer_type;
|
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;
|
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;
|
renderbuffer_type = GL_UNSIGNED_SHORT_5_6_5;
|
||||||
|
|
||||||
internal_format =
|
internal_format =
|
||||||
|
@ -109,12 +109,20 @@ _gl_rbo_create (GstGLRenderbuffer * gl_mem, GError ** error)
|
||||||
static void
|
static void
|
||||||
gst_gl_renderbuffer_init (GstGLRenderbuffer * mem, GstAllocator * allocator,
|
gst_gl_renderbuffer_init (GstGLRenderbuffer * mem, GstAllocator * allocator,
|
||||||
GstMemory * parent, GstGLContext * context,
|
GstMemory * parent, GstGLContext * context,
|
||||||
GstVideoGLTextureType renderbuffer_type, GstAllocationParams * params,
|
GstGLFormat renderbuffer_format, GstAllocationParams * params,
|
||||||
guint width, guint height, gpointer user_data, GDestroyNotify notify)
|
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->width = width;
|
||||||
mem->height = height;
|
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_CAT_DEBUG (GST_CAT_GL_RENDERBUFFER, "new GL renderbuffer context:%"
|
||||||
GST_PTR_FORMAT " memory:%p format:%u dimensions:%ux%u ", context, mem,
|
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));
|
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,
|
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.alloc_params, params->width, params->height,
|
||||||
params->parent.user_data, params->parent.notify);
|
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
|
* @gl_mem: a #GstGLRenderbuffer
|
||||||
*
|
*
|
||||||
* Returns: the #GstVideoGLTextureType of @gl_mem
|
* Returns: the #GstGLFormat of @gl_mem
|
||||||
*
|
*
|
||||||
* Since: 1.10
|
* Since: 1.12
|
||||||
*/
|
*/
|
||||||
GstVideoGLTextureType
|
GstGLFormat
|
||||||
gst_gl_renderbuffer_get_type (GstGLRenderbuffer * gl_mem)
|
gst_gl_renderbuffer_get_format (GstGLRenderbuffer * gl_mem)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (gst_is_gl_renderbuffer ((GstMemory *) gl_mem), 0);
|
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);
|
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->width = src_vid->width;
|
||||||
dest_vid->height = src_vid->height;
|
dest_vid->height = src_vid->height;
|
||||||
}
|
}
|
||||||
|
@ -365,7 +373,7 @@ static gboolean
|
||||||
guint alloc_flags, GstGLAllocationParamsCopyFunc copy,
|
guint alloc_flags, GstGLAllocationParamsCopyFunc copy,
|
||||||
GstGLAllocationParamsFreeFunc free, GstGLContext * context,
|
GstGLAllocationParamsFreeFunc free, GstGLContext * context,
|
||||||
GstAllocationParams * alloc_params, guint width, guint height,
|
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)
|
gpointer gl_handle, gpointer user_data, GDestroyNotify notify)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (params != NULL, FALSE);
|
g_return_val_if_fail (params != NULL, FALSE);
|
||||||
|
@ -380,7 +388,7 @@ static gboolean
|
||||||
wrapped_data, gl_handle, user_data, notify))
|
wrapped_data, gl_handle, user_data, notify))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
params->renderbuffer_type = renderbuffer_type;
|
params->renderbuffer_format = renderbuffer_format;
|
||||||
params->width = width;
|
params->width = width;
|
||||||
params->height = height;
|
params->height = height;
|
||||||
|
|
||||||
|
@ -393,7 +401,7 @@ static gboolean
|
||||||
* @alloc_params: (allow-none): the #GstAllocationParams for sysmem mappings of the texture
|
* @alloc_params: (allow-none): the #GstAllocationParams for sysmem mappings of the texture
|
||||||
* @width: the width of the renderbuffer
|
* @width: the width of the renderbuffer
|
||||||
* @height: the height 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
|
* Returns: a new #GstGLRenderbufferAllocationParams for allocating #GstGLRenderbuffer's
|
||||||
*
|
*
|
||||||
|
@ -401,7 +409,7 @@ static gboolean
|
||||||
*/
|
*/
|
||||||
GstGLRenderbufferAllocationParams *
|
GstGLRenderbufferAllocationParams *
|
||||||
gst_gl_renderbuffer_allocation_params_new (GstGLContext * context,
|
gst_gl_renderbuffer_allocation_params_new (GstGLContext * context,
|
||||||
GstAllocationParams * alloc_params, GstVideoGLTextureType renderbuffer_type,
|
GstAllocationParams * alloc_params, GstGLFormat renderbuffer_format,
|
||||||
guint width, guint height)
|
guint width, guint height)
|
||||||
{
|
{
|
||||||
GstGLRenderbufferAllocationParams *params =
|
GstGLRenderbufferAllocationParams *params =
|
||||||
|
@ -413,7 +421,7 @@ gst_gl_renderbuffer_allocation_params_new (GstGLContext * context,
|
||||||
GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
|
GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
|
||||||
(GstGLAllocationParamsCopyFunc) _gst_gl_rb_alloc_params_copy_data,
|
(GstGLAllocationParamsCopyFunc) _gst_gl_rb_alloc_params_copy_data,
|
||||||
(GstGLAllocationParamsFreeFunc) _gst_gl_rb_alloc_params_free_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)) {
|
NULL, NULL)) {
|
||||||
g_free (params);
|
g_free (params);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -428,7 +436,7 @@ gst_gl_renderbuffer_allocation_params_new (GstGLContext * context,
|
||||||
* @alloc_params: (allow-none): the #GstAllocationParams for @tex_id
|
* @alloc_params: (allow-none): the #GstAllocationParams for @tex_id
|
||||||
* @width: the width of the renderbuffer
|
* @width: the width of the renderbuffer
|
||||||
* @height: the height 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
|
* @gl_handle: the GL handle to wrap
|
||||||
* @user_data: (allow-none): user data to call @notify with
|
* @user_data: (allow-none): user data to call @notify with
|
||||||
* @notify: (allow-none): a #GDestroyNotify
|
* @notify: (allow-none): a #GDestroyNotify
|
||||||
|
@ -440,7 +448,7 @@ gst_gl_renderbuffer_allocation_params_new (GstGLContext * context,
|
||||||
*/
|
*/
|
||||||
GstGLRenderbufferAllocationParams *
|
GstGLRenderbufferAllocationParams *
|
||||||
gst_gl_renderbuffer_allocation_params_new_wrapped (GstGLContext * context,
|
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,
|
guint width, guint height, gpointer gl_handle, gpointer user_data,
|
||||||
GDestroyNotify notify)
|
GDestroyNotify notify)
|
||||||
{
|
{
|
||||||
|
@ -453,7 +461,7 @@ gst_gl_renderbuffer_allocation_params_new_wrapped (GstGLContext * context,
|
||||||
GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
|
GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
|
||||||
(GstGLAllocationParamsCopyFunc) _gst_gl_rb_alloc_params_copy_data,
|
(GstGLAllocationParamsCopyFunc) _gst_gl_rb_alloc_params_copy_data,
|
||||||
(GstGLAllocationParamsFreeFunc) _gst_gl_rb_alloc_params_free_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)) {
|
gl_handle, user_data, notify)) {
|
||||||
g_free (params);
|
g_free (params);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -63,7 +63,7 @@ struct _GstGLRenderbuffer
|
||||||
GstGLBaseMemory mem;
|
GstGLBaseMemory mem;
|
||||||
|
|
||||||
guint renderbuffer_id;
|
guint renderbuffer_id;
|
||||||
GstVideoGLTextureType renderbuffer_type;
|
GstGLFormat renderbuffer_format;
|
||||||
guint width;
|
guint width;
|
||||||
guint height;
|
guint height;
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
GstGLAllocationParams parent;
|
GstGLAllocationParams parent;
|
||||||
|
|
||||||
GstVideoGLTextureType renderbuffer_type;
|
GstGLFormat renderbuffer_format;
|
||||||
guint width;
|
guint width;
|
||||||
guint height;
|
guint height;
|
||||||
|
|
||||||
|
@ -119,13 +119,13 @@ typedef struct
|
||||||
|
|
||||||
GstGLRenderbufferAllocationParams * gst_gl_renderbuffer_allocation_params_new (GstGLContext * context,
|
GstGLRenderbufferAllocationParams * gst_gl_renderbuffer_allocation_params_new (GstGLContext * context,
|
||||||
GstAllocationParams * alloc_params,
|
GstAllocationParams * alloc_params,
|
||||||
GstVideoGLTextureType renderbuffer_type,
|
GstGLFormat renderbuffer_format,
|
||||||
guint width,
|
guint width,
|
||||||
guint height);
|
guint height);
|
||||||
|
|
||||||
GstGLRenderbufferAllocationParams * gst_gl_renderbuffer_allocation_params_new_wrapped (GstGLContext * context,
|
GstGLRenderbufferAllocationParams * gst_gl_renderbuffer_allocation_params_new_wrapped (GstGLContext * context,
|
||||||
GstAllocationParams * alloc_params,
|
GstAllocationParams * alloc_params,
|
||||||
GstVideoGLTextureType renderbuffer_type,
|
GstGLFormat renderbuffer_format,
|
||||||
guint width,
|
guint width,
|
||||||
guint height,
|
guint height,
|
||||||
gpointer gl_handle,
|
gpointer gl_handle,
|
||||||
|
@ -138,7 +138,7 @@ gboolean gst_is_gl_renderbuffer (GstMemory * mem);
|
||||||
/* accessors */
|
/* accessors */
|
||||||
gint gst_gl_renderbuffer_get_width (GstGLRenderbuffer * gl_mem);
|
gint gst_gl_renderbuffer_get_width (GstGLRenderbuffer * gl_mem);
|
||||||
gint gst_gl_renderbuffer_get_height (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);
|
guint gst_gl_renderbuffer_get_id (GstGLRenderbuffer * gl_mem);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
|
@ -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->parent.wrapped_data = raw->in_frame->frame.data[i];
|
||||||
raw->params->plane = i;
|
raw->params->plane = i;
|
||||||
raw->params->tex_type =
|
raw->params->tex_format =
|
||||||
gst_gl_texture_type_from_format (raw->upload->context,
|
gst_gl_format_from_video_info (raw->upload->context, in_info, i);
|
||||||
GST_VIDEO_INFO_FORMAT (in_info), i);
|
|
||||||
|
|
||||||
tex =
|
tex =
|
||||||
gst_gl_base_memory_alloc (allocator,
|
gst_gl_base_memory_alloc (allocator,
|
||||||
|
|
|
@ -2094,8 +2094,8 @@ _do_view_convert (GstGLContext * context, GstGLViewConvert * viewconvert)
|
||||||
height = gst_gl_memory_get_texture_height (out_tex);
|
height = gst_gl_memory_get_texture_height (out_tex);
|
||||||
gst_video_info_set_format (&temp_info, GST_VIDEO_FORMAT_RGBA, width,
|
gst_video_info_set_format (&temp_info, GST_VIDEO_FORMAT_RGBA, width,
|
||||||
height);
|
height);
|
||||||
if (out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE
|
if (out_tex->tex_format == GST_GL_LUMINANCE
|
||||||
|| out_tex->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA
|
|| out_tex->tex_format == GST_GL_LUMINANCE_ALPHA
|
||||||
|| out_width != width || out_height != height) {
|
|| out_width != width || out_height != height) {
|
||||||
/* Luminance formats are not color renderable */
|
/* Luminance formats are not color renderable */
|
||||||
/* renderering to a framebuffer only renders the intersection of all
|
/* 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));
|
GST_ALLOCATOR (gst_gl_memory_allocator_get_default (context));
|
||||||
base_mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
|
base_mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
|
||||||
params = gst_gl_video_allocation_params_new (context, NULL, &temp_info,
|
params = gst_gl_video_allocation_params_new (context, NULL, &temp_info,
|
||||||
0, NULL, viewconvert->to_texture_target,
|
0, NULL, viewconvert->to_texture_target, GST_GL_RGBA);
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
|
|
||||||
|
|
||||||
priv->out_tex[j] =
|
priv->out_tex[j] =
|
||||||
(GstGLMemory *) gst_gl_base_memory_alloc (base_mem_allocator,
|
(GstGLMemory *) gst_gl_base_memory_alloc (base_mem_allocator,
|
||||||
|
@ -2172,7 +2171,7 @@ out:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
gst_gl_memory_copy_into (priv->out_tex[j], out_tex->tex_id,
|
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);
|
gst_memory_unmap ((GstMemory *) out_tex, &to_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1357,7 +1357,7 @@ retry:
|
||||||
|
|
||||||
params = gst_gl_video_allocation_params_new (self->gl_context, NULL,
|
params = gst_gl_video_allocation_params_new (self->gl_context, NULL,
|
||||||
&state->info, 0, NULL, GST_GL_TEXTURE_TARGET_EXTERNAL_OES,
|
&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,
|
self->oes_mem = (GstGLMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
|
||||||
(GstGLAllocationParams *) params);
|
(GstGLAllocationParams *) params);
|
||||||
|
|
|
@ -107,15 +107,14 @@ _create_glmem (GstAppleCoreVideoPixelBuffer * gpixbuf,
|
||||||
return gst_video_texture_cache_create_memory (cache, gpixbuf, plane, size);
|
return gst_video_texture_cache_create_memory (cache, gpixbuf, plane, size);
|
||||||
#else
|
#else
|
||||||
GstIOSurfaceMemory *mem;
|
GstIOSurfaceMemory *mem;
|
||||||
GstVideoGLTextureType tex_type =
|
GstGLFormat tex_format =
|
||||||
gst_gl_texture_type_from_format (cache->ctx, GST_VIDEO_INFO_FORMAT (info),
|
gst_gl_format_from_video_info (cache->ctx, info, plane);
|
||||||
plane);
|
|
||||||
CVPixelBufferRef pixel_buf = gpixbuf->buf;
|
CVPixelBufferRef pixel_buf = gpixbuf->buf;
|
||||||
IOSurfaceRef surface = CVPixelBufferGetIOSurface (pixel_buf);
|
IOSurfaceRef surface = CVPixelBufferGetIOSurface (pixel_buf);
|
||||||
|
|
||||||
CFRetain (pixel_buf);
|
CFRetain (pixel_buf);
|
||||||
mem = gst_io_surface_memory_wrapped (cache->ctx,
|
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);
|
info, plane, NULL, pixel_buf, (GDestroyNotify) CFRelease);
|
||||||
return GST_MEMORY_CAST (mem);
|
return GST_MEMORY_CAST (mem);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -132,7 +132,7 @@ static GstIOSGLMemory *
|
||||||
_ios_gl_memory_new (GstGLContext * context,
|
_ios_gl_memory_new (GstGLContext * context,
|
||||||
GstAppleCoreVideoMemory * cv_mem,
|
GstAppleCoreVideoMemory * cv_mem,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
guint tex_id,
|
guint tex_id,
|
||||||
GstVideoInfo * info,
|
GstVideoInfo * info,
|
||||||
guint plane,
|
guint plane,
|
||||||
|
@ -144,7 +144,7 @@ _ios_gl_memory_new (GstGLContext * context,
|
||||||
mem->gl_mem.tex_id = tex_id;
|
mem->gl_mem.tex_id = tex_id;
|
||||||
mem->gl_mem.texture_wrapped = TRUE;
|
mem->gl_mem.texture_wrapped = TRUE;
|
||||||
gst_gl_memory_init (&mem->gl_mem, _ios_gl_memory_allocator, NULL, context,
|
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->cv_mem = cv_mem;
|
||||||
mem->gl_data = gl_data;
|
mem->gl_data = gl_data;
|
||||||
mem->gl_notify = gl_notify;
|
mem->gl_notify = gl_notify;
|
||||||
|
@ -158,12 +158,12 @@ GstIOSGLMemory *
|
||||||
gst_ios_gl_memory_new_wrapped (GstGLContext * context,
|
gst_ios_gl_memory_new_wrapped (GstGLContext * context,
|
||||||
GstAppleCoreVideoMemory * cv_mem,
|
GstAppleCoreVideoMemory * cv_mem,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
guint tex_id,
|
guint tex_id,
|
||||||
GstVideoInfo * info,
|
GstVideoInfo * info,
|
||||||
guint plane,
|
guint plane,
|
||||||
GstVideoAlignment * valign, gpointer gl_data, GDestroyNotify gl_notify)
|
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);
|
plane, valign, gl_data, gl_notify);
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ GstIOSGLMemory *
|
||||||
gst_ios_gl_memory_new_wrapped (GstGLContext * context,
|
gst_ios_gl_memory_new_wrapped (GstGLContext * context,
|
||||||
GstAppleCoreVideoMemory *cv_mem,
|
GstAppleCoreVideoMemory *cv_mem,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
guint tex_id,
|
guint tex_id,
|
||||||
GstVideoInfo * info,
|
GstVideoInfo * info,
|
||||||
guint plane,
|
guint plane,
|
||||||
|
|
|
@ -166,7 +166,7 @@ static GstIOSurfaceMemory *
|
||||||
_io_surface_memory_new (GstGLContext * context,
|
_io_surface_memory_new (GstGLContext * context,
|
||||||
IOSurfaceRef surface,
|
IOSurfaceRef surface,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
GstVideoInfo * info,
|
GstVideoInfo * info,
|
||||||
guint plane,
|
guint plane,
|
||||||
GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify)
|
GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify)
|
||||||
|
@ -177,7 +177,7 @@ _io_surface_memory_new (GstGLContext * context,
|
||||||
|
|
||||||
mem = g_new0 (GstIOSurfaceMemory, 1);
|
mem = g_new0 (GstIOSurfaceMemory, 1);
|
||||||
gst_gl_memory_init (&mem->gl_mem, _io_surface_memory_allocator, NULL, context,
|
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);
|
GST_MINI_OBJECT_FLAG_SET (mem, GST_MEMORY_FLAG_READONLY);
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ GstIOSurfaceMemory *
|
||||||
gst_io_surface_memory_wrapped (GstGLContext * context,
|
gst_io_surface_memory_wrapped (GstGLContext * context,
|
||||||
IOSurfaceRef surface,
|
IOSurfaceRef surface,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
GstVideoInfo * info,
|
GstVideoInfo * info,
|
||||||
guint plane,
|
guint plane,
|
||||||
GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify)
|
GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify)
|
||||||
|
@ -214,15 +214,12 @@ _io_surface_memory_set_surface (GstIOSurfaceMemory * memory,
|
||||||
if (surface) {
|
if (surface) {
|
||||||
GLuint tex_id, tex_target, texifmt, texfmt;
|
GLuint tex_id, tex_target, texifmt, texfmt;
|
||||||
guint plane;
|
guint plane;
|
||||||
GstVideoGLTextureType textype;
|
|
||||||
CGLError cglError;
|
CGLError cglError;
|
||||||
|
|
||||||
plane = gl_mem->plane;
|
plane = gl_mem->plane;
|
||||||
tex_id = gl_mem->tex_id;
|
tex_id = gl_mem->tex_id;
|
||||||
tex_target = gst_gl_texture_target_to_gl (gl_mem->tex_target);
|
tex_target = gst_gl_texture_target_to_gl (gl_mem->tex_target);
|
||||||
textype = gst_gl_texture_type_from_format (context,
|
texifmt = gst_gl_format_from_video_info (context, &gl_mem->info, plane);
|
||||||
GST_VIDEO_INFO_FORMAT (&gl_mem->info), plane);
|
|
||||||
texifmt = gst_gl_format_from_gl_texture_type (textype);
|
|
||||||
texfmt =
|
texfmt =
|
||||||
gst_gl_sized_gl_format_from_gl_format_type (context, texifmt,
|
gst_gl_sized_gl_format_from_gl_format_type (context, texifmt,
|
||||||
GL_UNSIGNED_BYTE);
|
GL_UNSIGNED_BYTE);
|
||||||
|
|
|
@ -53,7 +53,7 @@ GstIOSurfaceMemory *
|
||||||
gst_io_surface_memory_wrapped (GstGLContext * context,
|
gst_io_surface_memory_wrapped (GstGLContext * context,
|
||||||
IOSurfaceRef surface,
|
IOSurfaceRef surface,
|
||||||
GstGLTextureTarget target,
|
GstGLTextureTarget target,
|
||||||
GstVideoGLTextureType tex_type,
|
GstGLFormat tex_format,
|
||||||
GstVideoInfo * info,
|
GstVideoInfo * info,
|
||||||
guint plane,
|
guint plane,
|
||||||
GstVideoAlignment *valign,
|
GstVideoAlignment *valign,
|
||||||
|
|
|
@ -159,7 +159,7 @@ _do_create_memory (GstGLContext * context, ContextThreadData * data)
|
||||||
GstGLTextureTarget gl_target;
|
GstGLTextureTarget gl_target;
|
||||||
GstAppleCoreVideoMemory *memory;
|
GstAppleCoreVideoMemory *memory;
|
||||||
GstIOSGLMemory *gl_memory;
|
GstIOSGLMemory *gl_memory;
|
||||||
GstVideoGLTextureType textype;
|
GstGLFormat texformat;
|
||||||
|
|
||||||
switch (GST_VIDEO_INFO_FORMAT (&cache->input_info)) {
|
switch (GST_VIDEO_INFO_FORMAT (&cache->input_info)) {
|
||||||
case GST_VIDEO_FORMAT_BGRA:
|
case GST_VIDEO_FORMAT_BGRA:
|
||||||
|
@ -170,21 +170,20 @@ _do_create_memory (GstGLContext * context, ContextThreadData * data)
|
||||||
GL_RGBA, GL_UNSIGNED_BYTE, 0, &texture) != kCVReturnSuccess)
|
GL_RGBA, GL_UNSIGNED_BYTE, 0, &texture) != kCVReturnSuccess)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
textype = GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
|
texformat = GST_GL_RGBA;
|
||||||
plane = 0;
|
plane = 0;
|
||||||
goto success;
|
goto success;
|
||||||
case GST_VIDEO_FORMAT_NV12: {
|
case GST_VIDEO_FORMAT_NV12: {
|
||||||
GLenum texifmt, texfmt;
|
GstGLFormat texifmt, texfmt;
|
||||||
|
|
||||||
if (plane == 0)
|
if (plane == 0)
|
||||||
textype = GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE;
|
texformat = GST_GL_LUMINANCE;
|
||||||
else
|
else
|
||||||
textype = GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA;
|
texformat = GST_GL_LUMINANCE_ALPHA;
|
||||||
texifmt = gst_gl_format_from_gl_texture_type (textype);
|
texfmt = gst_gl_sized_gl_format_from_gl_format_type (cache->ctx, texformat, GL_UNSIGNED_BYTE);
|
||||||
texfmt = gst_gl_sized_gl_format_from_gl_format_type (cache->ctx, texifmt, GL_UNSIGNED_BYTE);
|
|
||||||
|
|
||||||
if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
|
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_WIDTH (&cache->input_info, plane),
|
||||||
GST_VIDEO_INFO_COMP_HEIGHT (&cache->input_info, plane),
|
GST_VIDEO_INFO_COMP_HEIGHT (&cache->input_info, plane),
|
||||||
texfmt, GL_UNSIGNED_BYTE, plane, &texture) != kCVReturnSuccess)
|
texfmt, GL_UNSIGNED_BYTE, plane, &texture) != kCVReturnSuccess)
|
||||||
|
@ -205,7 +204,7 @@ success: {
|
||||||
gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture));
|
gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture));
|
||||||
memory = gst_apple_core_video_memory_new_wrapped (gpixbuf, plane, size);
|
memory = gst_apple_core_video_memory_new_wrapped (gpixbuf, plane, size);
|
||||||
gl_memory = gst_ios_gl_memory_new_wrapped (context, memory,
|
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);
|
plane, NULL, texture_data, (GDestroyNotify) gst_video_texture_cache_release_texture);
|
||||||
|
|
||||||
data->memory = GST_MEMORY_CAST (gl_memory);
|
data->memory = GST_MEMORY_CAST (gl_memory);
|
||||||
|
|
|
@ -148,14 +148,14 @@ check_conversion (TestFrame * frames, guint size)
|
||||||
/* create GL buffer */
|
/* create GL buffer */
|
||||||
inbuf = gst_buffer_new ();
|
inbuf = gst_buffer_new ();
|
||||||
for (j = 0; j < GST_VIDEO_INFO_N_PLANES (&in_info); j++) {
|
for (j = 0; j < GST_VIDEO_INFO_N_PLANES (&in_info); j++) {
|
||||||
GstVideoGLTextureType tex_type = gst_gl_texture_type_from_format (context,
|
GstGLFormat tex_format = gst_gl_format_from_video_info (context,
|
||||||
GST_VIDEO_INFO_FORMAT (&in_info), j);
|
&in_info, j);
|
||||||
GstGLVideoAllocationParams *params;
|
GstGLVideoAllocationParams *params;
|
||||||
GstGLBaseMemory *mem;
|
GstGLBaseMemory *mem;
|
||||||
|
|
||||||
ref_count++;
|
ref_count++;
|
||||||
params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL,
|
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);
|
frames[i].data[j], &ref_count, _frame_unref);
|
||||||
|
|
||||||
mem = gst_gl_base_memory_alloc (base_mem_alloc,
|
mem = gst_gl_base_memory_alloc (base_mem_alloc,
|
||||||
|
|
|
@ -72,7 +72,7 @@ init (gpointer data)
|
||||||
allocator = gst_gl_memory_allocator_get_default (context);
|
allocator = gst_gl_memory_allocator_get_default (context);
|
||||||
params =
|
params =
|
||||||
gst_gl_video_allocation_params_new (context, NULL, &v_info, 0, NULL,
|
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 */
|
/* 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);
|
fbo = gst_gl_framebuffer_new_with_default_depth (context, 320, 240);
|
||||||
|
|
|
@ -75,12 +75,12 @@ GST_START_TEST (test_basic)
|
||||||
gst_video_info_set_format (&v_info, formats[i], width, height);
|
gst_video_info_set_format (&v_info, formats[i], width, height);
|
||||||
|
|
||||||
for (j = 0; j < GST_VIDEO_INFO_N_PLANES (&v_info); j++) {
|
for (j = 0; j < GST_VIDEO_INFO_N_PLANES (&v_info); j++) {
|
||||||
GstVideoGLTextureType tex_type = gst_gl_texture_type_from_format (context,
|
GstGLFormat tex_format = gst_gl_format_from_video_info (context,
|
||||||
GST_VIDEO_INFO_FORMAT (&v_info), j);
|
&v_info, j);
|
||||||
GstGLVideoAllocationParams *params;
|
GstGLVideoAllocationParams *params;
|
||||||
|
|
||||||
params = gst_gl_video_allocation_params_new (context, NULL, &v_info, j,
|
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,
|
mem = (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
|
||||||
(GstGLAllocationParams *) params);
|
(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);
|
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,
|
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 */
|
/* texture creation */
|
||||||
mem = (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
|
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 */
|
/* test wrapping raw data */
|
||||||
params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL,
|
params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL,
|
||||||
&v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
&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 =
|
mem2 =
|
||||||
(GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
|
(GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
|
||||||
(GstGLAllocationParams *) params);
|
(GstGLAllocationParams *) params);
|
||||||
|
@ -164,8 +164,7 @@ test_transfer_allocator (const gchar * allocator_name)
|
||||||
/* wrapped texture creation */
|
/* wrapped texture creation */
|
||||||
params = gst_gl_video_allocation_params_new_wrapped_texture (context, NULL,
|
params = gst_gl_video_allocation_params_new_wrapped_texture (context, NULL,
|
||||||
&v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
&v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
||||||
GST_VIDEO_GL_TEXTURE_TYPE_RGBA, ((GstGLMemory *) mem)->tex_id, NULL,
|
GST_GL_RGBA, ((GstGLMemory *) mem)->tex_id, NULL, NULL);
|
||||||
NULL);
|
|
||||||
mem3 =
|
mem3 =
|
||||||
(GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
|
(GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
|
||||||
(GstGLAllocationParams *) params);
|
(GstGLAllocationParams *) params);
|
||||||
|
@ -207,7 +206,7 @@ test_transfer_allocator (const gchar * allocator_name)
|
||||||
/* test texture copy */
|
/* test texture copy */
|
||||||
fail_unless (gst_gl_memory_copy_into ((GstGLMemory *) mem2,
|
fail_unless (gst_gl_memory_copy_into ((GstGLMemory *) mem2,
|
||||||
((GstGLMemory *) mem)->tex_id, GST_GL_TEXTURE_TARGET_2D,
|
((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);
|
GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD);
|
||||||
|
|
||||||
fail_unless (!GST_MEMORY_FLAG_IS_SET (mem2,
|
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,
|
params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL,
|
||||||
&v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
&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 =
|
mem =
|
||||||
(GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
|
(GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
|
||||||
(GstGLAllocationParams *) params);
|
(GstGLAllocationParams *) params);
|
||||||
|
|
|
@ -50,7 +50,7 @@ static const GLfloat vertices[] = {
|
||||||
|
|
||||||
static GLushort indices[] = { 0, 1, 2, 0, 2, 3 };
|
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 WIDTH 10
|
||||||
#define HEIGHT 10
|
#define HEIGHT 10
|
||||||
#define RED 0xff, 0x00, 0x00, 0xff
|
#define RED 0xff, 0x00, 0x00, 0xff
|
||||||
|
@ -334,7 +334,7 @@ GST_START_TEST (test_upload_gl_memory)
|
||||||
buffer = gst_buffer_new ();
|
buffer = gst_buffer_new ();
|
||||||
params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL,
|
params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL,
|
||||||
&in_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
|
&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,
|
gl_mem = (GstGLMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
|
||||||
(GstGLAllocationParams *) params);
|
(GstGLAllocationParams *) params);
|
||||||
gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
|
gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
|
||||||
|
|
Loading…
Reference in a new issue