diff --git a/configure b/configure index b33b9e6cb1ebe83a1c6885a1e064bf7a13bf1664..e34d30546f6164a98f8f1cf1e5687260a05c28ab 100755 --- a/configure +++ b/configure @@ -938,7 +938,7 @@ return 0; EOF builtin_vector=no -if $cc -o $TMPO $TMPC 2> /dev/null ; then +if $cc -msse -o $TMPO $TMPC 2> /dev/null ; then builtin_vector=yes fi diff --git a/libavcodec/vorbis.c b/libavcodec/vorbis.c index bda54f26a34bd5fa2b14a799e903bf294821722d..d9a705a14c813d96d0efb343bb76d99dda514ac9 100644 --- a/libavcodec/vorbis.c +++ b/libavcodec/vorbis.c @@ -155,6 +155,8 @@ static void vorbis_free(vorbis_context *vc) { av_freep(&vc->channel_floors); av_freep(&vc->saved); av_freep(&vc->ret); + av_freep(&vc->buf); + av_freep(&vc->buf_tmp); av_freep(&vc->residues); av_freep(&vc->modes); @@ -759,6 +761,8 @@ static int vorbis_parse_id_hdr(vorbis_context *vc){ vc->channel_floors=(float *)av_malloc((vc->blocksize_1/2)*vc->audio_channels * sizeof(float)); vc->saved=(float *)av_malloc((vc->blocksize_1/2)*vc->audio_channels * sizeof(float)); vc->ret=(float *)av_malloc((vc->blocksize_1/2)*vc->audio_channels * sizeof(float)); + vc->buf=(float *)av_malloc(vc->blocksize_1 * sizeof(float)); + vc->buf_tmp=(float *)av_malloc(vc->blocksize_1 * sizeof(float)); vc->saved_start=0; ff_mdct_init(&vc->mdct0, bl0, 1); @@ -1327,8 +1331,8 @@ static int vorbis_parse_audio_packet(vorbis_context *vc) { float *ret=vc->ret; const float *lwin=vc->lwin; const float *swin=vc->swin; - float buf[blocksize]; - float buf_tmp[blocksize]; + float *buf=vc->buf; + float *buf_tmp=vc->buf_tmp; ch_floor_ptr=vc->channel_floors+j*blocksize/2; diff --git a/libavcodec/vorbis.h b/libavcodec/vorbis.h index 8e946c8b75451bc9b079477b361061be77c301e9..a9e88cbd65d36350915b0a754b1faa6972f00603 100644 --- a/libavcodec/vorbis.h +++ b/libavcodec/vorbis.h @@ -88,6 +88,8 @@ typedef struct { float *saved; uint_fast16_t saved_start; float *ret; + float *buf; + float *buf_tmp; } vorbis_context;