OSDN Git Service

add IStream interface.
[qtheora/main.git] / Lib / QMatroska / Matroska.h
1 /* Matroska.h */
2 /* 2009/05/25 */
3
4 #pragma once
5
6 #ifdef __cplusplus
7 extern "C"
8 {
9 #endif /* __cplusplus */
10
11 /* */
12
13 struct QM_TrackVideo {
14
15         INT32  PixelWidth;
16         INT32  PixelHeight;
17         DOUBLE FrameRate;
18
19 }; /* QM_TrackVideo */
20
21 typedef struct QM_TrackVideo QM_TrackVideo_t;
22
23 struct QM_TrackAudio {
24
25         DOUBLE SamplingFrequency;
26         INT32  Channels;
27         INT32  BitDepth;
28
29 }; /* QM_TrackAudio */
30
31 typedef struct QM_TrackAudio QM_TrackAudio_t;
32
33 struct QM_Track {
34
35         INT32 TrackNo;
36         INT32 TrackType;
37         INT32 TrackLacing;
38
39         const char* CodecId;
40
41         INT64 TrackDuration;
42
43         const QM_TrackVideo_t* Video;
44         const QM_TrackAudio_t* Audio;
45
46         const VOID* CodecPrivate;
47         INT32       CodecPrivateSize;
48
49 }; /* QM_Track */
50
51 typedef struct QM_Track QM_Track_t;
52
53 /* */
54
55 struct QM_QuePoint {
56
57         INT64 CueTime;
58
59         INT32 TrackNo;
60         INT64 ClusterPos;
61
62 }; /* QM_QuePoint */
63
64 typedef struct QM_QuePoint QM_QuePoint_t;
65
66 /* */
67
68 #define QM_FLAGS_KEYFRAME 0x80
69
70 struct QM_Block {
71
72         INT64 ClusterTime;
73
74         INT32 Duration;
75         INT32 Reference;
76
77         INT32 TrackNo;
78         INT32 TimeDelta;
79
80         INT32 Flags;
81
82         const VOID* Payload;
83         INT32       Size;
84
85 }; /* QM_Block */
86
87 typedef struct QM_Block QM_Block_t;
88
89 /* */
90
91 struct QM_Frame {
92
93         const VOID* Payload;
94         INT32       Size;
95
96 }; /* QM_Frame */
97
98 typedef struct QM_Frame QM_Frame_t;
99
100 /* */
101
102 struct QM_Reader;
103
104 typedef struct QM_Reader QM_Reader_t;
105
106 QM_Reader_t* QM_CreateReader(void);
107
108 void QM_ReleaseReader(QM_Reader_t* t);
109
110 BOOL QM_OpenReader(
111         QM_Reader_t* t,
112         const WCHAR* path);
113
114 BOOL QM_OpenReader_IStream(
115         QM_Reader_t* t,
116         IStream*     p);
117
118 INT64 QM_GetTimeCodeScale(
119         QM_Reader_t* t);
120
121 DOUBLE QM_GetDuraion(
122         QM_Reader_t* t);
123
124 INT32 QM_GetTrackCount(
125         QM_Reader_t* t);
126
127 const QM_Track_t* QM_GetTracks(
128         QM_Reader_t* t);
129
130 INT32 QM_ReadBlock(
131         QM_Reader_t* t,
132         QM_Block_t*  block);
133
134 BOOL QM_SeekCluster(
135         QM_Reader_t* t,
136         INT64        pos);
137
138 /* */
139
140 struct QM_FrameExtractor;
141
142 typedef struct QM_FrameExtractor QM_FrameExtractor_t;
143
144 QM_FrameExtractor_t* QM_CreateFrameExtractor(void);
145
146 void QM_ReleaseFrameExtractor(QM_FrameExtractor_t* t);
147
148 BOOL QM_DecodeLacingBlock(
149         QM_FrameExtractor_t* t,
150         const QM_Block_t*    block);
151
152 INT32 QM_ReadFrame(
153         QM_FrameExtractor_t* t,
154         QM_Frame_t*          frame);
155
156 /* */
157
158 #ifdef __cplusplus
159 }
160 #endif /* __cplusplus */
161