summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2013-10-13 10:19:09 +0000
committerPaul B Mahol <onemda@gmail.com>2013-10-13 20:13:38 +0000
commit3fd79833e266aec2d77cf07092e8b1406fd307d4 (patch)
tree9812ce213a4955aa463ebf61ae6409a24152da7f /libavformat
parentfe448cd28d674c3eff3072552eae366d0b659ce9 (diff)
avformat: add ff_alloc_extradata() helper
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/internal.h9
-rw-r--r--libavformat/utils.c20
2 files changed, 29 insertions, 0 deletions
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;