www.pudn.com > XvidQP.rar > AudioSource.h
// VirtualDub - Video processing and capture application // Copyright (C) 1998-2001 Avery Lee // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #ifndef f_AUDIOSOURCE_H #define f_AUDIOSOURCE_H #include#include #include #include "DubSource.h" #include "all.h" #include "crc.h" //#include "mibitstr.h" #include "header.h" #include "codec.h" class IAVIReadHandler; class IAVIReadStream; class AudioSource : public DubSource { public: WAVEFORMATEX *getWaveFormat() { return (WAVEFORMATEX *)getFormat(); } }; class AudioSourceWAV : public AudioSource { private: HMMIO hmmioFile; MMCKINFO chunkRIFF; MMCKINFO chunkDATA; LONG lCurrentSample; LONG bytesPerSample; public: AudioSourceWAV(char *fn, LONG inputBufferSize); ~AudioSourceWAV(); BOOL init(); virtual int _read(LONG lStart, LONG lCount, LPVOID lpBuffer, LONG cbBuffer, LONG *lSamplesRead, LONG *lBytesRead); }; class AudioSourceAVI : public AudioSource { private: IAVIReadHandler *pAVIFile; IAVIReadStream *pAVIStream; BOOL _isKey(LONG lSample); public: AudioSourceAVI(IAVIReadHandler *pAVIFile); ~AudioSourceAVI(); void Reinit(); bool isStreaming(); void streamBegin(bool fRealTime); void streamEnd(); BOOL init(); int _read(LONG lStart, LONG lCount, LPVOID lpBuffer, LONG cbBuffer, LONG *lSamplesRead, LONG *lBytesRead); }; class AudioSourceMP3 : public AudioSource { private: Header *header; Ibitstream *stream; FILE *f; uint32 pos; public: AudioSourceMP3(char *fn); ~AudioSourceMP3(); BOOL init(); virtual int _read(LONG lStart, LONG lCount, LPVOID lpBuffer, LONG cbBuffer, LONG *lSamplesRead, LONG *lBytesRead); }; class AudioSourceAC3 : public AudioSource { private: FILE *ac3File; MMCKINFO chunkRIFF; MMCKINFO chunkDATA; LONG lCurrentSample; LONG bytesPerSample; public: AudioSourceAC3(char *fn, LONG inputBufferSize); ~AudioSourceAC3(); BOOL init(); virtual int _read(LONG lStart, LONG lCount, LPVOID lpBuffer, LONG cbBuffer, LONG *lSamplesRead, LONG *lBytesRead); }; class AudioSourceOggVorbis : public AudioSource { private: FILE *f; ogg_sync_state oy; /* sync and verify incoming physical bitstream */ ogg_stream_state os; /* take physical pages, weld into a logical stream of packets */ ogg_page og; /* one Ogg bitstream page. Vorbis packets are inside */ ogg_packet op; /* one raw packet of data for decode */ vorbis_info vi; /* struct that stores all the static vorbis bitstream settings */ vorbis_comment vc; /* struct that stores all the bitstream user comments */ vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */ vorbis_block vb; /* local working space for packet->PCM decode */ int eos; __int64 pos; LONG lCurrentSample; int pcm_samples; int pcm_written; BOOL streamInit(); void readPage(); void decodePage(); public: AudioSourceOggVorbis(char *fn); ~AudioSourceOggVorbis(); BOOL init(); virtual int _read(LONG lStart, LONG lCount, LPVOID lpBuffer, LONG cbBuffer, LONG *lSamplesRead, LONG *lBytesRead); }; #endif