[FFmpeg-cvslog] r22030 - trunk/libavutil/common.h

rbultje subversion
Wed Feb 24 19:08:30 CET 2010


Author: rbultje
Date: Wed Feb 24 19:08:30 2010
New Revision: 22030

Log:
Add PUT_UTF16() macro.

Patch by Anton Khirnov <wyskas gmail com>.

Modified:
   trunk/libavutil/common.h

Modified: trunk/libavutil/common.h
==============================================================================
--- trunk/libavutil/common.h	Wed Feb 24 19:06:02 2010	(r22029)
+++ trunk/libavutil/common.h	Wed Feb 24 19:08:30 2010	(r22030)
@@ -335,6 +335,36 @@ static inline av_const int av_ceil_log2(
         }\
     }
 
+/*!
+ * \def PUT_UTF16(val, tmp, PUT_16BIT)
+ * Converts a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes).
+ * \param val is an input-only argument and should be of type uint32_t. It holds
+ * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If
+ * val is given as a function it is executed only once.
+ * \param tmp is a temporary variable and should be of type uint16_t. It
+ * represents an intermediate value during conversion that is to be
+ * output by PUT_16BIT.
+ * \param PUT_16BIT writes the converted UTF-16 data to any proper destination
+ * in desired endianness. It could be a function or a statement, and uses tmp
+ * as the input byte.  For example, PUT_BYTE could be "*output++ = tmp;"
+ * PUT_BYTE will be executed 1 or 2 times depending on input character.
+ */
+#define PUT_UTF16(val, tmp, PUT_16BIT)\
+    {\
+        uint32_t in = val;\
+        if (in < 0x10000) {\
+            tmp = in;\
+            PUT_16BIT\
+        } else {\
+            tmp = 0xD800 | ((in - 0x10000) >> 10);\
+            PUT_16BIT\
+            tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\
+            PUT_16BIT\
+        }\
+    }\
+
+
+
 #include "mem.h"
 
 #ifdef HAVE_AV_CONFIG_H



More information about the ffmpeg-cvslog mailing list