[156/906] fix a crash that could happens when using at least 2 gl context and when...
authorJulien Isorce <julien.isorce@gmail.com>
Wed, 13 Aug 2008 15:16:17 +0000 (17:16 +0200)
committerMatthew Waters <ystreet00@gmail.com>
Sat, 15 Mar 2014 17:36:24 +0000 (18:36 +0100)
gst-libs/gst/gl/gstgldisplay.c
gst/gl/BUGS

index 2c31a5e..5a4267a 100644 (file)
@@ -253,6 +253,19 @@ gst_gl_display_init (GstGLDisplay *display, GstGLDisplayClass *klass)
     "  gl_FragColor = vec4(r, g, b, 1.0);\n"
     "}\n";
 
+  //it works on nvidia+linux but
+  //there is a bug on ATI+win32 (I think only ATI)
+  //and the follwing 3 lines:
+  //"  y=texture2DRect(Ytex,nxy).r;\n"
+  //"  u=texture2DRect(Utex,nxy*0.5).r;\n"
+  //"  v=texture2DRect(Vtex,nxy*0.5).r;\n"
+  //has to be replaced by :
+  //"  y=texture2DRect(Ytex,nxy0.5).r;\n"
+  //"  u=texture2DRect(Utex,nxy).r;\n"
+  //"  v=texture2DRect(Vtex,nxy*0.5).r;\n"
+  //
+  //so we have to set a display->hardware (ATI/ NVIDIA)
+  //and check it etc...
   display->text_shader_upload_I420_YV12 =
     "#extension GL_ARB_texture_rectangle : enable\n"
     "uniform sampler2DRect Ytex,Utex,Vtex;\n"
@@ -1725,7 +1738,7 @@ gst_gl_display_glgen_texture (GstGLDisplay* display, GLuint* pTexture, GLint wid
 
     gchar string_size[512];
     GQueue* sub_texture_pool = NULL;
-   
+
     sprintf (string_size, "%dx%d", width, height);
     sub_texture_pool = g_datalist_get_data(&display->texture_pool, string_size);
     //if the size is known
@@ -1784,7 +1797,7 @@ gst_gl_display_gldel_texture (GstGLDisplay* display, GLuint* pTexture, GLint wid
   gchar string_size[512];
   GQueue* sub_texture_pool = NULL;
   GstGLDisplayTex* tex = NULL;
-  
+
   sprintf (string_size, "%dx%d", width, height);
   sub_texture_pool = g_datalist_get_data(&display->texture_pool, string_size);
   //if the size is known
@@ -2410,6 +2423,10 @@ gst_gl_display_thread_do_upload_fill (GstGLDisplay *display)
       offsetU = 1;
       offsetV = 2;
       break;
+    //it works on ati+win32 but we have to use the same offset as
+    //I420 on nvidia + linux (I mean offsetU = 1; offsetV = 2;)
+    //So we have to set a display->hardware (ATI o/ NVIDIA) and
+    //etc...
     case GST_VIDEO_FORMAT_YV12:
       offsetU = 2;
       offsetV = 1;
index 6ded89e..29891bd 100644 (file)
@@ -1,22 +1,8 @@
 
 known issues:
 
-  - gst-launch-0.10 videotestsrc ! glupload ! gldownload ! glimagesink  
-    (or glcolorspace instead of glupload ! gldownload)  
-    -> crash on linux when stopping (num_buffers=N or after clicking on the window cross)
-    (was working on win32)
-    (gst-launch-0.10 videotestsrc ! glupload ! gldownload ! glupload ! gldownload ! glupload ! gldownload ! ximagesink 
-    crash when stopping)
-    (but not gst-launch-0.10 videotestsrc ! glupload ! gldownload ! glupload ! gldownload ! ximagesink)
-    log: (  Définition du pipeline à READY (prêt)...
-            Context 1 destroyed
-            Définition du pipeline à NULL...
-            Caught SIGSEGV accessing address 0x40 )
-
-  - gst-launch-0.10 videotestsrc ! tee name=t t. ! queue ! glimagesink t. ! queue ! glimagesink t. ! queue ! glimagesink
-    -> crash on linux when stopping (was working on win32 too)
-    It look likes it's related to the first issue.
-
   - gst-launch-0.10 videotestsrc ! "video/x-raw-yuv, format=(fourcc)YV12" ! glimagesink
-    -> wrong color on linux (it look likes it uses text_shader_upload_I420 instead of YV12)
-    (I remember it was working on win32, so maybe we have made a regression)
+    -> wrong color on linux
+    ok it comes from hardware, it seems that on ati+win32 it works, 
+    but on nvidia+linux we do not need to make a disctinction between I420 and YV12
+    (see comments in gst/gl/gstgldisplay.c line 256 and line 2426)