<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.hoenzb
        {mso-style-name:hoenzb;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 3.0cm 70.85pt 3.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=PT-BR link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>                </span><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The Ogg-Speex test file I used is CBR.  I am sure of that by running oggz-dump on the file and confirming that all audio packets have 38 bytes; that means (for narrowband) a constant 15 Kbps.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>                I wrote a very basic test program in Visual Studio 2010 that demonstrates the strange behaviour I mentioned. <o:p></o:p></span></p><p class=MsoNormal style='text-indent:35.4pt'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The output shows that the audio file has 8 pages, 6 of them have audio packets;  the output show the page sequential number, time offset and byte offset of each page.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>                Then after reading all of the file, for three times I request a time seek. It can be seen in the output that the result of the seek is never what was requested and is always the time offset of the end of some near page but never the page that contains the time point requested in seek.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>                What could be going wrong ???<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks in advance,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Julio.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>PROGRAM:<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:green;mso-fareast-language:EN-US'>// TestaOgg.cpp : Defines the entry point for the console application.</span><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:blue;mso-fareast-language:EN-US'>#include</span><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'> <span style='color:#A31515'>&quot;stdafx.h&quot;</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:blue;mso-fareast-language:EN-US'>#include</span><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'> <span style='color:#A31515'>&lt;exception&gt;</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:blue;mso-fareast-language:EN-US'>#include</span><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'> <span style='color:#A31515'>&lt;oggz/oggz.h&gt;</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:blue;mso-fareast-language:EN-US'>int</span><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'> myReadPacketCallback (OGGZ* oggz, oggz_packet* packet, <span style='color:blue'>long</span> serialno, <span style='color:blue'>void</span>* user_data);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:blue;mso-fareast-language:EN-US'>int</span><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'> myReadPageCallback (OGGZ* oggz, <span style='color:blue'>const</span> ogg_page* og, <span style='color:blue'>long</span> serialno, <span style='color:blue'>void</span>* user_data);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:blue;mso-fareast-language:EN-US'>int</span><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'> _tmain(<span style='color:blue'>int</span> argc, _TCHAR* argv[])<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  OGGZ* pOGGZ;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  <span style='color:blue'>int</span> ret;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  oggz_off_t ofs;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  pOGGZ = oggz_open(<span style='color:#A31515'>&quot;MyAudio.spx&quot;</span>, OGGZ_READ | OGGZ_AUTO);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  ret   = oggz_set_read_callback (pOGGZ, -1, myReadPacketCallback, (<span style='color:blue'>void</span>*)0);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  ret   = oggz_set_read_page     (pOGGZ, -1, myReadPageCallback, (<span style='color:blue'>void</span>*)0);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  ofs   = oggz_seek(pOGGZ, 0, SEEK_END);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  printf(<span style='color:#A31515'>&quot;\n Audio file size in bytes = %8lld&quot;</span>, ofs);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  ofs   = oggz_seek(pOGGZ, 0, SEEK_SET);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  ret   = oggz_read(pOGGZ, 28779);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  <span style='color:blue'>for</span>(<span style='color:blue'>int</span> i=0; i&lt;3; i++)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>    ogg_int64_t seektime  = (i==0 ? 5000  :  i==1 ? 10000  :  13000);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>    ogg_int64_t rseek     = oggz_seek_units(pOGGZ, seektime, SEEK_SET);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>    ogg_int64_t tellseek  = oggz_tell_units(pOGGZ);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>    printf(<span style='color:#A31515'>&quot;\n Requested seek time = %8lld,  return of time seek function = %8lld,  return of time tell function = %8lld&quot;</span>, seektime, rseek, tellseek);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  oggz_close(pOGGZ);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  <span style='color:blue'>return</span> 0;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>}<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:green;mso-fareast-language:EN-US'>//-----------------------------------------------------------------------------</span><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:blue;mso-fareast-language:EN-US'>int</span><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'> myReadPageCallback (OGGZ* oggz, <span style='color:blue'>const</span> ogg_page* og, <span style='color:blue'>long</span> serialno, <span style='color:blue'>void</span>* user_data)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  ogg_int64_t bitstSerialNumber = og-&gt;header[14] + 256 * (og-&gt;header[15] + 256 * (og-&gt;header[16] + 256 * og-&gt;header[17]));<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  ogg_int64_t pageSeqNumber     = og-&gt;header[18] + 256 * (og-&gt;header[19] + 256 * (og-&gt;header[20] + 256 * og-&gt;header[21]));<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  ogg_int64_t headerGranulePos  = og-&gt;header[6]  + 256 * (og-&gt;header[7]  + 256 * (og-&gt;header[8]  + 256 * (og-&gt;header[9] + <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>                                  256 * (og-&gt;header[10]  + 256 * (og-&gt;header[11]  + 256 * (og-&gt;header[12] ))))));<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  ogg_int64_t currTimeOffset  = oggz_tell_units(oggz);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  ogg_int64_t currByteOffset  = oggz_tell(oggz);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  printf(<span style='color:#A31515'>&quot;\n Page seq.number = %8lld,  Time offset = %8lld,  Byte offset = %8lld,  Bitstream serial no. = %8lld,  GranulePos  = %8lld&quot;</span>, <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>          pageSeqNumber, currTimeOffset, currByteOffset, bitstSerialNumber, headerGranulePos);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  <span style='color:blue'>return</span> 0;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>}<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:green;mso-fareast-language:EN-US'>//-----------------------------------------------------------------------------</span><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:blue;mso-fareast-language:EN-US'>int</span><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'> myReadPacketCallback (OGGZ* oggz, oggz_packet* packet, <span style='color:blue'>long</span> serialno, <span style='color:blue'>void</span>* user_data)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  <span style='color:green'>//nothing useful done here</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>  <span style='color:blue'>return</span> 0;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:8.0pt;font-family:"Courier New";mso-fareast-language:EN-US'>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>OUTPUT:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Audio file size in bytes =    27393<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Page seq.number =        0,  Time offset =        0,  Byte offset =        0,  Bitstream serial no. =    16850,  GranulePos  =        0<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Page seq.number =        1,  Time offset =        0,  Byte offset =      108,  Bitstream serial no. =    16850,  GranulePos  =        0<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Page seq.number =        2,  Time offset =     2155,  Byte offset =      177,  Bitstream serial no. =    16850,  GranulePos  =    17240<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Page seq.number =        3,  Time offset =     4315,  Byte offset =     4416,  Bitstream serial no. =    16850,  GranulePos  =    34520<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Page seq.number =        4,  Time offset =     6475,  Byte offset =     8655,  Bitstream serial no. =    16850,  GranulePos  =    51800<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Page seq.number =        5,  Time offset =     8635,  Byte offset =    12894,  Bitstream serial no. =    16850,  GranulePos  =    69080<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Page seq.number =        6,  Time offset =    10795,  Byte offset =    17133,  Bitstream serial no. =    16850,  GranulePos  =    86360<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Page seq.number =        7,  Time offset =    12955,  Byte offset =    21372,  Bitstream serial no. =    16850,  GranulePos  =   103640<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Page seq.number =        8,  Time offset =    13840,  Byte offset =    25611,  Bitstream serial no. =    16850,  GranulePos  =   110720<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Requested seek time =     5000,  return of time seek function =     2155,  return of time tell function =     2155<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Requested seek time =    10000,  return of time seek function =     6475,  return of time tell function =     6475<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:8.0pt;font-family:"Courier New";color:#1F497D'> Requested seek time =    13000,  return of time seek function =       -1,  return of time tell function =    10795<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> Milutin Jovanović [mailto:jovanovic.milutin@gmail.com] <br><b>Sent:</b> quinta-feira, 17 de maio de 2012 11:04<br><b>To:</b> jcabezas@inovax.com.br<br><b>Cc:</b> ogg-dev@xiph.org<br><b>Subject:</b> Re: [ogg-dev] Problems seeking with liboggz<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='margin-bottom:12.0pt'><span lang=EN-US><br>I'm no expert, but it sounds to me like normal variable bitrate stream behaviour. With variable bit rate, you cannot calculate exact byte address from time reference. So, in general you estimate and get close to time reference requested. Whenever you need precise pocision, you should use constant bit rate or a byte offset (instead of time/milliseconds).<br><br>FYI, in my apps, I use time to show progres to the user, but when I save a bookmark or pause, I record exact sample offset, and restart from there. So, time for UI, samples/bytes for hidden/underlying code.<br><br clear=all>Miki.<br><br><br><o:p></o:p></span></p><div><p class=MsoNormal><span lang=EN-US>On 16 May 2012 18:52, Julio Cesar Esteves Cabezas &lt;</span><a href="mailto:jcabezas@inovax.com.br" target="_blank"><span lang=EN-US>jcabezas@inovax.com.br</span></a><span lang=EN-US>&gt; wrote:<o:p></o:p></span></p><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>Hi,</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp; I intend to use Ogg+Speex for voice recording/playback in a VoIP app.</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp; I am experimenting with liboggz to get acquainted with its API. </span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;&nbsp;As test files I am using some Ogg-Speex files converted from WAV files with speexenc.exe.</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp; </span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;&nbsp;I wrote a little testing app in Visual Studio 2010 under Windows 7. </span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;&nbsp;I defined OggzReadPage and OggzReadPacket callbacks with oggz_set_read_page() and oggz_set_read_callback().</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp; </span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;&nbsp;For the moment I am mainly having troubles with seeking. Maybe I am not using correctly liboggz API.</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp; What happens:</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp; - I open a Ogg Speex-encoded audio file with oggz_open(&quot;MyFile.spx&quot;, OGGZ_READ | OGGZ_AUTO); </span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;&nbsp;- I have a loop of invocations of oggz_read() that triggers in the due time the page and packet callbacks defined by me.</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp; - But when I randomly do seeking by means of&nbsp; </span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ogg_int64_t rseek = oggz_seek_units(pOGGZ, posMsecs, SEEK_SET);</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;&nbsp;&nbsp; I get erratic results: </span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Many times rseek does not match posMsecs.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The first page callback after the seek invocation refers to a page that is sometimes previous and sometimes after the page that contains posMsecs.</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp; What rules are to be followed for seeking with liboggz and what exact results can be expected from it ?</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>&nbsp;</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas'>Thanks in advance</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-family:Consolas;color:#888888'>Julio Cabezas</span><span lang=EN-US style='color:#888888'><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='color:#888888'>&nbsp;<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='color:#888888'>&nbsp;<o:p></o:p></span></p></div></div><p class=MsoNormal style='margin-bottom:12.0pt'><span lang=EN-US><br>_______________________________________________<br>ogg-dev mailing list<br></span><a href="mailto:ogg-dev@xiph.org"><span lang=EN-US>ogg-dev@xiph.org</span></a><span lang=EN-US><br></span><a href="http://lists.xiph.org/mailman/listinfo/ogg-dev" target="_blank"><span lang=EN-US>http://lists.xiph.org/mailman/listinfo/ogg-dev</span></a><span lang=EN-US><o:p></o:p></span></p></div><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p></div></body></html>