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

多媒体编程

开发平台:

Visual C++

  1. #pragma once
  2. #include "..BaseSplitterBaseSplitter.h"
  3. class CNutFile : public CBaseSplitterFile
  4. {
  5. HRESULT Init();
  6. public:
  7. #pragma pack(push, 1)
  8. typedef UINT64 vint;
  9. typedef INT64 svint;
  10. typedef CArray<BYTE> binary;
  11. typedef CArray<BYTE> string;
  12. struct packet_header
  13. {
  14. __int64 pos;
  15. vint fptr, bptr;
  16. UINT32 checksum;
  17. };
  18. struct main_header
  19. {
  20. vint version;
  21. vint stream_count;
  22. };
  23. struct codec_specific
  24. {
  25. vint type;
  26. binary data;
  27. };
  28. struct video_stream_header
  29. {
  30. vint width, height;
  31. vint sample_width, sample_height;
  32. vint colorspace_type;
  33. };
  34. struct audio_stream_header
  35. {
  36. vint samplerate_mul;
  37. vint channel_count;
  38. };
  39. struct stream_header
  40. {
  41. vint stream_id;
  42. vint stream_class;
  43. string fourcc;
  44. vint average_bitrate;
  45. string language_code;
  46. vint time_base_nom;
  47. vint time_base_denom;
  48. vint msb_timestamp_shift;
  49. vint shuffle_type;
  50. int fixed_fps:1;
  51. int index_flag:1;
  52. int reserved:6;
  53. CAutoPtrList<codec_specific> cs;
  54. union {video_stream_header vsh; audio_stream_header ash;};
  55. vint msb_timestamp;
  56. };
  57. struct frame_header
  58. {
  59. BYTE zero_bit:1;
  60. BYTE priority:2;
  61. BYTE checksum_flag:1;
  62. BYTE msb_timestamp_flag:2;
  63. BYTE subpacket_type:2;
  64. BYTE reserved:1;
  65. };
  66. struct index_entry
  67. {
  68. vint timestamp;
  69. vint position;
  70. };
  71. struct index_header
  72. {
  73.         vint stream_id;
  74. CArray<index_entry> ie;
  75. };
  76. struct info_header
  77. {
  78. // TODO
  79. vint dummy;
  80. };
  81. #pragma pack(pop)
  82. #define NUTM 0xF9526A624E55544Dui64
  83. #define NUTS 0xD667773F4E555453ui64
  84. #define NUTK 0xCB8630874E55544Bui64
  85. #define NUTX 0xEBFCDE0E4E555458ui64
  86. #define NUTI 0xA37B64354E555449ui64
  87. enum {SC_VIDEO = 0, SC_AUDIO = 32, SC_SUBTITLE = 64};
  88. void Read(vint& v);
  89. void Read(svint& sv);
  90. void Read(binary& b);
  91. void Read(packet_header& ph);
  92. void Read(main_header& mh);
  93. void Read(stream_header& sh);
  94. void Read(video_stream_header& vsh);
  95. void Read(audio_stream_header& ash);
  96. void Read(index_header& ih);
  97. void Read(info_header& ih);
  98. public:
  99. CNutFile(IAsyncReader* pAsyncReader, HRESULT& hr);
  100. main_header m_mh;
  101. CAutoPtrList<stream_header> m_streams;
  102. };