changeset 14400:50d99489dfe5

256 color mode support, use -vm to get better output when overlay is not supported
author faust3
date Thu, 06 Jan 2005 15:58:37 +0000
parents 1a882e2a419b
children ddf3ac9a7539
files libvo/vo_directx.c
diffstat 1 files changed, 20 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_directx.c	Thu Jan 06 14:32:08 2005 +0000
+++ b/libvo/vo_directx.c	Thu Jan 06 15:58:37 2005 +0000
@@ -1,6 +1,6 @@
 /******************************************************************************
  * vo_directx.c: Directx v2 or later DirectDraw interface for MPlayer
- * Copyright (c) 2002 - 2004 Sascha Sommer <saschasommer@freenet.de>.
+ * Copyright (c) 2002 - 2005 Sascha Sommer <saschasommer@freenet.de>.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -116,6 +116,7 @@
 	{"YVU9 ",IMGFMT_YVU9 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','V','U','9'),0,0,0,0,0}},	
 	{"YUY2 ",IMGFMT_YUY2 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','U','Y','2'),0,0,0,0,0}},
 	{"UYVY ",IMGFMT_UYVY ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('U','Y','V','Y'),0,0,0,0,0}},
+ 	{"BGR8 ",IMGFMT_BGR8 ,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 8,  0x00000000, 0x00000000, 0x00000000, 0}},   
 	{"RGB15",IMGFMT_RGB15,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16,  0x0000001F, 0x000003E0, 0x00007C00, 0}},   //RGB 5:5:5
 	{"BGR15",IMGFMT_BGR15,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16,  0x00007C00, 0x000003E0, 0x0000001F, 0}},   
 	{"RGB16",IMGFMT_RGB16,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16,  0x0000001F, 0x000007E0, 0x0000F800, 0}},   //RGB 5:6:5
@@ -1287,6 +1288,24 @@
 
 	/*create the surfaces*/
     if(Directx_CreatePrimarySurface())return 1;
+ 
+	//create palette for 256 color mode  
+	if(image_format==IMGFMT_BGR8){
+		LPDIRECTDRAWPALETTE ddpalette=NULL;
+		char* palette=malloc(4*256);
+		int i; 
+		for(i=0; i<256; i++){
+			palette[4*i+0] = ((i >> 5) & 0x07) * 255 / 7;
+			palette[4*i+1] = ((i >> 2) & 0x07) * 255 / 7;
+			palette[4*i+2] = ((i >> 0) & 0x03) * 255 / 3;
+			palette[4*i+3] = PC_NOCOLLAPSE;	
+		}
+		g_lpdd->lpVtbl->CreatePalette(g_lpdd,DDPCAPS_8BIT|DDPCAPS_INITIALIZE,palette,&ddpalette,NULL);  
+		g_lpddsPrimary->lpVtbl->SetPalette(g_lpddsPrimary,ddpalette);
+		free(palette);       
+		ddpalette->lpVtbl->Release(ddpalette);      
+	}
+
 	if (!nooverlay && Directx_CreateOverlay(image_format))
 	{
 			if(format == primary_image_format)nooverlay=1; /*overlay creation failed*/