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

多媒体编程

开发平台:

Visual C++

  1. #pragma once
  2. #include "..BaseSplitterBaseSplitter.h"
  3. #pragma pack(push, 1)
  4. struct OggPageHeader
  5. {
  6. DWORD capture_pattern;
  7. BYTE stream_structure_version;
  8. BYTE header_type_flag; enum {continued=1, first=2, last=4};
  9. __int64 granule_position;
  10. DWORD bitstream_serial_number;
  11. DWORD page_sequence_number;
  12. DWORD CRC_checksum;
  13. BYTE number_page_segments;
  14. };
  15. struct OggVorbisIdHeader
  16. {
  17. DWORD vorbis_version;
  18. BYTE audio_channels;
  19. DWORD audio_sample_rate;
  20. DWORD bitrate_maximum;
  21. DWORD bitrate_nominal;
  22. DWORD bitrate_minimum;
  23. BYTE blocksize_0:4;
  24. BYTE blocksize_1:4;
  25. BYTE framing_flag;
  26. };
  27. struct OggVideoHeader
  28. {
  29. DWORD w, h;
  30. };
  31. struct OggAudioHeader
  32. {
  33. WORD nChannels, nBlockAlign;
  34. DWORD nAvgBytesPerSec;
  35. };
  36. struct OggStreamHeader
  37. {
  38. char streamtype[8], subtype[4];
  39. DWORD size;
  40. __int64 time_unit, samples_per_unit;
  41. DWORD default_len;
  42.     DWORD buffersize;
  43. WORD bps;
  44. WORD alignmentfix1;
  45.     union {OggVideoHeader v; OggAudioHeader a;};
  46. DWORD alignmentfix2;
  47. };
  48. #pragma pack(pop)
  49. class OggPage : public CArray<BYTE>
  50. {
  51. public:
  52. OggPageHeader m_hdr;
  53. CList<int> m_lens;
  54. OggPage() {memset(&m_hdr, 0, sizeof(m_hdr));}
  55. };
  56. class COggFile : public CBaseSplitterFile
  57. {
  58. using CBaseSplitterFile::Read;
  59. HRESULT Init();
  60. public:
  61. COggFile(IAsyncReader* pAsyncReader, HRESULT& hr);
  62. bool Sync(HANDLE hBreak = NULL);
  63. bool Read(OggPageHeader& hdr, HANDLE hBreak = NULL);
  64. bool Read(OggPage& page, bool fFull = true, HANDLE hBreak = NULL);
  65. };