00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #pragma once
00023
00024 #include <atlbase.h>
00025 #include <afxtempl.h>
00026 #include "..\BaseSource\BaseSource.h"
00027
00028 class CDTSAC3Stream;
00029
00030 [uuid("B4A7BE85-551D-4594-BDC7-832B09185041")]
00031 class CDTSAC3Source : public CBaseSource<CDTSAC3Stream>
00032 {
00033 public:
00034 CDTSAC3Source(LPUNKNOWN lpunk, HRESULT* phr);
00035 virtual ~CDTSAC3Source();
00036 };
00037
00038 class CDTSAC3Stream : public CBaseStream
00039 {
00040 CFile m_file;
00041 int m_nFileOffset, m_nBytesPerFrame, m_nAvgBytesPerSec, m_nSamplesPerSec;
00042 GUID m_subtype;
00043 WORD m_wFormatTag;
00044 BYTE m_streamid;
00045
00046 bool CheckDTS(const CMediaType* pmt);
00047 bool CheckWAVEDTS(const CMediaType* pmt);
00048 bool CheckAC3(const CMediaType* pmt);
00049 bool CheckWAVEAC3(const CMediaType* pmt);
00050
00051 public:
00052 CDTSAC3Stream(const WCHAR* wfn, CSource* pParent, HRESULT* phr);
00053 virtual ~CDTSAC3Stream();
00054
00055 HRESULT FillBuffer(IMediaSample* pSample, int nFrame, BYTE* pOut, long& len);
00056
00057 HRESULT DecideBufferSize(IMemAllocator* pIMemAlloc, ALLOCATOR_PROPERTIES* pProperties);
00058 HRESULT CheckMediaType(const CMediaType* pMediaType);
00059 HRESULT GetMediaType(int iPosition, CMediaType* pmt);
00060 };