mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
glmemory: log the time for glTexSubImage/glReadPixels
This commit is contained in:
parent
5437874596
commit
eb7ac03a91
3 changed files with 26 additions and 4 deletions
|
@ -76,11 +76,15 @@ _mem_create_gl (GstGLContext * context, struct create_data *transfer)
|
||||||
GstGLBaseMemoryAllocatorClass *alloc_class;
|
GstGLBaseMemoryAllocatorClass *alloc_class;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
|
GST_CAT_TRACE (GST_CAT_GL_BASE_MEMORY, "Create memory %p", transfer->mem);
|
||||||
|
|
||||||
alloc_class =
|
alloc_class =
|
||||||
GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS (transfer->mem->mem.allocator);
|
GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS (transfer->mem->mem.allocator);
|
||||||
|
|
||||||
g_return_if_fail (alloc_class->create != NULL);
|
g_return_if_fail (alloc_class->create != NULL);
|
||||||
|
|
||||||
|
transfer->mem->query = gst_gl_query_new (context, GST_GL_QUERY_TIME_ELAPSED);
|
||||||
|
|
||||||
if ((transfer->result = alloc_class->create (transfer->mem, &error)))
|
if ((transfer->result = alloc_class->create (transfer->mem, &error)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -418,6 +422,9 @@ _destroy_gl_objects (GstGLContext * context, GstGLBaseMemory * mem)
|
||||||
g_return_if_fail (alloc_class->destroy != NULL);
|
g_return_if_fail (alloc_class->destroy != NULL);
|
||||||
|
|
||||||
alloc_class->destroy (mem);
|
alloc_class->destroy (mem);
|
||||||
|
|
||||||
|
if (mem->query)
|
||||||
|
gst_gl_query_free (mem->query);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -90,6 +90,8 @@ struct _GstGLBaseMemory
|
||||||
|
|
||||||
gpointer data;
|
gpointer data;
|
||||||
|
|
||||||
|
GstGLQuery *query;
|
||||||
|
|
||||||
/* <private> */
|
/* <private> */
|
||||||
gsize alloc_size; /* because maxsize is used for mapping */
|
gsize alloc_size; /* because maxsize is used for mapping */
|
||||||
gpointer alloc_data;
|
gpointer alloc_data;
|
||||||
|
|
|
@ -353,8 +353,11 @@ gst_gl_memory_read_pixels (GstGLMemory * gl_mem, gpointer read_pointer)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gst_gl_query_start_log (GST_GL_BASE_MEMORY_CAST (gl_mem)->query,
|
||||||
|
GST_CAT_GL_MEMORY, GST_LEVEL_LOG, NULL, "%s", "glReadPixels took");
|
||||||
gl->ReadPixels (0, 0, gl_mem->tex_width, GL_MEM_HEIGHT (gl_mem), format,
|
gl->ReadPixels (0, 0, gl_mem->tex_width, GL_MEM_HEIGHT (gl_mem), format,
|
||||||
type, read_pointer);
|
type, read_pointer);
|
||||||
|
gst_gl_query_end (GST_GL_BASE_MEMORY_CAST (gl_mem)->query);
|
||||||
|
|
||||||
gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
|
gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
|
||||||
|
|
||||||
|
@ -397,7 +400,10 @@ _gl_tex_download_get_tex_image (GstGLMemory * gl_mem, GstMapInfo * info,
|
||||||
|
|
||||||
target = gst_gl_texture_target_to_gl (gl_mem->tex_target);
|
target = gst_gl_texture_target_to_gl (gl_mem->tex_target);
|
||||||
gl->BindTexture (target, gl_mem->tex_id);
|
gl->BindTexture (target, gl_mem->tex_id);
|
||||||
|
gst_gl_query_start_log (GST_GL_BASE_MEMORY_CAST (gl_mem)->query,
|
||||||
|
GST_CAT_GL_MEMORY, GST_LEVEL_LOG, NULL, "%s", "glGetTexImage took");
|
||||||
gl->GetTexImage (target, 0, format, type, gl_mem->mem.data);
|
gl->GetTexImage (target, 0, format, type, gl_mem->mem.data);
|
||||||
|
gst_gl_query_end (GST_GL_BASE_MEMORY_CAST (gl_mem)->query);
|
||||||
gl->BindTexture (target, 0);
|
gl->BindTexture (target, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -486,8 +492,11 @@ gst_gl_memory_texsubimage (GstGLMemory * gl_mem, gpointer read_pointer)
|
||||||
data = (gpointer) ((gintptr) plane_start + (gintptr) read_pointer);
|
data = (gpointer) ((gintptr) plane_start + (gintptr) read_pointer);
|
||||||
|
|
||||||
gl->BindTexture (gl_target, gl_mem->tex_id);
|
gl->BindTexture (gl_target, gl_mem->tex_id);
|
||||||
|
gst_gl_query_start_log (GST_GL_BASE_MEMORY_CAST (gl_mem)->query,
|
||||||
|
GST_CAT_GL_MEMORY, GST_LEVEL_LOG, NULL, "%s", "glTexSubImage took");
|
||||||
gl->TexSubImage2D (gl_target, 0, 0, 0, gl_mem->tex_width,
|
gl->TexSubImage2D (gl_target, 0, 0, 0, gl_mem->tex_width,
|
||||||
GL_MEM_HEIGHT (gl_mem), gl_format, gl_type, data);
|
GL_MEM_HEIGHT (gl_mem), gl_format, gl_type, data);
|
||||||
|
gst_gl_query_end (GST_GL_BASE_MEMORY_CAST (gl_mem)->query);
|
||||||
|
|
||||||
/* Reset to default values */
|
/* Reset to default values */
|
||||||
if (USING_OPENGL (context) || USING_GLES3 (context)) {
|
if (USING_OPENGL (context) || USING_GLES3 (context)) {
|
||||||
|
@ -593,8 +602,11 @@ gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id,
|
||||||
// goto fbo_error;
|
// goto fbo_error;
|
||||||
|
|
||||||
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_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_gl_format, 0, 0, out_width,
|
||||||
out_height, 0);
|
out_height, 0);
|
||||||
|
gst_gl_query_end (GST_GL_BASE_MEMORY_CAST (src)->query);
|
||||||
|
|
||||||
gl->BindTexture (out_tex_target, 0);
|
gl->BindTexture (out_tex_target, 0);
|
||||||
gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
|
gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
|
||||||
|
@ -1136,15 +1148,16 @@ gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator,
|
||||||
{
|
{
|
||||||
GstGLBaseMemoryAllocator *base_allocator;
|
GstGLBaseMemoryAllocator *base_allocator;
|
||||||
guint n_mem, i, v, views;
|
guint n_mem, i, v, views;
|
||||||
|
guint alloc_flags = params->parent.alloc_flags;
|
||||||
|
|
||||||
g_return_val_if_fail (params != NULL, FALSE);
|
g_return_val_if_fail (params != NULL, FALSE);
|
||||||
g_return_val_if_fail ((params->
|
g_return_val_if_fail ((alloc_flags &
|
||||||
parent.alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM)
|
GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM)
|
||||||
== 0, FALSE);
|
== 0, FALSE);
|
||||||
g_return_val_if_fail ((params->parent.alloc_flags &
|
g_return_val_if_fail ((params->parent.alloc_flags &
|
||||||
GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE) == 0, FALSE);
|
GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE) == 0, FALSE);
|
||||||
g_return_val_if_fail (params->
|
g_return_val_if_fail (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
|
||||||
parent.alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO, FALSE);
|
FALSE);
|
||||||
|
|
||||||
base_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
|
base_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
|
||||||
n_mem = GST_VIDEO_INFO_N_PLANES (params->v_info);
|
n_mem = GST_VIDEO_INFO_N_PLANES (params->v_info);
|
||||||
|
|
Loading…
Reference in a new issue