[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