18e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/******************************************************************** 28e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * * 38e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * 48e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * 58e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * 68e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * 78e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * * 88e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * 98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * by the Xiph.Org Foundation http://www.xiph.org/ * 108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * * 118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ******************************************************************** 128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels function: illustrate simple use of chained bitstream and vorbisfile.a 148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels last mod: $Id: chaining_example.c 16243 2009-07-10 02:49:31Z xiphmont $ 158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ********************************************************************/ 178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include <stdlib.h> 198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include <vorbis/codec.h> 208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include <vorbis/vorbisfile.h> 218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifdef _WIN32 /* We need the following two to set stdin/stdout to binary */ 238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include <io.h> 248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include <fcntl.h> 258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif 268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsint main(){ 288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels OggVorbis_File ov; 298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int i; 308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifdef _WIN32 /* We need to set stdin to binary mode. Damn windows. */ 328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* Beware the evil ifdef. We avoid these where we can, but this one we 338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels cannot. Don't add any more, you'll probably go to hell if you do. */ 348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels _setmode( _fileno( stdin ), _O_BINARY ); 358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif 368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* open the file/pipe on stdin */ 388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ov_open_callbacks(stdin,&ov,NULL,-1,OV_CALLBACKS_NOCLOSE)<0){ 398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels printf("Could not open input as an OggVorbis file.\n\n"); 408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* print details about each logical bitstream in the input */ 448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ov_seekable(&ov)){ 458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels printf("Input bitstream contained %ld logical bitstream section(s).\n", 468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ov_streams(&ov)); 478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels printf("Total bitstream samples: %ld\n\n", 488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels (long)ov_pcm_total(&ov,-1)); 498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels printf("Total bitstream playing time: %ld seconds\n\n", 508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels (long)ov_time_total(&ov,-1)); 518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels }else{ 538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels printf("Standard input was not seekable.\n" 548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "First logical bitstream information:\n\n"); 558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for(i=0;i<ov_streams(&ov);i++){ 588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_info *vi=ov_info(&ov,i); 598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels printf("\tlogical bitstream section %d information:\n",i+1); 608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels printf("\t\t%ldHz %d channels bitrate %ldkbps serial number=%ld\n", 618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vi->rate,vi->channels,ov_bitrate(&ov,i)/1000, 628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ov_serialnumber(&ov,i)); 638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels printf("\t\theader length: %ld bytes\n",(long) 648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels (ov.dataoffsets[i]-ov.offsets[i])); 658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels printf("\t\tcompressed length: %ld bytes\n",(long)(ov_raw_total(&ov,i))); 668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels printf("\t\tplay time: %lds\n",(long)ov_time_total(&ov,i)); 678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ov_clear(&ov); 708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels return 0; 718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} 728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 73