summaryrefslogtreecommitdiffhomepage
path: root/contrib/vorbis/doc/vorbisfile/seekexample.html
blob: 897403d08204115746b5f3812af1362d1dde915c (plain)
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
<html>

<head>
<title>vorbisfile - Example Code</title>
<link rel=stylesheet href="style.css" type="text/css">
</head>

<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
<table border=0 width=100%>
<tr>
<td><p class=tiny>Vorbisfile documentation</p></td>
<td align=right><p class=tiny>vorbisfile version 1.3.2 - 20101101</p></td>
</tr>
</table>

<h1>Example Code: seeking</h1>

<p>
The following is a run-through of the seeking example program supplied
with vorbisfile - <a href="seeking_test_c.html">seeking_test.c</a>.  
This program tests the vorbisfile <a href="ov_time_seek.html">ov_time_seek</a> function by seeking to random points within the file.

<p>
First, relevant headers, including vorbis-specific "codec.h" and "vorbisfile.h" have to be included.

<br><br>
<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
	<td>
<pre><b>
#include &lt;stdlib.h>
#include &lt;stdio.h>
#include "vorbis/codec.h"
#include "vorbis/vorbisfile.h"
</b></pre>
	</td>
</tr>
</table>

<p>Inside main(), we declare our primary OggVorbis_File structure.  We also declare other helpful variables to track our progress within the file.
<br><br>
<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
        <td>
<pre><b>
int main(){
  OggVorbis_File ov;
  int i;
</b></pre>
        </td>
</tr>
</table>

<p>This example takes its input on stdin which is in 'text' mode by default under Windows; this will corrupt the input data unless set to binary mode.  This applies only to Windows.
<br><br>
<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
        <td>
<pre><b>
#ifdef _WIN32 /* We need to set stdin to binary mode under Windows */
  _setmode( _fileno( stdin ), _O_BINARY );
#endif
</b></pre>
        </td>
</tr>
</table>

<p><a href="ov_open_callbacks.html">ov_open()</a> must be
called to initialize the <a href="OggVorbis_File.html">OggVorbis_File</a> structure with default values.  
<a href="ov_open_callbacks.html">ov_open_callbacks()</a> also checks to ensure that we're reading Vorbis format and not something else.

<br><br>
<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
        <td>
<pre><b>
  if(ov_open_callbacks(stdin,&ov,NULL,-1, OV_CALLBACKS_NOCLOSE)<0){
    printf("Could not open input as an OggVorbis file.\n\n");
    exit(1);
  }

</b></pre>
        </td>
</tr>
</table>

<p>
First we check to make sure the stream is seekable using <a href="ov_seekable.html">ov_seekable</a>.

<p>Then we seek to 100 random spots in the bitstream using <a href="ov_time_seek.html">ov_time_seek</a> with randomly generated values.

<br><br>
<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
        <td>
<pre><b>
  
  /* print details about each logical bitstream in the input */
  if(ov_seekable(&ov)){
    double length=ov_time_total(&ov,-1);
    printf("testing seeking to random places in %g seconds....\n",length);
    for(i=0;i<100;i++){
      double val=(double)rand()/RAND_MAX*length;
      ov_time_seek(&ov,val);
      printf("\r\t%d [%gs]...     ",i,val);
      fflush(stdout);
    }
    
    printf("\r                                   \nOK.\n\n");
  }else{
    printf("Standard input was not seekable.\n");
  }
  
</b></pre>
        </td>
</tr>
</table>
<p>
When we're done seeking, we need to call <a href="ov_clear.html">ov_clear()</a> to release the bitstream.

<br><br>
<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
        <td>
<pre><b>
  ov_clear(&ov);
  return 0;
}
</b></pre>
        </td>
</tr>
</table>

<p>
The full source for seeking_test.c can be found with the vorbis
distribution in <a href="seeking_test_c.html">seeking_test.c</a>.

<br><br>
<hr noshade>
<table border=0 width=100%>
<tr valign=top>
<td><p class=tiny>copyright &copy; 2000-2010 Xiph.Org</p></td>
<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
</tr><tr>
<td><p class=tiny>Vorbisfile documentation</p></td>
<td align=right><p class=tiny>vorbisfile version 1.3.2 - 20101101</p></td>
</tr>
</table>

</body>

</html>