diff --git a/libavcodec/libgsm.c b/libavcodec/libgsm.c index 919387492c..1a2145581a 100644 --- a/libavcodec/libgsm.c +++ b/libavcodec/libgsm.c @@ -32,6 +32,13 @@ #include "avcodec.h" #include "gsm.h" +static av_cold int libgsm_encode_close(AVCodecContext *avctx) { + av_freep(&avctx->coded_frame); + gsm_destroy(avctx->priv_data); + avctx->priv_data = NULL; + return 0; +} + static av_cold int libgsm_encode_init(AVCodecContext *avctx) { if (avctx->channels > 1) { av_log(avctx, AV_LOG_ERROR, "Mono required for GSM, got %d channels\n", @@ -77,17 +84,10 @@ static av_cold int libgsm_encode_init(AVCodecContext *avctx) { return 0; error: - libgsm_encode_close(); + libgsm_encode_close(avctx); return -1; } -static av_cold int libgsm_encode_close(AVCodecContext *avctx) { - av_freep(&avctx->coded_frame); - gsm_destroy(avctx->priv_data); - avctx->priv_data = NULL; - return 0; -} - static int libgsm_encode_frame(AVCodecContext *avctx, unsigned char *frame, int buf_size, void *data) { // we need a full block