diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-11-23 18:13:56 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-11-23 18:13:56 +0000 |
commit | e148ffb3ec6014f015e424086cbabb012e42ed96 (patch) | |
tree | 9158624128db51b5f96900e0782b2ffdaf4e4091 | |
parent | 2e5c6e2f4efaff9bda1b724ef294da795c528b29 (diff) |
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
-rw-r--r-- | libvo/vo_direct3d.c | 36 |
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 */ } |