[vlc-commits] direct3d9: avoid a copy in direct rendering
Steve Lhomme
git at videolan.org
Tue Jan 16 16:36:56 CET 2018
vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Tue Jan 16 14:29:58 2018 +0100| [63905375e7e0b0e4aef1fd850b32ec339527dc9c] | committer: Steve Lhomme
direct3d9: avoid a copy in direct rendering
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=63905375e7e0b0e4aef1fd850b32ec339527dc9c
---
modules/video_output/win32/direct3d9.c | 29 +++++++++++++++++++----------
1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/modules/video_output/win32/direct3d9.c b/modules/video_output/win32/direct3d9.c
index 4dbcbaadbd..84df885972 100644
--- a/modules/video_output/win32/direct3d9.c
+++ b/modules/video_output/win32/direct3d9.c
@@ -503,17 +503,26 @@ static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpic
else if (picture->context)
{
const struct va_pic_context *pic_ctx = (struct va_pic_context*)picture->context;
- if (pic_ctx->picsys.surface != picture->p_sys->surface)
+ if (pic_ctx->picsys.surface != surface)
{
- HRESULT hr;
- RECT visibleSource;
- visibleSource.left = 0;
- visibleSource.top = 0;
- visibleSource.right = picture->format.i_visible_width;
- visibleSource.bottom = picture->format.i_visible_height;
- hr = IDirect3DDevice9_StretchRect( p_d3d9_dev->dev, pic_ctx->picsys.surface, &visibleSource, surface, &visibleSource, D3DTEXF_NONE);
- if (FAILED(hr)) {
- msg_Err(vd, "Failed to copy the hw surface to the decoder surface (hr=0x%0lx)", hr );
+ D3DSURFACE_DESC srcDesc, dstDesc;
+ IDirect3DSurface9_GetDesc(pic_ctx->picsys.surface, &srcDesc);
+ IDirect3DSurface9_GetDesc(surface, &dstDesc);
+ if ( srcDesc.Width == dstDesc.Width && srcDesc.Height == dstDesc.Height )
+ surface = pic_ctx->picsys.surface;
+ else
+ {
+ HRESULT hr;
+ RECT visibleSource;
+ visibleSource.left = 0;
+ visibleSource.top = 0;
+ visibleSource.right = picture->format.i_visible_width;
+ visibleSource.bottom = picture->format.i_visible_height;
+
+ hr = IDirect3DDevice9_StretchRect( p_d3d9_dev->dev, pic_ctx->picsys.surface, &visibleSource, surface, &visibleSource, D3DTEXF_NONE);
+ if (FAILED(hr)) {
+ msg_Err(vd, "Failed to copy the hw surface to the decoder surface (hr=0x%0lx)", hr );
+ }
}
}
}
More information about the vlc-commits
mailing list