[FFmpeg-cvslog] r25209 - in trunk: libavcodec/avcodec.h libavcodec/vc1.c libavcodec/vc1dec.c libavformat/riff.c
kostya
subversion
Sun Sep 26 15:56:50 CEST 2010
Author: kostya
Date: Sun Sep 26 15:56:50 2010
New Revision: 25209
Log:
Make WMV3 decoder attempt to decode WMVP as well
Modified:
trunk/libavcodec/avcodec.h
trunk/libavcodec/vc1.c
trunk/libavcodec/vc1dec.c
trunk/libavformat/riff.c
Modified: trunk/libavcodec/avcodec.h
==============================================================================
--- trunk/libavcodec/avcodec.h Sun Sep 26 15:54:35 2010 (r25208)
+++ trunk/libavcodec/avcodec.h Sun Sep 26 15:56:50 2010 (r25209)
@@ -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, \
Modified: trunk/libavcodec/vc1.c
==============================================================================
--- trunk/libavcodec/vc1.c Sun Sep 26 15:54:35 2010 (r25208)
+++ trunk/libavcodec/vc1.c Sun Sep 26 15:56:50 2010 (r25209)
@@ -315,8 +315,7 @@ int vc1_decode_sequence_header(AVCodecCo
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 @@ int vc1_decode_sequence_header(AVCodecCo
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 vc1_parse_frame_header(VC1Context *v
{
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;
Modified: trunk/libavcodec/vc1dec.c
==============================================================================
--- trunk/libavcodec/vc1dec.c Sun Sep 26 15:54:35 2010 (r25208)
+++ trunk/libavcodec/vc1dec.c Sun Sep 26 15:56:50 2010 (r25209)
@@ -3240,6 +3240,11 @@ static int vc1_decode_frame(AVCodecConte
}
}
+ 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;
Modified: trunk/libavformat/riff.c
==============================================================================
--- trunk/libavformat/riff.c Sun Sep 26 15:54:35 2010 (r25208)
+++ trunk/libavformat/riff.c Sun Sep 26 15:56:50 2010 (r25209)
@@ -227,6 +227,7 @@ const AVCodecTag ff_codec_bmp_tags[] = {
{ CODEC_ID_QPEG, MKTAG('Q', '1', '.', '0') },
{ CODEC_ID_QPEG, MKTAG('Q', '1', '.', '1') },
{ 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', 'M', 'V', 'A') },
{ CODEC_ID_LOCO, MKTAG('L', 'O', 'C', 'O') },
More information about the ffmpeg-cvslog
mailing list