OOOggDump.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 // OggDump.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 #include <fstream>
00041 
00042 unsigned long bytePos;
00043 
00044 //This will be called by the callback
00045 bool pageCB(OggPage* inOggPage, void*  /* inUserData  ignored */) {
00046         cout<<"Page Location : "<<bytePos;
00047         bytePos += inOggPage->pageSize();
00048         cout<<" to "<<bytePos<<endl;
00049         OggPacket* locPack = NULL;
00050         cout << inOggPage->header()->toString();
00051         cout << "Num Packets : " << inOggPage->numPackets() << endl;;
00052         for (unsigned long i = 0; i < inOggPage->numPackets(); i++) {
00053                 locPack = inOggPage->getPacket(i);
00054                 cout << "------ Packet  " << i << " (" << locPack->packetSize() << " bytes) -------";
00055                 
00056                 if (locPack->isContinuation()) {
00057                         cout<<"  ** CONT **";
00058                 }
00059                 if (locPack->isTruncated()) {
00060                         cout<<" ** TRUNC **";
00061                 }
00062                 cout<<endl;
00063                 cout << locPack->toPackDumpString();
00064         }
00065         
00066         return true;
00067 }
00068 
00069 
00070 #ifdef WIN32
00071 int __cdecl _tmain(int argc, _TCHAR* argv[])
00072 #else
00073 int main (int argc, char * argv[])
00074 #endif
00075 {
00076         //This program just dumps the pages out of a file in ogg format.
00077         // Currently does not error checking. Check your command line carefully !
00078         // USAGE :: OggDump <OggFile>
00079         //
00080 
00081         bytePos = 0;
00082 
00083         if (argc < 2) {
00084                 cout<<"Usage : OOOggDump <filename>"<<endl;
00085         } else {
00086                 OggDataBuffer testOggBuff;
00087                 
00088                 testOggBuff.registerStaticCallback(&pageCB, NULL);
00089 
00090                 fstream testFile;
00091                 testFile.open(argv[1], ios_base::in | ios_base::binary);
00092                 
00093                 const unsigned short BUFF_SIZE = 8092;
00094                 char* locBuff = new char[BUFF_SIZE];
00095                 while (!testFile.eof()) {
00096                         testFile.read(locBuff, BUFF_SIZE);
00097                         unsigned long locBytesRead = testFile.gcount();
00098                 testOggBuff.feed((const unsigned char*)locBuff, locBytesRead);
00099                 }
00100 
00101                 delete[] locBuff;
00102         }
00103 
00104         return 0;
00105 }
00106 

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