summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-11-23 18:13:56 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-11-23 18:13:56 +0000
commite148ffb3ec6014f015e424086cbabb012e42ed96 (patch)
tree9158624128db51b5f96900e0782b2ffdaf4e4091 /libvo
parent2e5c6e2f4efaff9bda1b724ef294da795c528b29 (diff)
downloadmpv-e148ffb3ec6014f015e424086cbabb012e42ed96.tar.bz2
mpv-e148ffb3ec6014f015e424086cbabb012e42ed96.tar.xz
Move the StretchRect call from draw_slices to render_d3d_frame.
This avoids calling it (and BeginScene/EndScene) many times with slices and also avoids code duplication. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28001 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/vo_direct3d.c36
1 files changed, 8 insertions, 28 deletions
diff --git a/libvo/vo_direct3d.c b/libvo/vo_direct3d.c
index c52de7adcf..b3597dba94 100644
--- a/libvo/vo_direct3d.c
+++ b/libvo/vo_direct3d.c
@@ -290,19 +290,14 @@ static uint32_t render_d3d_frame(mp_image_t *mpi)
*/
if (mpi->flags & MP_IMGFLAG_DRAW_CALLBACK)
- return VO_TRUE;
+ goto skip_upload;
if (mpi->flags & MP_IMGFLAG_PLANAR) { /* Copy a planar frame. */
draw_slice(mpi->planes,mpi->stride,mpi->w,mpi->h,0,0);
- return VO_TRUE;
+ goto skip_upload;
}
/* If the previous if failed, we should draw a packed frame */
- if (FAILED(IDirect3DDevice9_BeginScene(priv->d3d_device))) {
- mp_msg(MSGT_VO,MSGL_ERR,"<vo_direct3d>BeginScene failed\n");
- return VO_ERROR;
- }
-
if (FAILED(IDirect3DSurface9_LockRect(priv->d3d_surface,
&locked_rect, NULL, 0))) {
mp_msg(MSGT_VO,MSGL_ERR,"<vo_direct3d>Surface lock failure\n");
@@ -317,6 +312,12 @@ static uint32_t render_d3d_frame(mp_image_t *mpi)
return VO_ERROR;
}
+skip_upload:
+ if (FAILED(IDirect3DDevice9_BeginScene(priv->d3d_device))) {
+ mp_msg(MSGT_VO,MSGL_ERR,"<vo_direct3d>BeginScene failed\n");
+ return VO_ERROR;
+ }
+
if (FAILED(IDirect3DDevice9_StretchRect(priv->d3d_device,
priv->d3d_surface,
&priv->fs_panscan_rect,
@@ -599,11 +600,6 @@ static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y )
char *Dst; /**< Pointer to the destination image */
int UVstride; /**< Stride of the U/V planes */
- if (FAILED(IDirect3DDevice9_BeginScene(priv->d3d_device))) {
- mp_msg(MSGT_VO,MSGL_ERR,"<vo_direct3d>BeginScene failed\n");
- return VO_ERROR;
- }
-
if (FAILED(IDirect3DSurface9_LockRect(priv->d3d_surface,
&locked_rect, NULL, 0))) {
mp_msg(MSGT_VO,MSGL_V,"<vo_direct3d>Surface lock failure\n");
@@ -647,22 +643,6 @@ static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y )
return VO_ERROR;
}
- if (FAILED(IDirect3DDevice9_StretchRect(priv->d3d_device,
- priv->d3d_surface,
- &priv->fs_panscan_rect,
- priv->d3d_backbuf,
- &priv->fs_movie_rect,
- D3DTEXF_LINEAR))) {
- mp_msg(MSGT_VO,MSGL_V,
- "<vo_direct3d>Unable to copy the frame to the back buffer\n");
- return VO_ERROR;
- }
-
- if (FAILED(IDirect3DDevice9_EndScene(priv->d3d_device))) {
- mp_msg(MSGT_VO,MSGL_ERR,"<vo_direct3d>EndScene failed\n");
- return VO_ERROR;
- }
-
return 0; /* Success */
}