mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 19:55:32 +00:00
[763/906] memory: copy properly depending on where the most recent data is
This commit is contained in:
parent
f6f0c4ddad
commit
71a70e78f6
1 changed files with 25 additions and 14 deletions
|
@ -22,6 +22,8 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <gst/video/video.h>
|
#include <gst/video/video.h>
|
||||||
|
|
||||||
#include "gstglmemory.h"
|
#include "gstglmemory.h"
|
||||||
|
@ -281,24 +283,33 @@ _gl_mem_copy (GstGLMemory * src, gssize offset, gssize size)
|
||||||
GstGLMemory *dest;
|
GstGLMemory *dest;
|
||||||
GstGLMemoryCopyParams copy_params;
|
GstGLMemoryCopyParams copy_params;
|
||||||
|
|
||||||
copy_params = (GstGLMemoryCopyParams) {
|
if (GST_GL_MEMORY_FLAG_IS_SET (src, GST_GL_MEMORY_FLAG_NEED_UPLOAD)) {
|
||||||
src, 0,};
|
dest = _gl_mem_new (src->mem.allocator, NULL, src->display, src->v_format,
|
||||||
|
src->width, src->height, NULL, NULL);
|
||||||
|
dest->data = g_malloc (src->mem.maxsize);
|
||||||
|
memcpy (dest->data, src->data, src->mem.maxsize);
|
||||||
|
GST_GL_MEMORY_FLAG_SET (dest, GST_GL_MEMORY_FLAG_NEED_UPLOAD);
|
||||||
|
} else {
|
||||||
|
copy_params = (GstGLMemoryCopyParams) {
|
||||||
|
src, 0,};
|
||||||
|
|
||||||
gst_gl_display_thread_add (src->display, _gl_mem_copy_thread, ©_params);
|
gst_gl_display_thread_add (src->display, _gl_mem_copy_thread, ©_params);
|
||||||
|
|
||||||
dest = g_slice_alloc (sizeof (GstGLMemory));
|
dest = g_slice_alloc (sizeof (GstGLMemory));
|
||||||
_gl_mem_init (dest, src->mem.allocator, NULL, src->display, src->v_format,
|
_gl_mem_init (dest, src->mem.allocator, NULL, src->display, src->v_format,
|
||||||
src->width, src->height, NULL, NULL);
|
src->width, src->height, NULL, NULL);
|
||||||
|
|
||||||
if (!copy_params.tex_id)
|
if (!copy_params.tex_id)
|
||||||
GST_CAT_WARNING (GST_CAT_GL_MEMORY, "Could not copy GL Memory");
|
GST_CAT_WARNING (GST_CAT_GL_MEMORY, "Could not copy GL Memory");
|
||||||
|
|
||||||
dest->tex_id = copy_params.tex_id;
|
dest->tex_id = copy_params.tex_id;
|
||||||
dest->data = g_malloc (src->mem.maxsize);
|
dest->data = g_malloc (src->mem.maxsize);
|
||||||
if (dest->data == NULL) {
|
if (dest->data == NULL) {
|
||||||
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_unref ((GstMemory *) dest);
|
gst_memory_unref ((GstMemory *) dest);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
GST_GL_MEMORY_FLAG_SET (dest, GST_GL_MEMORY_FLAG_NEED_DOWNLOAD);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_CAT_DEBUG (GST_CAT_GL_MEMORY, "copied texture:%u into texture %u",
|
GST_CAT_DEBUG (GST_CAT_GL_MEMORY, "copied texture:%u into texture %u",
|
||||||
|
|
Loading…
Reference in a new issue