Mercurial > libavformat.hg
diff oggparsevorbis.c @ 5814:e993cab1faf3 libavformat
oggdec: Don't use ogg_stream's seq for vorbis or speex headers
author | conrad |
---|---|
date | Thu, 11 Mar 2010 07:17:46 +0000 |
parents | 27fd77f20a89 |
children | 9e5e8c64ab54 |
line wrap: on
line diff
--- a/oggparsevorbis.c Thu Mar 11 07:17:43 2010 +0000 +++ b/oggparsevorbis.c Thu Mar 11 07:17:46 2010 +0000 @@ -166,23 +166,24 @@ struct ogg_stream *os = ogg->streams + idx; AVStream *st = s->streams[idx]; struct oggvorbis_private *priv; + int pkt_type = os->buf[os->pstart]; - if (os->seq > 2) + if (!(pkt_type & 1)) return 0; - if (os->seq == 0) { + if (!os->private) { os->private = av_mallocz(sizeof(struct oggvorbis_private)); if (!os->private) return 0; } - if (os->psize < 1) + if (os->psize < 1 || pkt_type > 5) return -1; priv = os->private; - priv->len[os->seq] = os->psize; - priv->packet[os->seq] = av_mallocz(os->psize); - memcpy(priv->packet[os->seq], os->buf + os->pstart, os->psize); + priv->len[pkt_type >> 1] = os->psize; + priv->packet[pkt_type >> 1] = av_mallocz(os->psize); + memcpy(priv->packet[pkt_type >> 1], os->buf + os->pstart, os->psize); if (os->buf[os->pstart] == 1) { const uint8_t *p = os->buf + os->pstart + 7; /* skip "\001vorbis" tag */ unsigned blocksize, bs0, bs1; @@ -224,7 +225,7 @@ fixup_vorbis_headers(s, priv, &st->codec->extradata); } - return os->seq < 3; + return 1; } const struct ogg_codec ff_vorbis_codec = {