OOOggStat.cpp

Go to the documentation of this file.
00001 //===========================================================================
00002 //Copyright (C) 2003, 2004 Zentaro Kavanagh
00003 //
00004 //Redistribution and use in source and binary forms, with or without
00005 //modification, are permitted provided that the following conditions
00006 //are met:
00007 //
00008 //- Redistributions of source code must retain the above copyright
00009 //  notice, this list of conditions and the following disclaimer.
00010 //
00011 //- Redistributions in binary form must reproduce the above copyright
00012 //  notice, this list of conditions and the following disclaimer in the
00013 //  documentation and/or other materials provided with the distribution.
00014 //
00015 //- Neither the name of Zentaro Kavanagh nor the names of contributors 
00016 //  may be used to endorse or promote products derived from this software 
00017 //  without specific prior written permission.
00018 //
00019 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00020 //``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00021 //LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00022 //PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE ORGANISATION OR
00023 //CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00024 //EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00025 //PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00026 //PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00027 //LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00028 //NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00029 //SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00030 //===========================================================================
00031 
00032 // OOOggStat.cpp : Defines the entry point for the console application.
00033 //
00034 
00035 #include "stdafx.h"
00036 #include <libOOOgg/libOOOgg.h>
00037 #include <libOOOgg/dllstuff.h>
00038 
00039 #include <iostream>
00040 
00041 
00042 #include <fstream>
00043 
00044 //This will be called by the callback
00045 
00046 unsigned long streamNo;
00047 
00048 bool pageCB(OggPage* inOggPage, void*  /* inUserData  ignored */)
00049 {
00050         if ((inOggPage->numPackets() > 0) && (inOggPage->header()->isBOS())) {
00051                 streamNo++;
00052                 OggPacket* locFirstPack = inOggPage->getPacket(0);
00053 
00054                 if (strncmp((char*)locFirstPack->packetData(), "\001vorbis", 7) == 0) {
00055                         cout<<"Stream "<<streamNo<<" : Audio/Vorbis "<<endl;
00056                 } else if (strncmp((char*)locFirstPack->packetData(), "Speex   ", 8) == 0) {
00057                         cout<<"Stream "<<streamNo<<" : Audio/Speex "<<endl;
00058                 } else if ((strncmp((char*)locFirstPack->packetData(), "fLaC", 4)) == 0) {
00059                         cout<<"Stream "<<streamNo<<" : Audio/FLAC "<<endl;
00060                 } else if ((strncmp((char*)locFirstPack->packetData(), "\200theora", 7)) == 0) {
00061                         cout<<"Stream "<<streamNo<<" : Video/Theora "<<endl;
00062                 } else if ((strncmp((char*)locFirstPack->packetData(), "\001video\000\000\000", 9)) == 0) {
00063                         unsigned char* locPackData = locFirstPack->packetData();
00064                         unsigned char* locFourCCString = new unsigned char[5];
00065                         for (int i = 0; i < 4; i++) {
00066                                 locFourCCString[i] = locPackData[9+i];
00067                         }
00068                         locFourCCString[4] = 0;
00069 
00070                         string locPinName = (char*)locFourCCString;
00071                         cout<<"Stream "<<streamNo<<" : Video/"<<locPinName<<endl;
00072                 } else {
00073                         cout<<"Stream "<<streamNo<<" : Unknown Stream"<<endl;
00074                 }
00075         }
00076         
00077 
00078         //cout << inOggPage->header()->toString();
00079         //cout << "Num Packets : " << inOggPage->numPackets() << endl;;
00080         //for (unsigned long i = 0; i < inOggPage->numPackets(); i++) {
00081         //      locPack = inOggPage->getPacket(i);
00082         //      cout << "------ Packet  "<< i <<" (";
00083         //      cout<<locPack->packetSize()<< " bytes) -------";
00084         //      
00085         //      if (!locPack->isComplete()) {
00086         //              cout<<"  ** INCOMPLETE **";
00087         //      }
00088         //      cout<<endl;
00089         //      cout << locPack->toPackDumpString();
00090         //}
00091         
00092         return true;
00093 }
00094 
00095 #ifdef WIN32
00096 int __cdecl _tmain(int argc, _TCHAR* argv[])
00097 #else
00098 int main(int argc, char * argv[])
00099 #endif
00100 {
00101 
00102 
00103         
00104         if (argc < 2) {
00105                 cout<<"Usage : OOOggStat <filename>"<<endl;
00106         } else {
00107                 streamNo = 0;
00108                 OggDataBuffer testOggBuff;
00109                 //OggCallbackRego* locCBRego = new OggCallbackRego(&pageCB);
00110                 const int BUFF_SIZE = 8092;
00111                 testOggBuff.registerStaticCallback(&pageCB, NULL);
00112 
00113                 fstream testFile;
00114                 testFile.open(argv[1], ios_base::in | ios_base::binary);
00115                 char* locBuff = new char[BUFF_SIZE];
00116                 while (!testFile.eof()) {
00117                         testFile.read(locBuff, BUFF_SIZE);
00118                         unsigned long locBytesRead = testFile.gcount();
00119                 testOggBuff.feed((const unsigned char*)locBuff, locBytesRead);
00120                 }
00121 
00122                 delete[] locBuff;
00123         }
00124 
00125 
00126         return 0;
00127 }
00128 
00129 

Generated on Tue Feb 15 14:54:23 2005 for oggdsf by  doxygen 1.3.9