📄 jma_video_player.c
字号:
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_CLOSE, java_player, video_player.state);
JMA_CS_ENTER(JMA_VOID);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(JMA_VOID);
}
jma_deregister_device(JAVA_MEDIA_MPEG_PLAYER_DEVICE, java_player);
/* Avoid interaction */
j2me_lcd_mutex_lock();
if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
{
ms = mdi_video_ply_stop();
}
#ifdef __MMI_VIDEO_PDL__
else if (video_player.state == JAVA_MEDIA_STATE_BUFFERING)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STACK_STOP_TIMER);
stack_stop_timer(&java_media_timer);
}
#endif
if (!video_player.progressive_dl)
{
if (video_player.buffer == NULL)
{
ms = mdi_video_ply_close_clip_file();
}
else
{
ms = mdi_video_ply_close_clip_buffer();
/* Release buffer */
jvm_free(video_player.buffer);
video_player.buffer = NULL;
}
}
#ifdef __MMI_VIDEO_PDL__
else
{
mdi_video_progressive_close_file();
/* Close cache file */
if (video_player.cache_handle != NULL)
{
result = FS_Close(video_player.cache_handle);
video_player.cache_handle = NULL;
}
/* Delete cache file */
result = FS_Delete(video_player.filename);
if (result != FS_NO_ERROR)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, result);
}
}
#endif
if (video_player.track != MDI_VIDEO_TRACK_A_ONLY)
{
jui_widget_set_hardware_layer(GDI_NULL_HANDLE, NULL, NULL);
jui_widget_refresh_screen(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1);
if (preview_layer_handle != GDI_LAYER_EMPTY_HANDLE)
{
gdi_layer_free(preview_layer_handle);
preview_layer_handle = GDI_LAYER_EMPTY_HANDLE;
ASSERT(preview_buf_ptr != NULL);
mmi_frm_scrmem_free(preview_buf_ptr);
preview_buf_ptr = NULL;
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RELEASE_SCR_MEMORY);
}
}
/* Avoid interaction */
j2me_lcd_mutex_unlock();
if (video_player.is_double_buffer)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STOP_DOUBLE_BUFFER);
jui_widget_stop_double_buffer();
video_player.is_double_buffer = KAL_FALSE;
}
jma_video_player_reset_parameter();
/* Backlight control */
jvm_force_backlight_on(KAL_FALSE);
JMA_CS_LEAVE(JMA_VOID);
}
/*****************************************************************************
* FUNCTION
* jma_video_player_set_media_time
* DESCRIPTION
* This function submit VideoSetStartTime request to media task.
* PARAMETERS
* mma_type [IN]
* java_player [IN]
* now [IN]
* RETURNS
* void
*****************************************************************************/
kal_int64 jma_video_player_set_media_time(kal_int32 mma_type, kal_int32 java_player, kal_uint64 now)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
med_result_enum ms;
kal_uint64 current_time = -1;
kal_bool is_playing = KAL_FALSE;
#ifdef __MMI_VIDEO_PDL__
kal_uint64 max_time;
#endif
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_SET_MEDIA_TIME, java_player, video_player.state, now);
JMA_CS_ENTER(-1);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(-1);
}
#ifdef __MMI_VIDEO_PDL__
/* Restrict seek time */
if (video_player.progressive_dl)
{
/* keep the seek time and restrict the time in open_done_hdlr() */
/* Still have problem. seek successfully and delay restricting ? */
if (video_player.state == JAVA_MEDIA_STATE_OPENING)
{
video_player.current_time = now;
JMA_CS_LEAVE(now);
}
mdi_video_progressive_get_max_play_time(&max_time);
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, max_time);
if (now > max_time)
{
now = max_time;
}
}
#endif
/* BUFFERING state is for pdl player */
if (video_player.state == JAVA_MEDIA_STATE_PLAYING ||
video_player.state == JAVA_MEDIA_STATE_BUFFERING)
{
is_playing = KAL_TRUE;
}
if (is_playing == KAL_TRUE)
{
jma_video_player_pause(mma_type, java_player);
}
/* seek time should be bound in duration */
if (video_player.duration != -1 && now > video_player.duration)
{
now = video_player.duration;
}
/* Video player is at READY state or pure-audio */
if (video_player.state == JAVA_MEDIA_STATE_READY ||
video_player.track == MDI_VIDEO_TRACK_A_ONLY)
{
ms = mdi_video_ply_seek(now);
}
else
{
ms = mdi_video_ply_seek_and_get_frame(now, preview_layer_handle);
jui_widget_refresh_screen(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1);
}
video_player.seek_error = (ms == MED_RES_OK)? KAL_FALSE : KAL_TRUE;
if (ms == MED_RES_OK)
{
mdi_video_ply_get_cur_play_time(¤t_time);
video_player.current_time = current_time;
}
else
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
}
if (is_playing == KAL_TRUE)
{
jma_video_player_play(mma_type, java_player);
}
JMA_CS_LEAVE(current_time);
}
/*****************************************************************************
* FUNCTION
* jma_video_player_get_media_time
* DESCRIPTION
* This function submit VideoGetMediaTime request to media task.
* PARAMETERS
* mma_type [IN]
* java_player [IN]
* RETURNS
* long - current_time
*****************************************************************************/
kal_uint64 jma_video_player_get_media_time(kal_int32 mma_type, kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint64 current_time = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_GET_MEDIA_TIME, java_player, video_player.state);
JMA_CS_ENTER(-1);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(-1);
}
if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
{
mdi_video_ply_get_cur_play_time(¤t_time);
/* MED does not seek precisely. To Avoid current time goes back */
if (current_time >= video_player.current_time)
{
video_player.current_time = current_time;
}
else
{
current_time = video_player.current_time;
}
}
else if (video_player.play_finish_time != 0) /* for play finish */
{
current_time = video_player.play_finish_time;
}
else
{
current_time = video_player.current_time;
}
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, current_time);
JMA_CS_LEAVE(current_time);
}
/*****************************************************************************
* FUNCTION
* jma_video_player_get_duration
* DESCRIPTION
* This function submit VideoGetDuration request to media task.
* PARAMETERS
* mma_type [IN]
* java_player [IN]
* data [?]
* count [IN]
* RETURNS
* long - duration
*****************************************************************************/
kal_int64 jma_video_player_get_duration(kal_int32 mma_type, kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int64 duration = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_GET_DURATION, java_player, video_player.state);
JMA_CS_ENTER(0);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(0);
}
duration = video_player.duration;
if (duration == 0)
{
duration = -1;
}
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, duration);
JMA_CS_LEAVE(duration);
}
/*****************************************************************************
* FUNCTION
* jma_video_player_set_volume
* DESCRIPTION
* This function submit VideoSetVolume request to media task.
* PARAMETERS
* mma_type [IN]
* java_player [IN]
* vol [IN]
* RETURNS
* void
*****************************************************************************/
void jma_video_player_set_volume(kal_int32 mma_type, kal_int32 java_player, kal_int32 vol)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_SET_VOLUME, java_player, video_player.state, vol);
JMA_CS_ENTER(JMA_VOID);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(JMA_VOID);
}
video_player.volume = vol;
mdi_video_ply_set_audio_level(vol);
JMA_CS_LEAVE(JMA_VOID);
}
/*****************************************************************************
* FUNCTION
* jma_video_player_set_stop_time
* DESCRIPTION
* This function submit VideoSetStopTime request to media task.
* PARAMETERS
* mma_type [IN]
* java_player [IN]
* stime [IN]
* RETURNS
* long - stop time set
*****************************************************************************/
kal_uint64 jma_video_player_set_stop_time(kal_int32 mma_type, kal_int32 java_player, kal_uint64 stime)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_SET_STOP_TIME, java_player, video_player.state, stime);
JMA_CS_ENTER(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -