dcaenc: cleanup on init failure and add a threadsafe init codec cap
authorRostislav Pehlivanov <atomnuker@gmail.com>
Sat, 13 Jan 2018 18:03:42 +0000 (18:03 +0000)
committerRostislav Pehlivanov <atomnuker@gmail.com>
Sat, 13 Jan 2018 18:06:59 +0000 (18:06 +0000)
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>
libavcodec/dcaenc.c

index dd601ff..7ba2346 100644 (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,