QMatroska Core API 仕様

QMatroska は、Matroska コンテナのリーダーライブラリである。

リーダー

  1. struct QM_TrackVideo {
  2. INT32 PixelWidth;
  3. INT32 PixelHeight;
  4. DOUBLE FrameRate;
  5. }; /* QM_TrackVideo */
  6. typedef struct QM_TrackVideo QM_TrackVideo_t;
  7. struct QM_TrackAudio {
  8. DOUBLE SamplingFrequency;
  9. INT32 Channels;
  10. INT32 BitDepth;
  11. }; /* QM_TrackAudio */
  12. typedef struct QM_TrackAudio QM_TrackAudio_t;
  13. struct QM_Track {
  14. INT32 TrackNo;
  15. INT32 TrackType;
  16. INT32 TrackLacing;
  17. const char* CodecId;
  18. INT64 TrackDuration;
  19. const QM_TrackVideo_t* Video;
  20. const QM_TrackAudio_t* Audio;
  21. const VOID* CodecPrivate;
  22. INT32 CodecPrivateSize;
  23. }; /* QM_Track */
  24. typedef struct QM_Track QM_Track_t;
  25. /* */
  26. struct QM_QuePoint {
  27. INT64 CueTime;
  28. INT32 TrackNo;
  29. INT64 ClusterPos;
  30. }; /* QM_QuePoint */
  31. typedef struct QM_QuePoint QM_QuePoint_t;
  32. /* */
  33. #define QM_FLAGS_KEYFRAME 0x80
  34. struct QM_Block {
  35. INT64 ClusterTime;
  36. INT32 Duration;
  37. INT32 Reference;
  38. INT32 TrackNo;
  39. INT32 TimeDelta;
  40. INT32 Flags;
  41. const VOID* Payload;
  42. INT32 Size;
  43. }; /* QM_Block */
  44. typedef struct QM_Block QM_Block_t;
  45. /* */
  46. struct QM_Frame {
  47. const VOID* Payload;
  48. INT32 Size;
  49. }; /* QM_Frame */
  50. typedef struct QM_Frame QM_Frame_t;
  51. /* */
  52. struct QM_Reader;
  53. typedef struct QM_Reader QM_Reader_t;
  54. QM_Reader_t* QM_CreateReader(void);
  55. void QM_ReleaseReader(QM_Reader_t* t);
  56. BOOL QM_OpenReader(
  57. QM_Reader_t* t,
  58. const WCHAR* path);
  59. BOOL QM_OpenReader_IStream(
  60. QM_Reader_t* t,
  61. IStream* p);
  62. INT64 QM_GetTimeCodeScale(
  63. QM_Reader_t* t);
  64. DOUBLE QM_GetDuraion(
  65. QM_Reader_t* t);
  66. INT32 QM_GetTrackCount(
  67. QM_Reader_t* t);
  68. const QM_Track_t* QM_GetTracks(
  69. QM_Reader_t* t);
  70. INT32 QM_ReadBlock(
  71. QM_Reader_t* t,
  72. QM_Block_t* block);
  73. BOOL QM_SeekCluster(
  74. QM_Reader_t* t,
  75. INT64 pos);

QM_CreateReader()

リーダーオブジェクトを作成する。

QM_ReleaseReader()

リーダーオブジェクトを解放する。

QM_OpenReader()

Matroska ファイルを開く。 ファイルが正しくない場合は、エラーとして FALSE を返す。

QM_OpenReader_IStream()

Windows IStream COM インターフェイスを用いて、Matroska ファイルを開く。 ファイルが正しくない場合は、エラーとして FALSE を返す。

QM_GetTimeCodeScale()

Matroska ファイルのタイムコードスケールを返す。

通常 ms 単位を表す値 1,000,000 (ns) が返る。

QM_GetDuraion()

Matroska ファイルの再生時間を返す。(タイムコードスケール・通常 ms 単位)

QM_GetTrackCount()

Matroska ファイル内のトラック数を返す。

QM_GetTracks()

Matroska ファイルのトラック情報を返す。

QM_ReadBlock()

Matroska ファイルの Block を読みだす。 全ての Block を読み終わったら、0 を返す。 エラーの場合は、負の値を返す。

QM_SeekCluster()

Cluster 単位でシーク動作を行う。シーク先 (pos タイムコードスケール) タイムスタンプを 超えないもっとも直前の Cluster へ移動する。

QM_Track_t

TrackLacing トラックのデータが Lacing されているかを表す。

QM_Block_t

ClusterTime 上位 Cluster のタイムスタンプ。

TimeDelta Block のタイムスタンプ。(ClusterTime からの相対値)

フレームエキストラクター

Lacing された Block から、Frame データを抽出する。

  1. struct QM_FrameExtractor;
  2. typedef struct QM_FrameExtractor QM_FrameExtractor_t;
  3. QM_FrameExtractor_t* QM_CreateFrameExtractor(void);
  4. void QM_ReleaseFrameExtractor(QM_FrameExtractor_t* t);
  5. BOOL QM_DecodeLacingBlock(
  6. QM_FrameExtractor_t* t,
  7. const QM_Block_t* block);
  8. INT32 QM_ReadFrame(
  9. QM_FrameExtractor_t* t,
  10. QM_Frame_t* frame);

QM_CreateFrameExtractor()

フレームエキストラクターオブジェクトを作成する。

QM_ReleaseFrameExtractor()

フレームエキストラクターオブジェクトを解放する。

QM_DecodeLacingBlock()

Block をデコードする。

QM_ReadFrame()

Block から、デコードされた Frame を抽出する。 全ての Frame を読み終わったら、0 を返す。 エラーの場合は、負の値を返す。