lavfi: let gcc realign the stack on public graph driving functions
authorHendrik Leppkes <h.leppkes@gmail.com>
Fri, 15 Mar 2013 19:44:57 +0000 (20:44 +0100)
committerMartin Storsjö <martin@martin.st>
Sat, 4 May 2013 20:40:13 +0000 (23:40 +0300)
The functions which actually drive the filter graph by pushing
frames through it need to ensure an aligned stack for SIMD functions.

This fixes a crash in YADIF filter when using a mingw build in a MSVC
application.

Signed-off-by: Martin Storsjö <martin@martin.st>
libavfilter/buffersink.c
libavfilter/buffersrc.c

index 6f75291..94e7366 100644 (file)
@@ -58,7 +58,8 @@ static int filter_frame(AVFilterLink *link, AVFrame *frame)
     return 0;
 }
 
-int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame)
+int attribute_align_arg av_buffersink_get_frame(AVFilterContext *ctx,
+                                                AVFrame *frame)
 {
     BufferSinkContext *s    = ctx->priv;
     AVFilterLink      *link = ctx->inputs[0];
@@ -98,7 +99,8 @@ static int read_from_fifo(AVFilterContext *ctx, AVFrame *frame,
 
 }
 
-int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples)
+int attribute_align_arg av_buffersink_get_samples(AVFilterContext *ctx,
+                                                  AVFrame *frame, int nb_samples)
 {
     BufferSinkContext *s = ctx->priv;
     AVFilterLink   *link = ctx->inputs[0];
@@ -144,7 +146,8 @@ static void compat_free_buffer(AVFilterBuffer *buf)
     av_free(buf);
 }
 
-static int compat_read(AVFilterContext *ctx, AVFilterBufferRef **pbuf, int nb_samples)
+static int attribute_align_arg compat_read(AVFilterContext *ctx,
+                                           AVFilterBufferRef **pbuf, int nb_samples)
 {
     AVFilterBufferRef *buf;
     AVFrame *frame;
index a927f26..5e982ea 100644 (file)
@@ -88,7 +88,8 @@ int av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame)
     return ret;
 }
 
-int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame)
+int attribute_align_arg av_buffersrc_add_frame(AVFilterContext *ctx,
+                                               AVFrame *frame)
 {
     BufferSourceContext *s = ctx->priv;
     AVFrame *copy;