[FFmpeg-cvslog] r18266 - trunk/libavcodec/interplayvideo.c

reimar subversion
Tue Mar 31 15:58:41 CEST 2009


Author: reimar
Date: Tue Mar 31 15:58:40 2009
New Revision: 18266

Log:
Avoid "reloading" code by using a 64 bit type for the flags and loading all at once.

Modified:
   trunk/libavcodec/interplayvideo.c

Modified: trunk/libavcodec/interplayvideo.c
==============================================================================
--- trunk/libavcodec/interplayvideo.c	Tue Mar 31 15:33:55 2009	(r18265)
+++ trunk/libavcodec/interplayvideo.c	Tue Mar 31 15:58:40 2009	(r18266)
@@ -379,7 +379,6 @@ static int ipvideo_decode_block_opcode_0
 {
     int x, y;
     unsigned char P[4];
-    unsigned int flags = 0;
 
     /* 4-color encoding */
     CHECK_STREAM_PTR(4);
@@ -394,7 +393,7 @@ static int ipvideo_decode_block_opcode_0
 
         for (y = 0; y < 8; y++) {
             /* get the next set of 8 2-bit flags */
-            flags = bytestream_get_le16(&s->stream_ptr);
+            int flags = bytestream_get_le16(&s->stream_ptr);
             for (x = 0; x < 8; x++, flags >>= 2) {
                 *s->pixel_ptr++ = P[flags & 0x03];
             }
@@ -402,6 +401,7 @@ static int ipvideo_decode_block_opcode_0
         }
 
     } else if ((P[0] <= P[1]) && (P[2] > P[3])) {
+        uint32_t flags;
 
         /* 1 of 4 colors for each 2x2 block, need 4 more bytes */
         CHECK_STREAM_PTR(4);
@@ -419,15 +419,13 @@ static int ipvideo_decode_block_opcode_0
         }
 
     } else if ((P[0] > P[1]) && (P[2] <= P[3])) {
+        uint64_t flags;
 
         /* 1 of 4 colors for each 2x1 block, need 8 more bytes */
         CHECK_STREAM_PTR(8);
 
+        flags = bytestream_get_le64(&s->stream_ptr);
         for (y = 0; y < 8; y++) {
-            /* time to reload flags? */
-            if ((y == 0) || (y == 4)) {
-                flags = bytestream_get_le32(&s->stream_ptr);
-            }
             for (x = 0; x < 8; x += 2, flags >>= 2) {
                 s->pixel_ptr[x    ] =
                 s->pixel_ptr[x + 1] = P[flags & 0x03];
@@ -436,15 +434,13 @@ static int ipvideo_decode_block_opcode_0
         }
 
     } else {
+        uint64_t flags;
 
         /* 1 of 4 colors for each 1x2 block, need 8 more bytes */
         CHECK_STREAM_PTR(8);
 
+        flags = bytestream_get_le64(&s->stream_ptr);
         for (y = 0; y < 8; y += 2) {
-            /* time to reload flags? */
-            if ((y == 0) || (y == 4)) {
-                flags = bytestream_get_le32(&s->stream_ptr);
-            }
             for (x = 0; x < 8; x++, flags >>= 2) {
                 s->pixel_ptr[x            ] =
                 s->pixel_ptr[x + s->stride] = P[flags & 0x03];



More information about the ffmpeg-cvslog mailing list