1% -*- mode: latex; TeX-master: "Vorbis_I_spec"; -*- 2%!TEX root = Vorbis_I_spec.tex 3% $Id$ 4\section{Introduction and Description} \label{vorbis:spec:intro} 5 6\subsection{Overview} 7 8This document provides a high level description of the Vorbis codec's 9construction. A bit-by-bit specification appears beginning in 10\xref{vorbis:spec:codec}. 11The later sections assume a high-level 12understanding of the Vorbis decode process, which is 13provided here. 14 15\subsubsection{Application} 16Vorbis is a general purpose perceptual audio CODEC intended to allow 17maximum encoder flexibility, thus allowing it to scale competitively 18over an exceptionally wide range of bitrates. At the high 19quality/bitrate end of the scale (CD or DAT rate stereo, 16/24 bits) 20it is in the same league as MPEG-2 and MPC. Similarly, the 1.0 21encoder can encode high-quality CD and DAT rate stereo at below 48kbps 22without resampling to a lower rate. Vorbis is also intended for 23lower and higher sample rates (from 8kHz telephony to 192kHz digital 24masters) and a range of channel representations (monaural, 25polyphonic, stereo, quadraphonic, 5.1, ambisonic, or up to 255 26discrete channels). 27 28 29\subsubsection{Classification} 30Vorbis I is a forward-adaptive monolithic transform CODEC based on the 31Modified Discrete Cosine Transform. The codec is structured to allow 32addition of a hybrid wavelet filterbank in Vorbis II to offer better 33transient response and reproduction using a transform better suited to 34localized time events. 35 36 37\subsubsection{Assumptions} 38 39The Vorbis CODEC design assumes a complex, psychoacoustically-aware 40encoder and simple, low-complexity decoder. Vorbis decode is 41computationally simpler than mp3, although it does require more 42working memory as Vorbis has no static probability model; the vector 43codebooks used in the first stage of decoding from the bitstream are 44packed in their entirety into the Vorbis bitstream headers. In 45packed form, these codebooks occupy only a few kilobytes; the extent 46to which they are pre-decoded into a cache is the dominant factor in 47decoder memory usage. 48 49 50Vorbis provides none of its own framing, synchronization or protection 51against errors; it is solely a method of accepting input audio, 52dividing it into individual frames and compressing these frames into 53raw, unformatted 'packets'. The decoder then accepts these raw 54packets in sequence, decodes them, synthesizes audio frames from 55them, and reassembles the frames into a facsimile of the original 56audio stream. Vorbis is a free-form variable bit rate (VBR) codec and packets have no 57minimum size, maximum size, or fixed/expected size. Packets 58are designed that they may be truncated (or padded) and remain 59decodable; this is not to be considered an error condition and is used 60extensively in bitrate management in peeling. Both the transport 61mechanism and decoder must allow that a packet may be any size, or 62end before or after packet decode expects. 63 64Vorbis packets are thus intended to be used with a transport mechanism 65that provides free-form framing, sync, positioning and error correction 66in accordance with these design assumptions, such as Ogg (for file 67transport) or RTP (for network multicast). For purposes of a few 68examples in this document, we will assume that Vorbis is to be 69embedded in an Ogg stream specifically, although this is by no means a 70requirement or fundamental assumption in the Vorbis design. 71 72The specification for embedding Vorbis into 73an Ogg transport stream is in \xref{vorbis:over:ogg}. 74 75 76 77\subsubsection{Codec Setup and Probability Model} 78 79Vorbis' heritage is as a research CODEC and its current design 80reflects a desire to allow multiple decades of continuous encoder 81improvement before running out of room within the codec specification. 82For these reasons, configurable aspects of codec setup intentionally 83lean toward the extreme of forward adaptive. 84 85The single most controversial design decision in Vorbis (and the most 86unusual for a Vorbis developer to keep in mind) is that the entire 87probability model of the codec, the Huffman and VQ codebooks, is 88packed into the bitstream header along with extensive CODEC setup 89parameters (often several hundred fields). This makes it impossible, 90as it would be with MPEG audio layers, to embed a simple frame type 91flag in each audio packet, or begin decode at any frame in the stream 92without having previously fetched the codec setup header. 93 94 95\begin{note} 96Vorbis \emph{can} initiate decode at any arbitrary packet within a 97bitstream so long as the codec has been initialized/setup with the 98setup headers. 99\end{note} 100 101Thus, Vorbis headers are both required for decode to begin and 102relatively large as bitstream headers go. The header size is 103unbounded, although for streaming a rule-of-thumb of 4kB or less is 104recommended (and Xiph.Org's Vorbis encoder follows this suggestion). 105 106Our own design work indicates the primary liability of the 107required header is in mindshare; it is an unusual design and thus 108causes some amount of complaint among engineers as this runs against 109current design trends (and also points out limitations in some 110existing software/interface designs, such as Windows' ACM codec 111framework). However, we find that it does not fundamentally limit 112Vorbis' suitable application space. 113 114 115\subsubsection{Format Specification} 116The Vorbis format is well-defined by its decode specification; any 117encoder that produces packets that are correctly decoded by the 118reference Vorbis decoder described below may be considered a proper 119Vorbis encoder. A decoder must faithfully and completely implement 120the specification defined below (except where noted) to be considered 121a proper Vorbis decoder. 122 123\subsubsection{Hardware Profile} 124Although Vorbis decode is computationally simple, it may still run 125into specific limitations of an embedded design. For this reason, 126embedded designs are allowed to deviate in limited ways from the 127`full' decode specification yet still be certified compliant. These 128optional omissions are labelled in the spec where relevant. 129 130 131\subsection{Decoder Configuration} 132 133Decoder setup consists of configuration of multiple, self-contained 134component abstractions that perform specific functions in the decode 135pipeline. Each different component instance of a specific type is 136semantically interchangeable; decoder configuration consists both of 137internal component configuration, as well as arrangement of specific 138instances into a decode pipeline. Componentry arrangement is roughly 139as follows: 140 141\begin{center} 142\includegraphics[width=\textwidth]{components} 143\captionof{figure}{decoder pipeline configuration} 144\end{center} 145 146\subsubsection{Global Config} 147Global codec configuration consists of a few audio related fields 148(sample rate, channels), Vorbis version (always '0' in Vorbis I), 149bitrate hints, and the lists of component instances. All other 150configuration is in the context of specific components. 151 152\subsubsection{Mode} 153 154Each Vorbis frame is coded according to a master 'mode'. A bitstream 155may use one or many modes. 156 157The mode mechanism is used to encode a frame according to one of 158multiple possible methods with the intention of choosing a method best 159suited to that frame. Different modes are, e.g. how frame size 160is changed from frame to frame. The mode number of a frame serves as a 161top level configuration switch for all other specific aspects of frame 162decode. 163 164A 'mode' configuration consists of a frame size setting, window type 165(always 0, the Vorbis window, in Vorbis I), transform type (always 166type 0, the MDCT, in Vorbis I) and a mapping number. The mapping 167number specifies which mapping configuration instance to use for 168low-level packet decode and synthesis. 169 170 171\subsubsection{Mapping} 172 173A mapping contains a channel coupling description and a list of 174'submaps' that bundle sets of channel vectors together for grouped 175encoding and decoding. These submaps are not references to external 176components; the submap list is internal and specific to a mapping. 177 178A 'submap' is a configuration/grouping that applies to a subset of 179floor and residue vectors within a mapping. The submap functions as a 180last layer of indirection such that specific special floor or residue 181settings can be applied not only to all the vectors in a given mode, 182but also specific vectors in a specific mode. Each submap specifies 183the proper floor and residue instance number to use for decoding that 184submap's spectral floor and spectral residue vectors. 185 186As an example: 187 188Assume a Vorbis stream that contains six channels in the standard 5.1 189format. The sixth channel, as is normal in 5.1, is bass only. 190Therefore it would be wasteful to encode a full-spectrum version of it 191as with the other channels. The submapping mechanism can be used to 192apply a full range floor and residue encoding to channels 0 through 4, 193and a bass-only representation to the bass channel, thus saving space. 194In this example, channels 0-4 belong to submap 0 (which indicates use 195of a full-range floor) and channel 5 belongs to submap 1, which uses a 196bass-only representation. 197 198 199\subsubsection{Floor} 200 201Vorbis encodes a spectral 'floor' vector for each PCM channel. This 202vector is a low-resolution representation of the audio spectrum for 203the given channel in the current frame, generally used akin to a 204whitening filter. It is named a 'floor' because the Xiph.Org 205reference encoder has historically used it as a unit-baseline for 206spectral resolution. 207 208A floor encoding may be of two types. Floor 0 uses a packed LSP 209representation on a dB amplitude scale and Bark frequency scale. 210Floor 1 represents the curve as a piecewise linear interpolated 211representation on a dB amplitude scale and linear frequency scale. 212The two floors are semantically interchangeable in 213encoding/decoding. However, floor type 1 provides more stable 214inter-frame behavior, and so is the preferred choice in all 215coupled-stereo and high bitrate modes. Floor 1 is also considerably 216less expensive to decode than floor 0. 217 218Floor 0 is not to be considered deprecated, but it is of limited 219modern use. No known Vorbis encoder past Xiph.org's own beta 4 makes 220use of floor 0. 221 222The values coded/decoded by a floor are both compactly formatted and 223make use of entropy coding to save space. For this reason, a floor 224configuration generally refers to multiple codebooks in the codebook 225component list. Entropy coding is thus provided as an abstraction, 226and each floor instance may choose from any and all available 227codebooks when coding/decoding. 228 229 230\subsubsection{Residue} 231The spectral residue is the fine structure of the audio spectrum 232once the floor curve has been subtracted out. In simplest terms, it 233is coded in the bitstream using cascaded (multi-pass) vector 234quantization according to one of three specific packing/coding 235algorithms numbered 0 through 2. The packing algorithm details are 236configured by residue instance. As with the floor components, the 237final VQ/entropy encoding is provided by external codebook instances 238and each residue instance may choose from any and all available 239codebooks. 240 241\subsubsection{Codebooks} 242 243Codebooks are a self-contained abstraction that perform entropy 244decoding and, optionally, use the entropy-decoded integer value as an 245offset into an index of output value vectors, returning the indicated 246vector of values. 247 248The entropy coding in a Vorbis I codebook is provided by a standard 249Huffman binary tree representation. This tree is tightly packed using 250one of several methods, depending on whether codeword lengths are 251ordered or unordered, or the tree is sparse. 252 253The codebook vector index is similarly packed according to index 254characteristic. Most commonly, the vector index is encoded as a 255single list of values of possible values that are then permuted into 256a list of n-dimensional rows (lattice VQ). 257 258 259 260\subsection{High-level Decode Process} 261 262\subsubsection{Decode Setup} 263 264Before decoding can begin, a decoder must initialize using the 265bitstream headers matching the stream to be decoded. Vorbis uses 266three header packets; all are required, in-order, by this 267specification. Once set up, decode may begin at any audio packet 268belonging to the Vorbis stream. In Vorbis I, all packets after the 269three initial headers are audio packets. 270 271The header packets are, in order, the identification 272header, the comments header, and the setup header. 273 274\paragraph{Identification Header} 275The identification header identifies the bitstream as Vorbis, Vorbis 276version, and the simple audio characteristics of the stream such as 277sample rate and number of channels. 278 279\paragraph{Comment Header} 280The comment header includes user text comments (``tags'') and a vendor 281string for the application/library that produced the bitstream. The 282encoding and proper use of the comment header is described in \xref{vorbis:spec:comment}. 283 284\paragraph{Setup Header} 285The setup header includes extensive CODEC setup information as well as 286the complete VQ and Huffman codebooks needed for decode. 287 288 289\subsubsection{Decode Procedure} 290 291The decoding and synthesis procedure for all audio packets is 292fundamentally the same. 293\begin{enumerate} 294\item decode packet type flag 295\item decode mode number 296\item decode window shape (long windows only) 297\item decode floor 298\item decode residue into residue vectors 299\item inverse channel coupling of residue vectors 300\item generate floor curve from decoded floor data 301\item compute dot product of floor and residue, producing audio spectrum vector 302\item inverse monolithic transform of audio spectrum vector, always an MDCT in Vorbis I 303\item overlap/add left-hand output of transform with right-hand output of previous frame 304\item store right hand-data from transform of current frame for future lapping 305\item if not first frame, return results of overlap/add as audio result of current frame 306\end{enumerate} 307 308Note that clever rearrangement of the synthesis arithmetic is 309possible; as an example, one can take advantage of symmetries in the 310MDCT to store the right-hand transform data of a partial MDCT for a 31150\% inter-frame buffer space savings, and then complete the transform 312later before overlap/add with the next frame. This optimization 313produces entirely equivalent output and is naturally perfectly legal. 314The decoder must be \emph{entirely mathematically equivalent} to the 315specification, it need not be a literal semantic implementation. 316 317\paragraph{Packet type decode} 318 319Vorbis I uses four packet types. The first three packet types mark each 320of the three Vorbis headers described above. The fourth packet type 321marks an audio packet. All other packet types are reserved; packets 322marked with a reserved type should be ignored. 323 324Following the three header packets, all packets in a Vorbis I stream 325are audio. The first step of audio packet decode is to read and 326verify the packet type; \emph{a non-audio packet when audio is expected 327indicates stream corruption or a non-compliant stream. The decoder 328must ignore the packet and not attempt decoding it to 329audio}. 330 331 332 333 334\paragraph{Mode decode} 335Vorbis allows an encoder to set up multiple, numbered packet 'modes', 336as described earlier, all of which may be used in a given Vorbis 337stream. The mode is encoded as an integer used as a direct offset into 338the mode instance index. 339 340 341\paragraph{Window shape decode (long windows only)} \label{vorbis:spec:window} 342 343Vorbis frames may be one of two PCM sample sizes specified during 344codec setup. In Vorbis I, legal frame sizes are powers of two from 64 345to 8192 samples. Aside from coupling, Vorbis handles channels as 346independent vectors and these frame sizes are in samples per channel. 347 348Vorbis uses an overlapping transform, namely the MDCT, to blend one 349frame into the next, avoiding most inter-frame block boundary 350artifacts. The MDCT output of one frame is windowed according to MDCT 351requirements, overlapped 50\% with the output of the previous frame and 352added. The window shape assures seamless reconstruction. 353 354This is easy to visualize in the case of equal sized-windows: 355 356\begin{center} 357\includegraphics[width=\textwidth]{window1} 358\captionof{figure}{overlap of two equal-sized windows} 359\end{center} 360 361And slightly more complex in the case of overlapping unequal sized 362windows: 363 364\begin{center} 365\includegraphics[width=\textwidth]{window2} 366\captionof{figure}{overlap of a long and a short window} 367\end{center} 368 369In the unequal-sized window case, the window shape of the long window 370must be modified for seamless lapping as above. It is possible to 371correctly infer window shape to be applied to the current window from 372knowing the sizes of the current, previous and next window. It is 373legal for a decoder to use this method. However, in the case of a long 374window (short windows require no modification), Vorbis also codes two 375flag bits to specify pre- and post- window shape. Although not 376strictly necessary for function, this minor redundancy allows a packet 377to be fully decoded to the point of lapping entirely independently of 378any other packet, allowing easier abstraction of decode layers as well 379as allowing a greater level of easy parallelism in encode and 380decode. 381 382A description of valid window functions for use with an inverse MDCT 383can be found in \cite{Sporer/Brandenburg/Edler}. Vorbis windows 384all use the slope function 385\[ y = \sin(.5*\pi \, \sin^2((x+.5)/n*\pi)) . \] 386 387 388 389\paragraph{floor decode} 390Each floor is encoded/decoded in channel order, however each floor 391belongs to a 'submap' that specifies which floor configuration to 392use. All floors are decoded before residue decode begins. 393 394 395\paragraph{residue decode} 396 397Although the number of residue vectors equals the number of channels, 398channel coupling may mean that the raw residue vectors extracted 399during decode do not map directly to specific channels. When channel 400coupling is in use, some vectors will correspond to coupled magnitude 401or angle. The coupling relationships are described in the codec setup 402and may differ from frame to frame, due to different mode numbers. 403 404Vorbis codes residue vectors in groups by submap; the coding is done 405in submap order from submap 0 through n-1. This differs from floors 406which are coded using a configuration provided by submap number, but 407are coded individually in channel order. 408 409 410 411\paragraph{inverse channel coupling} 412 413A detailed discussion of stereo in the Vorbis codec can be found in 414the document \href{stereo.html}{Stereo Channel Coupling in the 415Vorbis CODEC}. Vorbis is not limited to only stereo coupling, but 416the stereo document also gives a good overview of the generic coupling 417mechanism. 418 419Vorbis coupling applies to pairs of residue vectors at a time; 420decoupling is done in-place a pair at a time in the order and using 421the vectors specified in the current mapping configuration. The 422decoupling operation is the same for all pairs, converting square 423polar representation (where one vector is magnitude and the second 424angle) back to Cartesian representation. 425 426After decoupling, in order, each pair of vectors on the coupling list, 427the resulting residue vectors represent the fine spectral detail 428of each output channel. 429 430 431 432\paragraph{generate floor curve} 433 434The decoder may choose to generate the floor curve at any appropriate 435time. It is reasonable to generate the output curve when the floor 436data is decoded from the raw packet, or it can be generated after 437inverse coupling and applied to the spectral residue directly, 438combining generation and the dot product into one step and eliminating 439some working space. 440 441Both floor 0 and floor 1 generate a linear-range, linear-domain output 442vector to be multiplied (dot product) by the linear-range, 443linear-domain spectral residue. 444 445 446 447\paragraph{compute floor/residue dot product} 448 449This step is straightforward; for each output channel, the decoder 450multiplies the floor curve and residue vectors element by element, 451producing the finished audio spectrum of each channel. 452 453% TODO/FIXME: The following two paragraphs have identical twins 454% in section 4 (under "dot product") 455One point is worth mentioning about this dot product; a common mistake 456in a fixed point implementation might be to assume that a 32 bit 457fixed-point representation for floor and residue and direct 458multiplication of the vectors is sufficient for acceptable spectral 459depth in all cases because it happens to mostly work with the current 460Xiph.Org reference encoder. 461 462However, floor vector values can span \~{}140dB (\~{}24 bits unsigned), and 463the audio spectrum vector should represent a minimum of 120dB (\~{}21 464bits with sign), even when output is to a 16 bit PCM device. For the 465residue vector to represent full scale if the floor is nailed to 466$-140$dB, it must be able to span 0 to $+140$dB. For the residue vector 467to reach full scale if the floor is nailed at 0dB, it must be able to 468represent $-140$dB to $+0$dB. Thus, in order to handle full range 469dynamics, a residue vector may span $-140$dB to $+140$dB entirely within 470spec. A 280dB range is approximately 48 bits with sign; thus the 471residue vector must be able to represent a 48 bit range and the dot 472product must be able to handle an effective 48 bit times 24 bit 473multiplication. This range may be achieved using large (64 bit or 474larger) integers, or implementing a movable binary point 475representation. 476 477 478 479\paragraph{inverse monolithic transform (MDCT)} 480 481The audio spectrum is converted back into time domain PCM audio via an 482inverse Modified Discrete Cosine Transform (MDCT). A detailed 483description of the MDCT is available in \cite{Sporer/Brandenburg/Edler}. 484 485Note that the PCM produced directly from the MDCT is not yet finished 486audio; it must be lapped with surrounding frames using an appropriate 487window (such as the Vorbis window) before the MDCT can be considered 488orthogonal. 489 490 491 492\paragraph{overlap/add data} 493Windowed MDCT output is overlapped and added with the right hand data 494of the previous window such that the 3/4 point of the previous window 495is aligned with the 1/4 point of the current window (as illustrated in 496the window overlap diagram). At this point, the audio data between the 497center of the previous frame and the center of the current frame is 498now finished and ready to be returned. 499 500 501\paragraph{cache right hand data} 502The decoder must cache the right hand portion of the current frame to 503be lapped with the left hand portion of the next frame. 504 505 506 507\paragraph{return finished audio data} 508 509The overlapped portion produced from overlapping the previous and 510current frame data is finished data to be returned by the decoder. 511This data spans from the center of the previous window to the center 512of the current window. In the case of same-sized windows, the amount 513of data to return is one-half block consisting of and only of the 514overlapped portions. When overlapping a short and long window, much of 515the returned range is not actually overlap. This does not damage 516transform orthogonality. Pay attention however to returning the 517correct data range; the amount of data to be returned is: 518 519\begin{Verbatim}[commandchars=\\\{\}] 520window_blocksize(previous_window)/4+window_blocksize(current_window)/4 521\end{Verbatim} 522 523from the center of the previous window to the center of the current 524window. 525 526Data is not returned from the first frame; it must be used to 'prime' 527the decode engine. The encoder accounts for this priming when 528calculating PCM offsets; after the first frame, the proper PCM output 529offset is '0' (as no data has been returned yet). 530