Mercurial > mplayer.hg
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++; |