msmpeg4v2 header parser & some dump bits code behind #if 0
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 29 Mar 2002 02:07:25 +0000 (02:07 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 29 Mar 2002 02:07:25 +0000 (02:07 +0000)
Originally committed as revision 368 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/msmpeg4.c

index 88b4a7ae66c1849a268ace6423a1df93d0bf56dc..eeedca646b6efaf4dd0d5b917a28683daeae6110 100644 (file)
@@ -670,7 +670,7 @@ static int decode012(GetBitContext *gb)
         return get_bits1(gb) + 1;
 }
 
-int msmpeg4_decode_picture_header(MpegEncContext * s)
+int msmpeg4v2_decode_picture_header(MpegEncContext * s)
 {
     int code;
 
@@ -681,6 +681,62 @@ int msmpeg4_decode_picture_header(MpegEncContext * s)
 
     s->qscale = get_bits(&s->gb, 5);
 
+    if (s->pict_type == I_TYPE) {
+        code = get_bits(&s->gb, 5); 
+        /* 0x17: one slice, 0x18: three slices */
+        /* XXX: implement it */
+       //printf("%d %d %d\n", code, s->slice_height, s->first_slice_line);
+        if (code < 0x17)
+            return -1;
+        s->slice_height = s->mb_height / (code - 0x16);
+/*        s->rl_chroma_table_index = decode012(&s->gb);
+        s->rl_table_index = decode012(&s->gb);
+
+        s->dc_table_index = get_bits1(&s->gb);*/
+        s->no_rounding = 1;
+    } else {
+        s->use_skip_mb_code = get_bits1(&s->gb);
+        
+/*        s->rl_table_index = decode012(&s->gb);
+        s->rl_chroma_table_index = s->rl_table_index;
+
+        s->dc_table_index = get_bits1(&s->gb);
+
+        s->mv_table_index = get_bits1(&s->gb);*/
+       if(s->flipflop_rounding){
+           s->no_rounding ^= 1;
+       }else{
+           s->no_rounding = 0;
+       }
+//     printf("%d", s->no_rounding);
+    }
+
+printf("%s q:%d s:%X ", s->pict_type == I_TYPE ? "I" : "P" , s->qscale,
+                        s->pict_type == I_TYPE ? code : s->use_skip_mb_code);
+
+    return 0;
+}
+
+int msmpeg4_decode_picture_header(MpegEncContext * s)
+{
+    int code;
+#if 0
+{
+int i;
+msmpeg4v2_decode_picture_header(s);
+for(i=0; i<s->gb.size*8; i++)
+    printf("%d", get_bits1(&s->gb));
+printf("END\n");
+return -1;
+}
+#endif
+    s->pict_type = get_bits(&s->gb, 2) + 1;
+    if (s->pict_type != I_TYPE &&
+        s->pict_type != P_TYPE)
+        return -1;
+
+    s->qscale = get_bits(&s->gb, 5);
+
     if (s->pict_type == I_TYPE) {
         code = get_bits(&s->gb, 5); 
         /* 0x17: one slice, 0x18: three slices */