📄 jma_animation_player.c
字号:
/*****************************************************************************
* 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
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* jma_animation_player.c
*
* Project:
* --------
* Maui_Software
*
* Description:
* ------------
* This file implements JMA Image Animation APIs
*
* 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!
*
* 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!!
*============================================================================
****************************************************************************/
/*************************************************************************
* Include Header Files
*************************************************************************/
/* Java Header */
#include "jma_interface.h"
#include "jma_internal.h"
#if defined (SUPPORT_MMAPI)
/*************************************************************************
* Global Variable
*************************************************************************/
#define JMA_ANIMA_FRAME_NUM_STEP (1000)
anima_info_struct anima_info;
stack_timer_struct java_stop_time_timer;
/*************************************************************************
* Function
*************************************************************************/
static kal_bool jma_anima_player_draw_current_frame(void);
extern void jvm_stop_vm_external(void);
/*************************************************************************
* Function Implementation
*************************************************************************/
#ifdef __DRM_SUPPORT__
/*****************************************************************************
* FUNCTION
* jma_anima_player_drm_expired_hdlr
* DESCRIPTION
* This function is callback handler for drm expired
* PARAMETERS
* handle [?]
* event [IN]
* RETURNS
* void
*****************************************************************************/
void jma_anima_player_drm_expired_hdlr(kal_int32 result, kal_int32 drm_id)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
int java_player;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_ANIMA_PLAYER_DRM_EXPIRED_HDLR, result, drm_id);
if (video_player.drm_id != drm_id)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.drm_id);
return;
}
jam_drm_stop_consume(video_player.drm_id);
video_player.drm_state = JAVA_DRM_STATE_EXPIRED;
video_player.drm_id = -1;
/* If fail, resource is occupied by MMI, do nothing */
JMA_CS_ENTER(JMA_VOID);
java_player = video_player.id;
jma_anima_player_close(java_player);
JMA_CS_LEAVE(JMA_VOID);
jvm_post_mma_event(MMA_EVENT_ERROR, java_player, MMA_ERR_DRM_RIGHT_EXPIRED);
}
#endif
/*****************************************************************************
* FUNCTION
* jma_anima_player_suspend_hdlr
* DESCRIPTION
* The function is animation player's suspend handler
* PARAMETERS
* java_player [IN]
* RETURNS
* kal_bool
*****************************************************************************/
kal_int32 jma_anima_player_suspend_hdlr(kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_ANIMA_PLAYER_SUSPEND_HDLR, java_player, video_player.state);
JMA_CS_ENTER(RESOUCE_FAIL);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(RESOUCE_FAIL);
}
if (video_player.state == JAVA_MEDIA_STATE_OPENING)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STACK_STOP_TIMER);
stack_stop_timer(&java_media_timer);
}
else if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
{
/* (1) Keep current_time & delay time. */
/* (2) Stop java_media_timer, java_stop_time_timer */
jma_anima_player_pause(java_player);
/* Keep original state */
video_player.state = JAVA_MEDIA_STATE_PLAYING;
}
#ifdef __DRM_SUPPORT__
/* pause consume drm right */
if (video_player.drm_state == JAVA_DRM_STATE_CONSUMING)
{
jam_drm_pause_consume(video_player.drm_id);
video_player.drm_state = JAVA_DRM_STATE_PAUSED;
}
#endif
/* free layers */
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);
}
JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}
/*****************************************************************************
* FUNCTION
* jma_anima_player_resume_hdlr
* DESCRIPTION
* The function is animation player's resume handler
* PARAMETERS
* java_player [IN]
* RETURNS
* kal_bool
*****************************************************************************/
kal_int32 jma_anima_player_resume_hdlr(kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_bool ret;
#ifdef __DRM_SUPPORT__
kal_int32 drm_result;
#endif
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_ANIMA_PLAYER_RESUME_HDLR, java_player, video_player.state);
JMA_CS_ENTER(RESOUCE_FAIL);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(RESOUCE_FAIL);
}
/* Reset animation cache when buffer content is changed */
gdi_image_cache_reset();
if (video_player.state == JAVA_MEDIA_STATE_OPENING)
{
jma_anima_player_parse_info_cyclic();
JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}
/* Including 3 states: PLAYING, PAUSE, READY after play finish */
if (video_player.need_redraw)
{
jma_video_player_refine_display_info();
ret = jma_video_player_process_layer();
/* Config hardware layer: even if in invisible case */
jui_widget_set_hardware_layer(preview_layer_handle, &blt_layer_flag, &preview_layer_flag);
if (video_ctrl_info.is_visible == KAL_FALSE)
{
jui_widget_set_hardware_layer(GDI_NULL_HANDLE, NULL, NULL);
jui_widget_refresh_screen(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1);
}
if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
{
/* Use delay_time stored at suspend handler */
video_player.state = JAVA_MEDIA_STATE_PAUSED;
jma_anima_player_play(java_player);
}
else /* PAUSED state or READY state after play finish */
{
/* Draw paused frame on the screen */
if(!jma_anima_player_draw_current_frame())
{
JMA_CS_LEAVE(RESOUCE_FAIL);
}
}
}
#ifdef __DRM_SUPPORT__
if (video_player.drm_state == JAVA_DRM_STATE_PAUSED)
{
drm_result = jam_drm_resume_consume(video_player.drm_id);
if (drm_result == J2ME_NO_ERROR)
{
video_player.drm_state = JAVA_DRM_STATE_CONSUMING;
}
else
{
jma_anima_player_close(java_player);
jvm_post_mma_event(MMA_EVENT_ERROR, java_player, MMA_ERR_DRM_RIGHT_EXPIRED);
JMA_CS_LEAVE(RESOUCE_FAIL);
}
}
#endif
JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}
/*****************************************************************************
* FUNCTION
* jma_anima_player_close_hdlr
* DESCRIPTION
* The function is animation player's close handler
* PARAMETERS
* java_player [IN]
* RETURNS
* kal_bool
*****************************************************************************/
kal_int32 jma_anima_player_close_hdlr(kal_int32 java_player)
{
/*----------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -