video_filereader_component_v2.h
9.32 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
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* Video_filereader_component.h
*
* Project:
* --------
* MTK
*
* Description:
* ------------
*
*
* 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!
*
*
*
****************************************************************************/
#ifndef VIDEO_FILEREADER_COMPONENT_H
#define VIDEO_FILEREADER_COMPONENT_H
#ifdef __VIDEO_ARCHI_V2__
#include "video_comm_v2.h"
#include "fsal.h"
#include "mp4_parser.h"
#include "video_types_v2.h"
#include "video_bitstream_buffer_management_v2.h"
#include "video_comm_component_v2.h"
#include "video_decoder_demuxer_if_v2.h"
/****************************************************************************
*
* Global parameter
*
*****************************************************************************/
#define VIDEO_FILEREADER_INPUT_BUFF_SIZE 0
#define VIDEO_FILEREADER_NAL_CTRL_BUFF_NUM (VIDEO_BITSTREAM_BUFF_MAX_NUM*2) // 300 NAL unit payload information for frames
// Define reasonable number of SPS&PPS in our system
//
#define VIDEO_FILEREADER_NAL_PARAM_CTRL_BUFF_NUM 288 // 288 NAL unit payload information for parameter set
// Bitstream buffer size
#define VIDEO_FILEREADER_BITSTREAM_BUFF_SIZE (320*240*3/2*3)
// For container AVC information
#define VIDEO_FILEREADER_AVC_CONFIG_LENGTH 5
#define VIDEO_FILEREADER_SCALE_UNIT VIDEO_COMMON_TIME_BASE // us
// Define fill bitstream buffer threshold in bytes
#define VIDEO_FILEREADER_BITSTREAM_BUFF_FILL_THRESHOLD (128*1024)
#define VIDEO_FILEREADER_PARAMSET_LENGTH 3000// 3000 bytes
#define VIDEO_FILEREADER_MAX_PARAMSET_NUM 288 // 32 + 256
#define VIDEO_FILEREADER_CMD_BUFFER_QUEUE_NUM 10
#define VIDEO_FILEREADER_INPUT_BUFFER_QUEUE_NUM 0
#define VIDEO_FILEREADER_OUTPUT_BUFFER_QUEUE_NUM 10
#define TIMEBASE_VIDEO_TO_MICROS(_TIME) VIDEO_ANYBASE_TO_ANYBASE(_TIME, _rVideoFileReaderState.u4VideoTimeScale, VIDEO_FILEREADER_SCALE_UNIT)
#define TIMEBASE_MICROS_TO_VIDEO(_TIME) VIDEO_ANYBASE_TO_ANYBASE(_TIME, VIDEO_FILEREADER_SCALE_UNIT, _rVideoFileReaderState.u4VideoTimeScale)
// file adap read parameter
/****************************************************************************
*
* Profile
*
*****************************************************************************/
// File reader internal compile option
#define __VIDEO_FILEREADER_PROFILE_ENABLE__
#define VIDEO_FILEREADER_MEASURE_HIGH 10
#define VIDEO_FILEREADER_MEASURE_LOW 5
#define VIDEO_FILEREADER_AVAIL_FRAME_WINDOW 50
typedef struct
{
kal_uint32 u4AccumulatedCount;
// Size
kal_uint32 u4AvgFetchSize;
kal_uint32 u4MaxFetchSize;
kal_uint32 u4TotalFetchSize;
kal_uint32 u4ContinuousReachMaxCount;
kal_uint32 u4NotContinuousCount;
kal_uint32 u4FetchCountUnderThreshold;
kal_uint32 u4FetchThreshold;
// Time
kal_uint32 u4AvgFetchTime;
kal_uint32 u4MaxFetchTime;
kal_uint32 u4TotalFetchTime;
// Available frame
kal_uint32 u4AvailFrameIndex;
kal_uint32 au4AvailFrameWindow[VIDEO_FILEREADER_AVAIL_FRAME_WINDOW];
}VIDEO_FILEREADER_PROFILE_T;
typedef struct
{
kal_bool fgIsFull;
kal_uint32 u4ReadIndex;
kal_uint32 u4WriteIndex;
// The buffer is used for frame record
H264_DECODER_INPUT_PARAM_T arPrivateData[VIDEO_BITSTREAM_BUFF_MAX_NUM];
H264_DECODER_PAYLOAD_INFO_T arNALCTRLBuff[VIDEO_FILEREADER_NAL_CTRL_BUFF_NUM];
}VIDEO_FILEREADER_NAL_CTRL_BUFF_T;
typedef enum
{
AVC_NALU_LENGTH_1 = 1,
AVC_NALU_LENGTH_2 = 2,
AVC_NALU_LENGTH_4 = 4
}VIDEO_FILEREADER_FILE_AVC_NAL_LENGTH_T;
typedef struct
{
STFSAL *prSTFSAL;
kal_uint32 u4StartFrame;
kal_uint32 u4EndFrame;
kal_uint32 u4TargetFrame;
kal_uint32 u4ResultCount; // Means that how many frames we fetch in that transition
kal_uint32 u4MaxFetchSize; // Define maximum fetch size. If fetch size > , filling process will stop.
kal_uint32 u4BeginOfBuffAddr; // Define start address of bitstream buffer
kal_uint32 u4EndOfBuffAddr; // Define end address of bitstream buffer
kal_uint32 u4ResultSize;
kal_uint32 u4ReadOffset;
kal_uint32 u4WriteOffset;
kal_uint32 *pu4FrameNum;
kal_uint32 *pu4FrameAddr;
kal_uint32 *pu4FrameLength;
kal_uint64 *pu4FrameTime;
kal_uint32 u4MaxFileAccessSize; //Defines the access size of File system.
kal_uint32 au4TempFileOffset[VIDEO_BITSTREAM_BUFF_MAX_NUM + 1]; // temp storage to enhance speed
} VIDEO_FILEREADER_FILE_ADAPTATION_STRUCT_T;
// Parameter Set Information
typedef struct
{
// MPEG-4 & H.264 common, excluding H.263
//
kal_uint8 au1ParamSetBuff[VIDEO_FILEREADER_PARAMSET_LENGTH];
kal_uint32 u4ParamSetTotalSize;
// Only for H.264
//
kal_uint32 u4NALuSizeInfo;
kal_uint32 u4NumOfNALuParamSet;
kal_uint32 au4NALuOfParamSetAddr[VIDEO_FILEREADER_MAX_PARAMSET_NUM];
kal_uint32 au4NALuOfParamSetLength[VIDEO_FILEREADER_MAX_PARAMSET_NUM];
// The private data is used only for H.264
// The buffer is used for parameter set record
kal_uint32 u4TotalNALSize;
H264_DECODER_INPUT_PARAM_T rPrivateData;
H264_DECODER_PAYLOAD_INFO_T arNALCTRLBuff[VIDEO_FILEREADER_NAL_PARAM_CTRL_BUFF_NUM];
} VIDEO_FILEREADER_PARAM_SET_STRUCT_T;
typedef struct
{
VIDEO_COMM_STATE_T rCommState;
VIDEO_BITSTREM_BUFF_STATUS_T *prBitstreamBuffStatus;
STFSAL *prFileReaderFSAL;
STMp4Parser *prFileReaderMp4Parser;
// Seek component
// Timescale: us 10^6
kal_uint64 u8SeekTime;
kal_uint32 u4SeekFrame;
kal_uint32 u4SeekPrevIFrame;
// File system adaptation
VIDEO_FILEREADER_FILE_ADAPTATION_STRUCT_T *prReadFileAdaptationInfo;
// Control information
kal_bool fgIsFatalError;
kal_bool fgClosingComp;
kal_bool fgIsDeliverParamSet;
kal_bool fgIsDeliverEOF;
kal_bool fgWaitForFreeAnyFrame; // This flag is used when bitstream buffer is not enough to fetch any frame
kal_uint32 u4DeliverFrame; // Indicate to the next deliver frame number
kal_uint32 u4FreeFrame; // Indicate to the next free frame number
kal_bool fgEmptyThisBufferFail;
// Container information
VIDEO_DECODER_TYPE_T u4VideoDecodeType; // MPEG4, H263, H264
kal_uint64 u8VideoDuration; // Get media file total duration
kal_uint32 u4VideoTimeScale;
kal_uint32 u4VideoTotalFrame;
// Video width & height
kal_uint32 u4VideoWidth;
kal_uint32 u4VideoHeight;
// Parameter set data
VIDEO_FILEREADER_PARAM_SET_STRUCT_T *prVideoParamSetData;
// NAL Control Buffer
VIDEO_FILEREADER_NAL_CTRL_BUFF_T *prNALCTRLBuffer;
// Profile statistic
VIDEO_FILEREADER_PROFILE_T rProfileData;
} VIDEO_FILEREADER_STATE_T;
extern VIDEO_COMPONENT_TYPE_T gVideoFileReaderComp;
#endif /* __VIDEO_ARCHI_V2__ */
#endif /* VIDEO_FILEREADER_COMPONENT_H */