mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Change linesize alignment method to ensure that linesize[0] == 2*linesize[1]
for YUV420P and YUV422P always. Fixes MPEG-2 4:2:2 encoding on PPC and ARM, and should fix mxf_d10 regression. Originally committed as revision 18047 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
b435725b4c
commit
c9d6e84778
@ -242,6 +242,7 @@ int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){
|
||||
int h_chroma_shift, v_chroma_shift;
|
||||
int size[4] = {0};
|
||||
int tmpsize;
|
||||
int unaligned;
|
||||
AVPicture picture;
|
||||
int stride_align[4];
|
||||
|
||||
@ -254,8 +255,14 @@ int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){
|
||||
h+= EDGE_WIDTH*2;
|
||||
}
|
||||
|
||||
do {
|
||||
// NOTE: do not align linesizes individually, this breaks e.g. assumptions
|
||||
// that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2
|
||||
ff_fill_linesize(&picture, s->pix_fmt, w);
|
||||
// increase alignment of w for next try (rhs gives the lowest bit set in w)
|
||||
w += w & ~(w-1);
|
||||
|
||||
unaligned = 0;
|
||||
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
|
||||
@ -267,8 +274,9 @@ int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){
|
||||
else
|
||||
#endif
|
||||
stride_align[i] = STRIDE_ALIGN;
|
||||
picture.linesize[i] = ALIGN(picture.linesize[i], stride_align[i]);
|
||||
unaligned |= picture.linesize[i] % stride_align[i];
|
||||
}
|
||||
} while (unaligned);
|
||||
|
||||
tmpsize = ff_fill_pointer(&picture, NULL, s->pix_fmt, h);
|
||||
if (tmpsize < 0)
|
||||
|
Loading…
Reference in New Issue
Block a user