diff h263.c @ 312:8cf5507e6ca5 libavcodec

mpeg4 mpeg quantizer support
author michaelni
date Sun, 07 Apr 2002 02:03:32 +0000
parents d7f71eb89558
children ce35fd27bbb0
line wrap: on
line diff
--- a/h263.c	Sat Apr 06 22:29:37 2002 +0000
+++ b/h263.c	Sun Apr 07 02:03:32 2002 +0000
@@ -624,17 +624,14 @@
         }
 
         if (val >= 0) {
-            val--;
-            code = (val >> bit_size) + 1;
-            bits = val & (range - 1);
             sign = 0;
         } else {
             val = -val;
-            val--;
-            code = (val >> bit_size) + 1;
-            bits = val & (range - 1);
             sign = 1;
         }
+        val--;
+        code = (val >> bit_size) + 1;
+        bits = val & (range - 1);
 
         put_bits(&s->pb, mvtab[code][1] + 1, (mvtab[code][0] << 1) | sign); 
         if (bit_size > 0) {
@@ -728,7 +725,7 @@
 {
     int level, uni_code, uni_len;
 
-    for(level=-255; level<256; level++){
+    for(level=-256; level<256; level++){
         int size, v, l;
         /* find number of bits */
         size = 0;
@@ -2509,7 +2506,57 @@
             }
             
             // FIXME a bunch of grayscale shape things
-            if(get_bits1(&s->gb)) printf("Quant-Type not supported\n");  /* vol_quant_type */ //FIXME
+
+            if(get_bits1(&s->gb)){ /* vol_quant_type */
+                int i, j, v;
+                /* load default matrixes */
+                for(i=0; i<64; i++){
+                    v= ff_mpeg4_default_intra_matrix[i];
+                    s->intra_matrix[i]= v;
+                    s->chroma_intra_matrix[i]= v;
+                    
+                    v= ff_mpeg4_default_non_intra_matrix[i];
+                    s->non_intra_matrix[i]= v;
+                    s->chroma_non_intra_matrix[i]= v;
+                }
+
+                /* load custom intra matrix */
+                if(get_bits1(&s->gb)){
+                    for(i=0; i<64; i++){
+                        v= get_bits(&s->gb, 8);
+                        if(v==0) break;
+
+                        j= zigzag_direct[i];
+                        s->intra_matrix[j]= v;
+                        s->chroma_intra_matrix[j]= v;
+                    }
+                }
+
+                /* load custom non intra matrix */
+                if(get_bits1(&s->gb)){
+                    for(i=0; i<64; i++){
+                        v= get_bits(&s->gb, 8);
+                        if(v==0) break;
+
+                        j= zigzag_direct[i];
+                        s->non_intra_matrix[j]= v;
+                        s->chroma_non_intra_matrix[j]= v;
+                    }
+
+                    /* replicate last value */
+                    for(; i<64; i++){
+                        j= zigzag_direct[i];
+                        s->non_intra_matrix[j]= v;
+                        s->chroma_non_intra_matrix[j]= v;
+                    }
+                }
+
+                s->dct_unquantize= s->dct_unquantize_mpeg;
+
+                // FIXME a bunch of grayscale shape things
+            }else
+                s->dct_unquantize= s->dct_unquantize_h263;
+
             if(vo_ver_id != 1)
                  s->quarter_sample= get_bits1(&s->gb);
             else s->quarter_sample=0;