diff options
-rw-r--r-- | libavcodec/dsputil.c | 3 | ||||
-rw-r--r-- | libavcodec/pthread.c | 2 | ||||
-rw-r--r-- | libavcodec/utils.c | 10 | ||||
-rw-r--r-- | libavcodec/w32thread.c | 2 | ||||
-rw-r--r-- | libavutil/internal.h | 8 |
5 files changed, 17 insertions, 8 deletions
diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c index 9341782..e1a81a3 100644 --- a/libavcodec/dsputil.c +++ b/libavcodec/dsputil.c @@ -3833,7 +3833,8 @@ int ff_check_alignment(void){ av_log(NULL, AV_LOG_ERROR, "Compiler did not align stack variables. Libavcodec has been miscompiled\n" "and may be very slow or crash. This is not a bug in libavcodec,\n" - "but in the compiler. Do not report crashes to FFmpeg developers.\n"); + "but in the compiler. You may try recompiling using gcc >= 4.2.\n" + "Do not report crashes to FFmpeg developers.\n"); #endif did_fail=1; } diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c index 244bb52..702adb5 100644 --- a/libavcodec/pthread.c +++ b/libavcodec/pthread.c @@ -42,7 +42,7 @@ typedef struct ThreadContext { int done; } ThreadContext; -static void* worker(void *v) +static void* attribute_align_arg worker(void *v) { AVCodecContext *avctx = v; ThreadContext *c = avctx->thread_opaque; diff --git a/libavcodec/utils.c b/libavcodec/utils.c index c381f03..e494baf 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -829,7 +829,7 @@ AVFrame *avcodec_alloc_frame(void){ return pic; } -int avcodec_open(AVCodecContext *avctx, AVCodec *codec) +int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec) { int ret= -1; @@ -880,7 +880,7 @@ end: return ret; } -int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, +int attribute_align_arg avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, const short *samples) { if(buf_size < FF_MIN_BUFFER_SIZE && 0){ @@ -895,7 +895,7 @@ int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, return 0; } -int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, +int attribute_align_arg avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, const AVFrame *pict) { if(buf_size < FF_MIN_BUFFER_SIZE){ @@ -923,7 +923,7 @@ int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, return ret; } -int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, +int attribute_align_arg avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, uint8_t *buf, int buf_size) { @@ -946,7 +946,7 @@ int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, return ret; } -int avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples, +int attribute_align_arg avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples, int *frame_size_ptr, uint8_t *buf, int buf_size) { diff --git a/libavcodec/w32thread.c b/libavcodec/w32thread.c index 12c9212..fbc0a58 100644 --- a/libavcodec/w32thread.c +++ b/libavcodec/w32thread.c @@ -36,7 +36,7 @@ typedef struct ThreadContext{ }ThreadContext; -static unsigned __stdcall thread_func(void *v){ +static unsigned __stdcall attribute_align_arg thread_func(void *v){ ThreadContext *c= v; for(;;){ diff --git a/libavutil/internal.h b/libavutil/internal.h index e8dc72e..337f297 100644 --- a/libavutil/internal.h +++ b/libavutil/internal.h @@ -34,6 +34,14 @@ #include <stddef.h> #include <assert.h> +#ifndef attribute_align_arg +#if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__>1) +# define attribute_align_arg __attribute__((force_align_arg_pointer)) +#else +# define attribute_align_arg +#endif +#endif + #ifndef attribute_used #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) # define attribute_used __attribute__((used)) |