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

📄 jma_video_player.c

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