📄 jma_video_player.c
字号:
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(0);
}
video_player.stoptime = stime;
mdi_video_ply_set_stop_time(stime);
JMA_CS_LEAVE(stime);
}
/*****************************************************************************
* FUNCTION
* jma_video_player_set_rate
* DESCRIPTION
* This function sets play speed, unit: millirate
* PARAMETERS
* mma_type [IN]
* java_player [IN]
* stime [IN]
* RETURNS
* long - stop time set
*****************************************************************************/
kal_int32 jma_video_player_set_rate(kal_int32 java_player, kal_int32 rate)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 play_speed[9] = {
VDOPLY_FEATURE_SPEED_0,
VDOPLY_FEATURE_SPEED_1,
VDOPLY_FEATURE_SPEED_2,
VDOPLY_FEATURE_SPEED_3,
VDOPLY_FEATURE_SPEED_4,
VDOPLY_FEATURE_SPEED_5,
VDOPLY_FEATURE_SPEED_6,
VDOPLY_FEATURE_SPEED_7,
VDOPLY_FEATURE_SPEED_8};
kal_int32 i, choose_speed = 0, diff, min_diff;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_SET_RATE, java_player, rate);
JMA_CS_ENTER(0);
/* Check if java_player id is valid */
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(0);
}
/* Only mp4, 3gp support RateControl */
if (video_player.device_type != JAVA_MEDIA_MPEG_PLAYER_DEVICE)
{
JMA_CS_LEAVE(0);
}
/* Change unit */
rate /= 1000;
/* Find the closest play speed */
min_diff = 0x7fffffff;
for (i=0; i < VDOPLY_FEATURE_SPEED_COUNT; i++)
{
diff = play_speed[i] - rate;
diff = (diff > 0) ? diff : -diff;
if (diff < min_diff)
{
min_diff = diff;
choose_speed = play_speed[i];
}
}
/* Update parameter */
video_player.play_speed = choose_speed;
if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
{
/* Stop video player first */
jma_video_player_pause(MMA_TYPE_MPEG, java_player);
/* Play again to update play speed */
jma_video_player_play(MMA_TYPE_MPEG, java_player);
}
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, 1000 * choose_speed);
JMA_CS_LEAVE(1000 * choose_speed);
}
/*****************************************************************************
* FUNCTION
* jma_video_player_get_rate
* DESCRIPTION
* This function gets play speed, unit: millirate
* PARAMETERS
* mma_type [IN]
* java_player [IN]
* stime [IN]
* RETURNS
* long - stop time set
*****************************************************************************/
kal_int32 jma_video_player_get_rate(kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_GET_RATE, java_player);
/* Check if java_player id is valid */
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
return 0;
}
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, 1000 * video_player.play_speed);
return (1000 * video_player.play_speed);
}
/*****************************************************************************
* FUNCTION
* jma_video_player_get_max_rate
* DESCRIPTION
* This function gets max play speed, unit: millirate
* PARAMETERS
* mma_type [IN]
* java_player [IN]
* stime [IN]
* RETURNS
* long - stop time set
*****************************************************************************/
kal_int32 jma_video_player_get_max_rate(kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 play_speed[9] = {
VDOPLY_FEATURE_SPEED_0,
VDOPLY_FEATURE_SPEED_1,
VDOPLY_FEATURE_SPEED_2,
VDOPLY_FEATURE_SPEED_3,
VDOPLY_FEATURE_SPEED_4,
VDOPLY_FEATURE_SPEED_5,
VDOPLY_FEATURE_SPEED_6,
VDOPLY_FEATURE_SPEED_7,
VDOPLY_FEATURE_SPEED_8};
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_GET_MAX_RATE, java_player);
/* Check if java_player id is valid */
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
return 0;
}
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, 1000 * play_speed[VDOPLY_FEATURE_SPEED_COUNT - 1]);
return (1000 * play_speed[VDOPLY_FEATURE_SPEED_COUNT - 1]);
}
/*****************************************************************************
* FUNCTION
* jma_video_player_get_min_rate
* DESCRIPTION
* This function gets min play speed, unit: millirate
* PARAMETERS
* mma_type [IN]
* java_player [IN]
* stime [IN]
* RETURNS
* long - stop time set
*****************************************************************************/
kal_int32 jma_video_player_get_min_rate(kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_GET_MIN_RATE, java_player);
/* Check if java_player id is valid */
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
return 0;
}
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, 1000 * VDOPLY_FEATURE_SPEED_0);
return (1000 * VDOPLY_FEATURE_SPEED_0);
}
#if defined(__MMI_VIDEO_PDL__) || defined(__MMI_VIDEO_STREAM__)
/*****************************************************************************
* FUNCTION
* jma_video_player_draw_progress_bar
* DESCRIPTION
* This function is to draw progress bar
* PARAMETERS
* percentage [IN]
* RETURNS
* void
*****************************************************************************/
static void jma_video_player_draw_progress_bar(kal_int32 percentage)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 layer_width, layer_height;
kal_int32 bar_x, bar_y, bar_width, bar_height, current_progress;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
ASSERT(preview_layer_handle != NULL);
gdi_layer_push_and_set_active(preview_layer_handle);
gdi_layer_get_dimension(&layer_width, &layer_height);
gdi_layer_pop_and_restore_active();
bar_width = layer_width * 2 / 3;
bar_height = (bar_width / 10);
bar_height = (bar_height > 5) ? bar_height : 5;
ASSERT(bar_width != 0 && bar_height != 0);
bar_x = (layer_width - bar_width) / 2;
bar_y = (layer_height - bar_height) / 2;
current_progress = bar_width * percentage / 100;
gdi_layer_push_and_set_active(preview_layer_handle);
gdi_draw_solid_rect(bar_x, bar_y, bar_x + bar_width - 1, bar_y + bar_height - 1, GDI_COLOR_BLACK);
gdi_draw_solid_rect(bar_x, bar_y, bar_x + current_progress - 1, bar_y + bar_height - 1, GDI_COLOR_WHITE);
gdi_draw_rect(bar_x, bar_y, bar_x + bar_width - 1, bar_y + bar_height - 1, GDI_COLOR_WHITE);
gdi_draw_rect(bar_x + 1, bar_y + 1, bar_x + bar_width - 2, bar_y + bar_height - 2, GDI_COLOR_BLACK);
gdi_layer_pop_and_restore_active();
jui_widget_refresh_screen(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1);
}
#endif
#ifdef __MMI_VIDEO_PDL__
/*****************************************************************************
* FUNCTION
* jma_video_player_cache_open_done_hdlr
* DESCRIPTION
* This function is progressive player open done handler
* PARAMETERS
*
* RETURNS
* kal_bool - result
*****************************************************************************/
void jma_video_player_cache_open_done_hdlr(MDI_RESULT result, mdi_video_info_struct *vdo_clip)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
MDI_RESULT ms;
kal_uint64 max_time;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_CACHE_OPEN_DONE_HDLR, result, video_player.state);
JMA_CS_ENTER(JMA_VOID);
/* Error happens */
if (result < 0)
{
jma_video_player_close(0, video_player.id);
JMA_CS_LEAVE(JMA_VOID);
}
/* MED would set mute when play dummy audio for pure video */
jam_set_aud_volume_level(jam_get_aud_volume_level());
/* stop loading animation */
gdi_image_stop_animation_all();
mdi_video_ply_set_brightness(MDI_VIDEO_BRIGHTNESS_0);
mdi_video_ply_set_contrast(MDI_VIDEO_CONTRAST_0);
video_player.video_width = vdo_clip->width;
video_player.video_height = vdo_clip->height;
video_player.duration = vdo_clip->total_time_duration;
video_player.track = vdo_clip->track;
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_DD, vdo_clip->total_time_duration, vdo_clip->track);
mmi_ucs2ncpy(video_player.title_desc, vdo_clip->title_desc, MDI_VIDEO_CONTENT_BUFFER_SIZE);
mmi_ucs2ncpy(video_player.author_desc, vdo_clip->author_desc, MDI_VIDEO_CONTENT_BUFFER_SIZE);
mmi_ucs2ncpy(video_player.date_desc, vdo_clip->date_desc, MDI_VIDEO_CONTENT_BUFFER_SIZE);
mmi_ucs2ncpy(video_player.copyright_desc, vdo_clip->copyright_desc, MDI_VIDEO_CONTENT_BUFFER_SIZE);
/* Avoid user seeks over max_time when video is at opening state */
mdi_video_progressive_get_max_play_time(&max_time);
if (video_player.current_time > max_time)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_DD, video_player.current_time, max_time);
video_player.current_time = max_time;
}
/* Video player is at READY state or pure-audio */
if (preview_layer_handle == NULL || video_player.track == MDI_VIDEO_TRACK_A_ONLY)
{
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_READY);
video_player.state = JAVA_MEDIA_STATE_READY;
/* Need to seek before calling play: cannot reset current if resume from MMI interrupt */
ms = mdi_video_ply_seek(video_player.current_time);
video_player.seek_error = (ms == MED_RES_OK)? KAL_FALSE : KAL_TRUE;
}
else
{
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_PAUSED);
video_player.state = JAVA_MEDIA_STATE_PAUSED;
/* Seek to suspended time and Draw the layer */
ms = mdi_video_ply_seek_and_get_frame(
video_player.current_time, preview_layer_handle);
video_player.seek_error = (ms == MED_RES_OK)? KAL_FALSE : KAL_TRUE;
jui_widget_refresh_screen(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1);
}
/* For resume from MMI interrupt */
if (video_player.stoptime != -1)
{
mdi_video_ply_set_stop_time(video_player.stoptime);
}
if (video_player.is_play_requested)
{
jma_video_player_play(MMA_TYPE_MPEG, video_player.id);
}
JMA_CS_LEAVE(JMA_VOID);
}
/*****************************************************************************
* FUNCTION
* jma_video_player_cache_buffering_cyclic
* DESCRIPTION
* This function is buffering cyclic handler
* PARAMETERS
* result [IN]
* video_clip [IN]
* RETURNS
* void
*****************************************************************************/
kal_bool jma_video_player_cache_buffering_cyclic(void)
{
/*--------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -