[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