1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
---|
2 | <html>
|
---|
3 | <head>
|
---|
4 |
|
---|
5 | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15"/>
|
---|
6 | <title>Ogg Vorbis Documentation</title>
|
---|
7 |
|
---|
8 | <style type="text/css">
|
---|
9 | body {
|
---|
10 | margin: 0 18px 0 18px;
|
---|
11 | padding-bottom: 30px;
|
---|
12 | font-family: Verdana, Arial, Helvetica, sans-serif;
|
---|
13 | color: #333333;
|
---|
14 | font-size: .8em;
|
---|
15 | }
|
---|
16 |
|
---|
17 | a {
|
---|
18 | color: #3366cc;
|
---|
19 | }
|
---|
20 |
|
---|
21 | img {
|
---|
22 | border: 0;
|
---|
23 | }
|
---|
24 |
|
---|
25 | #xiphlogo {
|
---|
26 | margin: 30px 0 16px 0;
|
---|
27 | }
|
---|
28 |
|
---|
29 | #content p {
|
---|
30 | line-height: 1.4;
|
---|
31 | }
|
---|
32 |
|
---|
33 | h1, h1 a, h2, h2 a, h3, h3 a {
|
---|
34 | font-weight: bold;
|
---|
35 | color: #ff9900;
|
---|
36 | margin: 1.3em 0 8px 0;
|
---|
37 | }
|
---|
38 |
|
---|
39 | h1 {
|
---|
40 | font-size: 1.3em;
|
---|
41 | }
|
---|
42 |
|
---|
43 | h2 {
|
---|
44 | font-size: 1.2em;
|
---|
45 | }
|
---|
46 |
|
---|
47 | h3 {
|
---|
48 | font-size: 1.1em;
|
---|
49 | }
|
---|
50 |
|
---|
51 | li {
|
---|
52 | line-height: 1.4;
|
---|
53 | }
|
---|
54 |
|
---|
55 | #copyright {
|
---|
56 | margin-top: 30px;
|
---|
57 | line-height: 1.5em;
|
---|
58 | text-align: center;
|
---|
59 | font-size: .8em;
|
---|
60 | color: #888888;
|
---|
61 | clear: both;
|
---|
62 | }
|
---|
63 | </style>
|
---|
64 |
|
---|
65 | </head>
|
---|
66 |
|
---|
67 | <body>
|
---|
68 |
|
---|
69 | <div id="xiphlogo">
|
---|
70 | <a href="https://xiph.org/"><img src="fish_xiph_org.png" alt="Fish Logo and Xiph.Org"/></a>
|
---|
71 | </div>
|
---|
72 |
|
---|
73 | <h1>Programming with Xiph.Org <tt>libvorbis</tt></h1>
|
---|
74 |
|
---|
75 | <h2>Description</h2>
|
---|
76 |
|
---|
77 | <p>Libvorbis is the Xiph.Org Foundation's portable Ogg Vorbis CODEC
|
---|
78 | implemented as a programmatic library. Libvorbis provides primitives
|
---|
79 | to handle framing and manipulation of Ogg bitstreams (used by the
|
---|
80 | Vorbis for streaming), a full analysis (encoding) interface as well as
|
---|
81 | packet decoding and synthesis for playback.</p>
|
---|
82 |
|
---|
83 | <p>The libvorbis library does not provide any system interface; a
|
---|
84 | full-featured demonstration player included with the library
|
---|
85 | distribtion provides example code for a variety of system interfaces
|
---|
86 | as well as a working example of using libvorbis in production code.</p>
|
---|
87 |
|
---|
88 | <h2>Encoding Overview</h2>
|
---|
89 |
|
---|
90 | <h2>Decoding Overview</h2>
|
---|
91 |
|
---|
92 | <p>Decoding a bitstream with libvorbis follows roughly the following
|
---|
93 | steps:</p>
|
---|
94 |
|
---|
95 | <ol>
|
---|
96 | <li>Frame the incoming bitstream into pages</li>
|
---|
97 | <li>Sort the pages by logical bitstream and buffer then into logical streams</li>
|
---|
98 | <li>Decompose the logical streams into raw packets</li>
|
---|
99 | <li>Reconstruct segments of the original data from each packet</li>
|
---|
100 | <li>Glue the reconstructed segments back into a decoded stream</li>
|
---|
101 | </ol>
|
---|
102 |
|
---|
103 | <h3>Framing</h3>
|
---|
104 |
|
---|
105 | <p>An Ogg bitstream is logically arranged into pages, but to decode
|
---|
106 | the pages, we have to find them first. The raw bitstream is first fed
|
---|
107 | into an <tt>ogg_sync_state</tt> buffer using <tt>ogg_sync_buffer()</tt>
|
---|
108 | and <tt>ogg_sync_wrote()</tt>. After each block we submit to the sync
|
---|
109 | buffer, we should check to see if we can frame and extract a complete
|
---|
110 | page or pages using <tt>ogg_sync_pageout()</tt>. Extra pages are
|
---|
111 | buffered; allowing them to build up in the <tt>ogg_sync_state</tt>
|
---|
112 | buffer will eventually exhaust memory.</p>
|
---|
113 |
|
---|
114 | <p>The Ogg pages returned from <tt>ogg_sync_pageout</tt> need not be
|
---|
115 | decoded further to be used as landmarks in seeking; seeking can be
|
---|
116 | either a rough process of simply jumping to approximately intuited
|
---|
117 | portions of the bitstream, or it can be a precise bisection process
|
---|
118 | that captures pages and inspects data position. When seeking,
|
---|
119 | however, sequential multiplexing (chaining) must be accounted for;
|
---|
120 | beginning play in a new logical bitstream requires initializing a
|
---|
121 | synthesis engine with the headers from that bitstream. Vorbis
|
---|
122 | bitstreams do not make use of concurent multiplexing (grouping).</p>
|
---|
123 |
|
---|
124 | <h3>Sorting</h3>
|
---|
125 |
|
---|
126 | <p>The pages produced by <tt>ogg_sync_pageout</tt> are then sorted by
|
---|
127 | serial number to seperate logical bitstreams. Initialize logical
|
---|
128 | bitstream buffers (<tt>og_stream_state</tt>) using
|
---|
129 | <tt>ogg_stream_init()</tt>. Pages are submitted to the matching
|
---|
130 | logical bitstream buffer using <tt>ogg_stream_pagein</tt>; the serial
|
---|
131 | number of the page and the stream buffer must match, or the page will
|
---|
132 | be rejected. A page submitted out of sequence will simply be noted,
|
---|
133 | and in the course of outputting packets, the hole will be flagged
|
---|
134 | (<tt>ogg_sync_pageout</tt> and <tt>ogg_stream_packetout</tt> will
|
---|
135 | return a negative value at positions where they had to recapture the
|
---|
136 | stream).</p>
|
---|
137 |
|
---|
138 | <h3>Extracting packets</h3>
|
---|
139 |
|
---|
140 | <p>After submitting page[s] to a logical stream, read available packets
|
---|
141 | using <tt>ogg_stream_packetout</tt>.</p>
|
---|
142 |
|
---|
143 | <h3>Decoding packets</h3>
|
---|
144 |
|
---|
145 | <h3>Reassembling data segments</h3>
|
---|
146 |
|
---|
147 | <h2>Ogg Bitstream Manipulation Structures</h2>
|
---|
148 |
|
---|
149 | <p>Two of the Ogg bitstream data structures are intended to be
|
---|
150 | transparent to the developer; the fields should be used directly.</p>
|
---|
151 |
|
---|
152 | <h3>ogg_packet</h3>
|
---|
153 |
|
---|
154 | <pre>
|
---|
155 | typedef struct {
|
---|
156 | unsigned char *packet;
|
---|
157 | long bytes;
|
---|
158 | long b_o_s;
|
---|
159 | long e_o_s;
|
---|
160 |
|
---|
161 | size64 granulepos;
|
---|
162 |
|
---|
163 | } ogg_packet;
|
---|
164 | </pre>
|
---|
165 |
|
---|
166 | <dl>
|
---|
167 | <dt>packet:</dt>
|
---|
168 | <dd>a pointer to the byte data of the raw packet</dd>
|
---|
169 | <dt>bytes:</dt>
|
---|
170 | <dd>the size of the packet' raw data</dd>
|
---|
171 | <dt>b_o_s:</dt>
|
---|
172 | <dd>beginning of stream; nonzero if this is the first packet of
|
---|
173 | the logical bitstream</dd>
|
---|
174 | <dt>e_o_s:</dt>
|
---|
175 | <dd>end of stream; nonzero if this is the last packet of the
|
---|
176 | logical bitstream</dd>
|
---|
177 | <dt>granulepos:</dt>
|
---|
178 | <dd>the absolute position of this packet in the original
|
---|
179 | uncompressed data stream.</dd>
|
---|
180 | </dl>
|
---|
181 |
|
---|
182 | <h4>encoding notes</h4>
|
---|
183 |
|
---|
184 | <p>The encoder is responsible for setting all of
|
---|
185 | the fields of the packet to appropriate values before submission to
|
---|
186 | <tt>ogg_stream_packetin()</tt>; however, it is noted that the value in
|
---|
187 | <tt>b_o_s</tt> is ignored; the first page produced from a given
|
---|
188 | <tt>ogg_stream_state</tt> structure will be stamped as the initial
|
---|
189 | page. <tt>e_o_s</tt>, however, must be set; this is the means by
|
---|
190 | which the stream encoding primitives handle end of stream and cleanup.</p>
|
---|
191 |
|
---|
192 | <h4>decoding notes</h4>
|
---|
193 |
|
---|
194 | <p><tt>ogg_stream_packetout()</tt> sets the fields
|
---|
195 | to appropriate values. Note that granulepos will be >= 0 only in the
|
---|
196 | case that the given packet actually represents that position (ie, only
|
---|
197 | the last packet completed on any page will have a meaningful
|
---|
198 | <tt>granulepos</tt>). Intervening frames will see <tt>granulepos</tt> set
|
---|
199 | to -1.</p>
|
---|
200 |
|
---|
201 | <h3>ogg_page</h3>
|
---|
202 |
|
---|
203 | <pre>
|
---|
204 | typedef struct {
|
---|
205 | unsigned char *header;
|
---|
206 | long header_len;
|
---|
207 | unsigned char *body;
|
---|
208 | long body_len;
|
---|
209 | } ogg_page;
|
---|
210 | </pre>
|
---|
211 |
|
---|
212 | <dl>
|
---|
213 | <dt>header:</dt>
|
---|
214 | <dd>pointer to the page header data</dd>
|
---|
215 | <dt>header_len:</dt>
|
---|
216 | <dd>length of the page header in bytes</dd>
|
---|
217 | <dt>body:</dt>
|
---|
218 | <dd>pointer to the page body</dd>
|
---|
219 | <dt>body_len:</dt>
|
---|
220 | <dd>length of the page body</dd>
|
---|
221 | </dl>
|
---|
222 |
|
---|
223 | <p>Note that although the <tt>header</tt> and <tt>body</tt> pointers do
|
---|
224 | not necessarily point into a single contiguous page vector, the page
|
---|
225 | body must immediately follow the header in the bitstream.</p>
|
---|
226 |
|
---|
227 | <h2>Ogg Bitstream Manipulation Functions</h2>
|
---|
228 |
|
---|
229 | <h3>
|
---|
230 | int ogg_page_bos(ogg_page *og);
|
---|
231 | </h3>
|
---|
232 |
|
---|
233 | <p>Returns the 'beginning of stream' flag for the given Ogg page. The
|
---|
234 | beginning of stream flag is set on the initial page of a logical
|
---|
235 | bitstream.</p>
|
---|
236 |
|
---|
237 | <p>Zero indicates the flag is cleared (this is not the initial page of a
|
---|
238 | logical bitstream). Nonzero indicates the flag is set (this is the
|
---|
239 | initial page of a logical bitstream).</p>
|
---|
240 |
|
---|
241 | <h3>
|
---|
242 | int ogg_page_continued(ogg_page *og);
|
---|
243 | </h3>
|
---|
244 |
|
---|
245 | <p>Returns the 'packet continued' flag for the given Ogg page. The packet
|
---|
246 | continued flag indicates whether or not the body data of this page
|
---|
247 | begins with packet continued from a preceeding page.</p>
|
---|
248 |
|
---|
249 | <p>Zero (unset) indicates that the body data begins with a new packet.
|
---|
250 | Nonzero (set) indicates that the first packet data on the page is a
|
---|
251 | continuation from the preceeding page.</p>
|
---|
252 |
|
---|
253 | <h3>
|
---|
254 | int ogg_page_eos(ogg_page *og);
|
---|
255 | </h3>
|
---|
256 |
|
---|
257 | <p>Returns the 'end of stream' flag for a give Ogg page. The end of page
|
---|
258 | flag is set on the last (terminal) page of a logical bitstream.</p>
|
---|
259 |
|
---|
260 | <p>Zero (unset) indicates that this is not the last page of a logical
|
---|
261 | bitstream. Nonzero (set) indicates that this is the last page of a
|
---|
262 | logical bitstream and that no addiitonal pages belonging to this
|
---|
263 | bitstream may follow.</p>
|
---|
264 |
|
---|
265 | <h3>
|
---|
266 | size64 ogg_page_granulepos(ogg_page *og);
|
---|
267 | </h3>
|
---|
268 |
|
---|
269 | <p>Returns the position of this page as an absolute position within the
|
---|
270 | original uncompressed data. The position, as returned, is 'frames
|
---|
271 | encoded to date up to and including the last whole packet on this
|
---|
272 | page'. Partial packets begun on this page but continued to the
|
---|
273 | following page are not included. If no packet ends on this page, the
|
---|
274 | frame position value will be equal to the frame position value of the
|
---|
275 | preceeding page. If none of the original uncompressed data is yet
|
---|
276 | represented in the logical bitstream (for example, the first page of a
|
---|
277 | bitstream consists only of a header packet; this packet encodes only
|
---|
278 | metadata), the value shall be zero.</p>
|
---|
279 |
|
---|
280 | <p>The units of the framenumber are determined by media mapping. A
|
---|
281 | vorbis audio bitstream, for example, defines one frame to be the
|
---|
282 | channel values from a single sampling period (eg, a 16 bit stereo
|
---|
283 | bitstream consists of two samples of two bytes for a total of four
|
---|
284 | bytes, thus a frame would be four bytes). A video stream defines one
|
---|
285 | frame to be a single frame of video.</p>
|
---|
286 |
|
---|
287 | <h3>
|
---|
288 | int ogg_page_pageno(ogg_page *og);
|
---|
289 | </h3>
|
---|
290 |
|
---|
291 | <p>Returns the sequential page number of the given Ogg page. The first
|
---|
292 | page in a logical bitstream is numbered zero; following pages are
|
---|
293 | numbered in increasing monotonic order.</p>
|
---|
294 |
|
---|
295 | <h3>
|
---|
296 | int ogg_page_serialno(ogg_page *og);
|
---|
297 | </h3>
|
---|
298 |
|
---|
299 | <p>Returns the serial number of the given Ogg page. The serial number is
|
---|
300 | used as a handle to distinguish various logical bitstreams in a
|
---|
301 | physical Ogg bitstresm. Every logical bitstream within a
|
---|
302 | physical bitstream must use a unique (within the scope of the physical
|
---|
303 | bitstream) serial number, which is stamped on all bitstream pages.</p>
|
---|
304 |
|
---|
305 | <h3>
|
---|
306 | int ogg_page_version(ogg_page *og);
|
---|
307 | </h3>
|
---|
308 |
|
---|
309 | <p>Returns the revision of the Ogg bitstream structure of the given page.
|
---|
310 | Currently, the only permitted number is zero. Later revisions of the
|
---|
311 | bitstream spec will increment this version should any changes be
|
---|
312 | incompatable.</p>
|
---|
313 |
|
---|
314 | <h3>
|
---|
315 | int ogg_stream_clear(ogg_stream_state *os);
|
---|
316 | </h3>
|
---|
317 |
|
---|
318 | <p>Clears and deallocates the internal storage of the given Ogg stream.
|
---|
319 | After clearing, the stream structure is not initialized for use;
|
---|
320 | <tt>ogg_stream_init</tt> must be called to reinitialize for use.
|
---|
321 | Use <tt>ogg_stream_reset</tt> to reset the stream state
|
---|
322 | to a fresh, intiialized state.</p>
|
---|
323 |
|
---|
324 | <p><tt>ogg_stream_clear</tt> does not call <tt>free()</tt> on the pointer
|
---|
325 | <tt>os</tt>, allowing use of this call on stream structures in static
|
---|
326 | or automatic storage. <tt>ogg_stream_destroy</tt>is a complimentary
|
---|
327 | function that frees the pointer as well.</p>
|
---|
328 |
|
---|
329 | <p>Returns zero on success and non-zero on failure. This function always
|
---|
330 | succeeds.</p>
|
---|
331 |
|
---|
332 | <h3>
|
---|
333 | int ogg_stream_destroy(ogg_stream_state *os);
|
---|
334 | </h3>
|
---|
335 |
|
---|
336 | <p>Clears and deallocates the internal storage of the given Ogg stream,
|
---|
337 | then frees the storage associated with the pointer <tt>os</tt>.</p>
|
---|
338 |
|
---|
339 | <p><tt>ogg_stream_clear</tt> does not call <tt>free()</tt> on the pointer
|
---|
340 | <tt>os</tt>, allowing use of that call on stream structures in static
|
---|
341 | or automatic storage.</p>
|
---|
342 |
|
---|
343 | <p>Returns zero on success and non-zero on failure. This function always
|
---|
344 | succeeds.</p>
|
---|
345 |
|
---|
346 | <h3>
|
---|
347 | int ogg_stream_init(ogg_stream_state *os,int serialno);
|
---|
348 | </h3>
|
---|
349 |
|
---|
350 | <p>Initialize the storage associated with <tt>os</tt> for use as an Ogg
|
---|
351 | stream. This call is used to initialize a stream for both encode and
|
---|
352 | decode. The given serial number is the serial number that will be
|
---|
353 | stamped on pages of the produced bitstream (during encode), or used as
|
---|
354 | a check that pages match (during decode).</p>
|
---|
355 |
|
---|
356 | <p>Returns zero on success, nonzero on failure.</p>
|
---|
357 |
|
---|
358 | <h3>
|
---|
359 | int ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op);
|
---|
360 | </h3>
|
---|
361 |
|
---|
362 | <p>Used during encoding to add the given raw packet to the given Ogg
|
---|
363 | bitstream. The contents of <tt>op</tt> are copied;
|
---|
364 | <tt>ogg_stream_packetin</tt> does not retain any pointers into
|
---|
365 | <tt>op</tt>'s storage. The encoding proccess buffers incoming packets
|
---|
366 | until enough packets have been assembled to form an entire page;
|
---|
367 | <tt>ogg_stream_pageout</tt> is used to read complete pages.</p>
|
---|
368 |
|
---|
369 | <p>Returns zero on success, nonzero on failure.</p>
|
---|
370 |
|
---|
371 | <h3>
|
---|
372 | int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
|
---|
373 | </h3>
|
---|
374 |
|
---|
375 | <p>Used during decoding to read raw packets from the given logical
|
---|
376 | bitstream. <tt>ogg_stream_packetout</tt> will only return complete
|
---|
377 | packets for which checksumming indicates no corruption. The size and
|
---|
378 | contents of the packet exactly match those given in the encoding
|
---|
379 | process. </p>
|
---|
380 |
|
---|
381 | <p>Returns zero if the next packet is not ready to be read (not buffered
|
---|
382 | or incomplete), positive if it returned a complete packet in
|
---|
383 | <tt>op</tt> and negative if there is a gap, extra bytes or corruption
|
---|
384 | at this position in the bitstream (essentially that the bitstream had
|
---|
385 | to be recaptured). A negative value is not necessarily an error. It
|
---|
386 | would be a common occurence when seeking, for example, which requires
|
---|
387 | recapture of the bitstream at the position decoding continued.</p>
|
---|
388 |
|
---|
389 | <p>If the return value is positive, <tt>ogg_stream_packetout</tt> placed
|
---|
390 | a packet in <tt>op</tt>. The data in <tt>op</tt> points to static
|
---|
391 | storage that is valid until the next call to
|
---|
392 | <tt>ogg_stream_pagein</tt>, <tt>ogg_stream_clear</tt>,
|
---|
393 | <tt>ogg_stream_reset</tt>, or <tt>ogg_stream_destroy</tt>. The
|
---|
394 | pointers are not invalidated by more calls to
|
---|
395 | <tt>ogg_stream_packetout</tt>.</p>
|
---|
396 |
|
---|
397 | <h3>
|
---|
398 | int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
|
---|
399 | </h3>
|
---|
400 |
|
---|
401 | <p>Used during decoding to buffer the given complete, pre-verified page
|
---|
402 | for decoding into raw Ogg packets. The given page must be framed,
|
---|
403 | normally produced by <tt>ogg_sync_pageout</tt>, and from the logical
|
---|
404 | bitstream associated with <tt>os</tt> (the serial numbers must match).
|
---|
405 | The contents of the given page are copied; <tt>ogg_stream_pagein</tt>
|
---|
406 | retains no pointers into <tt>og</tt> storage.</p>
|
---|
407 |
|
---|
408 | <p>Returns zero on success and non-zero on failure.</p>
|
---|
409 |
|
---|
410 | <h3>
|
---|
411 | int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og);
|
---|
412 | </h3>
|
---|
413 |
|
---|
414 | <p>Used during encode to read complete pages from the stream buffer. The
|
---|
415 | returned page is ready for sending out to the real world.</p>
|
---|
416 |
|
---|
417 | <p>Returns zero if there is no complete page ready for reading. Returns
|
---|
418 | nonzero when it has placed data for a complete page into
|
---|
419 | <tt>og</tt>. Note that the storage returned in og points into internal
|
---|
420 | storage; the pointers in <tt>og</tt> are valid until the next call to
|
---|
421 | <tt>ogg_stream_pageout</tt>, <tt>ogg_stream_packetin</tt>,
|
---|
422 | <tt>ogg_stream_reset</tt>, <tt>ogg_stream_clear</tt> or
|
---|
423 | <tt>ogg_stream_destroy</tt>.</p>
|
---|
424 |
|
---|
425 | <h3>
|
---|
426 | int ogg_stream_reset(ogg_stream_state *os);
|
---|
427 | </h3>
|
---|
428 |
|
---|
429 | <p>Resets the given stream's state to that of a blank, unused stream;
|
---|
430 | this may be used during encode or decode.</p>
|
---|
431 |
|
---|
432 | <p>Note that if used during encode, it does not alter the stream's serial
|
---|
433 | number. In addition, the next page produced during encoding will be
|
---|
434 | marked as the 'initial' page of the logical bitstream.</p>
|
---|
435 |
|
---|
436 | <p>When used during decode, this simply clears the data buffer of any
|
---|
437 | pending pages. Beginning and end of stream cues are read from the
|
---|
438 | bitstream and are unaffected by reset.</p>
|
---|
439 |
|
---|
440 | <p>Returns zero on success and non-zero on failure. This function always
|
---|
441 | succeeds.</p>
|
---|
442 |
|
---|
443 | <h3>
|
---|
444 | char *ogg_sync_buffer(ogg_sync_state *oy, long size);
|
---|
445 | </h3>
|
---|
446 |
|
---|
447 | <p>This call is used to buffer a raw bitstream for framing and
|
---|
448 | verification. <tt>ogg_sync_buffer</tt> handles stream capture and
|
---|
449 | recapture, checksumming, and division into Ogg pages (as required by
|
---|
450 | <tt>ogg_stream_pagein</tt>).</p>
|
---|
451 |
|
---|
452 | <p><tt>ogg_sync_buffer</tt> exposes a buffer area into which the decoder
|
---|
453 | copies the next (up to) <tt>size</tt> bytes. We expose the buffer
|
---|
454 | (rather than taking a buffer) in order to avoid an extra copy many
|
---|
455 | uses; this way, for example, <tt>read()</tt> can transfer data
|
---|
456 | directly into the stream buffer without first needing to place it in
|
---|
457 | temporary storage.</p>
|
---|
458 |
|
---|
459 | <p>Returns a pointer into <tt>oy</tt>'s internal bitstream sync buffer;
|
---|
460 | the remaining space in the sync buffer is at least <tt>size</tt>
|
---|
461 | bytes. The decoder need not write all of <tt>size</tt> bytes;
|
---|
462 | <tt>ogg_sync_wrote</tt> is used to inform the engine how many bytes
|
---|
463 | were actually written. Use of <tt>ogg_sync_wrote</tt> after writing
|
---|
464 | into the exposed buffer is mandantory.</p>
|
---|
465 |
|
---|
466 | <h3>
|
---|
467 | int ogg_sync_clear(ogg_sync_state *oy);
|
---|
468 | </h3>
|
---|
469 |
|
---|
470 | <p><tt>ogg_sync_clear</tt>
|
---|
471 | clears and deallocates the internal storage of the given Ogg sync
|
---|
472 | buffer. After clearing, the sync structure is not initialized for
|
---|
473 | use; <tt>ogg_sync_init</tt> must be called to reinitialize for use.
|
---|
474 | Use <tt>ogg_sync_reset</tt> to reset the sync state and buffer to a
|
---|
475 | fresh, intiialized state.</p>
|
---|
476 |
|
---|
477 | <p><tt>ogg_sync_clear</tt> does not call <tt>free()</tt> on the pointer
|
---|
478 | <tt>oy</tt>, allowing use of this call on sync structures in static
|
---|
479 | or automatic storage. <tt>ogg_sync_destroy</tt>is a complimentary
|
---|
480 | function that frees the pointer as well.</p>
|
---|
481 |
|
---|
482 | <p>Returns zero on success and non-zero on failure. This function always
|
---|
483 | succeeds.</p>
|
---|
484 |
|
---|
485 | <h3>
|
---|
486 | int ogg_sync_destroy(ogg_sync_state *oy);
|
---|
487 | </h3>
|
---|
488 |
|
---|
489 | <p>Clears and deallocates the internal storage of the given Ogg sync
|
---|
490 | buffer, then frees the storage associated with the pointer
|
---|
491 | <tt>oy</tt>.</p>
|
---|
492 |
|
---|
493 | <p>An alternative function,<tt>ogg_sync_clear</tt>, does not call
|
---|
494 | <tt>free()</tt> on the pointer <tt>oy</tt>, allowing use of that call on
|
---|
495 | stream structures in static or automatic storage.</p>
|
---|
496 |
|
---|
497 | <p>Returns zero on success and non-zero on failure. This function always
|
---|
498 | succeeds.</p>
|
---|
499 |
|
---|
500 | <h3>
|
---|
501 | int ogg_sync_init(ogg_sync_state *oy);
|
---|
502 | </h3>
|
---|
503 |
|
---|
504 | <p>Initializes the sync buffer <tt>oy</tt> for use.</p>
|
---|
505 |
|
---|
506 | <p>Returns zero on success and non-zero on failure. This function always
|
---|
507 | succeeds.</p>
|
---|
508 |
|
---|
509 | <h3>
|
---|
510 | int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
|
---|
511 | </h3>
|
---|
512 |
|
---|
513 | <p>Reads complete, framed, verified Ogg pages from the sync buffer,
|
---|
514 | placing the page data in <tt>og</tt>.</p>
|
---|
515 |
|
---|
516 | <p>Returns zero when there's no complete pages buffered for
|
---|
517 | retrieval. Returns negative when a loss of sync or recapture occurred
|
---|
518 | (this is not necessarily an error; recapture would be required after
|
---|
519 | seeking, for example). Returns positive when a page is returned in
|
---|
520 | <tt>og</tt>. Note that the data in <tt>og</tt> points into the sync
|
---|
521 | buffer storage; the pointers are valid until the next call to
|
---|
522 | <tt>ogg_sync_buffer</tt>, <tt>ogg_sync_clear</tt>,
|
---|
523 | <tt>ogg_sync_destroy</tt> or <tt>ogg_sync_reset</tt>.</p>
|
---|
524 |
|
---|
525 | <h3>
|
---|
526 | int ogg_sync_reset(ogg_sync_state *oy);
|
---|
527 | </h3>
|
---|
528 |
|
---|
529 | <p><tt>ogg_sync_reset</tt> resets the sync state in <tt>oy</tt> to a
|
---|
530 | clean, empty state. This is useful, for example, when seeking to a
|
---|
531 | new location in a bitstream.</p>
|
---|
532 |
|
---|
533 | <p>Returns zero on success, nonzero on failure.</p>
|
---|
534 |
|
---|
535 | <h3>
|
---|
536 | int ogg_sync_wrote(ogg_sync_state *oy, long bytes);
|
---|
537 | </h3>
|
---|
538 |
|
---|
539 | <p>Used to inform the sync state as to how many bytes were actually
|
---|
540 | written into the exposed sync buffer. It must be equal to or less
|
---|
541 | than the size of the buffer requested.</p>
|
---|
542 |
|
---|
543 | <p>Returns zero on success and non-zero on failure; failure occurs only
|
---|
544 | when the number of bytes written were larger than the buffer.</p>
|
---|
545 |
|
---|
546 | <div id="copyright">
|
---|
547 | The Xiph Fish Logo is a
|
---|
548 | trademark (™) of Xiph.Org.<br/>
|
---|
549 |
|
---|
550 | These pages © 1994 - 2005 Xiph.Org. All rights reserved.
|
---|
551 | </div>
|
---|
552 |
|
---|
553 | </body>
|
---|
554 | </html>
|
---|