Commit 49041406 authored by Gildas Bazin's avatar Gildas Bazin

* modules/video_chroma/i420_rgb16.c: take care of width != pitch as well.

parent 60349e21
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* i420_rgb16.c : YUV to bitmap RGB conversion module for vlc * i420_rgb16.c : YUV to bitmap RGB conversion module for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2000 VideoLAN * Copyright (C) 2000 VideoLAN
* $Id: i420_rgb16.c,v 1.5 2003/08/29 18:58:05 fenrir Exp $ * $Id$
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* *
...@@ -82,6 +82,11 @@ void E_(I420_RGB16_dithering)( vout_thread_t *p_vout, picture_t *p_src, ...@@ -82,6 +82,11 @@ void E_(I420_RGB16_dithering)( vout_thread_t *p_vout, picture_t *p_src,
int * p_offset_start = p_vout->chroma.p_sys->p_offset; int * p_offset_start = p_vout->chroma.p_sys->p_offset;
int * 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 */ /* The dithering matrices */
int dither10[4] = { 0x0, 0x8, 0x2, 0xa }; int dither10[4] = { 0x0, 0x8, 0x2, 0xa };
int dither11[4] = { 0xc, 0x4, 0xe, 0x6 }; int dither11[4] = { 0xc, 0x4, 0xe, 0x6 };
...@@ -172,6 +177,13 @@ void E_(I420_RGB16_dithering)( vout_thread_t *p_vout, picture_t *p_src, ...@@ -172,6 +177,13 @@ void E_(I420_RGB16_dithering)( vout_thread_t *p_vout, picture_t *p_src,
} }
SCALE_WIDTH; SCALE_WIDTH;
SCALE_HEIGHT( 420, 2 ); SCALE_HEIGHT( 420, 2 );
p_y += i_source_margin;
if( i_y % 2 )
{
p_u += i_source_margin_c;
p_v += i_source_margin_c;
}
} }
} }
#endif #endif
...@@ -219,6 +231,11 @@ void E_(I420_RGB16)( vout_thread_t *p_vout, picture_t *p_src, ...@@ -219,6 +231,11 @@ void E_(I420_RGB16)( vout_thread_t *p_vout, picture_t *p_src,
int * p_offset_start = p_vout->chroma.p_sys->p_offset; int * p_offset_start = p_vout->chroma.p_sys->p_offset;
int * 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;
i_right_margin = p_dest->p->i_pitch - p_dest->p->i_visible_pitch; i_right_margin = p_dest->p->i_pitch - p_dest->p->i_visible_pitch;
if( p_vout->render.i_width & 7 ) if( p_vout->render.i_width & 7 )
...@@ -342,6 +359,13 @@ void E_(I420_RGB16)( vout_thread_t *p_vout, picture_t *p_src, ...@@ -342,6 +359,13 @@ void E_(I420_RGB16)( vout_thread_t *p_vout, picture_t *p_src,
} }
SCALE_WIDTH; SCALE_WIDTH;
SCALE_HEIGHT( 420, 2 ); SCALE_HEIGHT( 420, 2 );
p_y += i_source_margin;
if( i_y % 2 )
{
p_u += i_source_margin_c;
p_v += i_source_margin_c;
}
} }
} }
...@@ -388,6 +412,11 @@ void E_(I420_RGB32)( vout_thread_t *p_vout, picture_t *p_src, ...@@ -388,6 +412,11 @@ void E_(I420_RGB32)( vout_thread_t *p_vout, picture_t *p_src,
int * p_offset_start = p_vout->chroma.p_sys->p_offset; int * p_offset_start = p_vout->chroma.p_sys->p_offset;
int * 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;
i_right_margin = p_dest->p->i_pitch - p_dest->p->i_visible_pitch; i_right_margin = p_dest->p->i_pitch - p_dest->p->i_visible_pitch;
if( p_vout->render.i_width & 7 ) if( p_vout->render.i_width & 7 )
...@@ -471,6 +500,13 @@ void E_(I420_RGB32)( vout_thread_t *p_vout, picture_t *p_src, ...@@ -471,6 +500,13 @@ void E_(I420_RGB32)( vout_thread_t *p_vout, picture_t *p_src,
} }
SCALE_WIDTH; SCALE_WIDTH;
SCALE_HEIGHT( 420, 4 ); SCALE_HEIGHT( 420, 4 );
p_y += i_source_margin;
if( i_y % 2 )
{
p_u += i_source_margin_c;
p_v += i_source_margin_c;
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment