base64: optimize av_base64_encode()
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 20 Jan 2012 21:46:14 +0000 (22:46 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 20 Jan 2012 23:24:10 +0000 (00:24 +0100)
This makes the code 2-3 times as fast

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavutil/base64.c

index 654c280..26e28b7 100644 (file)
@@ -27,6 +27,7 @@
 #include "common.h"
 #include "base64.h"
 #include "avassert.h"
+#include "intreadwrite.h"
 
 /* ---------------- private code */
 static const uint8_t map2[] =
@@ -85,6 +86,15 @@ char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size)
         out_size < AV_BASE64_SIZE(in_size))
         return NULL;
     ret = dst = out;
+    while (bytes_remaining > 3) {
+        i_bits = AV_RB32(in);
+        in += 3; bytes_remaining -= 3;
+        *dst++ = b64[ i_bits>>26        ];
+        *dst++ = b64[(i_bits>>20) & 0x3F];
+        *dst++ = b64[(i_bits>>14) & 0x3F];
+        *dst++ = b64[(i_bits>>8 ) & 0x3F];
+    }
+    i_bits = 0;
     while (bytes_remaining) {
         i_bits = (i_bits << 8) + *in++;
         bytes_remaining--;