vlc | branch: master | Steve Lhomme <[email protected]> | Wed Jun 3 14:44:01 2015 +0200| [11ddc8cbf5ab3c879db2c14c8d7d3b44a2ada323] | committer: Jean-Baptiste Kempf
direct3d9: optimize the region copy of RGBA buffers Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=11ddc8cbf5ab3c879db2c14c8d7d3b44a2ada323 --- modules/video_output/msw/direct3d9.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/video_output/msw/direct3d9.c b/modules/video_output/msw/direct3d9.c index 9b59fac..3ab12f1 100644 --- a/modules/video_output/msw/direct3d9.c +++ b/modules/video_output/msw/direct3d9.c @@ -1650,12 +1650,18 @@ static void Direct3D9ImportSubpicture(vout_display_t *vd, r->fmt.i_x_offset * r->p_picture->p->i_pixel_pitch; uint8_t *src_data = &r->p_picture->p->p_pixels[src_offset]; int src_pitch = r->p_picture->p->i_pitch; - for (unsigned y = 0; y < r->fmt.i_visible_height; y++) { - int copy_pitch = __MIN(dst_pitch, r->p_picture->p->i_visible_pitch); - if (d3dr->format == D3DFMT_A8B8G8R8) { - memcpy(&dst_data[y * dst_pitch], &src_data[y * src_pitch], - copy_pitch); + if (d3dr->format == D3DFMT_A8B8G8R8) { + if (dst_pitch == r->p_picture->p->i_visible_pitch) { + memcpy(dst_data, src_data, r->fmt.i_visible_height * dst_pitch); } else { + int copy_pitch = __MIN(dst_pitch, r->p_picture->p->i_visible_pitch); + for (unsigned y = 0; y < r->fmt.i_visible_height; y++) { + memcpy(&dst_data[y * dst_pitch], &src_data[y * src_pitch], copy_pitch); + } + } + } else { + int copy_pitch = __MIN(dst_pitch, r->p_picture->p->i_visible_pitch); + for (unsigned y = 0; y < r->fmt.i_visible_height; y++) { for (int x = 0; x < copy_pitch; x += 4) { dst_data[y * dst_pitch + x + 0] = src_data[y * src_pitch + x + 2]; dst_data[y * dst_pitch + x + 1] = src_data[y * src_pitch + x + 1]; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
