[1b1771]: doc / vorbisfile / chainingexample.html Maximize Restore History

Download this file

chainingexample.html    159 lines (133 with data), 5.0 kB

  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
<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.68 - 20030307</p></td>
</tr>
</table>
<h1>Chaining Example Code</h1>
<p>
The following is a run-through of the chaining example program supplied
with vorbisfile - <a href="chaining_example_c.html">chaining_example.c</a>.
This program demonstrates how to work with a chained bitstream.
<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 "vorbis/codec.h"
#include "vorbis/vorbisfile.h"
#include "../lib/misc.h"
</b></pre>
</td>
</tr>
</table>
<p>Inside main(), we declare our primary OggVorbis_File structure. We also declare a 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><a href="ov_open.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.html">ov_open()</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(stdin,&amp;ov,NULL,-1)&gt;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're going to find the number of logical bitstreams in the physical bitstream using <a href="ov_streams.html">ov_streams</a>.
<p>We use <a href="ov_time_total.html">ov_time_total</a> to determine the total length of the physical bitstream. We specify that we want the entire bitstream by using the argument <tt>-1</tt>.
<br><br>
<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
<td>
<pre><b>
if(ov_seekable(&amp;ov)){
printf("Input bitstream contained %ld logical bitstream section(s).\n",
ov_streams(&amp;ov));
printf("Total bitstream playing time: %ld seconds\n\n",
(long)ov_time_total(&amp;ov,-1));
}else{
printf("Standard input was not seekable.\n"
"First logical bitstream information:\n\n");
}
</b></pre>
</td>
</tr>
</table>
<p>Now we're going to iterate through each logical bitstream and print information about that bitstream.
<p>We use <a href="ov_info.html">ov_info</a> to pull out the <a href="vorbis_info.html">vorbis_info</a> struct for each logical bitstream. This struct contains bitstream-specific info.
<p><a href="ov_serialnumber.html">ov_serialnumber</a> retrieves the unique serial number for the logical bistream. <a href="ov_raw_total.html">ov_raw_total</a> gives the total compressed bytes for the logical bitstream, and <a href="ov_time_total.html">ov_time_total</a> gives the total time in the logical bitstream.
<br><br>
<table border=0 width=100% color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
<td>
<pre><b>
for(i=0;i&lt;ov_streams(&amp;ov);i++){
vorbis_info *vi=ov_info(&amp;ov,i);
printf("\tlogical bitstream section %d information:\n",i+1);
printf("\t\t%ldHz %d channels bitrate %ldkbps serial number=%ld\n",
vi-&gt;rate,vi-&gt;channels,ov_bitrate(&amp;ov,i)/1000,
ov_serialnumber(&amp;ov,i));
printf("\t\tcompressed length: %ld bytes ",(long)(ov_raw_total(&amp;ov,i)));
printf(" play time: %lds\n",(long)ov_time_total(&amp;ov,i));
}
</b></pre>
</td>
</tr>
</table>
<p>
When we're done with the entire physical bitstream, 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(&amp;ov);
return 0;
}
</b></pre>
</td>
</tr>
</table>
<p>
The full source for chaining_example.c can be found with the vorbis
distribution in <a href="chaining_example_c.html">chaining_example.c</a>.
<br><br>
<hr noshade>
<table border=0 width=100%>
<tr valign=top>
<td><p class=tiny>copyright &copy; 2004 Xiph.org</p></td>
<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a><br><a href="mailto:team@vorbis.org">team@vorbis.org</a></p></td>
</tr><tr>
<td><p class=tiny>Vorbisfile documentation</p></td>
<td align=right><p class=tiny>vorbisfile version 1.68 - 20030307</p></td>
</tr>
</table>
</body>
</html>