[Ffmpeg-cvslog] r7329 - in trunk: doc/ffmpeg-doc.texi libavcodec/avcodec.h libavcodec/vp56.h libavcodec/vp6.c libavcodec/vp6data.h libavformat/nsvdec.c libavformat/riff.c

aurel subversion
Sun Dec 17 23:00:21 CET 2006


Author: aurel
Date: Sun Dec 17 23:00:12 2006
New Revision: 7329

Modified:
   trunk/doc/ffmpeg-doc.texi
   trunk/libavcodec/avcodec.h
   trunk/libavcodec/vp56.h
   trunk/libavcodec/vp6.c
   trunk/libavcodec/vp6data.h
   trunk/libavformat/nsvdec.c
   trunk/libavformat/riff.c

Log:
Add support for VP60 and VP61.


Modified: trunk/doc/ffmpeg-doc.texi
==============================================================================
--- trunk/doc/ffmpeg-doc.texi	(original)
+++ trunk/doc/ffmpeg-doc.texi	Sun Dec 17 23:00:12 2006
@@ -968,7 +968,7 @@
 @item Sorenson Video 3       @tab     @tab  X @tab fourcc: SVQ3
 @item On2 VP3                @tab     @tab  X @tab still experimental
 @item On2 VP5                @tab     @tab  X @tab fourcc: VP50
- at item On2 VP6                @tab     @tab  X @tab fourcc: VP62
+ at item On2 VP6                @tab     @tab  X @tab fourcc: VP60,VP61,VP62
 @item Theora                 @tab     @tab  X @tab still experimental
 @item Intel Indeo 3          @tab     @tab  X
 @item FLV                    @tab  X  @tab  X @tab Sorenson H.263 used in Flash

Modified: trunk/libavcodec/avcodec.h
==============================================================================
--- trunk/libavcodec/avcodec.h	(original)
+++ trunk/libavcodec/avcodec.h	Sun Dec 17 23:00:12 2006
@@ -37,8 +37,8 @@
 #define AV_STRINGIFY(s)         AV_TOSTRING(s)
 #define AV_TOSTRING(s) #s
 
-#define LIBAVCODEC_VERSION_INT  ((51<<16)+(26<<8)+0)
-#define LIBAVCODEC_VERSION      51.26.0
+#define LIBAVCODEC_VERSION_INT  ((51<<16)+(27<<8)+0)
+#define LIBAVCODEC_VERSION      51.27.0
 #define LIBAVCODEC_BUILD        LIBAVCODEC_VERSION_INT
 
 #define LIBAVCODEC_IDENT        "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)

Modified: trunk/libavcodec/vp56.h
==============================================================================
--- trunk/libavcodec/vp56.h	(original)
+++ trunk/libavcodec/vp56.h	Sun Dec 17 23:00:12 2006
@@ -76,6 +76,7 @@
     uint8_t *edge_emu_buffer_alloc;
     uint8_t *edge_emu_buffer;
     vp56_range_coder_t c;
+    int sub_version;
 
     /* frame info */
     int plane_width[3];

Modified: trunk/libavcodec/vp6.c
==============================================================================
--- trunk/libavcodec/vp6.c	(original)
+++ trunk/libavcodec/vp6.c	Sun Dec 17 23:00:12 2006
@@ -42,7 +42,9 @@
                             int *golden_frame)
 {
     vp56_range_coder_t *c = &s->c;
-    int parse_filter_info;
+    int parse_filter_info = 0;
+    int vrt_shift = 0;
+    int sub_version;
     int rows, cols;
     int res = 1;
 
@@ -53,7 +55,10 @@
     vp56_init_dequant(s, (buf[0] >> 1) & 0x3F);
 
     if (s->frames[VP56_FRAME_CURRENT].key_frame) {
-        if ((buf[1] & 0xFE) != 0x46)  /* would be 0x36 for VP61 */
+        sub_version = buf[1] >> 3;
+        if (sub_version > 8)
+            return 0;
+        if ((buf[1] & 0x06) != 0x06)
             return 0;
         if (buf[1] & 1) {
             av_log(s->avctx, AV_LOG_ERROR, "interlacing not supported\n");
@@ -79,27 +84,37 @@
         vp56_rac_gets(c, 2);
 
         parse_filter_info = 1;
+        if (sub_version < 8)
+            vrt_shift = 5;
+        s->sub_version = sub_version;
     } else {
+        if (!s->sub_version)
+            return 0;
+
         vp56_init_range_decoder(c, buf+1, buf_size-1);
 
         *golden_frame = vp56_rac_get(c);
         s->deblock_filtering = vp56_rac_get(c);
         if (s->deblock_filtering)
             vp56_rac_get(c);
-        parse_filter_info = vp56_rac_get(c);
+        if (s->sub_version > 7)
+            parse_filter_info = vp56_rac_get(c);
     }
 
     if (parse_filter_info) {
         if (vp56_rac_get(c)) {
             s->filter_mode = 2;
-            s->sample_variance_threshold = vp56_rac_gets(c, 5);
+            s->sample_variance_threshold = vp56_rac_gets(c, 5) << vrt_shift;
             s->max_vector_length = 2 << vp56_rac_gets(c, 3);
         } else if (vp56_rac_get(c)) {
             s->filter_mode = 1;
         } else {
             s->filter_mode = 0;
         }
-        s->filter_selection = vp56_rac_gets(c, 4);
+        if (s->sub_version > 7)
+            s->filter_selection = vp56_rac_gets(c, 4);
+        else
+            s->filter_selection = 16;
     }
 
     vp56_rac_get(c);
@@ -439,8 +454,8 @@
                 (FFABS(mv.x) > s->max_vector_length ||
                  FFABS(mv.y) > s->max_vector_length)) {
                 filter4 = 0;
-            } else if (!s->sample_variance_threshold
-                       || (vp6_block_variance(src+offset1, stride)
+            } else if (s->sample_variance_threshold
+                       && (vp6_block_variance(src+offset1, stride)
                            < s->sample_variance_threshold)) {
                 filter4 = 0;
             }

Modified: trunk/libavcodec/vp6data.h
==============================================================================
--- trunk/libavcodec/vp6data.h	(original)
+++ trunk/libavcodec/vp6data.h	Sun Dec 17 23:00:12 2006
@@ -144,7 +144,7 @@
     5, 5, 5, 5, 5, 5, 5, 5,
 };
 
-static const int16_t vp6_block_copy_filter[16][8][4] = {
+static const int16_t vp6_block_copy_filter[17][8][4] = {
   { {   0, 128,   0,   0  },  /* 0 */
     {  -3, 122,   9,   0  },
     {  -4, 109,  24,  -1  },
@@ -273,6 +273,14 @@
     { -11,  59,  99, -19  },
     {  -6,  38, 114, -18  },
     {  -2,  18, 124, -12  } },
+  { {   0, 128,   0,   0  },  /* 16 */
+    {  -4, 118,  16,  -2  },
+    {  -7, 106,  34,  -5  },
+    {  -8,  90,  53,  -7  },
+    {  -8,  72,  72,  -8  },
+    {  -7,  53,  90,  -8  },
+    {  -5,  34, 106,  -7  },
+    {  -2,  16, 118,  -4  } },
 };
 
 static const vp56_tree_t vp6_pcr_tree[] = {

Modified: trunk/libavformat/nsvdec.c
==============================================================================
--- trunk/libavformat/nsvdec.c	(original)
+++ trunk/libavformat/nsvdec.c	Sun Dec 17 23:00:12 2006
@@ -189,13 +189,13 @@
     { CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') },
     { CODEC_ID_VP5, MKTAG('V', 'P', '5', ' ') },
     { CODEC_ID_VP5, MKTAG('V', 'P', '5', '0') },
+    { CODEC_ID_VP6, MKTAG('V', 'P', '6', ' ') },
+    { CODEC_ID_VP6, MKTAG('V', 'P', '6', '0') },
+    { CODEC_ID_VP6, MKTAG('V', 'P', '6', '1') },
     { CODEC_ID_VP6, MKTAG('V', 'P', '6', '2') },
 /*
     { CODEC_ID_VP4, MKTAG('V', 'P', '4', ' ') },
     { CODEC_ID_VP4, MKTAG('V', 'P', '4', '0') },
-    { CODEC_ID_VP6, MKTAG('V', 'P', '6', ' ') },
-    { CODEC_ID_VP6, MKTAG('V', 'P', '6', '0') },
-    { CODEC_ID_VP6, MKTAG('V', 'P', '6', '1') },
 */
     { CODEC_ID_XVID, MKTAG('X', 'V', 'I', 'D') }, /* cf sample xvid decoder from nsv_codec_sdk.zip */
     { CODEC_ID_RAWVIDEO, MKTAG('R', 'G', 'B', '3') },

Modified: trunk/libavformat/riff.c
==============================================================================
--- trunk/libavformat/riff.c	(original)
+++ trunk/libavformat/riff.c	Sun Dec 17 23:00:12 2006
@@ -118,6 +118,8 @@
     { CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') },
     { CODEC_ID_VP3, MKTAG('V', 'P', '3', '0') },
     { CODEC_ID_VP5, MKTAG('V', 'P', '5', '0') },
+    { CODEC_ID_VP6, MKTAG('V', 'P', '6', '0') },
+    { CODEC_ID_VP6, MKTAG('V', 'P', '6', '1') },
     { CODEC_ID_VP6, MKTAG('V', 'P', '6', '2') },
     { CODEC_ID_ASV1, MKTAG('A', 'S', 'V', '1') },
     { CODEC_ID_ASV2, MKTAG('A', 'S', 'V', '2') },




More information about the ffmpeg-cvslog mailing list