diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2003-11-23 18:49:53 +0000 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2003-11-23 18:49:53 +0000 |
commit | 105c3d25216a3f84cdb6e37bef33d7cb91ebd9d0 (patch) | |
tree | 9a7e68f063a2478a2cd73a006e333e8dc2e3cb8f | |
parent | 9a7ad92531081a10cd04c31e5a4beea88a29a235 (diff) | |
download | ffmpeg-105c3d25216a3f84cdb6e37bef33d7cb91ebd9d0.tar.gz |
theora alpha3 support (with maintaining backward compatibility, maybe we should remove all backward compatibility codes after final theora release?)
Originally committed as revision 2527 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/vp3.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c index 161991a6d8..8ef9acdd19 100644 --- a/libavcodec/vp3.c +++ b/libavcodec/vp3.c @@ -2765,7 +2765,9 @@ static int vp3_decode_frame(AVCodecContext *avctx, { s->last_quality_index = s->quality_index; s->quality_index = get_bits(&gb, 6); - if ( s->keyframe) + if (s->theora >= 0x030300) + skip_bits1(&gb); + if (s->keyframe) { if (get_bits1(&gb)) av_log(s->avctx, AV_LOG_ERROR, "Theora: warning, unsupported keyframe coding type?!\n"); @@ -2924,9 +2926,12 @@ static int theora_decode_header(AVCodecContext *avctx, GetBitContext gb) av_log(avctx, AV_LOG_INFO, "Theora bitstream version %d.%d.%d\n", major, minor, micro); + /* FIXME: endianess? */ + s->theora = (major << 16) | (minor << 8) | micro; + /* 3.3.0 aka alpha3 has the same frame orientation as original vp3 */ /* but previous versions have the image flipped relative to vp3 */ - if ((major <= 3) && (minor < 3)) + if (s->theora < 0x030300) { s->flipped_image = 1; av_log(avctx, AV_LOG_DEBUG, "Old (<alpha3) Theora bitstream, flipped image\n"); @@ -2946,12 +2951,19 @@ static int theora_decode_header(AVCodecContext *avctx, GetBitContext gb) skip_bits(&gb, 24); /* aspect numerator */ skip_bits(&gb, 24); /* aspect denumerator */ - skip_bits(&gb, 5); /* keyframe frequency force */ + if (s->theora < 0x030300) + skip_bits(&gb, 5); /* keyframe frequency force */ skip_bits(&gb, 8); /* colorspace */ skip_bits(&gb, 24); /* bitrate */ skip_bits(&gb, 6); /* last(?) quality index */ + if (s->theora >= 0x030300) + { + skip_bits(&gb, 5); /* keyframe frequency force */ + skip_bits(&gb, 5); /* spare bits */ + } + // align_get_bits(&gb); avctx->width = s->width; |