summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorRamiro Polla <ramiro.polla@gmail.com>2007-08-13 15:28:29 +0000
committerRamiro Polla <ramiro.polla@gmail.com>2007-08-13 15:28:29 +0000
commit5e4c7ca224417902dd714f4f50500b36b8c89148 (patch)
treec9fdb0713c75ea36467a645f9cafc67549e1b754 /libavcodec
parent345bb2ad90f845e004ccef49dec8fa183576eeaa (diff)
Add attribute that forces alignment of stack to functions that need it.
Necessary for systems that don't align by default to 16 bytes, required by some SSE instructions. Requires GCC >= 4.2. Based on patch by Gaƫl Chardon. Originally committed as revision 10106 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/dsputil.c3
-rw-r--r--libavcodec/pthread.c2
-rw-r--r--libavcodec/utils.c10
-rw-r--r--libavcodec/w32thread.c2
4 files changed, 9 insertions, 8 deletions
diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c
index 93417823d9..e1a81a3fea 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 244bb520dd..702adb533d 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 c381f03f20..e494baf965 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 12c9212945..fbc0a581e2 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(;;){