Mercurial > libavformat.hg
annotate oggparsevorbis.c @ 2600:a004bd730f70 libavformat
use bytestream_get_* in vorbis_comment()
author | mru |
---|---|
date | Sat, 13 Oct 2007 11:42:06 +0000 |
parents | eb7808a9d361 |
children | b86ce6737811 |
rev | line source |
---|---|
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
1 /** |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
2 Copyright (C) 2005 Michael Ahlberg, Måns Rullgård |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
3 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
4 Permission is hereby granted, free of charge, to any person |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
5 obtaining a copy of this software and associated documentation |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
6 files (the "Software"), to deal in the Software without |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
7 restriction, including without limitation the rights to use, copy, |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
8 modify, merge, publish, distribute, sublicense, and/or sell copies |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
9 of the Software, and to permit persons to whom the Software is |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
10 furnished to do so, subject to the following conditions: |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
11 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
12 The above copyright notice and this permission notice shall be |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
13 included in all copies or substantial portions of the Software. |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
14 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
16 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
17 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
18 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
19 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
20 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
22 DEALINGS IN THE SOFTWARE. |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
23 **/ |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
24 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
25 #include <stdlib.h> |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
26 #include "avformat.h" |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
27 #include "bitstream.h" |
2596 | 28 #include "bytestream.h" |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
29 #include "bswap.h" |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
30 #include "ogg2.h" |
2194 | 31 #include "avstring.h" |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
32 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
33 extern int |
2197 | 34 vorbis_comment(AVFormatContext * as, uint8_t *buf, int size) |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
35 { |
2595 | 36 uint8_t *p = buf; |
37 unsigned s, n, j; | |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
38 |
2595 | 39 if (size < 8) /* must have vendor_length and user_comment_list_length */ |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
40 return -1; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
41 |
2600 | 42 s = bytestream_get_le32(&p); |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
43 size -= 4; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
44 |
2595 | 45 if (size - 4 < s) |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
46 return -1; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
47 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
48 p += s; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
49 size -= s; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
50 |
2600 | 51 n = bytestream_get_le32(&p); |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
52 size -= 4; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
53 |
2197 | 54 while (size >= 4) { |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
55 char *t, *v; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
56 int tl, vl; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
57 |
2600 | 58 s = bytestream_get_le32(&p); |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
59 size -= 4; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
60 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
61 if (size < s) |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
62 break; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
63 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
64 t = p; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
65 p += s; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
66 size -= s; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
67 n--; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
68 |
2197 | 69 v = memchr(t, '=', s); |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
70 if (!v) |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
71 continue; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
72 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
73 tl = v - t; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
74 vl = s - tl - 1; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
75 v++; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
76 |
2197 | 77 if (tl && vl) { |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
78 char tt[tl + 1]; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
79 char ct[vl + 1]; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
80 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
81 for (j = 0; j < tl; j++) |
2197 | 82 tt[j] = toupper(t[j]); |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
83 tt[tl] = 0; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
84 |
2197 | 85 memcpy(ct, v, vl); |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
86 ct[vl] = 0; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
87 |
885 | 88 // took from Vorbis_I_spec |
2197 | 89 if (!strcmp(tt, "AUTHOR") || !strcmp(tt, "ARTIST")) |
90 av_strlcpy(as->author, ct, sizeof(as->author)); | |
91 else if (!strcmp(tt, "TITLE")) | |
92 av_strlcpy(as->title, ct, sizeof(as->title)); | |
93 else if (!strcmp(tt, "COPYRIGHT")) | |
94 av_strlcpy(as->copyright, ct, sizeof(as->copyright)); | |
95 else if (!strcmp(tt, "DESCRIPTION")) | |
96 av_strlcpy(as->comment, ct, sizeof(as->comment)); | |
97 else if (!strcmp(tt, "GENRE")) | |
98 av_strlcpy(as->genre, ct, sizeof(as->genre)); | |
99 else if (!strcmp(tt, "TRACKNUMBER")) | |
100 as->track = atoi(ct); | |
2195 | 101 else if (!strcmp(tt, "ALBUM")) |
102 av_strlcpy(as->album, ct, sizeof(as->album)); | |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
103 } |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
104 } |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
105 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
106 if (size > 0) |
2197 | 107 av_log(as, AV_LOG_INFO, "%i bytes of comment header remain\n", size); |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
108 if (n > 0) |
2197 | 109 av_log(as, AV_LOG_INFO, |
110 "truncated comment header, %i comments not found\n", n); | |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
111 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
112 return 0; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
113 } |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
114 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
115 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
116 /** Parse the vorbis header |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
117 * Vorbis Identification header from Vorbis_I_spec.html#vorbis-spec-codec |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
118 * [vorbis_version] = read 32 bits as unsigned integer | Not used |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
119 * [audio_channels] = read 8 bit integer as unsigned | Used |
885 | 120 * [audio_sample_rate] = read 32 bits as unsigned integer | Used |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
121 * [bitrate_maximum] = read 32 bits as signed integer | Not used yet |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
122 * [bitrate_nominal] = read 32 bits as signed integer | Not used yet |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
123 * [bitrate_minimum] = read 32 bits as signed integer | Used as bitrate |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
124 * [blocksize_0] = read 4 bits as unsigned integer | Not Used |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
125 * [blocksize_1] = read 4 bits as unsigned integer | Not Used |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
126 * [framing_flag] = read one bit | Not Used |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
127 * */ |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
128 |
760 | 129 typedef struct { |
130 unsigned int len[3]; | |
131 unsigned char *packet[3]; | |
132 } oggvorbis_private_t; | |
133 | |
134 | |
135 static unsigned int | |
136 fixup_vorbis_headers(AVFormatContext * as, oggvorbis_private_t *priv, | |
2198 | 137 uint8_t **buf) |
760 | 138 { |
139 int i,offset, len; | |
140 unsigned char *ptr; | |
141 | |
142 len = priv->len[0] + priv->len[1] + priv->len[2]; | |
143 ptr = *buf = av_mallocz(len + len/255 + 64); | |
144 | |
145 ptr[0] = 2; | |
146 offset = 1; | |
147 offset += av_xiphlacing(&ptr[offset], priv->len[0]); | |
148 offset += av_xiphlacing(&ptr[offset], priv->len[1]); | |
2197 | 149 for (i = 0; i < 3; i++) { |
760 | 150 memcpy(&ptr[offset], priv->packet[i], priv->len[i]); |
151 offset += priv->len[i]; | |
152 } | |
153 *buf = av_realloc(*buf, offset); | |
154 return offset; | |
155 } | |
156 | |
157 | |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
158 static int |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
159 vorbis_header (AVFormatContext * s, int idx) |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
160 { |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
161 ogg_t *ogg = s->priv_data; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
162 ogg_stream_t *os = ogg->streams + idx; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
163 AVStream *st = s->streams[idx]; |
760 | 164 oggvorbis_private_t *priv; |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
165 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
166 if (os->seq > 2) |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
167 return 0; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
168 |
2197 | 169 if (os->seq == 0) { |
760 | 170 os->private = av_mallocz(sizeof(oggvorbis_private_t)); |
2197 | 171 if (!os->private) |
760 | 172 return 0; |
173 } | |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
174 |
2595 | 175 if (os->psize < 1) |
176 return -1; | |
177 | |
760 | 178 priv = os->private; |
179 priv->len[os->seq] = os->psize; | |
180 priv->packet[os->seq] = av_mallocz(os->psize); | |
181 memcpy(priv->packet[os->seq], os->buf + os->pstart, os->psize); | |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
182 if (os->buf[os->pstart] == 1) { |
2597 | 183 uint8_t *p = os->buf + os->pstart + 7; /* skip "\001vorbis" tag */ |
184 unsigned blocksize, bs0, bs1; | |
2595 | 185 |
186 if (os->psize != 30) | |
187 return -1; | |
188 | |
2597 | 189 if (bytestream_get_le32(&p) != 0) /* vorbis_version */ |
190 return -1; | |
191 | |
2596 | 192 st->codec->channels = bytestream_get_byte(&p); |
193 st->codec->sample_rate = bytestream_get_le32(&p); | |
194 p += 4; // skip maximum bitrate | |
195 st->codec->bit_rate = bytestream_get_le32(&p); // nominal bitrate | |
2597 | 196 p += 4; // skip minimum bitrate |
197 | |
198 blocksize = bytestream_get_byte(&p); | |
199 bs0 = blocksize & 15; | |
200 bs1 = blocksize >> 4; | |
201 | |
202 if (bs0 > bs1) | |
203 return -1; | |
204 if (bs0 < 6 || bs1 > 13) | |
205 return -1; | |
206 | |
207 if (bytestream_get_byte(&p) != 1) /* framing_flag */ | |
208 return -1; | |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
209 |
820
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
760
diff
changeset
|
210 st->codec->codec_type = CODEC_TYPE_AUDIO; |
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
760
diff
changeset
|
211 st->codec->codec_id = CODEC_ID_VORBIS; |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
212 |
1077 | 213 st->time_base.num = 1; |
214 st->time_base.den = st->codec->sample_rate; | |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
215 } else if (os->buf[os->pstart] == 3) { |
2595 | 216 if (os->psize > 8) |
217 vorbis_comment (s, os->buf + os->pstart + 7, os->psize - 8); | |
760 | 218 } else { |
820
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
760
diff
changeset
|
219 st->codec->extradata_size = |
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
760
diff
changeset
|
220 fixup_vorbis_headers(s, priv, &st->codec->extradata); |
726
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
221 } |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
222 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
223 return os->seq < 3; |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
224 } |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
225 |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
226 ogg_codec_t vorbis_codec = { |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
227 .magic = "\001vorbis", |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
228 .magicsize = 7, |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
229 .header = vorbis_header |
17178af951b4
Ogg demuxer ported from tcvp by Luca Barbato <lu_zero at gentoo dot org>,
mru
parents:
diff
changeset
|
230 }; |