# HG changeset patch # User michaelni # Date 1018132177 0 # Node ID ac677a84d5df5ba74c80e95e28f62db3da58227c # Parent 49e73229a5e63569cba38fe3214490ef9822c519 wmv1 header parser (unfinished) diff -r 49e73229a5e6 -r ac677a84d5df avcodec.h --- a/avcodec.h Fri Apr 05 21:04:09 2002 +0000 +++ b/avcodec.h Sat Apr 06 22:29:37 2002 +0000 @@ -17,6 +17,7 @@ CODEC_ID_MSMPEG4V1, CODEC_ID_MSMPEG4V2, CODEC_ID_MSMPEG4V3, + CODEC_ID_WMV1, CODEC_ID_H263P, CODEC_ID_H263I, @@ -212,6 +213,7 @@ 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; diff -r 49e73229a5e6 -r ac677a84d5df h263dec.c --- a/h263dec.c Fri Apr 05 21:04:09 2002 +0000 +++ b/h263dec.c Sat Apr 06 22:29:37 2002 +0000 @@ -62,6 +62,11 @@ 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; @@ -234,7 +239,7 @@ } } - 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); @@ -322,6 +327,18 @@ 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, diff -r 49e73229a5e6 -r ac677a84d5df mpegvideo.c --- a/mpegvideo.c Fri Apr 05 21:04:09 2002 +0000 +++ b/mpegvideo.c Sat Apr 06 22:29:37 2002 +0000 @@ -1652,7 +1652,7 @@ } emms_c(); - if (s->h263_msmpeg4 && s->pict_type == I_TYPE) + if (s->h263_msmpeg4 && s->msmpeg4_version<4 && s->pict_type == I_TYPE) msmpeg4_encode_ext_header(s); //if (s->gob_number) diff -r 49e73229a5e6 -r ac677a84d5df msmpeg4.c --- a/msmpeg4.c Fri Apr 05 21:04:09 2002 +0000 +++ b/msmpeg4.c Sat Apr 06 22:29:37 2002 +0000 @@ -802,8 +802,18 @@ int msmpeg4_decode_picture_header(MpegEncContext * s) { - int code; + int code, code2; +#if 0 +{ +int i; +for(i=0; igb.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) @@ -817,16 +827,34 @@ 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", @@ -864,6 +892,7 @@ s->no_rounding = 0; } // printf("%d", s->no_rounding); +//return -1; } #if 0 @@ -1250,6 +1279,7 @@ i += run; if (i >= 64) return -1; +//printf("RL:%d %d %d ", run, level, last); j = scan_table[i]; block[j] = level; i++; diff -r 49e73229a5e6 -r ac677a84d5df utils.c --- a/utils.c Fri Apr 05 21:04:09 2002 +0000 +++ b/utils.c Sat Apr 06 22:29:37 2002 +0000 @@ -429,6 +429,7 @@ 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);