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 "..\BaseSplitter\BaseSplitter.h"
00025
00026 class CMpaSplitterFile : public CBaseSplitterFileEx
00027 {
00028 CMediaType m_mt;
00029 REFERENCE_TIME m_rtDuration;
00030
00031 enum {none, mpa, mp4a} m_mode;
00032
00033 mpahdr m_mpahdr;
00034 aachdr m_aachdr;
00035 __int64 m_startpos, m_endpos;
00036
00037 __int64 m_totalbps;
00038 CRBMap<__int64, int> m_pos2bps;
00039
00040 HRESULT Init();
00041 void AdjustDuration(int nBytesPerSec);
00042
00043 public:
00044 CMpaSplitterFile(IAsyncReader* pAsyncReader, HRESULT& hr);
00045
00046 CMap<DWORD, DWORD, CString, CString&> m_tags;
00047
00048 const CMediaType& GetMediaType() {return m_mt;}
00049 REFERENCE_TIME GetDuration() {return m_rtDuration;}
00050
00051 __int64 GetStartPos() {return m_startpos;}
00052 __int64 GetEndPos() {return m_endpos;}
00053
00054 bool Sync(int limit = 0x2000);
00055 bool Sync(int& FrameSize, REFERENCE_TIME& rtDuration, int limit = 0x2000);
00056 };