[FFmpeg-cvslog] zerocodec: factorize loop

Michael Niedermayer git at videolan.org
Wed Mar 21 04:33:13 CET 2012


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Wed Mar 21 03:29:30 2012 +0100| [9e69d3c6d4ff41217a7ed86c9fcc1f0aca4c6143] | committer: Michael Niedermayer

zerocodec: factorize loop

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

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

 libavcodec/zerocodec.c |   41 ++++++++++++++---------------------------
 1 files changed, 14 insertions(+), 27 deletions(-)

diff --git a/libavcodec/zerocodec.c b/libavcodec/zerocodec.c
index 1718818..47be107 100644
--- a/libavcodec/zerocodec.c
+++ b/libavcodec/zerocodec.c
@@ -66,45 +66,32 @@ static int zerocodec_decode_frame(AVCodecContext *avctx, void *data,
         pic->key_frame = 1;
         pic->pict_type = AV_PICTURE_TYPE_I;
 
-        for (i = 0; i < avctx->height; i++) {
-
-            zstream->next_out  = dst;
-            zstream->avail_out = avctx->width << 1;
-
-            zret = inflate(zstream, Z_SYNC_FLUSH);
-
-            if (zret != Z_OK && zret != Z_STREAM_END) {
-                av_log(avctx, AV_LOG_ERROR,
-                       "Inflate failed with return code: %d\n", zret);
-                return AVERROR(EINVAL);
-            }
-
-            dst += pic->linesize[0];
-        }
     } else {
 
         pic->key_frame = 0;
         pic->pict_type = AV_PICTURE_TYPE_P;
 
-        for (i = 0; i < avctx->height; i++) {
+    }
+
+    for (i = 0; i < avctx->height; i++) {
 
-            zstream->next_out  = dst;
-            zstream->avail_out = avctx->width << 1;
+        zstream->next_out  = dst;
+        zstream->avail_out = avctx->width << 1;
 
-            zret = inflate(zstream, Z_SYNC_FLUSH);
+        zret = inflate(zstream, Z_SYNC_FLUSH);
 
-            if (zret != Z_OK && zret != Z_STREAM_END) {
-                av_log(avctx, AV_LOG_ERROR,
-                       "Inflate failed with return code: %d\n", zret);
-                return AVERROR(EINVAL);
-            }
+        if (zret != Z_OK && zret != Z_STREAM_END) {
+            av_log(avctx, AV_LOG_ERROR,
+                    "Inflate failed with return code: %d\n", zret);
+            return AVERROR(EINVAL);
+        }
 
+        if (!(avpkt->flags & AV_PKT_FLAG_KEY))
             for (j = 0; j < avctx->width << 1; j++)
                 dst[j] += prev[j] & -!dst[j];
 
-            prev += prev_pic->linesize[0];
-            dst  += pic->linesize[0];
-        }
+        prev += prev_pic->linesize[0];
+        dst  += pic->linesize[0];
     }
 
     /* Release the previous buffer if need be */



More information about the ffmpeg-cvslog mailing list