<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
I've been trying to piece my way through the encoder_example.c program
to better understand how to encode files as ogg/vorbis.&nbsp; I'm stuck on
two sections of the code.<br>
<br>
This is the first<br>
<br>
<font face="Courier New, Courier, monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* uninterleave
samples */<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0;i&lt;bytes/4;i++){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer[0][i]=((readbuffer[i*4+1]&lt;&lt;8)|<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0x00ff&amp;(int)readbuffer[i*4]))/32768.f;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer[1][i]=((readbuffer[i*4+3]&lt;&lt;8)|<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0x00ff&amp;(int)readbuffer[i*4+2]))/32768.f;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
</font><br>
<br>
This is the second.<br>
<br>
<font face="Courier New, Courier, monospace">&nbsp;&nbsp;&nbsp; /* vorbis does some
data preanalysis, then divvies up blocks for<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; more involved (potentially parallel) processing.&nbsp; Get a single<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; block for encoding now */<br>
&nbsp;&nbsp;&nbsp; while(vorbis_analysis_blockout(&amp;vd,&amp;vb)==1){<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* analysis, assume we want to use bitrate management */<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vorbis_analysis(&amp;vb,NULL);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vorbis_bitrate_addblock(&amp;vb);<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(vorbis_bitrate_flushpacket(&amp;vd,&amp;op)){<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* weld the packet into the bitstream */<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ogg_stream_packetin(&amp;os,&amp;op);<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* write out pages (if any) */<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(!eos){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result=ogg_stream_pageout(&amp;os,&amp;og);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(result==0)break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fwrite(og.header,1,og.header_len,stdout);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fwrite(og.body,1,og.body_len,stdout);<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* this could be set above, but for illustrative purposes, I
do<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; it here (to show that vorbis does know where the stream
ends) */<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(ogg_page_eos(&amp;og))eos=1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
</font><br>
<br>
Can anyone elaborate on what is happening in these two sections of
code?&nbsp; Also if anyone has more / better examples for libvorbis please
let me know.<br>
<br>
Thanks in advance.<br>
<br>
Dan Mikusa<br>
<a class="moz-txt-link-abbreviated" href="mailto:dan@trz.cc">dan@trz.cc</a><br>
<br>
</body>
</html>