From b4c0527eff48e112919eeaaef0beafb6f9a52c1c Mon Sep 17 00:00:00 2001 From: Julien Isorce Date: Mon, 25 Aug 2008 10:34:54 +0200 Subject: [PATCH] [211/906] Fix upload AYUV and YV12 (a regression in last commits) --- gst-libs/gst/gl/gstgldisplay.c | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c index b70c0ff..3d81f28 100644 --- a/gst-libs/gst/gl/gstgldisplay.c +++ b/gst-libs/gst/gl/gstgldisplay.c @@ -2329,7 +2329,8 @@ void gst_gl_display_thread_do_upload_make (GstGLDisplay *display) { case GST_VIDEO_FORMAT_AYUV: glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, - width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + width, height, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, NULL); + break; case GST_VIDEO_FORMAT_YUY2: glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE_ALPHA, width, height, @@ -2499,7 +2500,7 @@ gst_gl_display_thread_do_upload_fill (GstGLDisplay *display) offsetU = 2; offsetV = 1; //LINUX -#elseif +#else if (g_ascii_strncasecmp ("ATI", (gchar *) glGetString (GL_VENDOR), 3) == 0) { offsetU = 2; @@ -2711,22 +2712,28 @@ gst_gl_display_thread_do_download_draw_rgb (GstGLDisplay *display) switch (video_format) { + case GST_VIDEO_FORMAT_RGBA: case GST_VIDEO_FORMAT_RGBx: + case GST_VIDEO_FORMAT_xRGB: + case GST_VIDEO_FORMAT_ARGB: + glGetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, + GL_UNSIGNED_BYTE, data); + break; case GST_VIDEO_FORMAT_BGRx: - case GST_VIDEO_FORMAT_RGBA: case GST_VIDEO_FORMAT_BGRA: case GST_VIDEO_FORMAT_xBGR: - case GST_VIDEO_FORMAT_xRGB: - case GST_VIDEO_FORMAT_ARGB: case GST_VIDEO_FORMAT_ABGR: - glGetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, + glGetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_BGRA, GL_UNSIGNED_BYTE, data); break; case GST_VIDEO_FORMAT_RGB: - case GST_VIDEO_FORMAT_BGR: glGetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGB, GL_UNSIGNED_BYTE, data); break; + case GST_VIDEO_FORMAT_BGR: + glGetTexImage (GL_TEXTURE_RECTANGLE_ARB, 0, GL_BGR, + GL_UNSIGNED_BYTE, data); + break; default: g_assert_not_reached (); } @@ -2896,8 +2903,23 @@ gst_gl_display_thread_do_download_draw_yuv (GstGLDisplay *display) offsetV = 2; break; case GST_VIDEO_FORMAT_YV12: + //WIN32 +#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) offsetU = 2; offsetV = 1; + //LINUX +#else + if (g_ascii_strncasecmp ("ATI", (gchar *) glGetString (GL_VENDOR), 3) == 0) + { + offsetU = 2; + offsetV = 1; + } + else + { + offsetU = 1; + offsetV = 2; + } +#endif break; default: g_assert_not_reached (); -- 2.7.4