From 2dcedd9af8c37b1c4dbdabaaaf1fa7ce783fd446 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 14 Oct 2022 09:14:03 +0200 Subject: [PATCH] fftools/ffmpeg: move freeing an output stream into a separate function --- fftools/ffmpeg.c | 69 ++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 46d2912d07..afbfff6ba2 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -504,6 +504,41 @@ static int decode_interrupt_cb(void *ctx) const AVIOInterruptCB int_cb = { decode_interrupt_cb, NULL }; +static void ost_free(OutputStream **post) +{ + OutputStream *ost = *post; + + if (!ost) + return; + + av_bsf_free(&ost->bsf_ctx); + + av_frame_free(&ost->filtered_frame); + av_frame_free(&ost->sq_frame); + av_frame_free(&ost->last_frame); + av_packet_free(&ost->pkt); + av_dict_free(&ost->encoder_opts); + + av_freep(&ost->forced_keyframes); + av_expr_free(ost->forced_keyframes_pexpr); + av_freep(&ost->avfilter); + av_freep(&ost->logfile_prefix); + +#if FFMPEG_OPT_MAP_CHANNEL + av_freep(&ost->audio_channels_map); + ost->audio_channels_mapped = 0; +#endif + + av_dict_free(&ost->sws_dict); + av_dict_free(&ost->swr_opts); + + if (ost->enc_ctx) + av_freep(&ost->enc_ctx->stats_in); + avcodec_free_context(&ost->enc_ctx); + + av_freep(post); +} + static void ffmpeg_cleanup(int ret) { int i, j; @@ -557,39 +592,9 @@ static void ffmpeg_cleanup(int ret) for (i = 0; i < nb_output_files; i++) of_close(&output_files[i]); - for (i = 0; i < nb_output_streams; i++) { - OutputStream *ost = output_streams[i]; + for (i = 0; i < nb_output_streams; i++) + ost_free(&output_streams[i]); - if (!ost) - continue; - - av_bsf_free(&ost->bsf_ctx); - - av_frame_free(&ost->filtered_frame); - av_frame_free(&ost->sq_frame); - av_frame_free(&ost->last_frame); - av_packet_free(&ost->pkt); - av_dict_free(&ost->encoder_opts); - - av_freep(&ost->forced_keyframes); - av_expr_free(ost->forced_keyframes_pexpr); - av_freep(&ost->avfilter); - av_freep(&ost->logfile_prefix); - -#if FFMPEG_OPT_MAP_CHANNEL - av_freep(&ost->audio_channels_map); - ost->audio_channels_mapped = 0; -#endif - - av_dict_free(&ost->sws_dict); - av_dict_free(&ost->swr_opts); - - if (ost->enc_ctx) - av_freep(&ost->enc_ctx->stats_in); - avcodec_free_context(&ost->enc_ctx); - - av_freep(&output_streams[i]); - } free_input_threads(); for (i = 0; i < nb_input_files; i++) { avformat_close_input(&input_files[i]->ctx);