[FFmpeg-cvslog] adler32: avoid "too big" check in the inner loop

Michael Niedermayer git at videolan.org
Sat Feb 4 06:07:53 CET 2012


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Fri Feb  3 22:18:05 2012 +0100| [7f8027b76f1bdce7452d02513fc179cca20d8867] | committer: Michael Niedermayer

adler32: avoid "too big" check in the inner loop

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7f8027b76f1bdce7452d02513fc179cca20d8867
---

 libavutil/adler32.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/libavutil/adler32.c b/libavutil/adler32.c
index f4f56ea..571242e 100644
--- a/libavutil/adler32.c
+++ b/libavutil/adler32.c
@@ -23,6 +23,7 @@
 
 #include "config.h"
 #include "adler32.h"
+#include "common.h"
 
 #define BASE 65521L /* largest prime smaller than 65536 */
 
@@ -37,17 +38,22 @@ unsigned long av_adler32_update(unsigned long adler, const uint8_t * buf,
     unsigned long s2 = adler >> 16;
 
     while (len > 0) {
+        unsigned len2 = FFMIN((len-1) & ~15, 2048);
+        if (len2) {
+            len -= len2;
+
 #if CONFIG_SMALL
-        while (len > 4  && s2 < (1U << 31)) {
+        while (len2 >= 4) {
             DO4(buf);
-            len -= 4;
+            len2 -= 4;
         }
 #else
-        while (len > 16 && s2 < (1U << 31)) {
+        while (len2 >= 16) {
             DO16(buf);
-            len -= 16;
+            len2 -= 16;
         }
 #endif
+        }
         DO1(buf); len--;
         s1 %= BASE;
         s2 %= BASE;



More information about the ffmpeg-cvslog mailing list