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"> 9body { 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 17a { 18 color: #3366cc; 19} 20 21img { 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 33h1, h1 a, h2, h2 a, h3, h3 a { 34 font-weight: bold; 35 color: #ff9900; 36 margin: 1.3em 0 8px 0; 37} 38 39h1 { 40 font-size: 1.3em; 41} 42 43h2 { 44 font-size: 1.2em; 45} 46 47h3 { 48 font-size: 1.1em; 49} 50 51li { 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="http://www.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 78implemented as a programmatic library. Libvorbis provides primitives 79to handle framing and manipulation of Ogg bitstreams (used by the 80Vorbis for streaming), a full analysis (encoding) interface as well as 81packet decoding and synthesis for playback.</p> 82 83<p>The libvorbis library does not provide any system interface; a 84full-featured demonstration player included with the library 85distribtion provides example code for a variety of system interfaces 86as 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 93steps:</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 106the pages, we have to find them first. The raw bitstream is first fed 107into an <tt>ogg_sync_state</tt> buffer using <tt>ogg_sync_buffer()</tt> 108and <tt>ogg_sync_wrote()</tt>. After each block we submit to the sync 109buffer, we should check to see if we can frame and extract a complete 110page or pages using <tt>ogg_sync_pageout()</tt>. Extra pages are 111buffered; allowing them to build up in the <tt>ogg_sync_state</tt> 112buffer will eventually exhaust memory.</p> 113 114<p>The Ogg pages returned from <tt>ogg_sync_pageout</tt> need not be 115decoded further to be used as landmarks in seeking; seeking can be 116either a rough process of simply jumping to approximately intuited 117portions of the bitstream, or it can be a precise bisection process 118that captures pages and inspects data position. When seeking, 119however, sequential multiplexing (chaining) must be accounted for; 120beginning play in a new logical bitstream requires initializing a 121synthesis engine with the headers from that bitstream. Vorbis 122bitstreams 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 127serial number to seperate logical bitstreams. Initialize logical 128bitstream buffers (<tt>og_stream_state</tt>) using 129<tt>ogg_stream_init()</tt>. Pages are submitted to the matching 130logical bitstream buffer using <tt>ogg_stream_pagein</tt>; the serial 131number of the page and the stream buffer must match, or the page will 132be rejected. A page submitted out of sequence will simply be noted, 133and in the course of outputting packets, the hole will be flagged 134(<tt>ogg_sync_pageout</tt> and <tt>ogg_stream_packetout</tt> will 135return a negative value at positions where they had to recapture the 136stream).</p> 137 138<h3>Extracting packets</h3> 139 140<p>After submitting page[s] to a logical stream, read available packets 141using <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 150transparent to the developer; the fields should be used directly.</p> 151 152<h3>ogg_packet</h3> 153 154<pre> 155typedef 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 185the 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 189page. <tt>e_o_s</tt>, however, must be set; this is the means by 190which 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 195to appropriate values. Note that granulepos will be >= 0 only in the 196case that the given packet actually represents that position (ie, only 197the last packet completed on any page will have a meaningful 198<tt>granulepos</tt>). Intervening frames will see <tt>granulepos</tt> set 199to -1.</p> 200 201<h3>ogg_page</h3> 202 203<pre> 204typedef 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 224not necessarily point into a single contiguous page vector, the page 225body must immediately follow the header in the bitstream.</p> 226 227<h2>Ogg Bitstream Manipulation Functions</h2> 228 229<h3> 230int ogg_page_bos(ogg_page *og); 231</h3> 232 233<p>Returns the 'beginning of stream' flag for the given Ogg page. The 234beginning of stream flag is set on the initial page of a logical 235bitstream.</p> 236 237<p>Zero indicates the flag is cleared (this is not the initial page of a 238logical bitstream). Nonzero indicates the flag is set (this is the 239initial page of a logical bitstream).</p> 240 241<h3> 242int ogg_page_continued(ogg_page *og); 243</h3> 244 245<p>Returns the 'packet continued' flag for the given Ogg page. The packet 246continued flag indicates whether or not the body data of this page 247begins with packet continued from a preceeding page.</p> 248 249<p>Zero (unset) indicates that the body data begins with a new packet. 250Nonzero (set) indicates that the first packet data on the page is a 251continuation from the preceeding page.</p> 252 253<h3> 254int 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 258flag 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 261bitstream. Nonzero (set) indicates that this is the last page of a 262logical bitstream and that no addiitonal pages belonging to this 263bitstream may follow.</p> 264 265<h3> 266size64 ogg_page_granulepos(ogg_page *og); 267</h3> 268 269<p>Returns the position of this page as an absolute position within the 270original uncompressed data. The position, as returned, is 'frames 271encoded to date up to and including the last whole packet on this 272page'. Partial packets begun on this page but continued to the 273following page are not included. If no packet ends on this page, the 274frame position value will be equal to the frame position value of the 275preceeding page. If none of the original uncompressed data is yet 276represented in the logical bitstream (for example, the first page of a 277bitstream consists only of a header packet; this packet encodes only 278metadata), the value shall be zero.</p> 279 280<p>The units of the framenumber are determined by media mapping. A 281vorbis audio bitstream, for example, defines one frame to be the 282channel values from a single sampling period (eg, a 16 bit stereo 283bitstream consists of two samples of two bytes for a total of four 284bytes, thus a frame would be four bytes). A video stream defines one 285frame to be a single frame of video.</p> 286 287<h3> 288int ogg_page_pageno(ogg_page *og); 289</h3> 290 291<p>Returns the sequential page number of the given Ogg page. The first 292page in a logical bitstream is numbered zero; following pages are 293numbered in increasing monotonic order.</p> 294 295<h3> 296int ogg_page_serialno(ogg_page *og); 297</h3> 298 299<p>Returns the serial number of the given Ogg page. The serial number is 300used as a handle to distinguish various logical bitstreams in a 301physical Ogg bitstresm. Every logical bitstream within a 302physical bitstream must use a unique (within the scope of the physical 303bitstream) serial number, which is stamped on all bitstream pages.</p> 304 305<h3> 306int ogg_page_version(ogg_page *og); 307</h3> 308 309<p>Returns the revision of the Ogg bitstream structure of the given page. 310Currently, the only permitted number is zero. Later revisions of the 311bitstream spec will increment this version should any changes be 312incompatable.</p> 313 314<h3> 315int ogg_stream_clear(ogg_stream_state *os); 316</h3> 317 318<p>Clears and deallocates the internal storage of the given Ogg stream. 319After clearing, the stream structure is not initialized for use; 320<tt>ogg_stream_init</tt> must be called to reinitialize for use. 321Use <tt>ogg_stream_reset</tt> to reset the stream state 322to 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 326or automatic storage. <tt>ogg_stream_destroy</tt>is a complimentary 327function that frees the pointer as well.</p> 328 329<p>Returns zero on success and non-zero on failure. This function always 330succeeds.</p> 331 332<h3> 333int ogg_stream_destroy(ogg_stream_state *os); 334</h3> 335 336<p>Clears and deallocates the internal storage of the given Ogg stream, 337then 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 341or automatic storage.</p> 342 343<p>Returns zero on success and non-zero on failure. This function always 344succeeds.</p> 345 346<h3> 347int 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 351stream. This call is used to initialize a stream for both encode and 352decode. The given serial number is the serial number that will be 353stamped on pages of the produced bitstream (during encode), or used as 354a check that pages match (during decode).</p> 355 356<p>Returns zero on success, nonzero on failure.</p> 357 358<h3> 359int 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 363bitstream. 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 366until 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> 372int 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 376bitstream. <tt>ogg_stream_packetout</tt> will only return complete 377packets for which checksumming indicates no corruption. The size and 378contents of the packet exactly match those given in the encoding 379process. </p> 380 381<p>Returns zero if the next packet is not ready to be read (not buffered 382or incomplete), positive if it returned a complete packet in 383<tt>op</tt> and negative if there is a gap, extra bytes or corruption 384at this position in the bitstream (essentially that the bitstream had 385to be recaptured). A negative value is not necessarily an error. It 386would be a common occurence when seeking, for example, which requires 387recapture of the bitstream at the position decoding continued.</p> 388 389<p>If the return value is positive, <tt>ogg_stream_packetout</tt> placed 390a packet in <tt>op</tt>. The data in <tt>op</tt> points to static 391storage 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 394pointers are not invalidated by more calls to 395<tt>ogg_stream_packetout</tt>.</p> 396 397<h3> 398int 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 402for decoding into raw Ogg packets. The given page must be framed, 403normally produced by <tt>ogg_sync_pageout</tt>, and from the logical 404bitstream associated with <tt>os</tt> (the serial numbers must match). 405The contents of the given page are copied; <tt>ogg_stream_pagein</tt> 406retains no pointers into <tt>og</tt> storage.</p> 407 408<p>Returns zero on success and non-zero on failure.</p> 409 410<h3> 411int 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 415returned 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 418nonzero when it has placed data for a complete page into 419<tt>og</tt>. Note that the storage returned in og points into internal 420storage; 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> 426int 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; 430this 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 433number. In addition, the next page produced during encoding will be 434marked as the 'initial' page of the logical bitstream.</p> 435 436<p>When used during decode, this simply clears the data buffer of any 437pending pages. Beginning and end of stream cues are read from the 438bitstream and are unaffected by reset.</p> 439 440<p>Returns zero on success and non-zero on failure. This function always 441succeeds.</p> 442 443<h3> 444char *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 448verification. <tt>ogg_sync_buffer</tt> handles stream capture and 449recapture, 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 453copies 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 455uses; this way, for example, <tt>read()</tt> can transfer data 456directly into the stream buffer without first needing to place it in 457temporary storage.</p> 458 459<p>Returns a pointer into <tt>oy</tt>'s internal bitstream sync buffer; 460the remaining space in the sync buffer is at least <tt>size</tt> 461bytes. 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 463were actually written. Use of <tt>ogg_sync_wrote</tt> after writing 464into the exposed buffer is mandantory.</p> 465 466<h3> 467int ogg_sync_clear(ogg_sync_state *oy); 468</h3> 469 470<p><tt>ogg_sync_clear</tt> 471clears and deallocates the internal storage of the given Ogg sync 472buffer. After clearing, the sync structure is not initialized for 473use; <tt>ogg_sync_init</tt> must be called to reinitialize for use. 474Use <tt>ogg_sync_reset</tt> to reset the sync state and buffer to a 475fresh, 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 479or automatic storage. <tt>ogg_sync_destroy</tt>is a complimentary 480function that frees the pointer as well.</p> 481 482<p>Returns zero on success and non-zero on failure. This function always 483succeeds.</p> 484 485<h3> 486int ogg_sync_destroy(ogg_sync_state *oy); 487</h3> 488 489<p>Clears and deallocates the internal storage of the given Ogg sync 490buffer, 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 495stream structures in static or automatic storage.</p> 496 497<p>Returns zero on success and non-zero on failure. This function always 498succeeds.</p> 499 500<h3> 501int 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 507succeeds.</p> 508 509<h3> 510int 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, 514placing the page data in <tt>og</tt>.</p> 515 516<p>Returns zero when there's no complete pages buffered for 517retrieval. Returns negative when a loss of sync or recapture occurred 518(this is not necessarily an error; recapture would be required after 519seeking, 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 521buffer 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> 526int 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 530clean, empty state. This is useful, for example, when seeking to a 531new location in a bitstream.</p> 532 533<p>Returns zero on success, nonzero on failure.</p> 534 535<h3> 536int 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 540written into the exposed sync buffer. It must be equal to or less 541than the size of the buffer requested.</p> 542 543<p>Returns zero on success and non-zero on failure; failure occurs only 544when 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> 555