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