vid_avi.h
10.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
/*******************************************************************************
* Filename:
* ---------
* vid_avi.h
*
* Project:
* --------
* Maui
*
* Description:
* ------------
* This file includes avi related info of video module.
*
* Author:
* -------
* -------
*
*==============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*==============================================================================
*******************************************************************************/
#ifndef VID_AVI_H
#define VID_AVI_H
#include "kal_general_types.h"
/*
* [AVI File Format] for MJPEG
*
* RIFF.4.AVI .
* LIST.4.hdlr.avih.(file header)
* LIST.4.strl.strh.(video header)
* .strf.(video format)
* LIST.4.strl.strh.(audio header)
* .strf.(audio format)
* JUNK.4.(junk)
* LIST.4.movi.xxdb.4.(video data)
* LIST.4.movi.xxdc.4.(video data)
* LIST.4.movi.xxwb.4.(audio data)
* LIST.4.ind1.(list data)
*/
#define MED_AVI_TAG_RIFF ("RIFF")
#define MED_AVI_TAG_AVI ("AVI ")
#define MED_AVI_TAG_LIST ("LIST")
#define MED_AVI_TAG_JUNK ("JUNK")
/* MJPEG */
#define MED_AVI_TAG_MJPG ("MJPG")
/* MPEG-4 */
#define MED_AVI_TAG_MP4V ("MP4V")
#define MED_AVI_TAG_XVID ("XVID")
#define MED_AVI_TAG_DX50 ("DX50")
#define MED_AVI_TAG_DIVX ("DIVX")
#define MED_AVI_TAG_DIV5 ("DIV5")
#define MED_AVI_TAG_3IVX ("3IVX")
#define MED_AVI_TAG_3IV2 ("3IV2")
#define MED_AVI_TAG_RMP4 ("RMP4")
#define MED_AVI_TAG_FMP4 ("FMP4")
/* H.263 */
#define MED_AVI_TAG_H263 ("H263")
#define MED_AVI_TAG_S263 ("S263")
/* H.264 */
#define MED_AVI_TAG_AVC1 ("AVC1")
#define MED_AVI_TAG_DAVC ("DAVC")
#define MED_AVI_TAG_H264 ("H264")
#define MED_AVI_TAG_X264 ("X264")
#define MED_AVI_TAG_HEADER_LIST ("hdrl")
#define MED_AVI_TAG_AVI_HEADER ("avih")
#define MED_AVI_TAG_STREAM_LIST ("strl")
#define MED_AVI_TAG_STREAM_HEADER ("strh")
#define MED_AVI_TAG_STREAM_FORMAT ("strf")
#define MED_AVI_TAG_MOVI ("movi")
#define MED_AVI_TAG_IDX1 ("idx1")
#define MED_AVI_TAG_STREAM_TYPE_VID ("vids")
#define MED_AVI_TAG_STREAM_TYPE_AUD ("auds")
#define MED_AVI_TAG_WB (" wb")
#define MED_AVI_TAG_DC (" dc")
#define MED_AVI_TAG_DB (" db")
#define MED_AVI_VISUAL_FILE (L"~visual.tmp")
#define MED_AVI_IDX_FILE (L"~idx.tmp")
/* flags for med_avi_avi_header_struct */
#define MED_AVI_FH_HAS_INDEX 0x00000010
#define MED_AVI_FH_MUST_USE_INDEX 0x00000020
#define MED_AVI_FH_IS_INTERLEAVED 0x00000100
#define MED_AVI_FH_TRUST_CK_TYPE 0x00000800
#define MED_AVI_FH_WAS_CAPTURE_FILE 0x00010000
#define MED_AVI_FH_COPY_RIGHTED 0x00020000
/* 56 byte */
typedef struct
{
kal_uint32 micro_sec_per_frame; /* frame rate */
kal_uint32 max_byte_per_sec; /* transfer rate */
kal_uint32 padding_factor; /* padding factor - * this */
kal_uint32 flag; /* flag */
kal_uint32 total_frame; /* total frame */
kal_uint32 init_frames; /* init frame */
kal_uint32 num_of_stream; /* num of streams */
kal_uint32 suggest_buf_size; /* suggested buffer size */
kal_uint32 width; /* video width */
kal_uint32 height; /* video height */
kal_uint32 reserve[4]; /* reserve */
} med_avi_file_header_struct;
/* flags for med_avi_stream_header_struct */
#define MED_AVI_SH_DISABLED 0x00000001
#define MED_AVI_SH_VIDEO_PALCHANGES 0x00010000
/* 52 byte */
typedef struct
{
kal_uint32 fcc_type;
kal_uint32 fcc_hdlr;
kal_uint32 flag;
kal_uint16 priority;
kal_uint16 language;
kal_uint32 init_frames;
kal_uint32 scale;
kal_uint32 rate; /* rate/scale = sample/sec */
kal_uint32 start;
kal_uint32 length;
kal_uint32 suggest_buf_size;
kal_uint32 quality;
kal_uint32 sample_size;
kal_uint16 rect_left;
kal_uint16 rect_top;
kal_uint16 rect_right;
kal_uint16 rect_bottom;
} med_avi_stream_header_struct;
typedef struct
{
kal_uint32 size;
kal_uint32 width;
kal_uint32 height;
kal_uint16 planes;
kal_uint16 bit_count;
kal_uint32 compression;
kal_uint32 size_image;
kal_uint32 x_pels_per_meter;
kal_uint32 y_pels_per_meter;
kal_uint32 color_used;
kal_uint32 color_important;
} med_avi_video_format_header_struct;
#define MED_AVI_AUD_FORMAT_WAV_UNKNOWN 0x0000
#define MED_AVI_AUD_FORMAT_WAV_PCM 0x0001
#define MED_AVI_AUD_FORMAT_WAV_ADPCM 0x0002
#define MED_AVI_AUD_FORMAT_WAV_IBM_CVSD 0x0005
#define MED_AVI_AUD_FORMAT_WAV_ALAW 0x0006
#define MED_AVI_AUD_FORMAT_WAV_MULAW 0x0007
#define MED_AVI_AUD_FORMAT_WAV_OKI_ADPCM 0x0010
#define MED_AVI_AUD_FORMAT_WAV_DVI_ADPCM 0x0011
#define MED_AVI_AUD_FORMAT_WAV_DIGISTD 0x0015
#define MED_AVI_AUD_FORMAT_WAV_DIGIFIX 0x0016
#define MED_AVI_AUD_FORMAT_WAV_YAMAHA_ADPCM 0x0020
#define MED_AVI_AUD_FORMAT_WAV_DSP_TRUESPEECH 0x0022
#define MED_AVI_AUD_FORMAT_WAV_GSM610 0x0031
#define MED_AVI_AUD_FORMAT_IBM_MULAW 0x0101
#define MED_AVI_AUD_FORMAT_IBM_ALAW 0x0102
#define MED_AVI_AUD_FORMAT_IBM_ADPCM 0x0103
#define MED_AVI_AUD_FORMAT_AMR_CBR 0x7A21
#define MED_AVI_AUD_FORMAT_AMR_VBR 0x7A22
#define MED_AVI_AUD_FORMAT_AMR_WB 0xA104
#define MED_AVI_AUD_FORMAT_FAAD_AAC 0x706D
#define MED_AVI_AUD_FORMAT_HDX4_AAC 0x0AAC
#define MED_AVI_AUD_FORMAT_MPEG2AAC 0x0180
#define MED_AVI_AUD_FORMAT_AAC 0xA106
#define MED_AVI_AUD_FORMAT_AAC2 0x00ff
#define MED_AVI_AUD_FORMAT_YMPEG 0x7000
#define MED_AVI_AUD_FORMAT_MPEG 0x0050
#define MED_AVI_AUD_FORMAT_MPEGLAYER3 0x0055
typedef struct
{
kal_uint16 format;
kal_uint16 channels;
kal_uint32 sample_per_sec;
kal_uint32 avg_byte_per_sec;
kal_uint16 block_align;
kal_uint16 bit_per_sample;
kal_uint16 size;
} med_avi_audio_format_header_struct;
/* flags for med_avi_index_struct */
#define MED_AVI_IF_LIST 0x00000001
#define MED_AVI_IF_KEY_FRAME 0x00000010
#define MED_AVI_IF_NO_TIME 0x00000100
#define MED_AVI_IF_COMP_USE 0x0FFF0000
typedef struct
{
kal_uint32 chunk_id;
kal_uint32 flag;
kal_uint32 chunk_offset;
kal_uint32 chunk_lenght;
} med_avi_index_struct;
typedef struct
{
kal_uint32 file_offset;
kal_uint32 frame_idx;
} med_avi_index_map_struct;
/* avi info, for caller */
#define MED_AVI_AUD_FORMAT_PCM 0x00000001
#define MED_AVI_AUD_FORMAT_NOT_SUPPORT 0x00000002
#define MED_AVI_VID_FORMAT_MJPEG 0x00000001
#define MED_AVI_VID_FORMAT_NOT_SUPPORT 0x00000002
typedef struct
{
kal_uint32 aud_format;
kal_uint32 aud_sample_rate;
kal_uint32 aud_channel;
kal_uint32 aud_bit_per_sample;
kal_uint32 vid_format;
kal_uint16 vid_width;
kal_uint16 vid_height;
kal_uint64 vid_duration_in_ms;
kal_uint32 vid_rate; /* rate/scale = fps */
kal_uint32 vid_scale;
kal_uint32 vid_fps; /* fps may have rounding error, use rate/scale when need accurate fps */
} med_avi_info_struct;
typedef enum
{
VID_AVI_MEM_NONCACHE,
VID_AVI_MEM_CACHE
} vid_avi_mem_type_enum;
typedef void* (*vid_avi_mem_alloc_func_t)(
kal_int32 size,
vid_avi_mem_type_enum type,
char* file_p,
long line_p);
typedef void (*vid_avi_mem_free_func_t)(
void** p,
vid_avi_mem_type_enum type,
char* file_p,
long line_p);
extern void med_avi_init(void);
typedef struct
{
kal_uint32 aud_format;
kal_uint32 aud_sample_rate;
kal_uint32 aud_channel;
kal_uint32 aud_bit_per_sample;
kal_uint32 vid_format;
kal_uint16 vid_width;
kal_uint16 vid_height;
kal_uint32 vid_rate; /* rate/scale = fps */
kal_uint32 vid_scale;
vid_avi_mem_alloc_func_t alloc_func_t;
vid_avi_mem_free_func_t free_func_t;
} med_avi_rec_struct;
/* recorder */
extern kal_int32 med_avi_open_record_file(med_avi_rec_struct *rec_data, const kal_wchar *filename_p);
extern kal_int32 med_avi_close_record_file(void);
extern kal_int32 med_avi_write_video_frame(kal_char *data_p, kal_uint32 len, kal_bool new_frame, kal_uint32 frame_length);
extern kal_int32 med_avi_write_audio_data(kal_char *data_p, kal_uint32 len);
extern kal_int32 med_avi_get_current_data_size(void);
extern kal_int32 med_avi_toggle_data_buffer(void);
extern kal_int32 med_avi_toggle_idx_buffer(void);
extern kal_int32 med_avi_dump_data_buffer_to_file(void);
extern kal_int32 med_avi_dump_idx_buffer_to_file(void);
extern kal_int32 med_avi_is_active_data_buf_sufficient(kal_int32 req_size);
extern kal_int32 med_avi_is_active_idx_buf_sufficient(void);
extern kal_int32 med_avi_merge_result(const kal_wchar *filename_p);
extern kal_int32 med_avi_get_cur_file_size(void);
extern kal_int32 med_avi_get_cur_record_time(kal_uint64 *time);
extern kal_bool med_avi_is_reach_record_limit(void);
extern kal_bool med_avi_has_unsaved_file(const kal_wchar *filepath_p);
extern kal_bool med_avi_clean_tmp_files(const kal_wchar *filepath_p);
extern kal_int32 med_avi_get_data_buf_size(void);
extern kal_int32 med_avi_get_idx_buf_size(void);
extern kal_int32 med_avi_update_fps(kal_uint32 rate, kal_uint32 scale);
#endif /* VID_AVI_H */