diff options
author | Anton Khirnov <anton@khirnov.net> | 2016-04-11 15:44:57 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-04-24 10:06:24 +0200 |
commit | 7f045c4429e91688f1f2335dd347203431901c06 (patch) | |
tree | 438c6eeb8796294c7dadb05c8fc91105da68c3b8 /libavcodec/h264.c | |
parent | 99c554efc8b09c3f1bb2fb41c3da5431085f7470 (diff) | |
download | ffmpeg-7f045c4429e91688f1f2335dd347203431901c06.tar.gz |
h264: merge ff_h264_free_context() into h264_decode_end()
It is no longer called from outside the h264 decoder.
Diffstat (limited to 'libavcodec/h264.c')
-rw-r--r-- | libavcodec/h264.c | 74 |
1 files changed, 34 insertions, 40 deletions
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[] = { |