comparison Gui/wm/ws.c @ 2733:4dddb055d2cd

add prostproc/rgb2rgb
author pontscho
date Tue, 06 Nov 2001 12:32:27 +0000
parents a6c5a537f30a
children b52d3e6ff4ab
comparison
equal deleted inserted replaced
2732:ae79207a3055 2733:4dddb055d2cd
14 #include <stdlib.h> 14 #include <stdlib.h>
15 #include <string.h> 15 #include <string.h>
16 #include <unistd.h> 16 #include <unistd.h>
17 #include <errno.h> 17 #include <errno.h>
18 18
19 #include <inttypes.h>
20
19 #include "ws.h" 21 #include "ws.h"
20 #include "wsconv.h" 22 #include "wsconv.h"
21 #include "../../config.h" 23 #include "../../config.h"
24 #include "../../postproc/rgb2rgb.h"
22 25
23 #include <X11/extensions/XShm.h> 26 #include <X11/extensions/XShm.h>
24 #ifdef HAVE_XSHAPE 27 #ifdef HAVE_XSHAPE
25 #include <X11/extensions/shape.h> 28 #include <X11/extensions/shape.h>
26 #endif 29 #endif
225 #endif 228 #endif
226 } 229 }
227 #endif 230 #endif
228 initConverter(); 231 initConverter();
229 wsOutMask=wsGetOutMask(); 232 wsOutMask=wsGetOutMask();
233 #ifdef DEBUG
234 fprintf( stderr,"[ws] Initialized converter: " );
235 #endif
230 switch ( wsOutMask ) 236 switch ( wsOutMask )
231 { 237 {
232 case wsRGB32: 238 case wsRGB32:
239 #ifdef DEBUG
240 fprintf( stderr,"rgb32 to rgb32\n" );
241 #endif
233 wsConvFunc=BGR8880_to_RGB8880_c; 242 wsConvFunc=BGR8880_to_RGB8880_c;
234 break; 243 break;
235 case wsBGR32: 244 case wsBGR32:
245 #ifdef DEBUG
246 fprintf( stderr,"rgb32 to bgr32\n" );
247 #endif
236 wsConvFunc=BGR8880_to_BGR8880_c; 248 wsConvFunc=BGR8880_to_BGR8880_c;
237 break; 249 break;
238 case wsRGB24: 250 case wsRGB24:
239 #ifdef xHAVE_MMX 251 #ifdef DEBUG
240 wsConvFunc=BGR8880_to_RGB888_mmx; 252 fprintf( stderr,"rgb32 to rgb24\n" );
241 #else
242 wsConvFunc=BGR8880_to_RGB888_c;
243 #endif 253 #endif
254 wsConvFunc=rgb32to24;
244 break; 255 break;
245 case wsBGR24: 256 case wsBGR24:
257 #ifdef DEBUG
258 fprintf( stderr,"rgb32 to bgr24\n" );
259 #endif
246 wsConvFunc=BGR8880_to_BGR888_c; 260 wsConvFunc=BGR8880_to_BGR888_c;
247 break; 261 break;
248 case wsRGB16: 262 case wsRGB16:
249 wsConvFunc=BGR8880_to_RGB565_c; 263 #ifdef DEBUG
264 fprintf( stderr,"rgb32 to rgb16\n" );
265 #endif
266 wsConvFunc=rgb32to16;
250 break; 267 break;
251 case wsBGR16: 268 case wsBGR16:
269 #ifdef DEBUG
270 fprintf( stderr,"rgb32 to bgr16\n" );
271 #endif
252 wsConvFunc=BGR8880_to_BGR565_c; 272 wsConvFunc=BGR8880_to_BGR565_c;
253 break; 273 break;
254 case wsRGB15: 274 case wsRGB15:
255 wsConvFunc=BGR8880_to_RGB555_c; 275 #ifdef DEBUG
276 fprintf( stderr,"rgb32 to rgb15\n" );
277 #endif
278 wsConvFunc=rgb32to15;
256 break; 279 break;
257 case wsBGR15: 280 case wsBGR15:
281 #ifdef DEBUG
282 fprintf( stderr,"rgb32 to bgr15\n" );
283 #endif
258 wsConvFunc=BGR8880_to_BGR555_c; 284 wsConvFunc=BGR8880_to_BGR555_c;
259 break; 285 break;
260 } 286 }
261 XSetIOErrorHandler( wsIOErrorHandler ); 287 XSetIOErrorHandler( wsIOErrorHandler );
262 XSetErrorHandler( wsErrorHandler ); 288 XSetErrorHandler( wsErrorHandler );
782 808
783 // ---------------------------------------------------------------------------------------------- 809 // ----------------------------------------------------------------------------------------------
784 // Put 'Image' to window. 810 // Put 'Image' to window.
785 // ---------------------------------------------------------------------------------------------- 811 // ----------------------------------------------------------------------------------------------
786 void wsConvert( wsTWindow * win,unsigned char * Image,unsigned int Size ) 812 void wsConvert( wsTWindow * win,unsigned char * Image,unsigned int Size )
787 { if ( wsConvFunc ) wsConvFunc( Image,win->ImageData,win->xImage->width * win->xImage->height ); } 813 { if ( wsConvFunc ) wsConvFunc( Image,win->ImageData,win->xImage->width * win->xImage->height * 4 ); }
788 814
789 void wsPutImage( wsTWindow * win ) 815 void wsPutImage( wsTWindow * win )
790 { 816 {
791 if ( wsUseXShm ) 817 if ( wsUseXShm )
792 { 818 {
888 { 914 {
889 case wsRGB32: 915 case wsRGB32:
890 case wsRGB24: color=( r << 16 ) + ( g << 8 ) + b; break; 916 case wsRGB24: color=( r << 16 ) + ( g << 8 ) + b; break;
891 case wsBGR32: 917 case wsBGR32:
892 case wsBGR24: color=( b << 16 ) + ( g << 8 ) + r; break; 918 case wsBGR24: color=( b << 16 ) + ( g << 8 ) + r; break;
893 case wsRGB16: PACK_RGB16( r,g,b,color ); break; 919 case wsRGB16: PACK_RGB16( b,g,r,color ); break;
894 case wsBGR16: PACK_RGB16( b,g,r,color ); break; 920 case wsBGR16: PACK_RGB16( r,g,b,color ); break;
895 case wsRGB15: PACK_RGB15( r,g,b,color ); break; 921 case wsRGB15: PACK_RGB15( b,g,r,color ); break;
896 case wsBGR15: PACK_RGB15( b,g,r,color ); break; 922 case wsBGR15: PACK_RGB15( r,g,b,color ); break;
897 } 923 }
898 XSetWindowBackground( wsDisplay,win->WindowID,color ); 924 XSetWindowBackground( wsDisplay,win->WindowID,color );
899 } 925 }
900 926
901 void wsSetForegroundRGB( wsTWindow * win,int r,int g,int b ) 927 void wsSetForegroundRGB( wsTWindow * win,int r,int g,int b )
905 { 931 {
906 case wsRGB32: 932 case wsRGB32:
907 case wsRGB24: color=( r << 16 ) + ( g << 8 ) + b; break; 933 case wsRGB24: color=( r << 16 ) + ( g << 8 ) + b; break;
908 case wsBGR32: 934 case wsBGR32:
909 case wsBGR24: color=( b << 16 ) + ( g << 8 ) + r; break; 935 case wsBGR24: color=( b << 16 ) + ( g << 8 ) + r; break;
910 case wsRGB16: PACK_RGB16( r,g,b,color ); break; 936 case wsRGB16: PACK_RGB16( b,g,r,color ); break;
911 case wsBGR16: PACK_RGB16( b,g,r,color ); break; 937 case wsBGR16: PACK_RGB16( r,g,b,color ); break;
912 case wsRGB15: PACK_RGB15( r,g,b,color ); break; 938 case wsRGB15: PACK_RGB15( b,g,r,color ); break;
913 case wsBGR15: PACK_RGB15( b,g,r,color ); break; 939 case wsBGR15: PACK_RGB15( r,g,b,color ); break;
914 } 940 }
915 XSetForeground( wsDisplay,win->wGC,color ); 941 XSetForeground( wsDisplay,win->wGC,color );
916 } 942 }
917 943
918 // ---------------------------------------------------------------------------------------------- 944 // ----------------------------------------------------------------------------------------------