[FFmpeg-devel] [PATCH v3 1/2] libavformat/avio: added avio_put_str16be
Mark Reid
mindmark at gmail.com
Tue Mar 3 05:06:13 CET 2015
---
doc/APIchanges | 3 +++
libavformat/avio.h | 6 ++++++
libavformat/aviobuf.c | 23 +++++++++++++++++++----
libavformat/version.h | 4 ++--
4 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/doc/APIchanges b/doc/APIchanges
index 5fdfc82..6875aed 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@ libavutil: 2014-08-09
API changes, most recent first:
+2015-03-xx - xxxxxxx - lavf 56.24.100
+ Add avio_put_str16be()
+
2015-xx-xx - xxxxxxx - lavc 56.13
Add width, height, coded_width, coded_height and format to
AVCodecParserContext.
diff --git a/libavformat/avio.h b/libavformat/avio.h
index b9b4017..8fc7e27 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -234,6 +234,12 @@ int avio_put_str(AVIOContext *s, const char *str);
int avio_put_str16le(AVIOContext *s, const char *str);
/**
+ * Convert an UTF-8 string to UTF-16BE and write it.
+ * @return number of bytes written.
+ */
+int avio_put_str16be(AVIOContext *s, const char *str);
+
+/**
* Passing this as the "whence" parameter to a seek function causes it to
* return the filesize without seeking anywhere. Supporting this is optional.
* If it is not supported then the seek function will return <0.
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index 8fd0466..537c11f 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -342,7 +342,7 @@ int avio_put_str(AVIOContext *s, const char *str)
return len;
}
-int avio_put_str16le(AVIOContext *s, const char *str)
+static inline int put_str16(AVIOContext *s, const char *str, const int be)
{
const uint8_t *q = str;
int ret = 0;
@@ -353,19 +353,34 @@ int avio_put_str16le(AVIOContext *s, const char *str)
uint16_t tmp;
GET_UTF8(ch, *q++, goto invalid;)
- PUT_UTF16(ch, tmp, avio_wl16(s, tmp); ret += 2;)
+ PUT_UTF16(ch, tmp, be ? avio_wb16(s, tmp) : avio_wl16(s, tmp);
+ ret += 2;)
continue;
invalid:
- av_log(s, AV_LOG_ERROR, "Invaid UTF8 sequence in avio_put_str16le\n");
+ av_log(s, AV_LOG_ERROR, "Invaid UTF8 sequence in avio_put_str16%s\n", be ? "be" : "le");
err = AVERROR(EINVAL);
}
- avio_wl16(s, 0);
+ if (be)
+ avio_wb16(s, 0);
+ else
+ avio_wl16(s, 0);
if (err)
return err;
ret += 2;
return ret;
}
+#define PUT_STR16(type, big_endian) \
+int avio_put_str16 ## type(AVIOContext *s, const char *str) \
+{ \
+return put_str16(s, str, big_endian); \
+}
+
+PUT_STR16(le, 0)
+PUT_STR16(be, 1)
+
+#undef PUT_STR16
+
int ff_get_v_length(uint64_t val)
{
int i = 1;
diff --git a/libavformat/version.h b/libavformat/version.h
index 248cd3c..08ab50b 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -30,8 +30,8 @@
#include "libavutil/version.h"
#define LIBAVFORMAT_VERSION_MAJOR 56
-#define LIBAVFORMAT_VERSION_MINOR 23
-#define LIBAVFORMAT_VERSION_MICRO 106
+#define LIBAVFORMAT_VERSION_MINOR 24
+#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
--
2.2.1
More information about the ffmpeg-devel
mailing list