changeset 10138:5e286cc6ad21

Removed YUV (YV12) and BGR support, leaving the native RGB support. Also cleaned some other parts.
author alex
date Tue, 20 May 2003 16:48:05 +0000
parents bf57fe2e7704
children 8ac4502b7b3d
files libvo/vo_gl.c
diffstat 1 files changed, 15 insertions(+), 145 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_gl.c	Tue May 20 15:54:48 2003 +0000
+++ b/libvo/vo_gl.c	Tue May 20 16:48:05 2003 +0000
@@ -1,8 +1,3 @@
-#define DISP
-
-// this can be 3 or 4  (regarding 24bpp and 32bpp)
-#define BYTES_PP 3
-
 #define TEXTUREFORMAT_32BPP
 
 #include <stdio.h>
@@ -20,7 +15,6 @@
 //#include <X11/keysym.h>
 #include <GL/glx.h>
 #include <errno.h>
-#include "../postproc/rgb2rgb.h"
 
 #include <GL/gl.h>
 
@@ -51,8 +45,6 @@
 
 static uint32_t image_width;
 static uint32_t image_height;
-static uint32_t image_format;
-static uint32_t image_bpp;
 static uint32_t image_bytes;
 
 static uint32_t texture_width;
@@ -80,8 +72,6 @@
 {
 //	int screen;
 	unsigned int fg, bg;
-	char *hello = (title == NULL) ? "OpenGL rulez" : title;
-//	char *name = ":0.0";
 	XSizeHints hint;
 	XVisualInfo *vinfo;
 	XEvent xev;
@@ -92,7 +82,6 @@
 
 	image_height = height;
 	image_width = width;
-	image_format = format;
   
 	aspect_save_orig(width,height);
 	aspect_save_prescale(d_width,d_height);
@@ -140,7 +129,7 @@
 //      if ( flags&0x01 ) vo_x11_decoration( mDisplay,vo_window,0 );
 	  XSelectInput(mDisplay, vo_window, StructureNotifyMask);
 	  /* Tell other applications about this window */
-	  XSetStandardProperties(mDisplay, vo_window, hello, hello, None, NULL, 0, &hint);
+	  XSetStandardProperties(mDisplay, vo_window, title, title, None, NULL, 0, &hint);
 	  /* Map window. */
 	  XMapWindow(mDisplay, vo_window);
 	  if ( flags&1 ) vo_x11_fullscreen();
@@ -169,45 +158,11 @@
 		     | ButtonPressMask | ButtonReleaseMask
         );
 
-#if 0
-	// If we have blue in the lowest bit then obviously RGB 
-	mode = ((myximage->blue_mask & 0x01) != 0) ? MODE_RGB : MODE_BGR;
-#ifdef WORDS_BIGENDIAN 
-	if (myximage->byte_order != MSBFirst)
-#else
-	if (myximage->byte_order != LSBFirst) 
-#endif
-	{
-		printf("[gl] no support for non-native XImage byte order!\n");
-		return -1;
-	}
-
-  printf("DEPTH=%d  BPP=%d\n",depth,bpp);
-#endif
-
-	/* 
-	 * If depth is 24 then it may either be a 3 or 4 byte per pixel
-	 * format. We can't use bpp because then we would lose the 
-	 * distinction between 15/16bit depth (2 byte formate assumed).
-	 *
-	 * FIXME - change yuv2rgb_init to take both depth and bpp
-	 * parameters
-	 */
-
   texture_width=32;
-  while(texture_width<image_width) texture_width*=2;
-  while(texture_width<image_height) texture_width*=2;
+  while(texture_width<image_width || texture_width<image_height) texture_width*=2;
   texture_height=texture_width;
 
-  if(format==IMGFMT_YV12){
-    yuv2rgb_init(8*BYTES_PP, MODE_BGR);
-    printf("[gl] YUV init OK!\n");
-    image_bpp=8*BYTES_PP;
-    image_bytes=BYTES_PP;
-  } else {
-    image_bpp=format&0xFF;
-    image_bytes=(image_bpp+7)/8;
-  }
+  image_bytes=(IMGFMT_RGB_DEPTH(format)+7)/8;
 
   if ( ImageData ) free( ImageData );
   ImageData=malloc(texture_width*texture_height*image_bytes);
@@ -226,10 +181,18 @@
 //  glBindTexture(GL_TEXTURE_2D, texture_id);
   glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+  /* Old OpenGL 1.0 used the third parameter (known as internalFormat) as an
+     integer, which indicated the bytes per pixel (bpp). Later in OpenGL 1.1
+     they switched to constants, like GL_RGB8. GL_RGB8 means 8 bits for each
+     channel (R,G,B), so it's equal to RGB24. It should be safe to pass the
+     image_bytes to internalFormat with newer OpenGL versions.
+     Anyway, I'm leaving this so as it was, it doesn't hurt, as OpenGL 1.1 is
+     about 10 years old too. -- alex
+  */
 #ifdef TEXTUREFORMAT_32BPP
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, texture_width, texture_height, 0,
 #else
-  glTexImage2D(GL_TEXTURE_2D, 0, BYTES_PP, texture_width, texture_height, 0,
+  glTexImage2D(GL_TEXTURE_2D, 0, image_bytes, texture_width, texture_height, 0,
 #endif
        (image_bytes==4)?GL_RGBA:GL_BGR, GL_UNSIGNED_BYTE, ImageData);
 #endif
@@ -280,87 +243,12 @@
 //static inline uint32_t draw_slice_x11(uint8_t *src[], uint32_t slice_num)
 static uint32_t draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y)
 {
-    int i;
-    int dstride=w*BYTES_PP;
-    
-//    dstride=(dstride+15)&(~15);
-
-	yuv2rgb(ImageData, src[0], src[1], src[2], 
-			w,h, dstride, stride[0],stride[1]);
-
-    for(i=0;i<h;i+=slice_height){
-      glTexSubImage2D( GL_TEXTURE_2D,  // target
-		       0,              // level
-		       x,              // x offset
-		       y+i,            // y offset
-		       w,              // width
-		       (i+slice_height<=h)?slice_height:h-i, // height
-		       (BYTES_PP==4)?GL_RGBA:GL_RGB,        // format
-		       GL_UNSIGNED_BYTE, // type
-		       ImageData+i*dstride );        // *pixels
-    }
-
 	return 0;
 }
 
-static inline uint32_t 
-draw_frame_x11_yv12(uint8_t *src[])
-{
-int i;
-//  printf("Converting YUV->RGB...\n");
-	yuv2rgb(ImageData, src[0], src[1], src[2],
-		image_width, image_height, 
-		image_width*BYTES_PP, image_width, image_width/2 );
 
-    for(i=0;i<image_height;i+=slice_height){
-      glTexSubImage2D( GL_TEXTURE_2D,  // target
-		       0,              // level
-		       0,              // x offset
-		       i,              // y offset
-		       image_width,    // width
-		       (i+slice_height<=image_height)?slice_height:image_height-i, // height
-		       (BYTES_PP==4)?GL_RGBA:GL_RGB,        // format
-		       GL_UNSIGNED_BYTE, // type
-		       ImageData+i*BYTES_PP*image_width );        // *pixels
-    }
-
-	return 0; 
-}
-
-
-static inline uint32_t 
-draw_frame_x11_bgr(uint8_t *src[])
-{
-int i;
-uint8_t *s=src[0];
-
-    for(i=0;i<image_height;i+=slice_height){
-      int h=(i+slice_height<=image_height)?slice_height:image_height-i;
-      uint8_t *d=ImageData;
-      uint8_t *de=&ImageData[3*image_width*h];
-      while(d<de){
-        d[0]=s[2];
-        d[1]=s[1];
-        d[2]=s[0];
-        s+=3;d+=3;
-      }
-      glTexSubImage2D( GL_TEXTURE_2D,  // target
-		       0,              // level
-		       0,              // x offset
-//		       image_height-1-i,  // y offset
-		       i,  // y offset
-		       image_width,    // width
-		       h, // height
-		       (image_bytes==4)?GL_RGBA:GL_RGB,        // format
-		       GL_UNSIGNED_BYTE, // type
-		       ImageData);        // *pixels
-    }
-
-	return 0; 
-}
-
-static inline uint32_t 
-draw_frame_x11_rgb(uint8_t *src[])
+static uint32_t
+draw_frame(uint8_t *src[])
 {
 int i;
 uint8_t *ImageData=src[0];
@@ -381,29 +269,11 @@
 	return 0; 
 }
 
-
-static uint32_t
-draw_frame(uint8_t *src[])
-{
-    if(image_format==IMGFMT_YV12)
-	return draw_frame_x11_yv12(src);
-    else 
-    if((image_format&IMGFMT_RGB_MASK)==IMGFMT_RGB)
-	return draw_frame_x11_rgb(src);
-    else
-	return draw_frame_x11_bgr(src);
-}
-
 static uint32_t
 query_format(uint32_t format)
 {
-    switch(format){
-    case IMGFMT_YV12:
-	return VFCAP_CSP_SUPPORTED;
-    case IMGFMT_RGB|24:
-    case IMGFMT_BGR|24:
+    if ((format == IMGFMT_RGB24) || (format == IMGFMT_RGB32))
         return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW;
-    }
     return 0;
 }