[SCM] libav/experimental: use generic xiph header spliting func to split theora headers Original thread: Date: Thu, 22 Mar 2007 20:23:08 -0400 Subject: [Ffmpeg-devel] [PATCH] Theora in MKV (GSoC '07 Qualification)
siretart at users.alioth.debian.org
siretart at users.alioth.debian.org
Sun Jun 30 15:58:10 UTC 2013
The following commit has been merged in the experimental branch:
commit da91ed594e29bd552b82f51b51211222474cf6fb
Author: Aurelien Jacobs <aurel at gnuage.org>
Date: Sun Mar 25 01:09:26 2007 +0000
use generic xiph header spliting func to split theora headers
Original thread:
Date: Thu, 22 Mar 2007 20:23:08 -0400
Subject: [Ffmpeg-devel] [PATCH] Theora in MKV (GSoC '07 Qualification)
Originally committed as revision 8506 to svn://svn.ffmpeg.org/ffmpeg/trunk
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 729e77a..2d42ce2 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -141,7 +141,7 @@ OBJS-$(CONFIG_SVQ1_ENCODER) += svq1.o
OBJS-$(CONFIG_SVQ3_DECODER) += h264.o
OBJS-$(CONFIG_TARGA_DECODER) += targa.o
OBJS-$(CONFIG_TARGA_ENCODER) += targaenc.o
-OBJS-$(CONFIG_THEORA_DECODER) += vp3.o
+OBJS-$(CONFIG_THEORA_DECODER) += vp3.o xiph.o
OBJS-$(CONFIG_TIERTEXSEQVIDEO_DECODER) += tiertexseqv.o
OBJS-$(CONFIG_TIFF_DECODER) += tiff.o lzw.o
OBJS-$(CONFIG_TRUEMOTION1_DECODER) += truemotion1.o
diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
index 23d97bf..0d882da 100644
--- a/libavcodec/vp3.c
+++ b/libavcodec/vp3.c
@@ -41,6 +41,7 @@
#include "mpegvideo.h"
#include "vp3data.h"
+#include "xiph.h"
#define FRAGMENT_PIXELS 8
@@ -2574,8 +2575,9 @@ static int theora_decode_init(AVCodecContext *avctx)
Vp3DecodeContext *s = avctx->priv_data;
GetBitContext gb;
int ptype;
- uint8_t *p= avctx->extradata;
- int op_bytes, i;
+ uint8_t *header_start[3];
+ int header_len[3];
+ int i;
s->theora = 1;
@@ -2585,12 +2587,14 @@ static int theora_decode_init(AVCodecContext *avctx)
return -1;
}
- for(i=0;i<3;i++) {
- op_bytes = *(p++)<<8;
- op_bytes += *(p++);
+ if (ff_split_xiph_headers(avctx->extradata, avctx->extradata_size,
+ 42, header_start, header_len) < 0) {
+ av_log(avctx, AV_LOG_ERROR, "Corrupt extradata\n");
+ return -1;
+ }
- init_get_bits(&gb, p, op_bytes);
- p += op_bytes;
+ for(i=0;i<3;i++) {
+ init_get_bits(&gb, header_start[i], header_len[i]);
ptype = get_bits(&gb, 8);
debug_vp3("Theora headerpacket type: %x\n", ptype);
@@ -2620,8 +2624,8 @@ static int theora_decode_init(AVCodecContext *avctx)
av_log(avctx, AV_LOG_ERROR, "Unknown Theora config packet: %d\n", ptype&~0x80);
break;
}
- if(8*op_bytes != get_bits_count(&gb))
- av_log(avctx, AV_LOG_ERROR, "%d bits left in packet %X\n", 8*op_bytes - get_bits_count(&gb), ptype);
+ if(8*header_len[i] != get_bits_count(&gb))
+ av_log(avctx, AV_LOG_ERROR, "%d bits left in packet %X\n", 8*header_len[i] - get_bits_count(&gb), ptype);
if (s->theora < 0x030200)
break;
}
--
Libav/FFmpeg packaging
More information about the pkg-multimedia-commits
mailing list