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') }, | ||||