]> git.sesse.net Git - vlc/blobdiff - modules/video_chroma/i420_rgb8.c
Removes trailing spaces. Removes tabs.
[vlc] / modules / video_chroma / i420_rgb8.c
index 6b643b489eef05254d32a4f37828bff23a8160b4..52f955491d3f5b2a2a2460cbb6be4e03e2259a49 100644 (file)
@@ -1,8 +1,8 @@
 /*****************************************************************************
  * i420_rgb8.c : YUV to bitmap RGB conversion module for vlc
  *****************************************************************************
- * Copyright (C) 2000 VideoLAN
- * $Id: i420_rgb8.c,v 1.1 2002/08/04 17:23:43 sam Exp $
+ * Copyright (C) 2000 the VideoLAN team
+ * $Id$
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -10,7 +10,7 @@
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
-#include <errno.h>                                                 /* ENOMEM */
-#include <string.h>                                            /* strerror() */
-#include <stdlib.h>                                      /* malloc(), free() */
 
 #include <vlc/vlc.h>
-#include <vlc/vout.h>
+#include <vlc_vout.h>
 
 #include "i420_rgb.h"
 #include "i420_rgb_c.h"
@@ -42,26 +39,31 @@ static void SetOffset( int, int, int, int, vlc_bool_t *, int *, int * );
 void E_(I420_RGB8)( vout_thread_t *p_vout, picture_t *p_src, picture_t *p_dest )
 {
     /* We got this one from the old arguments */
-    u8 *p_pic = (u8*)p_dest->p->p_pixels;
-    u8 *p_y   = p_src->Y_PIXELS;
-    u8 *p_u   = p_src->U_PIXELS;
-    u8 *p_v   = p_src->V_PIXELS;
-
-    vlc_bool_t  b_hscale;             /* horizontal scaling type */
-    int         i_vscale;                 /* vertical scaling type */
-    int         i_x, i_y;                 /* horizontal and vertical indexes */
-    int         i_real_y;                                           /* y % 4 */
-    int         i_right_margin;
-    int         i_scale_count;                       /* scale modulo counter */
-    int         i_chroma_width = p_vout->render.i_width / 2; /* chroma width */
+    uint8_t *p_pic = (uint8_t*)p_dest->p->p_pixels;
+    uint8_t *p_y   = p_src->Y_PIXELS;
+    uint8_t *p_u   = p_src->U_PIXELS;
+    uint8_t *p_v   = p_src->V_PIXELS;
+
+    vlc_bool_t  b_hscale;                         /* horizontal scaling type */
+    int i_vscale;                                 /* vertical scaling type */
+    unsigned int i_x, i_y;                /* horizontal and vertical indexes */
+    unsigned int i_real_y;                                          /* y % 4 */
+    int          i_right_margin;
+    int          i_scale_count;                      /* scale modulo counter */
+    unsigned int i_chroma_width = p_vout->render.i_width / 2;/* chroma width */
 
     /* Lookup table */
-    u8 *        p_lookup = p_vout->chroma.p_sys->p_base;
+    uint8_t *        p_lookup = p_vout->chroma.p_sys->p_base;
 
     /* Offset array pointer */
     int *       p_offset_start = p_vout->chroma.p_sys->p_offset;
     int *       p_offset;
 
+    const int i_source_margin = p_src->p[0].i_pitch
+                                 - p_src->p[0].i_visible_pitch;
+    const int i_source_margin_c = p_src->p[1].i_pitch
+                                 - p_src->p[1].i_visible_pitch;
+
     /* The dithering matrices */
     static int dither10[4] = {  0x0,  0x8,  0x2,  0xa };
     static int dither11[4] = {  0xc,  0x4,  0xe,  0x6 };
@@ -90,6 +92,13 @@ void E_(I420_RGB8)( vout_thread_t *p_vout, picture_t *p_src, picture_t *p_dest )
         SCALE_WIDTH_DITHER( 420 );
         SCALE_HEIGHT_DITHER( 420 );
     }
+
+    p_y += i_source_margin;
+    if( i_y % 2 )
+    {
+        p_u += i_source_margin_c;
+        p_v += i_source_margin_c;
+    }
 }
 
 /* Following functions are local */