From 7f045c4429e91688f1f2335dd347203431901c06 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 11 Apr 2016 15:44:57 +0200 Subject: h264: merge ff_h264_free_context() into h264_decode_end() It is no longer called from outside the h264 decoder. --- libavcodec/h264.c | 74 +++++++++++++++++++++++++------------------------------ 1 file changed, 34 insertions(+), 40 deletions(-) (limited to 'libavcodec/h264.c') diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 47e3c93517..9d7b69c3b5 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -323,6 +323,39 @@ static int h264_init_context(AVCodecContext *avctx, H264Context *h) return 0; } +static av_cold int h264_decode_end(AVCodecContext *avctx) +{ + H264Context *h = avctx->priv_data; + int i; + + ff_h264_free_tables(h); + + for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) { + ff_h264_unref_picture(h, &h->DPB[i]); + av_frame_free(&h->DPB[i].f); + } + + h->cur_pic_ptr = NULL; + + for (i = 0; i < h->nb_slice_ctx; i++) + av_freep(&h->slice_ctx[i].rbsp_buffer); + av_freep(&h->slice_ctx); + h->nb_slice_ctx = 0; + + for (i = 0; i < MAX_SPS_COUNT; i++) + av_buffer_unref(&h->ps.sps_list[i]); + + for (i = 0; i < MAX_PPS_COUNT; i++) + av_buffer_unref(&h->ps.pps_list[i]); + + ff_h2645_packet_uninit(&h->pkt); + + ff_h264_unref_picture(h, &h->cur_pic); + av_frame_free(&h->cur_pic.f); + + return 0; +} + static AVOnce h264_vlc_init = AV_ONCE_INIT; av_cold int ff_h264_decode_init(AVCodecContext *avctx) @@ -351,7 +384,7 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx) &h->ps, &h->is_avc, &h->nal_length_size, avctx->err_recognition, avctx); if (ret < 0) { - ff_h264_free_context(h); + h264_decode_end(avctx); return ret; } } @@ -1064,45 +1097,6 @@ out: return get_consumed_bytes(buf_index, buf_size); } -av_cold void ff_h264_free_context(H264Context *h) -{ - int i; - - ff_h264_free_tables(h); - - for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) { - ff_h264_unref_picture(h, &h->DPB[i]); - av_frame_free(&h->DPB[i].f); - } - - h->cur_pic_ptr = NULL; - - for (i = 0; i < h->nb_slice_ctx; i++) - av_freep(&h->slice_ctx[i].rbsp_buffer); - av_freep(&h->slice_ctx); - h->nb_slice_ctx = 0; - - for (i = 0; i < MAX_SPS_COUNT; i++) - av_buffer_unref(&h->ps.sps_list[i]); - - for (i = 0; i < MAX_PPS_COUNT; i++) - av_buffer_unref(&h->ps.pps_list[i]); - - ff_h2645_packet_uninit(&h->pkt); -} - -static av_cold int h264_decode_end(AVCodecContext *avctx) -{ - H264Context *h = avctx->priv_data; - - ff_h264_free_context(h); - - ff_h264_unref_picture(h, &h->cur_pic); - av_frame_free(&h->cur_pic.f); - - return 0; -} - #define OFFSET(x) offsetof(H264Context, x) #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM static const AVOption h264_options[] = { -- cgit v1.2.3