group__seek__api.html 20.2 KB
Newer Older
zen's avatar
zen committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>liboggz: OGGZ Seek API</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.4 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="globals.html">Globals</a></div>
<h1>OGGZ Seek API</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
The seeking semantics of the Ogg file format were outlined by Monty in <a href="http://www.xiph.org/archives/theora-dev/200209/0040.html">a post to theora-dev</a> in September 2002. 
<p>
Quoting from that post, we have the following assumptions:<p>
<ul>
<li>Ogg is not a non-linear format. ... It is a media transport format designed to do nothing more than deliver content, in a stream, and have all the pieces arrive on time and in sync.</li><li>The Ogg layer does not know the specifics of the codec data it's multiplexing into a stream. It knows nothing beyond 'Oooo, packets!', that the packets belong to different buckets, that the packets go in order, and that packets have position markers. Ogg does not even have a concept of 'time'; it only knows about the sequentially increasing, unitless position markers. It is up to higher layers which have access to the codec APIs to assign and convert units of framing or time.</li></ul>
<p>
(For more details on the structure of Ogg streams, see the <a class="el" href="group__basics.html">Ogg Basics </a> section).<p>
For data such as media, for which it is possible to provide a mapping such as 'time', OGGZ can efficiently navigate through an Ogg stream by use of an OggzMetric callback, thus allowing automatic seeking to points in 'time'. For common codecs you can ask Oggz to set this for you automatically by instantiating the OGGZ handle with the OGGZ_AUTO flag set. For others you can specify a multiplier with <a class="el" href="group__seek__api.html#a1">oggz_set_metric_linear()</a>, or a generic non-linear metric with <a class="el" href="group__seek__api.html#a2">oggz_set_metric()</a>.<p>
<ul>
<li>See the section on <a class="el" href="group__metric.html">Using OggzMetrics </a> for details of setting up and seeking with metrics.</li></ul>
<p>
<ul>
<li>It is always possible to seek to exact byte positions using <a class="el" href="group__seek__api.html#a6">oggz_seek()</a>.</li></ul>
<p>
<ul>
<li>A mechanism to aid seeking across non-metric spaces for which a partial order exists (ie. data that is not synchronised by a measure such as time, but is nevertheless somehow seekably structured), is also planned. </li></ul>

<p>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td></td></tr>
<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>typedef ogg_int64_t(*&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__seek__api.html#a0">OggzMetric</a> )(<a class="el" href="oggz_8h.html#a0">OGGZ</a> *oggz, long serialno, ogg_int64_t granulepos, void *user_data)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is the signature of a function to correlate Ogg streams. </em> <a href="#a0"></a><em><br><br></td></tr>
<tr><td colspan=2><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__seek__api.html#a1">oggz_set_metric_linear</a> (<a class="el" href="oggz_8h.html#a0">OGGZ</a> *oggz, long serialno, ogg_int64_t granule_rate_numerator, ogg_int64_t granule_rate_denominator)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Specify that a logical bitstream has a linear metric. </em> <a href="#a1"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__seek__api.html#a2">oggz_set_metric</a> (<a class="el" href="oggz_8h.html#a0">OGGZ</a> *oggz, long serialno, <a class="el" href="oggz_8h.html#a0">OggzMetric</a> metric, void *user_data)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the OggzMetric to use for an OGGZ handle. </em> <a href="#a2"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>ogg_int64_t&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__seek__api.html#a3">oggz_seek_units</a> (<a class="el" href="oggz_8h.html#a0">OGGZ</a> *oggz, ogg_int64_t units, int whence)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Seek to a number of units corresponding to the Metric function. </em> <a href="#a3"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__seek__api.html#a4">oggz_set_data_start</a> (<a class="el" href="oggz_8h.html#a0">OGGZ</a> *oggz, off_t offset)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Tell OGGZ to remember the given offset as the start of data. </em> <a href="#a4"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>off_t&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__seek__api.html#a5">oggz_tell</a> (<a class="el" href="oggz_8h.html#a0">OGGZ</a> *oggz)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Provide the file offset in bytes corresponding to the data read. </em> <a href="#a5"></a><em><br><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>off_t&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__seek__api.html#a6">oggz_seek</a> (<a class="el" href="oggz_8h.html#a0">OGGZ</a> *oggz, off_t offset, int whence)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Seek to a specific byte offset. </em> <a href="#a6"></a><em><br><br></td></tr>
</table>
<hr><h2>Typedef Documentation</h2>
<a class="anchor" name="a0" doxytag="oggz.h::OggzMetric" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> typedef ogg_int64_t(* <a class="el" href="oggz_8h.html#a0">OggzMetric</a>)(<a class="el" href="oggz_8h.html#a0">OGGZ</a> * oggz, long serialno, ogg_int64_t granulepos, void * user_data)
      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This is the signature of a function to correlate Ogg streams. 
<p>
If every position in an Ogg stream can be described by a metric (eg. time) then define this function that returns some arbitrary unit value. This is the normal use of OGGZ for media streams. The meaning of units is arbitrary, but must be consistent across all logical bitstreams; for example a conversion of the time offset of a given packet into nanoseconds or a similar stream-specific subdivision may be appropriate.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign=top><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
    <tr><td valign=top><em>serialno</em>&nbsp;</td><td>Identifies a logical bitstream within <em>oggz</em> </td></tr>
    <tr><td valign=top><em>granulepos</em>&nbsp;</td><td>A granulepos within the logical bitstream identified by <em>serialno</em> </td></tr>
    <tr><td valign=top><em>user_data</em>&nbsp;</td><td>Arbitrary data you wish to pass to your callback </td></tr>
  </table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>A conversion of the (serialno, granulepos) pair into a measure in units which is consistent across all logical bitstreams within <em>oggz</em> </dd></dl>
    </td>
  </tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="a6" doxytag="oggz.h::oggz_seek" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> off_t oggz_seek </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="oggz_8h.html#a0">OGGZ</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>oggz</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>off_t&nbsp;</td>
          <td class="mdname" nowrap> <em>offset</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname" nowrap> <em>whence</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Seek to a specific byte offset. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign=top><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
    <tr><td valign=top><em>offset</em>&nbsp;</td><td>a byte offset </td></tr>
    <tr><td valign=top><em>whence</em>&nbsp;</td><td>As defined in &lt;stdio.h&gt;: SEEK_SET, SEEK_CUR or SEEK_END </td></tr>
  </table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>the new file offset, or -1 on failure. </dd></dl>
    </td>
  </tr>
</table>
<a class="anchor" name="a3" doxytag="oggz.h::oggz_seek_units" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> ogg_int64_t oggz_seek_units </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="oggz_8h.html#a0">OGGZ</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>oggz</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>ogg_int64_t&nbsp;</td>
          <td class="mdname" nowrap> <em>units</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname" nowrap> <em>whence</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Seek to a number of units corresponding to the Metric function. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign=top><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
    <tr><td valign=top><em>units</em>&nbsp;</td><td>A number of units </td></tr>
    <tr><td valign=top><em>whence</em>&nbsp;</td><td>As defined in &lt;stdio.h&gt;: SEEK_SET, SEEK_CUR or SEEK_END </td></tr>
  </table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>the new file offset, or -1 on failure. </dd></dl>
    </td>
  </tr>
</table>
<a class="anchor" name="a4" doxytag="oggz.h::oggz_set_data_start" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> int oggz_set_data_start </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="oggz_8h.html#a0">OGGZ</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>oggz</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>off_t&nbsp;</td>
          <td class="mdname" nowrap> <em>offset</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Tell OGGZ to remember the given offset as the start of data. 
<p>
This informs the seeking mechanism that when seeking back to unit 0, go to the given offset, not to the start of the file, which is usually codec headers. The usual usage is: <pre><div>
    oggz_set_data_start (oggz, oggz_tell (oggz));
</pre></div> <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign=top><em>oggz</em>&nbsp;</td><td>An OGGZ handle previously opened for reading </td></tr>
    <tr><td valign=top><em>offset</em>&nbsp;</td><td>The offset of the start of data </td></tr>
  </table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>0 on success, -1 on failure. </dd></dl>
    </td>
  </tr>
</table>
<a class="anchor" name="a2" doxytag="oggz.h::oggz_set_metric" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> int oggz_set_metric </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="oggz_8h.html#a0">OGGZ</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>oggz</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>long&nbsp;</td>
          <td class="mdname" nowrap> <em>serialno</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap><a class="el" href="oggz_8h.html#a0">OggzMetric</a>&nbsp;</td>
          <td class="mdname" nowrap> <em>metric</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>void *&nbsp;</td>
          <td class="mdname" nowrap> <em>user_data</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Set the OggzMetric to use for an OGGZ handle. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign=top><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
    <tr><td valign=top><em>serialno</em>&nbsp;</td><td>Identify the logical bitstream in <em>oggz</em> to attach this metric to. A value of -1 indicates that this metric should be attached to all unattached logical bitstreams in <em>oggz</em>. </td></tr>
    <tr><td valign=top><em>metric</em>&nbsp;</td><td>An OggzMetric callback </td></tr>
    <tr><td valign=top><em>user_data</em>&nbsp;</td><td>arbitrary data to pass to the metric callback</td></tr>
  </table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>0 Success </dd></dl>
<dl compact><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign=top><em>OGGZ_ERR_BAD_SERIALNO</em>&nbsp;</td><td><em>serialno</em> does not identify an existing logical bitstream in <em>oggz</em>, and is not -1 </td></tr>
    <tr><td valign=top><em>OGGZ_ERR_BAD_OGGZ</em>&nbsp;</td><td><em>oggz</em> does not refer to an existing OGGZ</td></tr>
  </table>
</dl>
<dl compact><dt><b>Note:</b></dt><dd>Specifying values of <em>serialno</em> other than -1 allows you to pass logical bitstream specific user_data to the same metric. <p>
Alternatively, you may use a different <em>metric</em> for each <em>serialno</em>, but all metrics used must return mutually consistent unit measurements. </dd></dl>
    </td>
  </tr>
</table>
<a class="anchor" name="a1" doxytag="oggz.h::oggz_set_metric_linear" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> int oggz_set_metric_linear </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="oggz_8h.html#a0">OGGZ</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>oggz</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>long&nbsp;</td>
          <td class="mdname" nowrap> <em>serialno</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>ogg_int64_t&nbsp;</td>
          <td class="mdname" nowrap> <em>granule_rate_numerator</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>ogg_int64_t&nbsp;</td>
          <td class="mdname" nowrap> <em>granule_rate_denominator</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Specify that a logical bitstream has a linear metric. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign=top><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
    <tr><td valign=top><em>serialno</em>&nbsp;</td><td>Identify the logical bitstream in <em>oggz</em> to attach this linear metric to. A value of -1 indicates that the metric should be attached to all unattached logical bitstreams in <em>oggz</em>. </td></tr>
    <tr><td valign=top><em>granule_rate_numerator</em>&nbsp;</td><td>The numerator of the granule rate </td></tr>
    <tr><td valign=top><em>granule_rate_denominator</em>&nbsp;</td><td>The denominator of the granule rate </td></tr>
  </table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>0 Success </dd></dl>
<dl compact><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign=top><em>OGGZ_ERR_BAD_SERIALNO</em>&nbsp;</td><td><em>serialno</em> does not identify an existing logical bitstream in <em>oggz</em>. </td></tr>
    <tr><td valign=top><em>OGGZ_ERR_BAD_OGGZ</em>&nbsp;</td><td><em>oggz</em> does not refer to an existing OGGZ </td></tr>
  </table>
</dl>
    </td>
  </tr>
</table>
<a class="anchor" name="a5" doxytag="oggz.h::oggz_tell" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> off_t oggz_tell </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="oggz_8h.html#a0">OGGZ</a> *&nbsp;</td>
          <td class="mdname1" valign="top" nowrap> <em>oggz</em>          </td>
          <td class="md" valign="top">&nbsp;)&nbsp;</td>
          <td class="md" nowrap></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Provide the file offset in bytes corresponding to the data read. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign=top><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
  </table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>The current offset of oggz.</dd></dl>
<dl compact><dt><b>Note:</b></dt><dd>When reading, the value returned by <a class="el" href="group__seek__api.html#a5">oggz_tell()</a> reflects the data offset of the start of the most recent packet processed, so that when called from an OggzReadPacket callback it reflects the byte offset of the start of the packet. As OGGZ may have internally read ahead, this may differ from the current offset of the associated file descriptor. </dd></dl>
    </td>
  </tr>
</table>
420
<hr size="1"><address style="align: right;"><small>Generated on Wed Jan 21 15:05:41 2004 for liboggz by
zen's avatar
zen committed
421
422
423
424
425
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 > 
</a>1.3.4 </small></address>
</body>
</html>