[FFmpeg-cvslog] r15466 - trunk/libavcodec/utils.c
michael
subversion
Tue Sep 30 03:07:25 CEST 2008
Author: michael
Date: Tue Sep 30 03:07:25 2008
New Revision: 15466
Log:
Replace second (and wrong) call to avcodec_align_dimensions() by adjusting stride_align.
This is not particularely pretty and ill gladly implement something else if someone
has an idea!
Modified:
trunk/libavcodec/utils.c
Modified: trunk/libavcodec/utils.c
==============================================================================
--- trunk/libavcodec/utils.c (original)
+++ trunk/libavcodec/utils.c Tue Sep 30 03:07:25 2008
@@ -229,6 +229,7 @@ int avcodec_default_get_buffer(AVCodecCo
int size[4] = {0};
int tmpsize;
AVPicture picture;
+ int stride_align[4];
avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift);
@@ -238,12 +239,22 @@ int avcodec_default_get_buffer(AVCodecCo
w+= EDGE_WIDTH*2;
h+= EDGE_WIDTH*2;
}
- avcodec_align_dimensions(s, &w, &h);
ff_fill_linesize(&picture, s->pix_fmt, w);
- for (i=0; i<4; i++)
- picture.linesize[i] = ALIGN(picture.linesize[i], STRIDE_ALIGN);
+ for (i=0; i<4; i++){
+//STRIDE_ALIGN is 8 for SSE* but this does not work for SVQ1 chroma planes
+//we could change STRIDE_ALIGN to 16 for x86/sse but it would increase the
+//picture size unneccessarily in some cases. The solution here is not
+//pretty and better ideas are welcome!
+#ifdef HAVE_MMX
+ if(s->codec_id == CODEC_ID_SVQ1)
+ stride_align[i]= 16;
+ else
+#endif
+ stride_align[i] = STRIDE_ALIGN;
+ picture.linesize[i] = ALIGN(picture.linesize[i], stride_align[i]);
+ }
tmpsize = ff_fill_pointer(&picture, NULL, s->pix_fmt, h);
@@ -269,7 +280,7 @@ int avcodec_default_get_buffer(AVCodecCo
if((s->flags&CODEC_FLAG_EMU_EDGE) || (s->pix_fmt == PIX_FMT_PAL8) || !size[2])
buf->data[i] = buf->base[i];
else
- buf->data[i] = buf->base[i] + ALIGN((buf->linesize[i]*EDGE_WIDTH>>v_shift) + (EDGE_WIDTH>>h_shift), STRIDE_ALIGN);
+ buf->data[i] = buf->base[i] + ALIGN((buf->linesize[i]*EDGE_WIDTH>>v_shift) + (EDGE_WIDTH>>h_shift), stride_align[i]);
}
buf->width = s->width;
buf->height = s->height;
More information about the ffmpeg-cvslog
mailing list