X-Git-Url: https://git.piment-noir.org/?p=deb_ffmpeg.git;a=blobdiff_plain;f=ffmpeg%2Flibavcodec%2Fimc.c;h=6c9ffd7980d249a450232861a8dff55197fb1f9c;hp=dcedbd63b2783757cd586879a43059ec0abfdce1;hb=f6fa7814ccfe3e76514b36cf04f5cd3cb657c8cf;hpb=2ba45a602cbfa7b771effba9b11bb4245c21bc00 diff --git a/ffmpeg/libavcodec/imc.c b/ffmpeg/libavcodec/imc.c index dcedbd6..6c9ffd7 100644 --- a/ffmpeg/libavcodec/imc.c +++ b/ffmpeg/libavcodec/imc.c @@ -96,7 +96,7 @@ typedef struct { GetBitContext gb; BswapDSPContext bdsp; - AVFloatDSPContext fdsp; + AVFloatDSPContext *fdsp; FFTContext fft; DECLARE_ALIGNED(32, FFTComplex, samples)[COEFFS / 2]; float *out_samples; @@ -256,7 +256,13 @@ static av_cold int imc_decode_init(AVCodecContext *avctx) return ret; } ff_bswapdsp_init(&q->bdsp); - avpriv_float_dsp_init(&q->fdsp, avctx->flags & CODEC_FLAG_BITEXACT); + q->fdsp = avpriv_float_dsp_alloc(avctx->flags & CODEC_FLAG_BITEXACT); + if (!q->fdsp) { + ff_fft_end(&q->fft); + + return AVERROR(ENOMEM); + } + avctx->sample_fmt = AV_SAMPLE_FMT_FLTP; avctx->channel_layout = avctx->channels == 1 ? AV_CH_LAYOUT_MONO : AV_CH_LAYOUT_STEREO; @@ -1044,7 +1050,7 @@ static int imc_decode_frame(AVCodecContext *avctx, void *data, } if (avctx->channels == 2) { - q->fdsp.butterflies_float((float *)frame->extended_data[0], + q->fdsp->butterflies_float((float *)frame->extended_data[0], (float *)frame->extended_data[1], COEFFS); } @@ -1053,12 +1059,12 @@ static int imc_decode_frame(AVCodecContext *avctx, void *data, return IMC_BLOCK_SIZE * avctx->channels; } - static av_cold int imc_decode_close(AVCodecContext * avctx) { IMCContext *q = avctx->priv_data; ff_fft_end(&q->fft); + av_freep(&q->fdsp); return 0; }