1 | /********************************************************************
|
---|
2 | * *
|
---|
3 | * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
---|
4 | * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
---|
5 | * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
---|
6 | * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
---|
7 | * *
|
---|
8 | * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
|
---|
9 | * by the Xiph.Org Foundation https://xiph.org/ *
|
---|
10 | * *
|
---|
11 | ********************************************************************
|
---|
12 |
|
---|
13 | function: illustrate simple use of chained bitstream and vorbisfile.a
|
---|
14 |
|
---|
15 | ********************************************************************/
|
---|
16 |
|
---|
17 | #include <stdlib.h>
|
---|
18 | #include <vorbis/codec.h>
|
---|
19 | #include <vorbis/vorbisfile.h>
|
---|
20 |
|
---|
21 | #ifdef _WIN32 /* We need the following two to set stdin/stdout to binary */
|
---|
22 | #include <io.h>
|
---|
23 | #include <fcntl.h>
|
---|
24 | #endif
|
---|
25 |
|
---|
26 | int main(){
|
---|
27 | OggVorbis_File ov;
|
---|
28 | int i;
|
---|
29 |
|
---|
30 | #ifdef _WIN32 /* We need to set stdin to binary mode. Damn windows. */
|
---|
31 | /* Beware the evil ifdef. We avoid these where we can, but this one we
|
---|
32 | cannot. Don't add any more, you'll probably go to hell if you do. */
|
---|
33 | _setmode( _fileno( stdin ), _O_BINARY );
|
---|
34 | #endif
|
---|
35 |
|
---|
36 | /* open the file/pipe on stdin */
|
---|
37 | if(ov_open_callbacks(stdin,&ov,NULL,-1,OV_CALLBACKS_NOCLOSE)<0){
|
---|
38 | printf("Could not open input as an OggVorbis file.\n\n");
|
---|
39 | exit(1);
|
---|
40 | }
|
---|
41 |
|
---|
42 | /* print details about each logical bitstream in the input */
|
---|
43 | if(ov_seekable(&ov)){
|
---|
44 | printf("Input bitstream contained %ld logical bitstream section(s).\n",
|
---|
45 | ov_streams(&ov));
|
---|
46 | printf("Total bitstream samples: %ld\n\n",
|
---|
47 | (long)ov_pcm_total(&ov,-1));
|
---|
48 | printf("Total bitstream playing time: %ld seconds\n\n",
|
---|
49 | (long)ov_time_total(&ov,-1));
|
---|
50 |
|
---|
51 | }else{
|
---|
52 | printf("Standard input was not seekable.\n"
|
---|
53 | "First logical bitstream information:\n\n");
|
---|
54 | }
|
---|
55 |
|
---|
56 | for(i=0;i<ov_streams(&ov);i++){
|
---|
57 | vorbis_info *vi=ov_info(&ov,i);
|
---|
58 | printf("\tlogical bitstream section %d information:\n",i+1);
|
---|
59 | printf("\t\t%ldHz %d channels bitrate %ldkbps serial number=%ld\n",
|
---|
60 | vi->rate,vi->channels,ov_bitrate(&ov,i)/1000,
|
---|
61 | ov_serialnumber(&ov,i));
|
---|
62 | printf("\t\theader length: %ld bytes\n",(long)
|
---|
63 | (ov.dataoffsets[i]-ov.offsets[i]));
|
---|
64 | printf("\t\tcompressed length: %ld bytes\n",(long)(ov_raw_total(&ov,i)));
|
---|
65 | printf("\t\tplay time: %lds\n",(long)ov_time_total(&ov,i));
|
---|
66 | }
|
---|
67 |
|
---|
68 | ov_clear(&ov);
|
---|
69 | return 0;
|
---|
70 | }
|
---|
71 |
|
---|