summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <[email protected]>2003-11-23 18:49:53 +0000
committerAlex Beregszaszi <[email protected]>2003-11-23 18:49:53 +0000
commit105c3d25216a3f84cdb6e37bef33d7cb91ebd9d0 (patch)
tree9a7e68f063a2478a2cd73a006e333e8dc2e3cb8f
parent9a7ad92531081a10cd04c31e5a4beea88a29a235 (diff)
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.c18
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;