]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/mjpeg.c
CAVS decoder by (Stefan Gehrer stefan.gehrer gmx.de)
[ffmpeg] / libavcodec / mjpeg.c
index dbcbaed61d7502300d6d41b7d5f1b2bdd28e48b2..dffd9894694079c9c0422530b68f3a7d8890a396 100644 (file)
@@ -1259,7 +1259,6 @@ static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
                         int component, int dc_index, int ac_index, int16_t *quant_matrix)
 {
     int code, i, j, level, val;
-    VLC *ac_vlc;
 
     /* DC coef */
     val = mjpeg_decode_dc(s, dc_index);
@@ -1271,7 +1270,6 @@ static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
     s->last_dc[component] = val;
     block[0] = val;
     /* AC coefs */
-    ac_vlc = &s->vlcs[1][ac_index];
     i = 0;
     {OPEN_READER(re, &s->gb)
     for(;;) {
@@ -1281,17 +1279,16 @@ static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
         /* EOB */
         if (code == 0x10)
             break;
-        if (code == 0x100) {
-            i += 16;
-        } else {
-            i += ((unsigned)code) >> 4;
+        i += ((unsigned)code) >> 4;
+        if(code != 0x100){
             code &= 0xf;
-
-            UPDATE_CACHE(re, &s->gb)
+            if(code > MIN_CACHE_BITS - 16){
+                UPDATE_CACHE(re, &s->gb)
+            }
             {
-                int cache=GET_CACHE(re,gb);
+                int cache=GET_CACHE(re,&s->gb);
                 int sign=(~cache)>>31;
-                level = (NEG_USR32(sign ^ cache,code) ^ sign) + (sign&1) ;
+                level = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
             }
 
             LAST_SKIP_BITS(re, &s->gb, code)