summaryrefslogtreecommitdiffstats
path: root/recipes-multimedia
diff options
context:
space:
mode:
authorYuqing Zhu <carol.zhu@nxp.com>2016-12-22 18:26:42 +0800
committerOtavio Salvador <otavio@ossystems.com.br>2017-01-11 10:56:36 -0200
commit218f9261c986344802b33194ff7d7d4018fbfc2a (patch)
tree6d0a8b87029da1dc2c4c9a5e6b54afdb0f43ab42 /recipes-multimedia
parentef2bc9b21f7666835237105bff2b949b3e77821a (diff)
downloadmeta-freescale-218f9261c986344802b33194ff7d7d4018fbfc2a.tar.gz
gstreamer1.0-plugins-bad: Fix MRT cannot work in GLES3.0
Use glBlitFramebuffer for textures copy if it is available Signed-off-by: Yuqing Zhu <carol.zhu@nxp.com> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Diffstat (limited to 'recipes-multimedia')
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0007-glcolorconvert-fix-MRT-cannot-work-in-GLES3.0.patch132
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.%.bbappend1
2 files changed, 133 insertions, 0 deletions
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0007-glcolorconvert-fix-MRT-cannot-work-in-GLES3.0.patch b/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0007-glcolorconvert-fix-MRT-cannot-work-in-GLES3.0.patch
new file mode 100644
index 00000000..d80d67e1
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0007-glcolorconvert-fix-MRT-cannot-work-in-GLES3.0.patch
@@ -0,0 +1,132 @@
1From f705c7bbc8274b6824a9063161263cb16af9d15d Mon Sep 17 00:00:00 2001
2From: Haihua Hu <jared.hu@nxp.com>
3Date: Mon, 14 Nov 2016 10:53:27 +0800
4Subject: [PATCH 18/26] glcolorconvert: fix MRT cannot work in GLES3.0
5
6use glBlitFramebuffer for textures copy if it is available
7
8Upstream-Status: Inappropriate [i.MX specific]
9
10Signed-off-by: Haihua Hu <jared.hu@nxp.com>
11---
12 gst-libs/gst/gl/glprototypes/fbo.h | 6 ++---
13 gst-libs/gst/gl/gstglmemory.c | 54 ++++++++++++++++++++++++++++++++------
14 2 files changed, 49 insertions(+), 11 deletions(-)
15
16diff --git a/gst-libs/gst/gl/glprototypes/fbo.h b/gst-libs/gst/gl/glprototypes/fbo.h
17index d142483..789f289 100644
18--- a/gst-libs/gst/gl/glprototypes/fbo.h
19+++ b/gst-libs/gst/gl/glprototypes/fbo.h
20@@ -102,9 +102,9 @@ GST_GL_EXT_FUNCTION (GLboolean, IsFramebuffer,
21 GST_GL_EXT_END ()
22
23 GST_GL_EXT_BEGIN (offscreen_blit,
24- GST_GL_API_NONE,
25- 255, 255,
26- 255, 255, /* not in either GLES */
27+ GST_GL_API_OPENGL3 | GST_GL_API_GLES2,
28+ 3, 0,
29+ 3, 0,/* enable to avoid using glCopyTexImage2D for texture copying */
30 "EXT\0ANGLE\0",
31 "framebuffer_blit\0")
32 GST_GL_EXT_FUNCTION (void, BlitFramebuffer,
33diff --git a/gst-libs/gst/gl/gstglmemory.c b/gst-libs/gst/gl/gstglmemory.c
34index 73c3b59..6f9794f 100644
35--- a/gst-libs/gst/gl/gstglmemory.c
36+++ b/gst-libs/gst/gl/gstglmemory.c
37@@ -69,6 +69,12 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_GL_MEMORY);
38 #ifndef GL_TEXTURE_EXTERNAL_OES
39 #define GL_TEXTURE_EXTERNAL_OES 0x8D65
40 #endif
41+#ifndef GL_READ_FRAMEBUFFER
42+#define GL_READ_FRAMEBUFFER 0x8CA8
43+#endif
44+#ifndef GL_DRAW_FRAMEBUFFER
45+#define GL_DRAW_FRAMEBUFFER 0x8CA9
46+#endif
47
48 G_DEFINE_TYPE (GstGLMemoryAllocator, gst_gl_memory_allocator,
49 GST_TYPE_GL_BASE_MEMORY_ALLOCATOR);
50@@ -626,7 +632,7 @@ gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id,
51 guint out_gl_format, out_tex_target;
52 GstMapInfo sinfo;
53 guint src_tex_id;
54- guint fbo;
55+ guint fbo[2];
56
57 gl = src->mem.context->gl_vtable;
58 out_tex_target = gst_gl_texture_target_to_gl (out_target);
59@@ -659,31 +665,63 @@ gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id,
60
61 /* FIXME: try and avoid creating and destroying fbo's every copy... */
62 /* create a framebuffer object */
63- gl->GenFramebuffers (1, &fbo);
64- gl->BindFramebuffer (GL_FRAMEBUFFER, fbo);
65+ gl->GenFramebuffers (2, &fbo[0]);
66+ gl->BindFramebuffer (GL_READ_FRAMEBUFFER, fbo[0]);
67
68- gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
69+ gl->FramebufferTexture2D (GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
70 gst_gl_texture_target_to_gl (src->tex_target), src_tex_id, 0);
71
72-// if (!gst_gl_context_check_framebuffer_status (src->context))
73-// goto fbo_error;
74+ if (!gst_gl_context_check_framebuffer_status (src->mem.context))
75+ goto fbo_error;
76+
77+ gl->BindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo[1]);
78+
79+ gl->FramebufferTexture2D (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
80+ gst_gl_texture_target_to_gl (src->tex_target), tex_id, 0);
81
82+ if (!gst_gl_context_check_framebuffer_status (src->mem.context))
83+ goto fbo_error;
84+
85+ /*
86 gl->BindTexture (out_tex_target, tex_id);
87 gst_gl_query_start_log (GST_GL_BASE_MEMORY_CAST (src)->query,
88 GST_CAT_GL_MEMORY, GST_LEVEL_LOG, NULL, "%s", "CopyTexImage2D took");
89 gl->CopyTexImage2D (out_tex_target, 0, out_gl_format, 0, 0, out_width,
90 out_height, 0);
91 gst_gl_query_end (GST_GL_BASE_MEMORY_CAST (src)->query);
92-
93+ */
94+
95+ /*
96+ * glCopyTexImage2D cannot work without internal_format
97+ * we cannot get the internal_format in this function
98+ * so use glBlitFramebuffer for texture copy
99+ */
100+ GST_CAT_LOG(GST_CAT_GL_MEMORY,"Use BlitFramebuffer copy texture %d into %d",
101+ src_tex_id, tex_id);
102+ gl->ReadBuffer ( GL_COLOR_ATTACHMENT0 );
103+ gl->BlitFramebuffer ( 0, 0, out_width, out_height,
104+ 0, 0, out_width, out_height,
105+ GL_COLOR_BUFFER_BIT, GL_LINEAR );
106 gl->BindTexture (out_tex_target, 0);
107 gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
108
109- gl->DeleteFramebuffers (1, &fbo);
110+ gl->DeleteFramebuffers (2, &fbo[0]);
111
112 gst_memory_unmap (GST_MEMORY_CAST (src), &sinfo);
113
114 return TRUE;
115
116+fbo_error:
117+ {
118+ gl->BindTexture (out_tex_target, 0);
119+ gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
120+
121+ gl->DeleteFramebuffers (2, &fbo[0]);
122+
123+ gst_memory_unmap (GST_MEMORY_CAST (src), &sinfo);
124+
125+ return FALSE;
126+ }
127 error:
128 return FALSE;
129 }
130--
1311.9.1
132
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.%.bbappend b/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.%.bbappend
index 73b93303..7d852d84 100644
--- a/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.%.bbappend
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.%.bbappend
@@ -14,6 +14,7 @@ SRC_URI_append_imxgpu2d = " \
14 file://0004-MMFMWK-6930-glplugin-Accelerate-gldownload-with.patch \ 14 file://0004-MMFMWK-6930-glplugin-Accelerate-gldownload-with.patch \
15 file://0005-glcolorconvert-convert-YUV-to-RGB-use-directviv.patch \ 15 file://0005-glcolorconvert-convert-YUV-to-RGB-use-directviv.patch \
16 file://0006-glwindow-work-around-for-no-frame-when-imxplayer-use.patch \ 16 file://0006-glwindow-work-around-for-no-frame-when-imxplayer-use.patch \
17 file://0007-glcolorconvert-fix-MRT-cannot-work-in-GLES3.0.patch \
17" 18"
18 19
19 20