mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
dsputil: set STRIDE_ALIGN to 16 for x86 also.
This fixes crashes in e.g. PNG decoding with SSE2 enabled. In fact, many x86 optimizations for codecs assume that our buffer strides are 16-byte aligned.
This commit is contained in:
parent
4ff6dea390
commit
9b027c0d07
@ -655,23 +655,9 @@ void ff_intrax8dsp_init(DSPContext* c, AVCodecContext *avctx);
|
|||||||
void ff_mlp_init(DSPContext* c, AVCodecContext *avctx);
|
void ff_mlp_init(DSPContext* c, AVCodecContext *avctx);
|
||||||
void ff_mlp_init_x86(DSPContext* c, AVCodecContext *avctx);
|
void ff_mlp_init_x86(DSPContext* c, AVCodecContext *avctx);
|
||||||
|
|
||||||
#if ARCH_ARM
|
#if (ARCH_ARM && HAVE_NEON) || ARCH_PPC || HAVE_MMI || HAVE_MMX
|
||||||
|
|
||||||
#if HAVE_NEON
|
|
||||||
# define STRIDE_ALIGN 16
|
# define STRIDE_ALIGN 16
|
||||||
#endif
|
#else
|
||||||
|
|
||||||
#elif ARCH_PPC
|
|
||||||
|
|
||||||
#define STRIDE_ALIGN 16
|
|
||||||
|
|
||||||
#elif HAVE_MMI
|
|
||||||
|
|
||||||
#define STRIDE_ALIGN 16
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef STRIDE_ALIGN
|
|
||||||
# define STRIDE_ALIGN 8
|
# define STRIDE_ALIGN 8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -234,18 +234,6 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
|
|||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
linesize_align[i] = STRIDE_ALIGN;
|
linesize_align[i] = STRIDE_ALIGN;
|
||||||
//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!
|
|
||||||
#if HAVE_MMX
|
|
||||||
if(s->codec_id == CODEC_ID_SVQ1 || s->codec_id == CODEC_ID_VP5 ||
|
|
||||||
s->codec_id == CODEC_ID_VP6 || s->codec_id == CODEC_ID_VP6F ||
|
|
||||||
s->codec_id == CODEC_ID_VP6A) {
|
|
||||||
for (i = 0; i < 4; i++)
|
|
||||||
linesize_align[i] = 16;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height){
|
void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height){
|
||||||
|
Loading…
Reference in New Issue
Block a user