From 7f89b6fbdc6e5e2c2feee32093eb27ba775ea059 Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Fri, 29 Mar 2002 02:07:25 +0000
Subject: [PATCH] msmpeg4v2 header parser & some dump bits code behind #if 0

Originally committed as revision 368 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavcodec/msmpeg4.c | 58 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 57 insertions(+), 1 deletion(-)

diff --git a/libavcodec/msmpeg4.c b/libavcodec/msmpeg4.c
index 88b4a7ae66c..eeedca646b6 100644
--- a/libavcodec/msmpeg4.c
+++ b/libavcodec/msmpeg4.c
@@ -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 */
-- 
GitLab