os->private = thp;
}
- if (os->buf[os->pstart] == 0x80) {
+ switch (os->buf[os->pstart]) {
+ case 0x80: {
GetBitContext gb;
int width, height;
AVRational timebase;
thp->gpmask = (1 << thp->gpshift) - 1;
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
- st->codec->codec_id = CODEC_ID_THEORA;
+ st->codec->codec_id = AV_CODEC_ID_THEORA;
st->need_parsing = AVSTREAM_PARSE_HEADERS;
- } else if (os->buf[os->pstart] == 0x83) {
- ff_vorbis_comment (s, &st->metadata, os->buf + os->pstart + 7, os->psize - 8);
+ }
+ break;
+ case 0x81:
+ ff_vorbis_comment(s, &st->metadata, os->buf + os->pstart + 7, os->psize - 7);
+ case 0x82:
+ if (!thp->version)
+ return -1;
+ break;
+ default:
+ return -1;
}
st->codec->extradata = av_realloc (st->codec->extradata,
struct ogg *ogg = ctx->priv_data;
struct ogg_stream *os = ogg->streams + idx;
struct theora_params *thp = os->private;
- uint64_t iframe = gp >> thp->gpshift;
- uint64_t pframe = gp & thp->gpmask;
+ uint64_t iframe, pframe;
+
+ if (!thp)
+ return AV_NOPTS_VALUE;
+
+ iframe = gp >> thp->gpshift;
+ pframe = gp & thp->gpmask;
if (thp->version < 0x030201)
iframe++;
.magic = "\200theora",
.magicsize = 7,
.header = theora_header,
- .gptopts = theora_gptopts
+ .gptopts = theora_gptopts,
+ .nb_header = 3,
};