OggFile.h

00001 #pragma once
00002 
00003 #include "..\BaseSplitter\BaseSplitter.h"
00004 
00005 #pragma pack(push, 1)
00006 struct OggPageHeader
00007 {
00008         DWORD capture_pattern;
00009         BYTE stream_structure_version;
00010         BYTE header_type_flag; enum {continued=1, first=2, last=4};
00011         __int64 granule_position;
00012         DWORD bitstream_serial_number;
00013         DWORD page_sequence_number;
00014         DWORD CRC_checksum;
00015         BYTE number_page_segments;
00016 };
00017 struct OggVorbisIdHeader
00018 {
00019         DWORD vorbis_version;
00020         BYTE audio_channels;
00021         DWORD audio_sample_rate;
00022         DWORD bitrate_maximum;
00023         DWORD bitrate_nominal;
00024         DWORD bitrate_minimum;
00025         BYTE blocksize_0:4;
00026         BYTE blocksize_1:4;
00027         BYTE framing_flag;
00028 };
00029 struct OggVideoHeader
00030 {
00031         DWORD w, h;
00032 };
00033 struct OggAudioHeader
00034 {
00035         WORD nChannels, nBlockAlign;
00036         DWORD nAvgBytesPerSec;
00037 };
00038 struct OggStreamHeader
00039 {
00040         char streamtype[8], subtype[4];
00041         DWORD size;
00042         __int64 time_unit, samples_per_unit;
00043         DWORD default_len;
00044     DWORD buffersize;
00045         WORD bps;
00046         WORD alignmentfix1;
00047     union {OggVideoHeader v; OggAudioHeader a;};
00048         DWORD alignmentfix2;
00049 };
00050 #pragma pack(pop)
00051 
00052 class OggPage : public CArray<BYTE>
00053 {
00054 public:
00055         OggPageHeader m_hdr;
00056         CList<int> m_lens;
00057         OggPage() {memset(&m_hdr, 0, sizeof(m_hdr));}
00058 };
00059 
00060 class COggFile : public CBaseSplitterFile
00061 {
00062         using CBaseSplitterFile::Read;
00063 
00064         HRESULT Init();
00065 
00066 public:
00067         COggFile(IAsyncReader* pAsyncReader, HRESULT& hr);
00068 
00069         bool Sync(HANDLE hBreak = NULL);
00070         bool Read(OggPageHeader& hdr, HANDLE hBreak = NULL);
00071         bool Read(OggPage& page, bool fFull = true, HANDLE hBreak = NULL);
00072 };

Generated on Tue Dec 13 14:47:21 2005 for guliverkli by  doxygen 1.4.5