[FFmpeg-devel] [PATCH] lavfi: let gcc realign the stack on public graph driving functions

Hendrik Leppkes h.leppkes at gmail.com
Sat Mar 16 23:33:05 CET 2013


On Fri, Mar 15, 2013 at 8:44 PM, Hendrik Leppkes <h.leppkes at gmail.com> wrote:
> 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.
> ---
>  libavfilter/buffersink.c | 8 ++++----
>  libavfilter/buffersrc.c  | 4 ++--
>  2 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c
> index 8236f22..9bbc8d9 100644
> --- a/libavfilter/buffersink.c
> +++ b/libavfilter/buffersink.c
> @@ -117,7 +117,7 @@ int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame)
>      return av_buffersink_get_frame_flags(ctx, frame, 0);
>  }
>
> -int av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags)
> +int attribute_align_arg av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags)
>  {
>      BufferSinkContext *buf = ctx->priv;
>      AVFilterLink *inlink = ctx->inputs[0];
> @@ -169,7 +169,7 @@ 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];
> @@ -264,7 +264,7 @@ static void compat_free_buffer(AVFilterBuffer *buf)
>      av_free(buf);
>  }
>
> -static int compat_read(AVFilterContext *ctx, AVFilterBufferRef **pbuf, int nb_samples, int flags)
> +static int attribute_align_arg compat_read(AVFilterContext *ctx, AVFilterBufferRef **pbuf, int nb_samples, int flags)
>  {
>      AVFilterBufferRef *buf;
>      AVFrame *frame;
> @@ -348,7 +348,7 @@ AVRational av_buffersink_get_frame_rate(AVFilterContext *ctx)
>      return ctx->inputs[0]->frame_rate;
>  }
>
> -int av_buffersink_poll_frame(AVFilterContext *ctx)
> +int attribute_align_arg av_buffersink_poll_frame(AVFilterContext *ctx)
>  {
>      BufferSinkContext *buf = ctx->priv;
>      AVFilterLink *inlink = ctx->inputs[0];
> diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c
> index 80fd2be..54a58fe 100644
> --- a/libavfilter/buffersrc.c
> +++ b/libavfilter/buffersrc.c
> @@ -113,8 +113,8 @@ int av_buffersrc_add_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags
>      return ret;
>  }
>
> -static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
> -                                           AVFrame *frame, int flags)
> +static int attribute_align_arg av_buffersrc_add_frame_internal(AVFilterContext *ctx,
> +                                                               AVFrame *frame, int flags)
>  {
>      BufferSourceContext *s = ctx->priv;
>      AVFrame *copy;
> --
> 1.8.0.msysgit.0
>

Shameless ping. Crash fix is important fix, right-o? :)


More information about the ffmpeg-devel mailing list