dcaenc: cleanup on init failure and add a threadsafe init codec cap

The encoder didn't clean up if a malloc failed during init.
It also doesn't need any external tables to be initialized on init.
Finally, it didn't need to check for whether avctx->priv_data exists during
uninit.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
This commit is contained in:
Rostislav Pehlivanov 2018-01-13 18:03:42 +00:00
parent c7d726f7f4
commit 56e11ebf55
1 changed files with 5 additions and 5 deletions

View File

@ -295,11 +295,10 @@ static int encode_init(AVCodecContext *avctx)
static av_cold int encode_close(AVCodecContext *avctx)
{
if (avctx->priv_data) {
DCAEncContext *c = avctx->priv_data;
subband_bufer_free(c);
ff_dcaadpcm_free(&c->adpcm_ctx);
}
DCAEncContext *c = avctx->priv_data;
subband_bufer_free(c);
ff_dcaadpcm_free(&c->adpcm_ctx);
return 0;
}
@ -1287,6 +1286,7 @@ AVCodec ff_dca_encoder = {
.close = encode_close,
.encode2 = encode_frame,
.capabilities = AV_CODEC_CAP_EXPERIMENTAL,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S32,
AV_SAMPLE_FMT_NONE },
.supported_samplerates = sample_rates,