[FFmpeg-cvslog] lavc/utils: Introduce ff_bprint_to_codecpar_extradata for avformat
Hendrik Leppkes
git at videolan.org
Sun Apr 3 19:05:30 CEST 2016
ffmpeg | branch: master | Hendrik Leppkes <h.leppkes at gmail.com> | Thu Mar 31 21:49:02 2016 +0100| [6518cbc52a8c59f8f590405a852385adbc47ed62] | committer: Derek Buitenhuis
lavc/utils: Introduce ff_bprint_to_codecpar_extradata for avformat
It will be used by text subtitle demuxers to construct format instructions
straight into extradata. They all currently a similar function that accepts
an AVCodecContext instead.
Signed-off-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6518cbc52a8c59f8f590405a852385adbc47ed62
---
libavformat/internal.h | 7 +++++++
libavformat/utils.c | 23 +++++++++++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 7defce8..cd390dd 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -22,6 +22,8 @@
#define AVFORMAT_INTERNAL_H
#include <stdint.h>
+
+#include "libavutil/bprint.h"
#include "avformat.h"
#include "os_support.h"
@@ -596,4 +598,9 @@ int ff_reshuffle_raw_rgb(AVFormatContext *s, AVPacket **ppkt, AVCodecContext *en
*/
int ff_get_packet_palette(AVFormatContext *s, AVPacket *pkt, int ret, uint32_t *palette);
+/**
+ * Finalize buf into extradata and set its size appropriately.
+ */
+int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf);
+
#endif /* AVFORMAT_INTERNAL_H */
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 3bd2df3..3bf96ad 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -4866,3 +4866,26 @@ int ff_get_packet_palette(AVFormatContext *s, AVPacket *pkt, int ret, uint32_t *
return 0;
}
+
+int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf)
+{
+ int ret;
+ char *str;
+
+ ret = av_bprint_finalize(buf, &str);
+ if (ret < 0)
+ return ret;
+ if (!av_bprint_is_complete(buf)) {
+ av_free(str);
+ return AVERROR(ENOMEM);
+ }
+
+ par->extradata = str;
+ /* Note: the string is NUL terminated (so extradata can be read as a
+ * string), but the ending character is not accounted in the size (in
+ * binary formats you are likely not supposed to mux that character). When
+ * extradata is copied, it is also padded with AV_INPUT_BUFFER_PADDING_SIZE
+ * zeros. */
+ par->extradata_size = buf->len;
+ return 0;
+}
More information about the ffmpeg-cvslog
mailing list