| // Copyright (c) 2010 The WebM project authors. All Rights Reserved. | |
| // | |
| // Use of this source code is governed by a BSD-style license | |
| // that can be found in the LICENSE file in the root of the source | |
| // tree. An additional intellectual property rights grant can be found | |
| // in the file PATENTS. All contributing project authors may | |
| // be found in the AUTHORS file in the root of the source tree. | |
| #include "webmmuxstreamaudio.h" | |
| #include "webmmuxcontext.h" | |
| #include <vector> | |
| class CMediaTypes; | |
| namespace VorbisTypes | |
| { | |
| struct VORBISFORMAT; | |
| } | |
| namespace WebmMuxLib | |
| { | |
| class StreamAudioVorbisOgg : public StreamAudio | |
| { | |
| StreamAudioVorbisOgg(const StreamAudioVorbisOgg&); | |
| StreamAudioVorbisOgg& operator=(const StreamAudioVorbisOgg&); | |
| protected: | |
| StreamAudioVorbisOgg(Context&, const BYTE*, ULONG); | |
| ULONG GetSamplesPerSec() const; | |
| BYTE GetChannels() const; | |
| void WriteTrackCodecID(); | |
| void WriteTrackCodecName(); | |
| void WriteTrackCodecPrivate(); | |
| public: | |
| static void GetMediaTypes(CMediaTypes&); | |
| static bool QueryAccept(const AM_MEDIA_TYPE&); | |
| static StreamAudio* CreateStream(Context&, const AM_MEDIA_TYPE&); | |
| HRESULT Receive(IMediaSample*); | |
| int EndOfStream(); | |
| private: | |
| typedef std::vector<BYTE> header_t; | |
| header_t m_ident; | |
| header_t m_comment; | |
| header_t m_setup; | |
| const VorbisTypes::VORBISFORMAT& GetFormat() const; | |
| class VorbisFrame : public AudioFrame | |
| { | |
| VorbisFrame& operator=(const VorbisFrame&); | |
| VorbisFrame(const VorbisFrame&); | |
| private: | |
| ULONG m_timecode; | |
| ULONG m_duration; | |
| BYTE* m_data; | |
| ULONG m_size; | |
| public: | |
| VorbisFrame(IMediaSample*, StreamAudioVorbisOgg*); | |
| ~VorbisFrame(); | |
| ULONG GetTimecode() const; | |
| ULONG GetDuration() const; | |
| ULONG GetSize() const; | |
| const BYTE* GetData() const; | |
| }; | |
| unsigned __int64 m_codec_private_data_pos; | |
| HRESULT FinalizeTrackCodecPrivate(); | |
| }; | |
| } //end namespace WebmMuxLib |