Originally committed as revision 25209 to svn://svn.ffmpeg.org/ffmpeg/trunktags/n0.8
@@ -32,7 +32,7 @@ | |||||
#define LIBAVCODEC_VERSION_MAJOR 52 | #define LIBAVCODEC_VERSION_MAJOR 52 | ||||
#define LIBAVCODEC_VERSION_MINOR 90 | #define LIBAVCODEC_VERSION_MINOR 90 | ||||
#define LIBAVCODEC_VERSION_MICRO 0 | |||||
#define LIBAVCODEC_VERSION_MICRO 1 | |||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||
LIBAVCODEC_VERSION_MINOR, \ | LIBAVCODEC_VERSION_MINOR, \ | ||||
@@ -315,8 +315,7 @@ int vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitConte | |||||
return -1; | return -1; | ||||
} | } | ||||
if (v->res_sprite) { | if (v->res_sprite) { | ||||
av_log(avctx, AV_LOG_ERROR, "WMVP is not supported\n"); | |||||
return -1; | |||||
av_log(avctx, AV_LOG_ERROR, "WMVP is not fully supported\n"); | |||||
} | } | ||||
} | } | ||||
@@ -387,7 +386,21 @@ int vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitConte | |||||
v->quantizer_mode = get_bits(gb, 2); //common | v->quantizer_mode = get_bits(gb, 2); //common | ||||
v->finterpflag = get_bits1(gb); //common | v->finterpflag = get_bits1(gb); //common | ||||
v->res_rtm_flag = get_bits1(gb); //reserved | |||||
if (v->res_sprite) { | |||||
v->s.avctx->width = v->s.avctx->coded_width = get_bits(gb, 11); | |||||
v->s.avctx->height = v->s.avctx->coded_height = get_bits(gb, 11); | |||||
skip_bits(gb, 5); //frame rate | |||||
v->res_x8 = get_bits1(gb); | |||||
if (get_bits1(gb)) { // something to do with DC VLC selection | |||||
av_log(avctx, AV_LOG_ERROR, "Unsupported sprite feature\n"); | |||||
return -1; | |||||
} | |||||
skip_bits(gb, 3); //slice code | |||||
v->res_rtm_flag = 0; | |||||
} else { | |||||
v->res_rtm_flag = get_bits1(gb); //reserved | |||||
} | |||||
if (!v->res_rtm_flag) | if (!v->res_rtm_flag) | ||||
{ | { | ||||
// av_log(avctx, AV_LOG_ERROR, | // av_log(avctx, AV_LOG_ERROR, | ||||
@@ -566,6 +579,9 @@ int vc1_parse_frame_header(VC1Context *v, GetBitContext* gb) | |||||
{ | { | ||||
int pqindex, lowquant, status; | int pqindex, lowquant, status; | ||||
if(v->res_sprite) { | |||||
skip_bits(gb, 2); //not yet deciphered | |||||
} | |||||
if(v->finterpflag) v->interpfrm = get_bits1(gb); | if(v->finterpflag) v->interpfrm = get_bits1(gb); | ||||
skip_bits(gb, 2); //framecnt unused | skip_bits(gb, 2); //framecnt unused | ||||
v->rangeredfrm = 0; | v->rangeredfrm = 0; | ||||
@@ -3240,6 +3240,11 @@ static int vc1_decode_frame(AVCodecContext *avctx, | |||||
} | } | ||||
} | } | ||||
if(v->res_sprite && (s->pict_type!=FF_I_TYPE)){ | |||||
av_free(buf2); | |||||
return -1; | |||||
} | |||||
// for hurry_up==5 | // for hurry_up==5 | ||||
s->current_picture.pict_type= s->pict_type; | s->current_picture.pict_type= s->pict_type; | ||||
s->current_picture.key_frame= s->pict_type == FF_I_TYPE; | s->current_picture.key_frame= s->pict_type == FF_I_TYPE; | ||||
@@ -227,6 +227,7 @@ const AVCodecTag ff_codec_bmp_tags[] = { | |||||
{ CODEC_ID_QPEG, MKTAG('Q', '1', '.', '0') }, | { CODEC_ID_QPEG, MKTAG('Q', '1', '.', '0') }, | ||||
{ CODEC_ID_QPEG, MKTAG('Q', '1', '.', '1') }, | { CODEC_ID_QPEG, MKTAG('Q', '1', '.', '1') }, | ||||
{ CODEC_ID_WMV3, MKTAG('W', 'M', 'V', '3') }, | { CODEC_ID_WMV3, MKTAG('W', 'M', 'V', '3') }, | ||||
{ CODEC_ID_WMV3, MKTAG('W', 'M', 'V', 'P') }, | |||||
{ CODEC_ID_VC1, MKTAG('W', 'V', 'C', '1') }, | { CODEC_ID_VC1, MKTAG('W', 'V', 'C', '1') }, | ||||
{ CODEC_ID_VC1, MKTAG('W', 'M', 'V', 'A') }, | { CODEC_ID_VC1, MKTAG('W', 'M', 'V', 'A') }, | ||||
{ CODEC_ID_LOCO, MKTAG('L', 'O', 'C', 'O') }, | { CODEC_ID_LOCO, MKTAG('L', 'O', 'C', 'O') }, | ||||