mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
Replace second (and wrong) call to avcodec_align_dimensions() by adjusting
stride_align. This is not particularly pretty and I will gladly implement something else if someone has an idea! Originally committed as revision 15466 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
8c07cee91a
commit
503bc4026d
@ -229,6 +229,7 @@ int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){
|
||||
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(AVCodecContext *s, AVFrame *pic){
|
||||
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(AVCodecContext *s, AVFrame *pic){
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user