diff options
Diffstat (limited to 'vorbis/doc/helper.html')
-rw-r--r-- | vorbis/doc/helper.html | 239 |
1 files changed, 0 insertions, 239 deletions
diff --git a/vorbis/doc/helper.html b/vorbis/doc/helper.html deleted file mode 100644 index a16df28..0000000 --- a/vorbis/doc/helper.html +++ /dev/null @@ -1,239 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html> -<head> - -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15"/> -<title>Ogg Vorbis Documentation</title> - -<style type="text/css"> -body { - margin: 0 18px 0 18px; - padding-bottom: 30px; - font-family: Verdana, Arial, Helvetica, sans-serif; - color: #333333; - font-size: .8em; -} - -a { - color: #3366cc; -} - -img { - border: 0; -} - -#xiphlogo { - margin: 30px 0 16px 0; -} - -#content p { - line-height: 1.4; -} - -h1, h1 a, h2, h2 a, h3, h3 a { - font-weight: bold; - color: #ff9900; - margin: 1.3em 0 8px 0; -} - -h1 { - font-size: 1.3em; -} - -h2 { - font-size: 1.2em; -} - -h3 { - font-size: 1.1em; -} - -li { - line-height: 1.4; -} - -#copyright { - margin-top: 30px; - line-height: 1.5em; - text-align: center; - font-size: .8em; - color: #888888; - clear: both; -} -</style> - -</head> - -<body> - -<div id="xiphlogo"> - <a href="http://www.xiph.org/"><img src="fish_xiph_org.png" alt="Fish Logo and Xiph.Org"/></a> -</div> - -<h1>Ogg Vorbis I format specification: helper equations</h1> - -<h1>Overview</h1> - -<p>The equations below are used in multiple places by the Vorbis codec -specification. Rather than cluttering up the main specification -documents, they are defined here and linked in the main documents -where appropriate.</p> - -<h2><a name="log">ilog</a></h2> - -<p>The "ilog(x)" function returns the position number (1 through n) of the -highest set bit in the two's complement integer value -<tt>[x]</tt>. Values of <tt>[x]</tt> less than zero are defined to return zero.</p> - -<pre> - 1) [return_value] = 0; - 2) if ( [x] is greater than zero ){ - - 3) increment [return_value]; - 4) logical shift [x] one bit to the right, padding the MSb with zero - 5) repeat at step 2) - - } - - 6) done -</pre> - -<p>Examples:</p> - -<ul> -<li>ilog(0) = 0;</li> -<li>ilog(1) = 1;</li> -<li>ilog(2) = 2;</li> -<li>ilog(3) = 2;</li> -<li>ilog(4) = 3;</li> -<li>ilog(7) = 3;</li> -<li>ilog(negative number) = 0;</li> -</ul> - -<h2><a name="float32_unpack">float32_unpack</a></h2> - -<p>"float32_unpack(x)" is intended to translate the packed binary -representation of a Vorbis codebook float value into the -representation used by the decoder for floating point numbers. For -purposes of this example, we will unpack a Vorbis float32 into a -host-native floating point number.</p> - -<pre> - 1) [mantissa] = [x] bitwise AND 0x1fffff (unsigned result) - 2) [sign] = [x] bitwise AND 0x80000000 (unsigned result) - 3) [exponent] = ( [x] bitwise AND 0x7fe00000) shifted right 21 bits (unsigned result) - 4) if ( [sign] is nonzero ) then negate [mantissa] - 5) return [mantissa] * ( 2 ^ ( [exponent] - 788 ) ) -</pre> - -<h2><a name="lookup1_values">lookup1_values</a></h2> - -<p>"lookup1_values(codebook_entries,codebook_dimensions)" is used to -compute the correct length of the value index for a codebook VQ lookup -table of lookup type 1. The values on this list are permuted to -construct the VQ vector lookup table of size -<tt>[codebook_entries]</tt>.</p> - -<p>The return value for this function is defined to be 'the greatest -integer value for which <tt>[return_value] to the power of -[codebook_dimensions] is less than or equal to -[codebook_entries]</tt>'.</p> - -<h2><a name="low_neighbor">low_neighbor</a></h2> - -<p>"low_neighbor(v,x)" finds the position <i>n</i> in vector [v] of -the greatest value scalar element for which <i>n</i> is less than -<tt>[x]</tt> and <tt>vector [v] element <i>n</i> is less -than vector [v] element [x]</tt>.</p> - -<h2><a name="high_neighbor">high_neighbor</a></h2> - -<p>"high_neighbor(v,x)" finds the position <i>n</i> in vector [v] of -the lowest value scalar element for which <i>n</i> is less than -<tt>[x]</tt> and <tt>vector [v] element <i>n</i> is greater -than vector [v] element [x]</tt>.</p> - -<h2><a name="render_point">render_point</a></h2> - -<p>"render_point(x0,y0,x1,y1,X)" is used to find the Y value at point X -along the line specified by x0, x1, y0 and y1. This function uses an -integer algorithm to solve for the point directly without calculating -intervening values along the line.</p> - -<pre> - 1) [dy] = [y1] - [y0] - 2) [adx] = [x1] - [x0] - 3) [ady] = absolute value of [dy] - 4) [err] = [ady] * ([X] - [x0]) - 5) [off] = [err] / [adx] using integer division - 6) if ( [dy] is less than zero ) { - - 7) [Y] = [y0] - [off] - - } else { - - 8) [Y] = [y0] + [off] - - } - - 9) done -</pre> - -<h2><a name="render_line">render_line</a></h2> - -<p>Floor decode type one uses the integer line drawing algorithm of -"render_line(x0, y0, x1, y1, v)" to construct an integer floor -curve for contiguous piecewise line segments. Note that it has not -been relevant elsewhere, but here we must define integer division as -rounding division of both positive and negative numbers toward zero.</p> - -<pre> - 1) [dy] = [y1] - [y0] - 2) [adx] = [x1] - [x0] - 3) [ady] = absolute value of [dy] - 4) [base] = [dy] / [adx] using integer division - 5) [x] = [x0] - 6) [y] = [y0] - 7) [err] = 0 - - 8) if ( [dy] is less than 0 ) { - - 9) [sy] = [base] - 1 - - } else { - - 10) [sy] = [base] + 1 - - } - - 11) [ady] = [ady] - (absolute value of [base]) * [adx] - 12) vector [v] element [x] = [y] - - 13) iterate [x] over the range [x0]+1 ... [x1]-1 { - - 14) [err] = [err] + [ady]; - 15) if ( [err] >= [adx] ) { - - 15) [err] = [err] - [adx] - 16) [y] = [y] + [sy] - - } else { - - 17) [y] = [y] + [base] - - } - - 18) vector [v] element [x] = [y] - - } -</pre> - -<div id="copyright"> - The Xiph Fish Logo is a - trademark (™) of Xiph.Org.<br/> - - These pages © 1994 - 2005 Xiph.Org. All rights reserved. -</div> - -</body> -</html> |