mszh decompression: add a special case for an all-0 mask, i.e. 32 uncompressed
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Sun, 31 May 2009 18:17:33 +0000 (18:17 +0000)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Sun, 31 May 2009 18:17:33 +0000 (18:17 +0000)
bytes in a row.
About 15% faster mszh_decomp on an Atom N270 for
http://samples.mplayerhq.hu/V-codecs/mszh-zlib/avimzsh_sample.avi

Originally committed as revision 19068 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/lcldec.c

index bc7e11d..a6e348b 100644 (file)
@@ -102,6 +102,13 @@ static unsigned int mszh_decomp(const unsigned char * srcptr, int srclen, unsign
         maskbit >>= 1;
         if (!maskbit) {
             mask = *srcptr++;
+            while (!mask) {
+                if (destptr_end - destptr < 32 || srcptr_end - srcptr < 32) break;
+                memcpy(destptr, srcptr, 32);
+                destptr += 32;
+                srcptr += 32;
+                mask = *srcptr++;
+            }
             maskbit = 0x80;
         }
     }