<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:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="City"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="place"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="PersonName"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
_filtered #yiv2438338505 {margin:1.0in 1.25in 1.0in 1.25in;}

 /* Font Definitions */
 @font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;}
p.yiv2438338505msonormal, li.yiv2438338505msonormal, div.yiv2438338505msonormal
        {mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman";}
p.yiv2438338505msonormal1, li.yiv2438338505msonormal1, div.yiv2438338505msonormal1
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
p.yiv2438338505msonormal2, li.yiv2438338505msonormal2, div.yiv2438338505msonormal2
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
p.yiv2438338505msonormal3, li.yiv2438338505msonormal3, div.yiv2438338505msonormal3
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
p.yiv2438338505msonormal4, li.yiv2438338505msonormal4, div.yiv2438338505msonormal4
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
p.yiv2438338505msonormal5, li.yiv2438338505msonormal5, div.yiv2438338505msonormal5
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
span.yiv2438338505msohyperlink1
        {color:blue;
        text-decoration:underline;}
p.yiv2438338505msonormal6, li.yiv2438338505msonormal6, div.yiv2438338505msonormal6
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
span.yiv2438338505msohyperlink2
        {color:blue;
        text-decoration:underline;}
p.yiv2438338505msonormal7, li.yiv2438338505msonormal7, div.yiv2438338505msonormal7
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
span.yiv2438338505msohyperlink3
        {color:blue;
        text-decoration:underline;}
span.yiv2438338505msohyperlinkfollowed1
        {color:purple;
        text-decoration:underline;}
p.yiv2438338505msonormal8, li.yiv2438338505msonormal8, div.yiv2438338505msonormal8
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
span.yiv2438338505msohyperlink4
        {color:blue;
        text-decoration:underline;}
span.yiv2438338505msohyperlinkfollowed2
        {color:purple;
        text-decoration:underline;}
span.yiv2438338505emailstyle171
        {font-family:Arial;
        color:windowtext;}
span.EmailStyle36
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</style>

</head>

<body lang=EN-US link=blue vlink=blue>

<div class=Section1>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Right, but do I start from the beginning
of the page?&nbsp; Do I start from the end of the previous page?&nbsp; Is there
some way to reliably start at a packet immediately before the one I want (and
to know which sample I'm starting at once I get sound out.)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Here's my goal, setup, and the problems
I'm having.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>I want to grab the audio and video out of
a file in bite-sized chunks I'm calling &quot;frames.&quot;&nbsp; If a file has
video, one audio frame should be the audio that goes with one video
frame.&nbsp; Otherwise, each audio frame is 1/25th of a second.&nbsp; I want to
be able to seek into the middle of a file and return the Nth frame of audio and
video.&nbsp; Specifically, If I grab the audio frames in a random order, I want
to be able to assemble them into the correct and complete audio, so the start
of each frame has to be exact.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>When opening the file, I read though the
packets, getting their block sizes, translating that to samples (including the
fact that I don't get any samples on the first packet, and that after that the
samples returned seem to be the average of the packet size and the packet
before it) and creating an index point every 1/10th of a second.&nbsp; The
index contains the file position of the page the packet is on, the number of
the packet on the page that contains the indexed sample, and the sample count
up to the beginning of the packet.&nbsp; When I want to seek to a frame, I get
the index point before it, reset the decoder, and read off packets, using the
block size to calculate my way forward until I'm at packet that begins the
frame.&nbsp; I store a few packets at a time so that I can decode the two
packets prior to the frame before beginning the frame.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>In practice, though, sometimes I'll get
&quot;OV not audio&quot; when I put in an audio packet that is in the middle of
an audio page, or I'll put in a packet that was originally sized as 2048 floats
and I'll get back information that its 256 floats.&nbsp; This throws off my calculations
and I'll end up in the middle of a frame instead of at the beginning.&nbsp; I'm
willing to believe that there's a bug in the way I'm grabbing packets, except
for the fact that when I decode straight through, every thing works.&nbsp;
Also, my code never misidentifies packets after I start decoding, only when I'm
reading and bypassing.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Other times, the &quot;frame&quot; I get
out after seeking bears no relationship to the one I get when I make a
straight-through decode.&nbsp; I've compared files created by reading straight
through an ogg file vs. seeking every frame, and compared them with a hex
editor.&nbsp; In some places, the pcm samples match perfectly, and are in the
same position.&nbsp; In other places, the pcm samples match, but are offset,
and in other places the pcm samples from the seek file simply don't match those
from the read file.&nbsp; I've spent a couple of weeks now on this specific
part of the problem, and would like some official, &quot;here's how you do
it.&quot;&nbsp; Quite frankly, I'm surprised that this aspect of vorbis
decoding (seeking to a specific point in the file) is not explained anywhere in
the xiph documentation.&nbsp; Maybe I missed it?<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Again, some help would be appreciated.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Thanks, <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><st1:City w:st="on"><st1:place w:st="on"><font size=2
  color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
  color:navy'>Madison</span></font></st1:place></st1:City><font size=2
color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'><o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<div>

<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>

<hr size=2 width="100%" align=center tabindex=-1>

</span></font></div>

<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'> Sergei Steshenko
[mailto:sergstesh@yahoo.com] <br>
<b><span style='font-weight:bold'>Sent:</span></b> Monday, May 18, 2015 8:57 PM<br>
<b><span style='font-weight:bold'>To:</span></b> Madison Link; <st1:PersonName
w:st="on">vorbis@xiph.org</st1:PersonName><br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [Vorbis] How do I
seek to seek to specific samples using libvorbis?</span></font><o:p></o:p></p>

</div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<div>

<div id="yui_3_16_0_1_1432002768159_3394">

<p class=MsoNormal style='background:white'><font size=3 color=black
face=Helvetica><span style='font-size:12.0pt;font-family:Helvetica;color:black'>I
am no Vorbis developer, and I have never looked into the details of Ogg-Vorbis
implementation, but since Ogg-Vorbis is a lossy format, there is no one to one
correspondence of PCM samples and bytes in the stream. Ogg-Vorbis is also a
variable bitrate format.<br>
<br>
<o:p></o:p></span></font></p>

</div>

</span>

<div id="yui_3_16_0_1_1432002768159_3458">

<p class=MsoNormal style='background:white'><font size=3 color=black
face=Helvetica><span style='font-size:12.0pt;font-family:Helvetica;color:black'><br>
<br>
<o:p></o:p></span></font></p>

</div>

<span id="yui_3_16_0_1_1432002768159_3430"></span><span
id="yui_3_16_0_1_1432002768159_3430">

<div id="yui_3_16_0_1_1432002768159_3512">

<p class=MsoNormal style='background:white'><font size=3 color=black
face=Helvetica><span style='font-size:12.0pt;font-family:Helvetica;color:black'>I
mean that first the stream has to be reconstituted into uncompressed PCM
samples, and only then you can get to the desired sample.</span><o:p></o:p></span></font></p>

</div>

<div id="yui_3_16_0_1_1432002768159_3541">

<p class=MsoNormal style='background:white'><font size=3 color=black
face=Helvetica><span style='font-size:12.0pt;font-family:Helvetica;color:black'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div id="yui_3_16_0_1_1432002768159_3542">

<p class=MsoNormal style='background:white'><font size=3 color=black
face=Helvetica><span style='font-size:12.0pt;font-family:Helvetica;color:black'>Regards,<o:p></o:p></span></font></p>

</div>

<div id="yui_3_16_0_1_1432002768159_3543">

<p class=MsoNormal style='background:white'><font size=3 color=black
face=Helvetica><span style='font-size:12.0pt;font-family:Helvetica;color:black'>&nbsp;
Sergei.<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal style='background:white'><font size=3 color=black
face=Helvetica><span style='font-size:12.0pt;font-family:Helvetica;color:black'><o:p>&nbsp;</o:p></span></font></p>

</div>

<blockquote style='border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;
margin-left:3.75pt;margin-top:3.75pt;margin-bottom:5.0pt'
id="yui_3_16_0_1_1432002768159_3398">

<div id="yui_3_16_0_1_1432002768159_3397">

<div id="yui_3_16_0_1_1432002768159_3396">

<div id="yui_3_16_0_1_1432002768159_3395">

<div class=MsoNormal align=center style='text-align:center;background:white'><font
size=3 color=black face=Helvetica><span style='font-size:12.0pt;font-family:
Helvetica;color:black'>

<hr size=1 width="100%" align=center id="yui_3_16_0_1_1432002768159_3399">

</span></font></div>

<p class=MsoNormal style='background:white'><b><font size=2 color=black
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:black;
font-weight:bold'>From:</span></font></b><font size=2 color=black face=Arial><span
style='font-size:10.0pt;font-family:Arial;color:black'> Madison Link &lt;<st1:PersonName
w:st="on">ducks@ducksnm.com</st1:PersonName>&gt;<br>
<b><span style='font-weight:bold'>To:</span></b> <st1:PersonName w:st="on">vorbis@xiph.org</st1:PersonName>
<br>
<b><span style='font-weight:bold'>Sent:</span></b> Tuesday, May 19, 2015 3:38
AM<br>
<b><span style='font-weight:bold'>Subject:</span></b> [Vorbis] How do I seek to
seek to specific samples using libvorbis?</span></font><font color=black
face=Helvetica><span style='font-family:Helvetica;color:black'><o:p></o:p></span></font></p>

</div>

<div id="yui_3_16_0_1_1432002768159_3431">

<p class=MsoNormal style='background:white'><font size=3 color=black
face=Helvetica><span style='font-size:12.0pt;font-family:Helvetica;color:black'><o:p>&nbsp;</o:p></span></font></p>

<div id=yiv2438338505>

<div>

<div>

<div>

<p class=MsoNormal style='background:white'><font size=2 color=black
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:black'>What is
the best practice for seeking to a specific (arbitrary) PCM sample in an Ogg
file that contains vorbis, using libvorbis?</span></font><font color=black
face=Helvetica><span style='font-family:Helvetica;color:black'><o:p></o:p></span></font></p>

</div>

</div>

</div>

</div>

<p class=MsoNormal style='margin-bottom:12.0pt;background:white'><font size=3
color=black face=Helvetica><span style='font-size:12.0pt;font-family:Helvetica;
color:black'><br>
_______________________________________________<br>
Vorbis mailing list<br>
<a href="mailto:Vorbis@xiph.org" ymailto="mailto:Vorbis@xiph.org">Vorbis@xiph.org</a><br>
<a href="http://lists.xiph.org/mailman/listinfo/vorbis" target="_blank"
id="yui_3_16_0_1_1432002768159_3558">http://lists.xiph.org/mailman/listinfo/vorbis</a><br>
<br>
<o:p></o:p></span></font></p>

</div>

</div>

</div>

</blockquote>

</div>

</div>

</body>

</html>