VP8: avoid a memset for non-i4x4 blocks with no coefficients
authorJason Garrett-Glaser <darkshikari@gmail.com>
Fri, 23 Jul 2010 00:05:44 +0000 (00:05 +0000)
committerJason Garrett-Glaser <darkshikari@gmail.com>
Fri, 23 Jul 2010 00:05:44 +0000 (00:05 +0000)
Originally committed as revision 24447 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/vp8.c

index e21e810..30a4c7d 100644 (file)
@@ -970,6 +970,9 @@ static void intra_predict(VP8Context *s, uint8_t *dst[3], VP8Macroblock *mb,
             tr_right = (uint8_t *)&tr;
         }
 
             tr_right = (uint8_t *)&tr;
         }
 
+        if (mb->skip)
+            AV_ZERO128(s->non_zero_count_cache);
+
         for (y = 0; y < 4; y++) {
             uint8_t *topright = ptr + 4 - s->linesize;
             for (x = 0; x < 4; x++) {
         for (y = 0; y < 4; y++) {
             uint8_t *topright = ptr + 4 - s->linesize;
             for (x = 0; x < 4; x++) {
@@ -1500,10 +1503,6 @@ static int vp8_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
 
             if (!mb->skip)
                 decode_mb_coeffs(s, c, mb, s->top_nnz[mb_x], s->left_nnz);
 
             if (!mb->skip)
                 decode_mb_coeffs(s, c, mb, s->top_nnz[mb_x], s->left_nnz);
-            else {
-                AV_ZERO128(s->non_zero_count_cache);    // luma
-                AV_ZERO64(s->non_zero_count_cache[4]);  // chroma
-            }
 
             if (mb->mode <= MODE_I4x4)
                 intra_predict(s, dst, mb, intra4x4_mb, mb_x, mb_y);
 
             if (mb->mode <= MODE_I4x4)
                 intra_predict(s, dst, mb, intra4x4_mb, mb_x, mb_y);