summaryrefslogtreecommitdiff
path: root/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0026-glframebuffer-check-frame-buffer-status-need-use-spe.patch
blob: 9d3f5690b2387591b1814399baea8a818630f3f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
From bf7eb6a0725daf770dc68503216d7cd8e1e314c4 Mon Sep 17 00:00:00 2001
From: Haihua Hu <jared.hu@nxp.com>
Date: Thu, 25 May 2017 10:09:04 +0800
Subject: [PATCH 25/26] glframebuffer: check frame buffer status need use
 specific fbo target

Upstream-Status: Pending
https://bugzilla.gnome.org/show_bug.cgi?id=783065
---
 ext/qt/qtwindow.cc                  |  4 ++--
 gst-libs/gst/gl/gstglcolorconvert.c |  2 +-
 gst-libs/gst/gl/gstglframebuffer.c  | 10 ++++++++--
 gst-libs/gst/gl/gstglframebuffer.h  |  3 ++-
 gst-libs/gst/gl/gstglmemory.c       |  8 ++++----
 5 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/ext/qt/qtwindow.cc b/ext/qt/qtwindow.cc
index 92c5834..6f1df7e 100644
--- a/ext/qt/qtwindow.cc
+++ b/ext/qt/qtwindow.cc
@@ -217,7 +217,7 @@ QtGLWindow::afterRendering()
 
   gl->BindFramebuffer (GL_READ_FRAMEBUFFER, this->source->renderTargetId());
 
-  ret = gst_gl_context_check_framebuffer_status (context);
+  ret = gst_gl_context_check_framebuffer_status (context, GL_READ_FRAMEBUFFER);
   if (!ret) {
     GST_ERROR ("FBO errors");
     goto errors;
@@ -233,7 +233,7 @@ QtGLWindow::afterRendering()
     gl->FramebufferTexture2D (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
               GL_TEXTURE_2D, dst_tex, 0);
 
-    ret = gst_gl_context_check_framebuffer_status (context);
+    ret = gst_gl_context_check_framebuffer_status (context, GL_DRAW_FRAMEBUFFER);
     if (!ret) {
       GST_ERROR ("FBO errors");
       goto errors;
diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c
index adf5a6e..45d2d32 100644
--- a/gst-libs/gst/gl/gstglcolorconvert.c
+++ b/gst-libs/gst/gl/gstglcolorconvert.c
@@ -2516,7 +2516,7 @@ _do_convert_draw (GstGLContext * context, GstGLColorConvert * convert)
   gl->Viewport (viewport_dim[0], viewport_dim[1], viewport_dim[2],
       viewport_dim[3]);
 
-  if (!gst_gl_context_check_framebuffer_status (context))
+  if (!gst_gl_context_check_framebuffer_status (context, GL_FRAMEBUFFER))
     ret = FALSE;
 
   gst_gl_context_clear_framebuffer (context);
diff --git a/gst-libs/gst/gl/gstglframebuffer.c b/gst-libs/gst/gl/gstglframebuffer.c
index f628997..7dc9727 100644
--- a/gst-libs/gst/gl/gstglframebuffer.c
+++ b/gst-libs/gst/gl/gstglframebuffer.c
@@ -507,11 +507,17 @@ gst_gl_framebuffer_get_effective_dimensions (GstGLFramebuffer * fb,
  * Since: 1.10
  */
 gboolean
-gst_gl_context_check_framebuffer_status (GstGLContext * context)
+gst_gl_context_check_framebuffer_status (GstGLContext * context, GLenum fbo_target)
 {
   g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
 
-  switch (context->gl_vtable->CheckFramebufferStatus (GL_FRAMEBUFFER)) {
+  if (fbo_target != GL_FRAMEBUFFER && fbo_target != GL_READ_FRAMEBUFFER
+      && fbo_target != GL_DRAW_FRAMEBUFFER) {
+    GST_ERROR_OBJECT (context, "fbo target is invalid");
+    return FALSE;
+  }
+
+  switch (context->gl_vtable->CheckFramebufferStatus (fbo_target)) {
     case GL_FRAMEBUFFER_COMPLETE:
       return TRUE;
       break;
diff --git a/gst-libs/gst/gl/gstglframebuffer.h b/gst-libs/gst/gl/gstglframebuffer.h
index 297a71e..172f999 100644
--- a/gst-libs/gst/gl/gstglframebuffer.h
+++ b/gst-libs/gst/gl/gstglframebuffer.h
@@ -103,7 +103,8 @@ void                    gst_gl_framebuffer_get_effective_dimensions (GstGLFrameb
                                                                      guint * height);
 
 GST_EXPORT
-gboolean                gst_gl_context_check_framebuffer_status     (GstGLContext * context);
+gboolean                gst_gl_context_check_framebuffer_status     (GstGLContext * context,
+                                                                     GLenum fbo_target);
 
 GST_EXPORT
 gboolean                gst_gl_framebuffer_draw_to_texture          (GstGLFramebuffer * fb,
diff --git a/gst-libs/gst/gl/gstglmemory.c b/gst-libs/gst/gl/gstglmemory.c
index 343a859..0cda68b 100644
--- a/gst-libs/gst/gl/gstglmemory.c
+++ b/gst-libs/gst/gl/gstglmemory.c
@@ -373,7 +373,7 @@ gst_gl_memory_read_pixels (GstGLMemory * gl_mem, gpointer read_pointer)
   gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
       gst_gl_texture_target_to_gl (gl_mem->tex_target), gl_mem->tex_id, 0);
 
-  if (!gst_gl_context_check_framebuffer_status (context)) {
+  if (!gst_gl_context_check_framebuffer_status (context, GL_FRAMEBUFFER)) {
     GST_CAT_WARNING (GST_CAT_GL_MEMORY,
         "Could not create framebuffer to read pixels for memory %p", gl_mem);
     gl->DeleteFramebuffers (1, &fbo);
@@ -682,7 +682,7 @@ gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id,
     gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
         gst_gl_texture_target_to_gl (src->tex_target), src_tex_id, 0);
 
-    if (!gst_gl_context_check_framebuffer_status (src->mem.context))
+    if (!gst_gl_context_check_framebuffer_status (src->mem.context, GL_FRAMEBUFFER))
       goto fbo_error;
 
     gl->BindTexture (out_tex_target, tex_id);
@@ -711,7 +711,7 @@ gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id,
     gl->FramebufferTexture2D (GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
         gst_gl_texture_target_to_gl (src->tex_target), src_tex_id, 0);
 
-    if (!gst_gl_context_check_framebuffer_status (src->mem.context))
+    if (!gst_gl_context_check_framebuffer_status (src->mem.context, GL_READ_FRAMEBUFFER))
       goto fbo_error;
 
     gl->BindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo[1]);
@@ -719,7 +719,7 @@ gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id,
     gl->FramebufferTexture2D (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
         gst_gl_texture_target_to_gl (src->tex_target), tex_id, 0);
 
-    if (!gst_gl_context_check_framebuffer_status (src->mem.context))
+    if (!gst_gl_context_check_framebuffer_status (src->mem.context, GL_DRAW_FRAMEBUFFER))
       goto fbo_error;
 
     gl->BindTexture (out_tex_target, tex_id);
-- 
1.9.1