⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jma_animation_player.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 5 页
字号:
/*****************************************************************************
*  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 + -