mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-28 12:32:17 +02:00
wmv1 header parser (unfinished)
Originally committed as revision 380 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
3825cd1d55
commit
e1a9dbffed
@ -17,6 +17,7 @@ enum CodecID {
|
|||||||
CODEC_ID_MSMPEG4V1,
|
CODEC_ID_MSMPEG4V1,
|
||||||
CODEC_ID_MSMPEG4V2,
|
CODEC_ID_MSMPEG4V2,
|
||||||
CODEC_ID_MSMPEG4V3,
|
CODEC_ID_MSMPEG4V3,
|
||||||
|
CODEC_ID_WMV1,
|
||||||
CODEC_ID_H263P,
|
CODEC_ID_H263P,
|
||||||
CODEC_ID_H263I,
|
CODEC_ID_H263I,
|
||||||
|
|
||||||
@ -212,6 +213,7 @@ extern AVCodec mpeg4_decoder;
|
|||||||
extern AVCodec msmpeg4v1_decoder;
|
extern AVCodec msmpeg4v1_decoder;
|
||||||
extern AVCodec msmpeg4v2_decoder;
|
extern AVCodec msmpeg4v2_decoder;
|
||||||
extern AVCodec msmpeg4v3_decoder;
|
extern AVCodec msmpeg4v3_decoder;
|
||||||
|
extern AVCodec wmv1_decoder;
|
||||||
extern AVCodec mpeg_decoder;
|
extern AVCodec mpeg_decoder;
|
||||||
extern AVCodec h263i_decoder;
|
extern AVCodec h263i_decoder;
|
||||||
extern AVCodec rv10_decoder;
|
extern AVCodec rv10_decoder;
|
||||||
|
@ -62,6 +62,11 @@ static int h263_decode_init(AVCodecContext *avctx)
|
|||||||
s->h263_pred = 1;
|
s->h263_pred = 1;
|
||||||
s->msmpeg4_version=3;
|
s->msmpeg4_version=3;
|
||||||
break;
|
break;
|
||||||
|
case CODEC_ID_WMV1:
|
||||||
|
s->h263_msmpeg4 = 1;
|
||||||
|
s->h263_pred = 1;
|
||||||
|
s->msmpeg4_version=4;
|
||||||
|
break;
|
||||||
case CODEC_ID_H263I:
|
case CODEC_ID_H263I:
|
||||||
s->h263_intel = 1;
|
s->h263_intel = 1;
|
||||||
break;
|
break;
|
||||||
@ -234,7 +239,7 @@ static int h263_decode_frame(AVCodecContext *avctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
if(msmpeg4_decode_ext_header(s, buf_size) < 0) return -1;
|
||||||
|
|
||||||
MPV_frame_end(s);
|
MPV_frame_end(s);
|
||||||
@ -322,6 +327,18 @@ AVCodec msmpeg4v3_decoder = {
|
|||||||
CODEC_CAP_DRAW_HORIZ_BAND,
|
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 = {
|
AVCodec h263i_decoder = {
|
||||||
"h263i",
|
"h263i",
|
||||||
CODEC_TYPE_VIDEO,
|
CODEC_TYPE_VIDEO,
|
||||||
|
@ -1652,7 +1652,7 @@ static void encode_picture(MpegEncContext *s, int picture_number)
|
|||||||
}
|
}
|
||||||
emms_c();
|
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);
|
msmpeg4_encode_ext_header(s);
|
||||||
|
|
||||||
//if (s->gob_number)
|
//if (s->gob_number)
|
||||||
|
@ -802,8 +802,18 @@ static int decode012(GetBitContext *gb)
|
|||||||
|
|
||||||
int msmpeg4_decode_picture_header(MpegEncContext * s)
|
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;
|
s->pict_type = get_bits(&s->gb, 2) + 1;
|
||||||
if (s->pict_type != I_TYPE &&
|
if (s->pict_type != I_TYPE &&
|
||||||
s->pict_type != P_TYPE)
|
s->pict_type != P_TYPE)
|
||||||
@ -817,16 +827,34 @@ int msmpeg4_decode_picture_header(MpegEncContext * s)
|
|||||||
if (code < 0x17)
|
if (code < 0x17)
|
||||||
return -1;
|
return -1;
|
||||||
s->slice_height = s->mb_height / (code - 0x16);
|
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_chroma_table_index = 2;
|
||||||
s->rl_table_index = 2;
|
s->rl_table_index = 2;
|
||||||
|
|
||||||
s->dc_table_index = 0; //not used
|
s->dc_table_index = 0; //not used
|
||||||
}else{
|
break;
|
||||||
|
case 3:
|
||||||
s->rl_chroma_table_index = decode012(&s->gb);
|
s->rl_chroma_table_index = decode012(&s->gb);
|
||||||
s->rl_table_index = decode012(&s->gb);
|
s->rl_table_index = decode012(&s->gb);
|
||||||
|
|
||||||
s->dc_table_index = get_bits1(&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;
|
s->no_rounding = 1;
|
||||||
/* printf(" %d %d %d %d \n",
|
/* printf(" %d %d %d %d \n",
|
||||||
@ -864,6 +892,7 @@ int msmpeg4_decode_picture_header(MpegEncContext * s)
|
|||||||
s->no_rounding = 0;
|
s->no_rounding = 0;
|
||||||
}
|
}
|
||||||
// printf("%d", s->no_rounding);
|
// printf("%d", s->no_rounding);
|
||||||
|
//return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -1250,6 +1279,7 @@ static int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
|
|||||||
i += run;
|
i += run;
|
||||||
if (i >= 64)
|
if (i >= 64)
|
||||||
return -1;
|
return -1;
|
||||||
|
//printf("RL:%d %d %d ", run, level, last);
|
||||||
j = scan_table[i];
|
j = scan_table[i];
|
||||||
block[j] = level;
|
block[j] = level;
|
||||||
i++;
|
i++;
|
||||||
|
@ -429,6 +429,7 @@ void avcodec_register_all(void)
|
|||||||
register_avcodec(&msmpeg4v1_decoder);
|
register_avcodec(&msmpeg4v1_decoder);
|
||||||
register_avcodec(&msmpeg4v2_decoder);
|
register_avcodec(&msmpeg4v2_decoder);
|
||||||
register_avcodec(&msmpeg4v3_decoder);
|
register_avcodec(&msmpeg4v3_decoder);
|
||||||
|
register_avcodec(&wmv1_decoder);
|
||||||
register_avcodec(&mpeg_decoder);
|
register_avcodec(&mpeg_decoder);
|
||||||
register_avcodec(&h263i_decoder);
|
register_avcodec(&h263i_decoder);
|
||||||
register_avcodec(&rv10_decoder);
|
register_avcodec(&rv10_decoder);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user