[FFmpeg-devel] [PATCH 1/2] libavformat/avio: added avio_put_str16be

Mark Reid mindmark at gmail.com
Sun Mar 1 22:30:54 CET 2015


---
 libavformat/avio.h    |  6 ++++++
 libavformat/aviobuf.c | 50 +++++++++++++++++++++++++++-----------------------
 libavformat/version.h |  2 +-
 3 files changed, 34 insertions(+), 24 deletions(-)

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..8cb77b0 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -342,29 +342,33 @@ int avio_put_str(AVIOContext *s, const char *str)
     return len;
 }
 
-int avio_put_str16le(AVIOContext *s, const char *str)
-{
-    const uint8_t *q = str;
-    int ret = 0;
-    int err = 0;
-
-    while (*q) {
-        uint32_t ch;
-        uint16_t tmp;
-
-        GET_UTF8(ch, *q++, goto invalid;)
-        PUT_UTF16(ch, tmp, avio_wl16(s, tmp); ret += 2;)
-        continue;
-invalid:
-        av_log(s, AV_LOG_ERROR, "Invaid UTF8 sequence in avio_put_str16le\n");
-        err = AVERROR(EINVAL);
-    }
-    avio_wl16(s, 0);
-    if (err)
-        return err;
-    ret += 2;
-    return ret;
-}
+#define PUT_STR16(type, write) \
+    int avio_put_str16 ##type(AVIOContext *s, const char *str)\
+{\
+    const uint8_t *q = str;\
+    int ret = 0;\
+    int err = 0;\
+    while (*q) {\
+        uint32_t ch;\
+        uint16_t tmp;\
+        GET_UTF8(ch, *q++, goto invalid;)\
+        PUT_UTF16(ch, tmp, write(s, tmp); ret += 2;)\
+        continue;\
+invalid:\
+        av_log(s, AV_LOG_ERROR, "Invaid UTF8 sequence in avio_put_str16" #type "\n");\
+        err = AVERROR(EINVAL);\
+    }\
+    write(s, 0);\
+    if (err)\
+    return err;\
+    ret += 2;\
+    return ret;\
+}\
+
+PUT_STR16(le, avio_wl16)
+PUT_STR16(be, avio_wb16)
+
+#undef PUT_STR16
 
 int ff_get_v_length(uint64_t val)
 {
diff --git a/libavformat/version.h b/libavformat/version.h
index 248cd3c..9eddcbf 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -30,7 +30,7 @@
 #include "libavutil/version.h"
 
 #define LIBAVFORMAT_VERSION_MAJOR 56
-#define LIBAVFORMAT_VERSION_MINOR  23
+#define LIBAVFORMAT_VERSION_MINOR  24
 #define LIBAVFORMAT_VERSION_MICRO 106
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
-- 
2.2.1



More information about the ffmpeg-devel mailing list