# HG changeset patch # User conrad # Date 1243029710 0 # Node ID d9f8496b3b9138539b6f04a93d78fc016f352422 # Parent bc32976d6d9d341b44521f83cf1d631251199cb9 Fix libtheora encoding for non-mod16 sizes diff -r bc32976d6d9d -r d9f8496b3b91 libtheoraenc.c --- a/libtheoraenc.c Fri May 22 21:32:13 2009 +0000 +++ b/libtheoraenc.c Fri May 22 22:01:50 2009 +0000 @@ -87,12 +87,12 @@ /* Set up the theora_info struct */ theora_info_init( &t_info ); - t_info.width = avc_context->width; - t_info.height = avc_context->height; + t_info.width = FFALIGN(avc_context->width, 16); + t_info.height = FFALIGN(avc_context->height, 16); t_info.frame_width = avc_context->width; t_info.frame_height = avc_context->height; t_info.offset_x = 0; - t_info.offset_y = 0; + t_info.offset_y = avc_context->height & 0xf; /* Swap numerator and denominator as time_base in AVCodecContext gives the * time period between frames, but theora_info needs the framerate. */ t_info.fps_numerator = avc_context->time_base.den; @@ -186,8 +186,8 @@ return -1; } - t_yuv_buffer.y_width = avc_context->width; - t_yuv_buffer.y_height = avc_context->height; + t_yuv_buffer.y_width = FFALIGN(avc_context->width, 16); + t_yuv_buffer.y_height = FFALIGN(avc_context->height, 16); t_yuv_buffer.y_stride = frame->linesize[0]; t_yuv_buffer.uv_width = t_yuv_buffer.y_width / 2; t_yuv_buffer.uv_height = t_yuv_buffer.y_height / 2;