CODEC_ID_MSMPEG4V1,
CODEC_ID_MSMPEG4V2,
CODEC_ID_MSMPEG4V3,
+ CODEC_ID_WMV1,
CODEC_ID_H263P,
CODEC_ID_H263I,
extern AVCodec msmpeg4v1_decoder;
extern AVCodec msmpeg4v2_decoder;
extern AVCodec msmpeg4v3_decoder;
+extern AVCodec wmv1_decoder;
extern AVCodec mpeg_decoder;
extern AVCodec h263i_decoder;
extern AVCodec rv10_decoder;
s->h263_pred = 1;
s->msmpeg4_version=3;
break;
+ case CODEC_ID_WMV1:
+ s->h263_msmpeg4 = 1;
+ s->h263_pred = 1;
+ s->msmpeg4_version=4;
+ break;
case CODEC_ID_H263I:
s->h263_intel = 1;
break;
}
}
- if (s->h263_msmpeg4 && s->pict_type==I_TYPE)
+ if (s->h263_msmpeg4 && s->msmpeg4_version<4 && s->pict_type==I_TYPE)
if(msmpeg4_decode_ext_header(s, buf_size) < 0) return -1;
MPV_frame_end(s);
CODEC_CAP_DRAW_HORIZ_BAND,
};
+AVCodec wmv1_decoder = {
+ "wmv1",
+ CODEC_TYPE_VIDEO,
+ CODEC_ID_WMV1,
+ sizeof(MpegEncContext),
+ h263_decode_init,
+ NULL,
+ h263_decode_end,
+ h263_decode_frame,
+ CODEC_CAP_DRAW_HORIZ_BAND,
+};
+
AVCodec h263i_decoder = {
"h263i",
CODEC_TYPE_VIDEO,
int msmpeg4_decode_picture_header(MpegEncContext * s)
{
- int code;
+ int code, code2;
+#if 0
+{
+int i;
+for(i=0; i<s->gb.size*8; i++)
+ printf("%d", get_bits1(&s->gb));
+// 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)
if (code < 0x17)
return -1;
s->slice_height = s->mb_height / (code - 0x16);
- if(s->msmpeg4_version==2){
+
+ switch(s->msmpeg4_version){
+ case 2:
s->rl_chroma_table_index = 2;
s->rl_table_index = 2;
s->dc_table_index = 0; //not used
- }else{
+ break;
+ case 3:
s->rl_chroma_table_index = decode012(&s->gb);
s->rl_table_index = decode012(&s->gb);
s->dc_table_index = get_bits1(&s->gb);
+ break;
+ case 4:
+ msmpeg4_decode_ext_header(s, 999 /* bufer size (useless here) */);
+ printf("%X\n", show_bits(&s->gb, 24));
+ code= get_bits(&s->gb, 2);
+ if(code==1){
+ code2= get_bits(&s->gb, 3);
+ if(code2==7) skip_bits(&s->gb, 1);
+ }
+ printf("%X\n", show_bits(&s->gb, 24));
+ s->rl_chroma_table_index = 2;
+ s->rl_table_index = 2;
+
+ s->dc_table_index = 0;
+ break;
}
s->no_rounding = 1;
/* printf(" %d %d %d %d \n",
s->no_rounding = 0;
}
// printf("%d", s->no_rounding);
+//return -1;
}
#if 0
i += run;
if (i >= 64)
return -1;
+//printf("RL:%d %d %d ", run, level, last);
j = scan_table[i];
block[j] = level;
i++;
register_avcodec(&msmpeg4v1_decoder);
register_avcodec(&msmpeg4v2_decoder);
register_avcodec(&msmpeg4v3_decoder);
+ register_avcodec(&wmv1_decoder);
register_avcodec(&mpeg_decoder);
register_avcodec(&h263i_decoder);
register_avcodec(&rv10_decoder);