avcodec/metasound, twinvqdec: Cleanup generically upon init failure
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
d75c4cc7c1
commit
f5d6c78a88
@ -382,5 +382,5 @@ const AVCodec ff_metasound_decoder = {
|
|||||||
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
|
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
|
||||||
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
|
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
|
||||||
AV_SAMPLE_FMT_NONE },
|
AV_SAMPLE_FMT_NONE },
|
||||||
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
|
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
|
||||||
};
|
};
|
||||||
|
@ -783,13 +783,10 @@ av_cold int ff_twinvq_decode_init(AVCodecContext *avctx)
|
|||||||
tctx->frames_per_packet = frames_per_packet;
|
tctx->frames_per_packet = frames_per_packet;
|
||||||
|
|
||||||
tctx->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
|
tctx->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
|
||||||
if (!tctx->fdsp) {
|
if (!tctx->fdsp)
|
||||||
ff_twinvq_decode_close(avctx);
|
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
}
|
|
||||||
if ((ret = init_mdct_win(tctx))) {
|
if ((ret = init_mdct_win(tctx))) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Error initializing MDCT\n");
|
av_log(avctx, AV_LOG_ERROR, "Error initializing MDCT\n");
|
||||||
ff_twinvq_decode_close(avctx);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
init_bitstream_params(tctx);
|
init_bitstream_params(tctx);
|
||||||
|
@ -197,6 +197,7 @@ static inline float twinvq_mulawinv(float y, float clip, float mu)
|
|||||||
int ff_twinvq_decode_frame(AVCodecContext *avctx, void *data,
|
int ff_twinvq_decode_frame(AVCodecContext *avctx, void *data,
|
||||||
int *got_frame_ptr, AVPacket *avpkt);
|
int *got_frame_ptr, AVPacket *avpkt);
|
||||||
int ff_twinvq_decode_close(AVCodecContext *avctx);
|
int ff_twinvq_decode_close(AVCodecContext *avctx);
|
||||||
|
/** Requires the caller to call ff_twinvq_decode_close() upon failure. */
|
||||||
int ff_twinvq_decode_init(AVCodecContext *avctx);
|
int ff_twinvq_decode_init(AVCodecContext *avctx);
|
||||||
|
|
||||||
#endif /* AVCODEC_TWINVQ_H */
|
#endif /* AVCODEC_TWINVQ_H */
|
||||||
|
@ -426,5 +426,5 @@ const AVCodec ff_twinvq_decoder = {
|
|||||||
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
|
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
|
||||||
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
|
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
|
||||||
AV_SAMPLE_FMT_NONE },
|
AV_SAMPLE_FMT_NONE },
|
||||||
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
|
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user