[vlc-devel] commit: theora: simplify theora's copypicture. All "visible area" logic is now handled by the core. (including offset). (Derk-Jan Hartman )
git version control
git at videolan.org
Wed Jul 23 18:56:16 CEST 2008
vlc | branch: master | Derk-Jan Hartman <hartman at videolan.org> | Wed Jul 23 18:55:36 2008 +0200| [78c19a345a39dff0d8264da9929cd757ef9ed00a]
theora: simplify theora's copypicture. All "visible area" logic is now handled by the core. (including offset).
This fixes display of the 322x242_not-divisible-by-sixteen-framesize.ogg sample of the theora testsuite.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=78c19a345a39dff0d8264da9929cd757ef9ed00a
---
modules/codec/theora.c | 22 ++++++++--------------
1 files changed, 8 insertions(+), 14 deletions(-)
diff --git a/modules/codec/theora.c b/modules/codec/theora.c
index ff9c937..88e14c0 100644
--- a/modules/codec/theora.c
+++ b/modules/codec/theora.c
@@ -305,6 +305,11 @@ static int ProcessHeaders( decoder_t *p_dec )
{
p_dec->fmt_out.video.i_visible_width = p_sys->ti.frame_width;
p_dec->fmt_out.video.i_visible_height = p_sys->ti.frame_height;
+ if( p_sys->ti.offset_x || p_sys->ti.offset_y )
+ {
+ p_dec->fmt_out.video.i_x_offset = p_sys->ti.offset_x;
+ p_dec->fmt_out.video.i_y_offset = p_sys->ti.offset_y;
+ }
}
if( p_sys->ti.aspect_denominator && p_sys->ti.aspect_numerator )
@@ -554,30 +559,19 @@ static void CloseDecoder( vlc_object_t *p_this )
static void theora_CopyPicture( decoder_t *p_dec, picture_t *p_pic,
yuv_buffer *yuv )
{
- int i_plane, i_line, i_width, i_dst_stride, i_src_stride;
- int i_src_xoffset, i_src_yoffset;
+ int i_plane, i_line, i_dst_stride, i_src_stride;
uint8_t *p_dst, *p_src;
for( i_plane = 0; i_plane < p_pic->i_planes; i_plane++ )
{
p_dst = p_pic->p[i_plane].p_pixels;
p_src = i_plane ? (i_plane - 1 ? yuv->v : yuv->u ) : yuv->y;
- i_width = p_pic->p[i_plane].i_visible_pitch;
i_dst_stride = p_pic->p[i_plane].i_pitch;
i_src_stride = i_plane ? yuv->uv_stride : yuv->y_stride;
- i_src_xoffset = p_dec->p_sys->ti.offset_x;
- i_src_yoffset = p_dec->p_sys->ti.offset_y;
- if( i_plane )
- {
- i_src_xoffset /= 2;
- i_src_yoffset /= 2;
- }
-
- p_src += (i_src_yoffset * i_src_stride + i_src_xoffset);
- for( i_line = 0; i_line < p_pic->p[i_plane].i_visible_lines; i_line++ )
+ for( i_line = 0; i_line < p_pic->p[i_plane].i_lines; i_line++ )
{
- vlc_memcpy( p_dst, p_src + i_src_xoffset,
+ vlc_memcpy( p_dst, p_src,
i_plane ? yuv->uv_width : yuv->y_width );
p_src += i_src_stride;
p_dst += i_dst_stride;
More information about the vlc-devel
mailing list