From 3237f7318344f55a9397eeaa1e4536319c7a9987 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 26 Oct 2004 12:47:56 +0000 Subject: [PATCH] stride align cleanup Originally committed as revision 3640 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/dsputil.h | 11 ++++++++++- libavcodec/utils.c | 11 +++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h index 43f113e1a..10c0360e1 100644 --- a/libavcodec/dsputil.h +++ b/libavcodec/dsputil.h @@ -426,6 +426,7 @@ static inline void emms(void) } #define __align8 __attribute__ ((aligned (8))) +#define STRIDE_ALIGN 8 void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx); void dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx); @@ -435,6 +436,7 @@ void dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx); /* This is to use 4 bytes read to the IDCT pointers for some 'zero' line optimizations */ #define __align8 __attribute__ ((aligned (4))) +#define STRIDE_ALIGN 4 void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx); @@ -442,6 +444,7 @@ void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx); /* SPARC/VIS IDCT needs 8-byte aligned DCT blocks */ #define __align8 __attribute__ ((aligned (8))) +#define STRIDE_ALIGN 8 void dsputil_init_mlib(DSPContext* c, AVCodecContext *avctx); @@ -449,11 +452,13 @@ void dsputil_init_mlib(DSPContext* c, AVCodecContext *avctx); /* SPARC/VIS IDCT needs 8-byte aligned DCT blocks */ #define __align8 __attribute__ ((aligned (8))) +#define STRIDE_ALIGN 8 void dsputil_init_vis(DSPContext* c, AVCodecContext *avctx); #elif defined(ARCH_ALPHA) #define __align8 __attribute__ ((aligned (8))) +#define STRIDE_ALIGN 8 void dsputil_init_alpha(DSPContext* c, AVCodecContext *avctx); @@ -470,24 +475,28 @@ extern int mm_flags; #endif #define __align8 __attribute__ ((aligned (16))) +#define STRIDE_ALIGN 16 void dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx); #elif defined(HAVE_MMI) #define __align8 __attribute__ ((aligned (16))) +#define STRIDE_ALIGN 16 void dsputil_init_mmi(DSPContext* c, AVCodecContext *avctx); #elif defined(ARCH_SH4) #define __align8 __attribute__ ((aligned (8))) +#define STRIDE_ALIGN 8 void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx); #else -#define __align8 +#define __align8 __attribute__ ((aligned (8))) +#define STRIDE_ALIGN 8 #endif diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 05e63ae7f..6702cd1ae 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -219,7 +219,7 @@ int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){ buf->last_pic_num= *picture_number; }else{ int h_chroma_shift, v_chroma_shift; - int s_align, pixel_size; + int pixel_size; avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift); @@ -242,11 +242,6 @@ int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){ } avcodec_align_dimensions(s, &w, &h); -#if defined(ARCH_POWERPC) || defined(HAVE_MMI) //FIXME some cleaner check - s_align= 16; -#else - s_align= 8; -#endif if(!(s->flags&CODEC_FLAG_EMU_EDGE)){ w+= EDGE_WIDTH*2; @@ -260,7 +255,7 @@ int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){ const int v_shift= i==0 ? 0 : v_chroma_shift; //FIXME next ensures that linesize= 2^x uvlinesize, thats needed because some MC code assumes it - buf->linesize[i]= ALIGN(pixel_size*w>>h_shift, s_align<<(h_chroma_shift-h_shift)); + buf->linesize[i]= ALIGN(pixel_size*w>>h_shift, STRIDE_ALIGN<<(h_chroma_shift-h_shift)); buf->base[i]= av_mallocz((buf->linesize[i]*h>>v_shift)+16); //FIXME 16 if(buf->base[i]==NULL) return -1; @@ -269,7 +264,7 @@ int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){ if(s->flags&CODEC_FLAG_EMU_EDGE) 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), s_align); + buf->data[i] = buf->base[i] + ALIGN((buf->linesize[i]*EDGE_WIDTH>>v_shift) + (EDGE_WIDTH>>h_shift), STRIDE_ALIGN); } pic->age= 256*256*256*64; } -- 2.11.0