From a1a653c8ed459a8842ebbd3243af59f74f3eb0f0 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Wed, 15 Aug 2012 15:35:46 +1000 Subject: [PATCH] [562/906] gldisplay: fix download of YUV formats --- gst-libs/gst/gl/gstgldisplay.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c index ddbb2f3..5ae2d11 100644 --- a/gst-libs/gst/gl/gstgldisplay.c +++ b/gst-libs/gst/gl/gstgldisplay.c @@ -366,7 +366,7 @@ gst_gl_display_init (GstGLDisplay * display) "void main(void) {\n" " float r,g,b,r2,b2,g2,y,u,v;\n" " vec2 nxy=gl_TexCoord[0].xy;\n" - " vec2 nxy2=mod(2.0*nxy, vec2(w, h));\n" + " vec2 nxy2=nxy*2.0;\n" " r=texture2DRect(tex,nxy).r;\n" " g=texture2DRect(tex,nxy).g;\n" " b=texture2DRect(tex,nxy).b;\n" @@ -3574,33 +3574,45 @@ gst_gl_display_thread_do_download_draw_yuv (GstGLDisplay * display) switch (video_format) { case GST_VIDEO_FORMAT_AYUV: - case GST_VIDEO_FORMAT_xRGB: +#if G_BYTE_ORDER == G_LITTLE_ENDIAN glReadPixels (0, 0, width, height, GL_BGRA, - GL_UNSIGNED_INT_8_8_8_8, frame->data[0]); + GL_UNSIGNED_INT_8_8_8_8, GST_VIDEO_FRAME_PLANE_DATA (frame, 0)); +#else + glReadPixels (0, 0, width, height, GL_BGRA, + GL_UNSIGNED_INT_8_8_8_8_REV, GST_VIDEO_FRAME_PLANE_DATA (frame, 0)); +#endif break; case GST_VIDEO_FORMAT_YUY2: case GST_VIDEO_FORMAT_UYVY: +#if G_BYTE_ORDER == G_LITTLE_ENDIAN glReadPixels (0, 0, GST_ROUND_UP_2 (width) / 2, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, frame->data[0]); +#else + glReadPixels (0, 0, GST_ROUND_UP_2 (width) / 2, height, GL_BGRA, + GL_UNSIGNED_INT_8_8_8_8, frame->data[0]); +#endif break; case GST_VIDEO_FORMAT_I420: case GST_VIDEO_FORMAT_YV12: { glReadPixels (0, 0, width, height, GL_LUMINANCE, GL_UNSIGNED_BYTE, - frame->data[0]); + GST_VIDEO_FRAME_COMP_DATA (frame, 0)); #ifndef OPENGL_ES2 glReadBuffer (GL_COLOR_ATTACHMENT1_EXT); #endif + glReadPixels (0, 0, GST_ROUND_UP_2 (width) / 2, GST_ROUND_UP_2 (height) / 2, GL_LUMINANCE, GL_UNSIGNED_BYTE, - frame->data[1]); + GST_VIDEO_FRAME_COMP_DATA (frame, 1)); + #ifndef OPENGL_ES2 glReadBuffer (GL_COLOR_ATTACHMENT2_EXT); #endif + glReadPixels (0, 0, GST_ROUND_UP_2 (width) / 2, GST_ROUND_UP_2 (height) / 2, GL_LUMINANCE, GL_UNSIGNED_BYTE, - frame->data[2]); + GST_VIDEO_FRAME_COMP_DATA (frame, 2)); } break; default: -- 2.7.4