media_player_prot.h
12.4 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
/*****************************************************************************
* 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) 2007
*
* 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:
* ---------
* media_player_int.h
*
* Project:
* --------
* MAUI
*
* 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!
* 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 _MEDIA_PLAYER_INT_H
#define _MEDIA_PLAYER_INT_H
#if defined(__VIDEO_ARCHI_V2__)
#include "media_common.h"
#include "mpl_common.h" // the common defition for MPL
#include "media_enum.h"
#include "media_player.h"
#include "video_types_v2.h"
#include "kal_general_types.h"
#include "l1audio.h"
#include "kal_public_defs.h"
/*****************************************************************************
* Define
*****************************************************************************/
#define MPLY_SET_FLAG(flag_) (self->bit_flag |= (flag_))
#define MPLY_UNSET_FLAG(flag_) (self->bit_flag &= (~(flag_)))
#define MPLY_IS_FLAG_SET(flag_) ((self->bit_flag & (flag_)) == (flag_))
#define MEDIA_PLAYER_HAS_TRACK(track_) ((self->track & track_) != 0)
#define MEDIA_PLAYER_TIME_TO_COMPTIME(time) (time * 1000)
#define MEDIA_PLAYER_COMPTIME_TO_TIME(time) (time / 1000)
#define MEDIA_PLAYER_INVALID_INDEX (0xFFFFFFFF)
#define MEDIA_PLAYER_VOL_LEVEL_NOT_USED (0xFF)
#define MEDIA_PLAYER_AMR_SAMPLING_RATE (8000)
#define MEDIA_PLAYER_AMRWB_SAMPLING_RATE (16000)
#define MEDIA_PLAYER_ADTS_HEADER_LEN (7)
#define MPLY_LIVE_STREAM_IGNORE_UNDERFLOW (2000)
#define MPLY_AUD_RING_BUFFER_SIZE VID_RING_BUFFER_LEN
#define MPLY_AMR_RING_BUFFER_SIZE (4*1024)
#define MPLY_AUD_BUFFER_START_TO_PLAY (4*1024)
/* aud ring buffer size >= amr ring buffer size */
#if (MPLY_AMR_RING_BUFFER_SIZE > MPLY_AUD_RING_BUFFER_SIZE)
#undef MPLY_AMR_RING_BUFFER_SIZE
#define MPLY_AMR_RING_BUFFER_SIZE MPLY_AUD_RING_BUFFER_SIZE
#endif
/* amr ring buffer size >= start play ring buffer size */
#if (MPLY_AUD_BUFFER_START_TO_PLAY > MPLY_AMR_RING_BUFFER_SIZE)
#undef MPLY_AUD_BUFFER_START_TO_PLAY
#define MPLY_AUD_BUFFER_START_TO_PLAY (MPLY_AMR_RING_BUFFER_SIZE)
#endif
/*****************************************************************************
* Enumeration
*****************************************************************************/
typedef enum{
MEDIA_PLAYER_EG_DECODER_COMPLETE = 0x00000001,
MEDIA_PLAYER_EG_DECODER_ERROR = 0x00000002,
MEDIA_PLAYER_EG_SCHEDULER_COMPLETE = 0x00000004,
MEDIA_PLAYER_EG_SCHEDULER_ERROR = 0x00000008,
MEDIA_PLAYER_EG_CLOCK_COMPLETE = 0x00000010,
MEDIA_PLAYER_EG_CLOCK_ERROR = 0x00000020,
MEDIA_PLAYER_EG_RENDER_COMPLETE = 0x00000040,
MEDIA_PLAYER_EG_RENDER_ERROR = 0x00000080,
MEDIA_PLAYER_EG_DECODER_FLUSH_FRAME_DONE = 0x00000100
}media_player_comp_eg_enum;
typedef enum{
MEDIA_PLAYER_RENDER_GET_FRAME,
MEDIA_PLAYER_RENDER_PLAY_INVISIBLE,
MEDIA_PLAYER_RENDER_PLAY_VISIBLE
}media_player_render_param_type_enum;
typedef enum{
MEDIA_PLAYER_PREV_FRAME,
MEDIA_PLAYER_CURR_FRAME
}media_player_frame_enum;
typedef enum
{
MPLY_FLAG_SUPPORT_TIME_STRETCH = 1, /* 1 */
MPLY_FLAG_SEEK_TIME_REACHED = (1 << 1), /* 2 */
MPLY_FLAG_LIVE_STREAM = (1 << 2), /* 4 */
MPLY_FLAG_IS_DUMMY_AUDIO = (1 << 3), /* 8 */
MPLY_FLAG_AUD_BUFF_FULL = (1 << 4), /* 16 */
MPLY_FLAG_VID_BUFF_FULL = (1 << 5), /* 32 */
MPLY_FLAG_SKIP_NON_I_FRAME = (1 << 6), /* 64 */
MPLY_FLAG_WAIT_FLUSH_FRAME = (1 << 7), /* 128 */
MPLY_FLAG_VID_BUFF_REQ_HANDING = (1 << 8), /* 256 */
MPLY_FLAG_VID_VISUAL_UPDATE_PAUSED = (1 << 9), /* 512 */
MPLY_FLAG_RENDER_ERROR_HANDLING = (1 << 10), /* 1024 */
MPLY_FLAG_DECODE_UNSUPPORT_RES = (1 << 11), /* 2048 */
MPLY_FLAG_VID_USE_CUR_FRAME = (1 << 12) /* 4096 */
} media_player_bit_flag_enum;
/*****************************************************************************
* Structure
*****************************************************************************/
typedef struct
{
media_player_t itf;
media_player_client_t* client;
media_player_state_enum state;
media_player_video_config_t video_config;
media_player_audio_config_t audio_config;
/* Component */
VIDEO_EXTMEM_HANDLER_T *ext_handle;
VIDEO_INTMEM_HANDLER_T *int_handle;
VIDEO_COMPONENT_TYPE_T *input_handle;
VIDEO_COMPONENT_TYPE_T *decoder_handle;
VIDEO_COMPONENT_TYPE_T *scheduler_handle;
VIDEO_COMPONENT_TYPE_T *render_handle;
VIDEO_CALLBACK_TYPE_T decoder_callback;
VIDEO_CALLBACK_TYPE_T scheduler_callback;
VIDEO_CALLBACK_TYPE_T clock_callback;
VIDEO_CALLBACK_TYPE_T render_callback;
kal_uint64 audio_start_time;
kal_uint64 stop_time;
kal_uint64 current_time;
kal_uint64 audio_last_time;
kal_int64 max_empty_time;
kal_uint64 key_frame_time;
media_stream_t aud_stream;
media_stream_t vid_stream;
Media_Format aud_format;
kal_uint32 vid_stream_index;
kal_uint32 aud_stream_index;
kal_uint32 total_duration;
kal_uint32 play_speed;
kal_uint32 comp_event;
kal_uint32 aud_time_diff;
kal_uint32 bit_flag;
kal_uint32 predict_time;
kal_bool aud_format_supported;
kal_uint8 get_frame;
kal_uint8 vol_level;
kal_uint8 elapse_ticks;
kal_uint8 sleep_ticks;
mpl_scenario_enum media_scenario;
med_mode_enum media_mode;
kal_bool fgSeekable;
media_player_aud_stream_status_enum aud_stream_status;
media_player_vid_stream_status_enum vid_stream_status;
/* Audio */
kal_uint8 adts_header[MEDIA_PLAYER_ADTS_HEADER_LEN];
kal_uint8 *audio_buf;
MHdl *mhdl_handle;
kal_uint32 aud_session_id;
kal_uint32 vid_session_id;
kal_uint32 vid_life_cycle_id;
/* Buffer */
kal_uint32 aud_queue_num;
kal_uint32 vid_queue_num;
kal_uint32 silence_written_size;
kal_uint32 aud_written_size;
kal_uint32 adts_written_size;
kal_uint32 aud_frame_size; /* The frame size in queue */
kal_uint32 aud_frame_num; /* The frame num in audio ring buffer */
kal_uint32 aud_ready_frame_num;
media_data_t* audio_queue;
media_data_t* video_queue;
media_data_t* video_written_queue;
kal_uint32 intmem_start_address; /* internal memory start address for hardware engine buffer */
kal_uint32 extmem_start_address; /* external memroy start address for hardware engine buffer */
} media_player_cntx_struct;
extern media_player_cntx_struct *media_player_cntx_p;
extern kal_eventgrpid media_player_comp_eg;
extern kal_mutexid media_player_mutex;
/*****************************************************************************
* Declaration
*****************************************************************************/
static VIDEO_ERROR_TYPE_T media_player_decoder_callback(VIDEO_EVENT_TYPE_T event, kal_uint32 data1, kal_uint32 data2, void* data_ptr);
static VIDEO_ERROR_TYPE_T media_player_scheduler_callback(VIDEO_EVENT_TYPE_T event, kal_uint32 data1, kal_uint32 data2, void* data_ptr);
static VIDEO_ERROR_TYPE_T media_player_clock_callback(VIDEO_EVENT_TYPE_T event, kal_uint32 data1, kal_uint32 data2, void* data_ptr);
static VIDEO_ERROR_TYPE_T media_player_render_callback(VIDEO_EVENT_TYPE_T event, kal_uint32 data1, kal_uint32 data2, void* data_ptr);
static void media_player_add_to_queue(media_data_t **queue, media_data_t* data);
static void media_player_audio_dummy_callback(MHdl *handle, Media_Event event);
static void media_player_audio_event_callback(MHdl *handle, Media_Event event);
static void media_player_video_event_callback(media_player_comp_evt_enum event);
static void media_player_video_buffer_req_callback(void);
static media_error_t media_player_consume_audio_queue(media_player_t* mp);
static media_error_t media_player_consume_video_queue(media_player_t* mp);
static media_error_t media_player_deliver_vid_eof_buffer(media_player_t* mp);
static media_error_t media_player_play_dummy_audio(media_player_t* mp);
static media_error_t media_player_stop(media_player_t* mp);
static media_error_t media_player_write_to_audio_buffer(
media_player_t* mp,
kal_uint8 *data,
kal_uint32 data_len,
kal_uint32 *written_size);
static void media_player_fill_decoder_buffer(
media_player_t* mp,
VIDEO_BUFFERHEADER_TYPE_T *buffer_header,
media_data_t* media_data,
kal_bool init_param);
static VIDEO_ERROR_TYPE_T media_player_decoder_fill_this_buffer(
VIDEO_BUFFERHEADER_TYPE_T *buf_header);
static media_error_t media_player_notify_eos(media_player_t* mp, kal_uint32 stream_index);
static media_error_t media_player_play_audio(media_player_t* mp);
static VIDEO_DECODER_CODEC_T media_player_codec_type_to_decoder_type(media_codec_type_t codec_type);
/* Common function */
extern media_error_t media_player_do_recover(media_player_t* mp, media_time_t key_frame_time);
extern void media_player_reset_queue(media_player_t* mp, media_player_queue_type_enum queue_type);
extern void media_player_remove_from_queue(media_data_t **queue, media_data_t* node);
extern void media_player_reset_recover(void *arg);
#endif /* defined(__VIDEO_ARCHI_V2__) */
#endif /* _MEDIA_PLAYER_INT_H */