From 3fd79833e266aec2d77cf07092e8b1406fd307d4 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Sun, 13 Oct 2013 10:19:09 +0000 Subject: [PATCH] avformat: add ff_alloc_extradata() helper Signed-off-by: Paul B Mahol --- libavformat/internal.h | 9 +++++++++ libavformat/utils.c | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/libavformat/internal.h b/libavformat/internal.h index ceeaa1c65f..36ee4c0be9 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -361,4 +361,13 @@ AVRational ff_choose_timebase(AVFormatContext *s, AVStream *st, int min_precissi */ void ff_generate_avci_extradata(AVStream *st); +/** + * Allocate extradata with additional FF_INPUT_BUFFER_PADDING_SIZE at end + * which is always set to 0. + * + * @param size size of extradata + * @return 0 if OK, AVERROR_xxx on error + */ +int ff_alloc_extradata(AVCodecContext *avctx, int size); + #endif /* AVFORMAT_INTERNAL_H */ diff --git a/libavformat/utils.c b/libavformat/utils.c index 61405d7c97..6a7f58027c 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2678,6 +2678,26 @@ int av_find_stream_info(AVFormatContext *ic) } #endif +int ff_alloc_extradata(AVCodecContext *avctx, int size) +{ + int ret; + + if (size < 0 || size >= INT32_MAX - FF_INPUT_BUFFER_PADDING_SIZE) { + avctx->extradata_size = 0; + return AVERROR(EINVAL); + } + avctx->extradata = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); + if (avctx->extradata) { + memset(avctx->extradata + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); + avctx->extradata_size = size; + ret = 0; + } else { + avctx->extradata_size = 0; + ret = AVERROR(ENOMEM); + } + return ret; +} + int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) { int i, count, ret = 0, j;