comparison libvo/vo_directx.c @ 33815:4d75b3bf9561

Split out read/write part from data struct and make read-only struct const.
author reimar
date Sun, 24 Jul 2011 19:29:10 +0000
parents ccbef55f408c
children 65c7223dd37a
comparison
equal deleted inserted replaced
33814:ccbef55f408c 33815:4d75b3bf9561
81 }; 81 };
82 82
83 typedef struct directx_fourcc_caps { 83 typedef struct directx_fourcc_caps {
84 char *img_format_name; //human readable name 84 char *img_format_name; //human readable name
85 uint32_t img_format; //as MPlayer image format 85 uint32_t img_format; //as MPlayer image format
86 uint32_t drv_caps; //what hw supports with this format
87 DDPIXELFORMAT g_ddpfOverlay; //as Directx Sourface description 86 DDPIXELFORMAT g_ddpfOverlay; //as Directx Sourface description
88 } directx_fourcc_caps; 87 } directx_fourcc_caps;
89 88
90 static directx_fourcc_caps g_ddpf[] = { 89 static const directx_fourcc_caps g_ddpf[] = {
91 { "YV12 ", IMGFMT_YV12, 0, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('Y', 'V', '1', '2'), 0, 0, 0, 0, 0 } }, 90 { "YV12 ", IMGFMT_YV12, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('Y', 'V', '1', '2'), 0, 0, 0, 0, 0 } },
92 { "I420 ", IMGFMT_I420, 0, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('I', '4', '2', '0'), 0, 0, 0, 0, 0 } }, //yv12 with swapped uv 91 { "I420 ", IMGFMT_I420, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('I', '4', '2', '0'), 0, 0, 0, 0, 0 } }, //yv12 with swapped uv
93 { "IYUV ", IMGFMT_IYUV, 0, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('I', 'Y', 'U', 'V'), 0, 0, 0, 0, 0 } }, //same as i420 92 { "IYUV ", IMGFMT_IYUV, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('I', 'Y', 'U', 'V'), 0, 0, 0, 0, 0 } }, //same as i420
94 { "YVU9 ", IMGFMT_YVU9, 0, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('Y', 'V', 'U', '9'), 0, 0, 0, 0, 0 } }, 93 { "YVU9 ", IMGFMT_YVU9, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('Y', 'V', 'U', '9'), 0, 0, 0, 0, 0 } },
95 { "YUY2 ", IMGFMT_YUY2, 0, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('Y', 'U', 'Y', '2'), 0, 0, 0, 0, 0 } }, 94 { "YUY2 ", IMGFMT_YUY2, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('Y', 'U', 'Y', '2'), 0, 0, 0, 0, 0 } },
96 { "UYVY ", IMGFMT_UYVY, 0, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('U', 'Y', 'V', 'Y'), 0, 0, 0, 0, 0 } }, 95 { "UYVY ", IMGFMT_UYVY, { sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('U', 'Y', 'V', 'Y'), 0, 0, 0, 0, 0 } },
97 { "BGR8 ", IMGFMT_BGR8, 0, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 8, 0x00000000, 0x00000000, 0x00000000, 0 } }, 96 { "BGR8 ", IMGFMT_BGR8, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 8, 0x00000000, 0x00000000, 0x00000000, 0 } },
98 { "RGB15", IMGFMT_RGB15, 0, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000003E0, 0x00007C00, 0 } }, //RGB 5:5:5 97 { "RGB15", IMGFMT_RGB15, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000003E0, 0x00007C00, 0 } }, //RGB 5:5:5
99 { "BGR15", IMGFMT_BGR15, 0, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x00007C00, 0x000003E0, 0x0000001F, 0 } }, 98 { "BGR15", IMGFMT_BGR15, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x00007C00, 0x000003E0, 0x0000001F, 0 } },
100 { "RGB16", IMGFMT_RGB16, 0, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000007E0, 0x0000F800, 0 } }, //RGB 5:6:5 99 { "RGB16", IMGFMT_RGB16, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000007E0, 0x0000F800, 0 } }, //RGB 5:6:5
101 { "BGR16", IMGFMT_BGR16, 0, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000F800, 0x000007E0, 0x0000001F, 0 } }, 100 { "BGR16", IMGFMT_BGR16, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000F800, 0x000007E0, 0x0000001F, 0 } },
102 { "RGB24", IMGFMT_RGB24, 0, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x000000FF, 0x0000FF00, 0x00FF0000, 0 } }, 101 { "RGB24", IMGFMT_RGB24, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x000000FF, 0x0000FF00, 0x00FF0000, 0 } },
103 { "BGR24", IMGFMT_BGR24, 0, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x00FF0000, 0x0000FF00, 0x000000FF, 0 } }, 102 { "BGR24", IMGFMT_BGR24, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x00FF0000, 0x0000FF00, 0x000000FF, 0 } },
104 { "RGB32", IMGFMT_RGB32, 0, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0 } }, 103 { "RGB32", IMGFMT_RGB32, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0 } },
105 { "BGR32", IMGFMT_BGR32, 0, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0 } } 104 { "BGR32", IMGFMT_BGR32, { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0 } }
106 }; 105 };
107 #define NUM_FORMATS (sizeof(g_ddpf) / sizeof(g_ddpf[0])) 106 #define NUM_FORMATS (sizeof(g_ddpf) / sizeof(g_ddpf[0]))
107
108 // what hw supports with corresponding format in g_ddpf
109 static uint32_t drv_caps[NUM_FORMATS];
108 110
109 static const vo_info_t info = { 111 static const vo_info_t info = {
110 "Directx DDraw YUV/RGB/BGR renderer", 112 "Directx DDraw YUV/RGB/BGR renderer",
111 "directx", 113 "directx",
112 "Sascha Sommer <saschasommer@freenet.de>", 114 "Sascha Sommer <saschasommer@freenet.de>",
158 static int query_format(uint32_t format) 160 static int query_format(uint32_t format)
159 { 161 {
160 uint32_t i = 0; 162 uint32_t i = 0;
161 while (i < NUM_FORMATS) { 163 while (i < NUM_FORMATS) {
162 if (g_ddpf[i].img_format == format) 164 if (g_ddpf[i].img_format == format)
163 return g_ddpf[i].drv_caps; 165 return drv_caps[i];
164 i++; 166 i++;
165 } 167 }
166 return 0; 168 return 0;
167 } 169 }
168 170
683 do { 685 do {
684 ddsdOverlay.ddpfPixelFormat = g_ddpf[i].g_ddpfOverlay; 686 ddsdOverlay.ddpfPixelFormat = g_ddpf[i].g_ddpfOverlay;
685 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd, &ddsdOverlay, &g_lpddsOverlay, NULL); 687 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd, &ddsdOverlay, &g_lpddsOverlay, NULL);
686 if (ddrval == DD_OK) { 688 if (ddrval == DD_OK) {
687 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><FORMAT OVERLAY>%i %s supported\n", i, g_ddpf[i].img_format_name); 689 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><FORMAT OVERLAY>%i %s supported\n", i, g_ddpf[i].img_format_name);
688 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED | VFCAP_OSD | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP; 690 drv_caps[i] = VFCAP_CSP_SUPPORTED | VFCAP_OSD | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP;
689 formatcount++; 691 formatcount++;
690 } else 692 } else
691 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><FORMAT OVERLAY>%i %s not supported\n", i, g_ddpf[i].img_format_name); 693 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><FORMAT OVERLAY>%i %s not supported\n", i, g_ddpf[i].img_format_name);
692 if (g_lpddsOverlay) { 694 if (g_lpddsOverlay) {
693 g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay); 695 g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
732 } 734 }
733 while (i < NUM_FORMATS) { 735 while (i < NUM_FORMATS) {
734 if (g_ddpf[i].g_ddpfOverlay.dwRGBBitCount == ddpf.dwRGBBitCount) { 736 if (g_ddpf[i].g_ddpfOverlay.dwRGBBitCount == ddpf.dwRGBBitCount) {
735 if (g_ddpf[i].g_ddpfOverlay.dwRBitMask == ddpf.dwRBitMask) { 737 if (g_ddpf[i].g_ddpfOverlay.dwRBitMask == ddpf.dwRBitMask) {
736 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><FORMAT PRIMARY>%i %s supported\n", i, g_ddpf[i].img_format_name); 738 mp_msg(MSGT_VO, MSGL_V, "<vo_directx><FORMAT PRIMARY>%i %s supported\n", i, g_ddpf[i].img_format_name);
737 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED | VFCAP_OSD; 739 drv_caps[i] = VFCAP_CSP_SUPPORTED | VFCAP_OSD;
738 formatcount++; 740 formatcount++;
739 primary_image_format = g_ddpf[i].img_format; 741 primary_image_format = g_ddpf[i].img_format;
740 } 742 }
741 } 743 }
742 i++; 744 i++;