Mercurial > libavcodec.hg
changeset 12521:db36486a6f89 libavcodec
Make WMV3 decoder attempt to decode WMVP as well
author | kostya |
---|---|
date | Sun, 26 Sep 2010 13:56:50 +0000 |
parents | 5915f4f0e172 |
children | 776789af0304 |
files | avcodec.h vc1.c vc1dec.c |
diffstat | 3 files changed, 25 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/avcodec.h Sun Sep 26 13:54:35 2010 +0000 +++ b/avcodec.h Sun Sep 26 13:56:50 2010 +0000 @@ -32,7 +32,7 @@ #define LIBAVCODEC_VERSION_MAJOR 52 #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, \ LIBAVCODEC_VERSION_MINOR, \
--- a/vc1.c Sun Sep 26 13:54:35 2010 +0000 +++ b/vc1.c Sun Sep 26 13:56:50 2010 +0000 @@ -315,8 +315,7 @@ return -1; } 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 @@ v->quantizer_mode = get_bits(gb, 2); //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) { // av_log(avctx, AV_LOG_ERROR, @@ -566,6 +579,9 @@ { int pqindex, lowquant, status; + if(v->res_sprite) { + skip_bits(gb, 2); //not yet deciphered + } if(v->finterpflag) v->interpfrm = get_bits1(gb); skip_bits(gb, 2); //framecnt unused v->rangeredfrm = 0;
--- a/vc1dec.c Sun Sep 26 13:54:35 2010 +0000 +++ b/vc1dec.c Sun Sep 26 13:56:50 2010 +0000 @@ -3240,6 +3240,11 @@ } } + if(v->res_sprite && (s->pict_type!=FF_I_TYPE)){ + av_free(buf2); + return -1; + } + // for hurry_up==5 s->current_picture.pict_type= s->pict_type; s->current_picture.key_frame= s->pict_type == FF_I_TYPE;