comparison libvo/vo_direct3d.c @ 28598:4172d83194f2

Extend calc_src_dst_rects to also calculate the border values needed for correctly placed dvdnav highlights, and fix direct3d and vdpau accordingly.
author reimar
date Tue, 17 Feb 2009 11:59:49 +0000
parents db19e31a2c7c
children 517a800e940e
comparison
equal deleted inserted replaced
28597:96dfe52d18ff 28598:4172d83194f2
61 in fullscreen */ 61 in fullscreen */
62 RECT fs_panscan_rect; /**< PanScan source surface cropping in 62 RECT fs_panscan_rect; /**< PanScan source surface cropping in
63 fullscreen */ 63 fullscreen */
64 int src_width; /**< Source (movie) width */ 64 int src_width; /**< Source (movie) width */
65 int src_height; /**< Source (movie) heigth */ 65 int src_height; /**< Source (movie) heigth */
66 int border_x; /**< horizontal border value for OSD */
67 int border_y; /**< vertical border value for OSD */
66 68
67 D3DFORMAT movie_src_fmt; /**< Movie colorspace format (depends on 69 D3DFORMAT movie_src_fmt; /**< Movie colorspace format (depends on
68 the movie's codec) */ 70 the movie's codec) */
69 D3DFORMAT desktop_fmt; /**< Desktop (screen) colorspace format. 71 D3DFORMAT desktop_fmt; /**< Desktop (screen) colorspace format.
70 Usually XRGB */ 72 Usually XRGB */
147 */ 149 */
148 static void calc_fs_rect(void) 150 static void calc_fs_rect(void)
149 { 151 {
150 struct vo_rect src_rect; 152 struct vo_rect src_rect;
151 struct vo_rect dst_rect; 153 struct vo_rect dst_rect;
152 calc_src_dst_rects(priv->src_width, priv->src_height, &src_rect, &dst_rect, NULL); 154 struct vo_rect borders;
155 calc_src_dst_rects(priv->src_width, priv->src_height, &src_rect, &dst_rect, &borders, NULL);
153 156
154 priv->fs_movie_rect.left = dst_rect.left; 157 priv->fs_movie_rect.left = dst_rect.left;
155 priv->fs_movie_rect.right = dst_rect.right; 158 priv->fs_movie_rect.right = dst_rect.right;
156 priv->fs_movie_rect.top = dst_rect.top; 159 priv->fs_movie_rect.top = dst_rect.top;
157 priv->fs_movie_rect.bottom = dst_rect.bottom; 160 priv->fs_movie_rect.bottom = dst_rect.bottom;
158 priv->fs_panscan_rect.left = src_rect.left; 161 priv->fs_panscan_rect.left = src_rect.left;
159 priv->fs_panscan_rect.right = src_rect.right; 162 priv->fs_panscan_rect.right = src_rect.right;
160 priv->fs_panscan_rect.top = src_rect.top; 163 priv->fs_panscan_rect.top = src_rect.top;
161 priv->fs_panscan_rect.bottom = src_rect.bottom; 164 priv->fs_panscan_rect.bottom = src_rect.bottom;
165 priv->border_x = borders.left;
166 priv->border_y = borders.top;
162 167
163 mp_msg(MSGT_VO, MSGL_V, 168 mp_msg(MSGT_VO, MSGL_V,
164 "<vo_direct3d>Fullscreen movie rectangle: t: %ld, l: %ld, r: %ld, b:%ld\n", 169 "<vo_direct3d>Fullscreen movie rectangle: t: %ld, l: %ld, r: %ld, b:%ld\n",
165 priv->fs_movie_rect.top, priv->fs_movie_rect.left, 170 priv->fs_movie_rect.top, priv->fs_movie_rect.left,
166 priv->fs_movie_rect.right, priv->fs_movie_rect.bottom); 171 priv->fs_movie_rect.right, priv->fs_movie_rect.bottom);
1025 1030
1026 priv->is_osd_populated = 0; 1031 priv->is_osd_populated = 0;
1027 /* required for if subs are in the boarder region */ 1032 /* required for if subs are in the boarder region */
1028 priv->is_clear_needed = 1; 1033 priv->is_clear_needed = 1;
1029 1034
1030 vo_draw_text(priv->osd_width, priv->osd_height, draw_alpha); 1035 vo_draw_text_ext(priv->osd_width, priv->osd_height, priv->border_x, priv->border_y,
1036 priv->border_x, priv->border_y, priv->src_width, priv->src_height, draw_alpha);
1031 1037
1032 if (!priv->device_texture_sys) 1038 if (!priv->device_texture_sys)
1033 { 1039 {
1034 /* only DMA to the shadow if its required */ 1040 /* only DMA to the shadow if its required */
1035 if (FAILED(IDirect3DDevice9_UpdateTexture(priv->d3d_device, 1041 if (FAILED(IDirect3DDevice9_UpdateTexture(priv->d3d_device,