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

Reply via email to