AviFile.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:1k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. #pragma once
  2. #include <Aviriff.h> // conflicts with vfw.h...
  3. #include "..BaseSplitterBaseSplitter.h"
  4. class CAviFile : public CBaseSplitterFile
  5. {
  6. HRESULT Init();
  7. HRESULT Parse(DWORD parentid, __int64 end);
  8. public:
  9. CAviFile(IAsyncReader* pAsyncReader, HRESULT& hr);
  10. using CBaseSplitterFile::Read;
  11. template<typename T> HRESULT Read(T& var, int offset = 0);
  12. AVIMAINHEADER m_avih;
  13. struct ODMLExtendedAVIHeader {DWORD dwTotalFrames;} m_dmlh;
  14. // VideoPropHeader m_vprp;
  15. struct strm_t
  16. {
  17. AVISTREAMHEADER strh;
  18. CArray<BYTE> strf;
  19. CStringA strn;
  20. CAutoPtr<AVISUPERINDEX> indx;
  21. struct chunk {UINT64 fKeyFrame:1, fChunkHdr:1, size:62; UINT64 filepos; DWORD orgsize;};
  22. CArray<chunk> cs;
  23. UINT64 totalsize;
  24. REFERENCE_TIME GetRefTime(DWORD frame, UINT64 size);
  25. int GetTime(DWORD frame, UINT64 size);
  26. int GetFrame(REFERENCE_TIME rt);
  27. int GetKeyFrame(REFERENCE_TIME rt);
  28. DWORD GetChunkSize(DWORD size);
  29. bool IsRawSubtitleStream();
  30. // tmp
  31. struct chunk2 {DWORD t; DWORD n;};
  32. CArray<chunk2> cs2;
  33. };
  34. CAutoPtrArray<strm_t> m_strms;
  35. CMap<DWORD, DWORD, CStringA, CStringA&> m_info;
  36. CAutoPtr<AVIOLDINDEX> m_idx1;
  37. CList<UINT64> m_movis;
  38.     
  39. REFERENCE_TIME GetTotalTime();
  40. HRESULT BuildIndex();
  41. void EmptyIndex();
  42. bool IsInterleaved(bool fKeepInfo = false);
  43. };
  44. #define TRACKNUM(fcc) (10*((fcc&0xff)-0x30) + (((fcc>>8)&0xff)-0x30))
  45. #define TRACKTYPE(fcc) ((WORD)((((DWORD)fcc>>24)&0xff)|((fcc>>8)&0xff00)))