Simplify nuv: factor out LZO decompression
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Sun, 9 Sep 2007 08:22:07 +0000 (08:22 +0000)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Sun, 9 Sep 2007 08:22:07 +0000 (08:22 +0000)
Originally committed as revision 10440 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/nuv.c

index 9363711..176fc25 100644 (file)
@@ -114,11 +114,19 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
     // skip rest of the frameheader.
     buf = &buf[12];
     buf_size -= 12;
     // skip rest of the frameheader.
     buf = &buf[12];
     buf_size -= 12;
+    if (comptype == NUV_RTJPEG_IN_LZO || comptype == NUV_LZO) {
+        int outlen = c->decomp_size, inlen = buf_size;
+        if (lzo1x_decode(c->decomp_buf, &outlen, buf, &inlen))
+            av_log(avctx, AV_LOG_ERROR, "error during lzo decompression\n");
+        buf = c->decomp_buf;
+        buf_size = c->decomp_size;
+    }
 
     c->pic.pict_type = FF_I_TYPE;
     c->pic.key_frame = 1;
     // decompress/copy/whatever data
     switch (comptype) {
 
     c->pic.pict_type = FF_I_TYPE;
     c->pic.key_frame = 1;
     // decompress/copy/whatever data
     switch (comptype) {
+        case NUV_LZO:
         case NUV_UNCOMPRESSED: {
             int height = c->height;
             if (buf_size < c->width * height * 3 / 2) {
         case NUV_UNCOMPRESSED: {
             int height = c->height;
             if (buf_size < c->width * height * 3 / 2) {
@@ -128,24 +136,11 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
             copy_frame(&c->pic, buf, c->width, height);
             break;
         }
             copy_frame(&c->pic, buf, c->width, height);
             break;
         }
+        case NUV_RTJPEG_IN_LZO:
         case NUV_RTJPEG: {
             rtjpeg_decode_frame_yuv420(&c->rtj, &c->pic, buf, buf_size);
             break;
         }
         case NUV_RTJPEG: {
             rtjpeg_decode_frame_yuv420(&c->rtj, &c->pic, buf, buf_size);
             break;
         }
-        case NUV_RTJPEG_IN_LZO: {
-            int outlen = c->decomp_size, inlen = buf_size;
-            if (lzo1x_decode(c->decomp_buf, &outlen, buf, &inlen))
-                av_log(avctx, AV_LOG_ERROR, "error during lzo decompression\n");
-            rtjpeg_decode_frame_yuv420(&c->rtj, &c->pic, c->decomp_buf, c->decomp_size);
-            break;
-        }
-        case NUV_LZO: {
-            int outlen = c->decomp_size, inlen = buf_size;
-            if (lzo1x_decode(c->decomp_buf, &outlen, buf, &inlen))
-                av_log(avctx, AV_LOG_ERROR, "error during lzo decompression\n");
-            copy_frame(&c->pic, c->decomp_buf, c->width, c->height);
-            break;
-        }
         case NUV_BLACK: {
             memset(c->pic.data[0], 0, c->width * c->height);
             memset(c->pic.data[1], 128, c->width * c->height / 4);
         case NUV_BLACK: {
             memset(c->pic.data[0], 0, c->width * c->height);
             memset(c->pic.data[1], 128, c->width * c->height / 4);