[vlc-commits] yuy2_i420: only handle visible pixels

Steve Lhomme git at videolan.org
Wed Mar 9 13:23:27 CET 2016


vlc/vlc-2.2 | branch: master | Steve Lhomme <robux4 at videolabs.io> | Wed Mar  9 10:20:12 2016 +0100| [0d4838c5109fe23cbe74124a2f8df9e921b4584c] | committer: Jean-Baptiste Kempf

yuy2_i420: only handle visible pixels

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
(cherry picked from commit befae51ad9cc9385e43e1f4e30f43c224e2728ff)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=0d4838c5109fe23cbe74124a2f8df9e921b4584c
---

 modules/video_chroma/yuy2_i420.c |   61 ++++++++++++++++++++++----------------
 1 file changed, 35 insertions(+), 26 deletions(-)

diff --git a/modules/video_chroma/yuy2_i420.c b/modules/video_chroma/yuy2_i420.c
index a2012e6..f0df13e 100644
--- a/modules/video_chroma/yuy2_i420.c
+++ b/modules/video_chroma/yuy2_i420.c
@@ -75,8 +75,8 @@ static int Activate( vlc_object_t *p_this )
         return -1;
     }
 
-    if( p_filter->fmt_in.video.i_width != p_filter->fmt_out.video.i_width
-     || p_filter->fmt_in.video.i_height != p_filter->fmt_out.video.i_height
+    if( p_filter->fmt_in.video.i_width != (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width)
+     || p_filter->fmt_in.video.i_height != (p_filter->fmt_out.video.i_y_offset + p_filter->fmt_out.video.i_visible_height)
      || p_filter->fmt_in.video.orientation != p_filter->fmt_out.video.orientation)
         return -1;
 
@@ -133,19 +133,22 @@ static void YUY2_I420( filter_t *p_filter, picture_t *p_source,
     int i_x, i_y;
 
     const int i_dest_margin = p_dest->p[0].i_pitch
-                                 - p_dest->p[0].i_visible_pitch;
+                                 - p_dest->p[0].i_visible_pitch
+                                 - p_filter->fmt_out.video.i_x_offset;
     const int i_dest_margin_c = p_dest->p[1].i_pitch
-                                 - p_dest->p[1].i_visible_pitch;
+                                 - p_dest->p[1].i_visible_pitch
+                                 - ( p_filter->fmt_out.video.i_x_offset / 2 );
     const int i_source_margin = p_source->p->i_pitch
-                               - p_source->p->i_visible_pitch;
+                               - p_source->p->i_visible_pitch
+                               - ( p_filter->fmt_in.video.i_x_offset * 2 );
 
     bool b_skip = false;
 
-    for( i_y = p_filter->fmt_out.video.i_height ; i_y-- ; )
+    for( i_y = (p_filter->fmt_out.video.i_y_offset + p_filter->fmt_out.video.i_visible_height) ; i_y-- ; )
     {
         if( b_skip )
         {
-            for( i_x = p_filter->fmt_out.video.i_width / 8 ; i_x-- ; )
+            for( i_x = (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) / 8 ; i_x-- ; )
             {
     #define C_YUYV_YUV422_skip( p_line, p_y, p_u, p_v )      \
                 *p_y++ = *p_line++; p_line++; \
@@ -155,14 +158,14 @@ static void YUY2_I420( filter_t *p_filter, picture_t *p_source,
                 C_YUYV_YUV422_skip( p_line, p_y, p_u, p_v );
                 C_YUYV_YUV422_skip( p_line, p_y, p_u, p_v );
             }
-            for( i_x = ( p_filter->fmt_out.video.i_width % 8 ) / 2; i_x-- ; )
+            for( i_x = ( (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) % 8 ) / 2; i_x-- ; )
             {
                 C_YUYV_YUV422_skip( p_line, p_y, p_u, p_v );
             }
         }
         else
         {
-            for( i_x = p_filter->fmt_out.video.i_width / 8 ; i_x-- ; )
+            for( i_x = (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) / 8 ; i_x-- ; )
             {
     #define C_YUYV_YUV422( p_line, p_y, p_u, p_v )      \
                 *p_y++ = *p_line++; *p_u++ = *p_line++; \
@@ -172,7 +175,7 @@ static void YUY2_I420( filter_t *p_filter, picture_t *p_source,
                 C_YUYV_YUV422( p_line, p_y, p_u, p_v );
                 C_YUYV_YUV422( p_line, p_y, p_u, p_v );
             }
-            for( i_x = ( p_filter->fmt_out.video.i_width % 8 ) / 2; i_x-- ; )
+            for( i_x = ( (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) % 8 ) / 2; i_x-- ; )
             {
                 C_YUYV_YUV422( p_line, p_y, p_u, p_v );
             }
@@ -201,19 +204,22 @@ static void YVYU_I420( filter_t *p_filter, picture_t *p_source,
     int i_x, i_y;
 
     const int i_dest_margin = p_dest->p[0].i_pitch
-                                 - p_dest->p[0].i_visible_pitch;
+                                 - p_dest->p[0].i_visible_pitch
+                                 - p_filter->fmt_out.video.i_x_offset;
     const int i_dest_margin_c = p_dest->p[1].i_pitch
-                                 - p_dest->p[1].i_visible_pitch;
+                                 - p_dest->p[1].i_visible_pitch
+                                 - ( p_filter->fmt_out.video.i_x_offset / 2 );
     const int i_source_margin = p_source->p->i_pitch
-                               - p_source->p->i_visible_pitch;
+                               - p_source->p->i_visible_pitch
+                               - ( p_filter->fmt_in.video.i_x_offset * 2 );
 
     bool b_skip = false;
 
-    for( i_y = p_filter->fmt_out.video.i_height ; i_y-- ; )
+    for( i_y = (p_filter->fmt_out.video.i_y_offset + p_filter->fmt_out.video.i_visible_height) ; i_y-- ; )
     {
         if( b_skip )
         {
-            for( i_x = p_filter->fmt_out.video.i_width / 8 ; i_x-- ; )
+            for( i_x = (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) / 8 ; i_x-- ; )
             {
     #define C_YVYU_YUV422_skip( p_line, p_y, p_u, p_v )      \
                 *p_y++ = *p_line++; p_line++; \
@@ -223,14 +229,14 @@ static void YVYU_I420( filter_t *p_filter, picture_t *p_source,
                 C_YVYU_YUV422_skip( p_line, p_y, p_u, p_v );
                 C_YVYU_YUV422_skip( p_line, p_y, p_u, p_v );
             }
-            for( i_x = ( p_filter->fmt_out.video.i_width % 8 ) / 2; i_x-- ; )
+            for( i_x = ( (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) % 8 ) / 2; i_x-- ; )
             {
                 C_YVYU_YUV422_skip( p_line, p_y, p_u, p_v );
             }
         }
         else
         {
-            for( i_x = p_filter->fmt_out.video.i_width / 8 ; i_x-- ; )
+            for( i_x = (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) / 8 ; i_x-- ; )
             {
     #define C_YVYU_YUV422( p_line, p_y, p_u, p_v )      \
                 *p_y++ = *p_line++; *p_v++ = *p_line++; \
@@ -240,7 +246,7 @@ static void YVYU_I420( filter_t *p_filter, picture_t *p_source,
                 C_YVYU_YUV422( p_line, p_y, p_u, p_v );
                 C_YVYU_YUV422( p_line, p_y, p_u, p_v );
             }
-            for( i_x = ( p_filter->fmt_out.video.i_width % 8 ) / 2; i_x-- ; )
+            for( i_x = ( (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) % 8 ) / 2; i_x-- ; )
             {
                 C_YVYU_YUV422( p_line, p_y, p_u, p_v );
             }
@@ -269,19 +275,22 @@ static void UYVY_I420( filter_t *p_filter, picture_t *p_source,
     int i_x, i_y;
 
     const int i_dest_margin = p_dest->p[0].i_pitch
-                                 - p_dest->p[0].i_visible_pitch;
+                                 - p_dest->p[0].i_visible_pitch
+                                 - p_filter->fmt_out.video.i_x_offset;
     const int i_dest_margin_c = p_dest->p[1].i_pitch
-                                 - p_dest->p[1].i_visible_pitch;
+                                 - p_dest->p[1].i_visible_pitch
+                                 - ( p_filter->fmt_out.video.i_x_offset / 2 );
     const int i_source_margin = p_source->p->i_pitch
-                               - p_source->p->i_visible_pitch;
+                               - p_source->p->i_visible_pitch
+                               - ( p_filter->fmt_in.video.i_x_offset * 2 );
 
     bool b_skip = false;
 
-    for( i_y = p_filter->fmt_out.video.i_height ; i_y-- ; )
+    for( i_y = (p_filter->fmt_out.video.i_y_offset + p_filter->fmt_out.video.i_visible_height) ; i_y-- ; )
     {
         if( b_skip )
         {
-            for( i_x = p_filter->fmt_out.video.i_width / 8 ; i_x-- ; )
+            for( i_x = (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) / 8 ; i_x-- ; )
             {
     #define C_UYVY_YUV422_skip( p_line, p_y, p_u, p_v )      \
                 *p_u++ = *p_line++; p_line++; \
@@ -291,14 +300,14 @@ static void UYVY_I420( filter_t *p_filter, picture_t *p_source,
                 C_UYVY_YUV422_skip( p_line, p_y, p_u, p_v );
                 C_UYVY_YUV422_skip( p_line, p_y, p_u, p_v );
             }
-            for( i_x = ( p_filter->fmt_out.video.i_width % 8 ) / 2; i_x-- ; )
+            for( i_x = ( (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) % 8 ) / 2; i_x-- ; )
             {
                 C_UYVY_YUV422_skip( p_line, p_y, p_u, p_v );
             }
         }
         else
         {
-            for( i_x = p_filter->fmt_out.video.i_width / 8 ; i_x-- ; )
+            for( i_x = (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) / 8 ; i_x-- ; )
             {
     #define C_UYVY_YUV422( p_line, p_y, p_u, p_v )      \
                 *p_u++ = *p_line++; *p_y++ = *p_line++; \
@@ -308,7 +317,7 @@ static void UYVY_I420( filter_t *p_filter, picture_t *p_source,
                 C_UYVY_YUV422( p_line, p_y, p_u, p_v );
                 C_UYVY_YUV422( p_line, p_y, p_u, p_v );
             }
-            for( i_x = ( p_filter->fmt_out.video.i_width % 8 ) / 2; i_x-- ; )
+            for( i_x = ( (p_filter->fmt_out.video.i_x_offset + p_filter->fmt_out.video.i_visible_width) % 8 ) / 2; i_x-- ; )
             {
                 C_UYVY_YUV422( p_line, p_y, p_u, p_v );
             }



More information about the vlc-commits mailing list