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

📄 jma_video_player.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 5 页
字号:

    /* Open successfully */
    if (!video_player.progressive_dl)
    {
        /* MED would set mute when play dummy audio for pure video */
        jam_set_aud_volume_level(jam_get_aud_volume_level());      
        
        if (video_player.stoptime != -1)
        {
            mdi_video_ply_set_stop_time(video_player.stoptime);
        }

        /* 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);

        if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
        {
            video_player.state = JAVA_MEDIA_STATE_READY;
            ms = mdi_video_ply_seek(video_player.current_time);
            video_player.seek_error = (ms == MED_RES_OK)? KAL_FALSE : KAL_TRUE;
            jma_video_player_play(MMA_TYPE_MPEG, video_player.id);
        }
        else if (video_player.state == JAVA_MEDIA_STATE_PAUSED ||
                 video_player.state == JAVA_MEDIA_STATE_STOPPED_PAUSED)
        {            
            if (video_player.track != MDI_VIDEO_TRACK_A_ONLY)
            {
                jma_video_player_refine_display_info();
                ret = jma_video_player_process_layer();
                /* Seek to suspended time and Draw the layer */
                ms = mdi_video_ply_seek_and_get_frame(
                        video_player.current_time, preview_layer_handle);
                jui_widget_refresh_screen(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1);
            }
            else
            {
                ms = mdi_video_ply_seek(video_player.current_time);
            }
            video_player.seek_error = (ms == MED_RES_OK)? KAL_FALSE : KAL_TRUE;
        }
        else if (video_player.state == JAVA_MEDIA_STATE_READY)
        {
            ms = mdi_video_ply_seek(video_player.current_time);
            video_player.seek_error = (ms == MED_RES_OK)? KAL_FALSE : KAL_TRUE;
        }
           
    }
#ifdef __MMI_VIDEO_PDL__      
    else
    {
        /* state when Suspended: PAUSED, PLAYING, BUFFERING. Need to prepare layer for draw frame */
        if (video_player.track != MDI_VIDEO_TRACK_A_ONLY &&
            video_player.state != JAVA_MEDIA_STATE_READY &&
            video_player.state != JAVA_MEDIA_STATE_OPENING)
        {
            jma_video_player_refine_display_info();
            ret = jma_video_player_process_layer();
        }   

        /* Change state as OPENING */
        kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_OPENING);
        video_player.state = JAVA_MEDIA_STATE_OPENING;
    }
#endif 
    JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_player_close_hdlr
 * DESCRIPTION
 *  This function is mpeg close handler invoked when finalizeResoueceMgr executes
 * PARAMETERS
 *  hdlr        [IN]        
 * RETURNS
 *  resource_error_code
 *****************************************************************************/
kal_int32 jma_video_player_close_hdlr(kal_int32 java_player)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
#ifdef __MMI_VIDEO_PDL__    
    kal_int32 result = -1;
#endif    
    MDI_RESULT ms;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/ 
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_CLOSE_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);
    }

    /* With resource */
    if (!is_vm_suspend_media)
    {
        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();                
            }
        }    
    #ifdef __MMI_VIDEO_PDL__
        else
        {
            mdi_video_progressive_close_file();            
        }
    #endif
    }
    
#ifdef __MMI_VIDEO_PDL__
    if (video_player.progressive_dl)
    {
        /* 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  

    /* Release buffer */
    if (video_player.buffer != NULL)
    {
        jvm_free(video_player.buffer);
        video_player.buffer = NULL;
    }  
    
    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);
        }
    }

    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(RESOUCE_NO_ERROR);
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_player_play_finish_hdlr
 * DESCRIPTION
 *  //mmi_vodply_player_play_finish_hdlr
 *  function to be called when play finished.
 * PARAMETERS
 *  result      [IN]        >=0, means successfully finished, if result < 0 measn some error happened)
 * RETURNS
 *  void
 *****************************************************************************/
void jma_video_player_play_finish_hdlr(MDI_RESULT result)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MDI_RESULT ms;
    java_mma_type_enum event_type;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_PLAY_FINISH_HDLR, result, video_player.state);
    JMA_CS_ENTER(JMA_VOID);
    if (video_player.state == JAVA_MEDIA_STATE_NULL)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
        JMA_CS_LEAVE(JMA_VOID); 
    }    
    
    mdi_video_ply_get_cur_play_time(&video_player.current_time);
    kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, video_player.current_time);

    if (result == MDI_RES_VDOPLY_ERR_DRM_DURATION_USED)
    {
        jma_video_player_close(MMA_TYPE_MPEG, video_player.id);       
        jvm_post_mma_event(MMA_EVENT_ERROR, video_player.id, MMA_ERR_DRM_RIGHT_EXPIRED);
        JMA_CS_LEAVE(JMA_VOID); 
    }
    else if (result == MDI_RES_VDOPLY_REACH_STOP_TIME)
    {
        video_player.is_play_requested = KAL_FALSE;
        /* STOPPED_PAUSED should be the same as PAUSED state. 
           The only difference is whether to call drm_disable_Consume_Count() in play() */
        kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_STOPPED_PAUSED);
        video_player.state = JAVA_MEDIA_STATE_STOPPED_PAUSED;

        /* Clear stop time */
        mdi_video_ply_set_stop_time((U64) -1);
        video_player.stoptime = -1;
        ms = mdi_video_ply_seek(video_player.current_time);
        video_player.seek_error = (ms == MED_RES_OK)? KAL_FALSE : KAL_TRUE;
        event_type = MMA_EVENT_STOPPED_AT_TIME;
    }  
#ifdef __MMI_VIDEO_PDL__  /* Underflow */      
    else if (result == MDI_RES_VDOPLY_PROGRESSIVE_FILE_NOT_ENOUGH)
    {
        /* change as buffering state directly */
        kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_BUFFERING);
        video_player.state = JAVA_MEDIA_STATE_BUFFERING;
        jma_video_player_cache_buffering_cyclic();
        JMA_CS_LEAVE(JMA_VOID); 
    }
#endif     
    else
    {
        video_player.is_play_requested = KAL_FALSE;
        kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_READY);
        video_player.state = JAVA_MEDIA_STATE_READY;        

        video_player.play_finish_time = video_player.current_time;
        /* set current time as 0 for playing at next time */
        video_player.current_time = 0;
        ms = mdi_video_ply_seek(0);
        video_player.seek_error = (ms == MED_RES_OK)? KAL_FALSE : KAL_TRUE;
        if (ms != MDI_RES_VDOPLY_SUCCEED)
        {
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, ms);
        }
        event_type = MMA_EVENT_END_OF_MEDIA;
    }
    /* enqueue to VM event queue */
    jvm_post_mma_event(event_type, (kal_int16) video_player.id, (kal_int64) video_player.play_finish_time);
    JMA_CS_LEAVE(JMA_VOID);
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_player_file_open
 * DESCRIPTION
 *  This function opens video file
 * PARAMETERS
 *  mma_type        [IN]        
 *  java_player     [IN]        
 *  filename        [?]         
 * RETURNS
 *  kal_bool
 *****************************************************************************/
kal_bool jma_video_player_open(kal_int32 mma_type, kal_int32 java_player, kal_char *data, kal_int32 length, kal_char *filename)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MDI_RESULT ms = MDI_RES_VDOPLY_ERR_FAILED;
    mdi_video_info_struct vdo_clip;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_PLAYER_OPEN, java_player);
    JMA_CS_ENTER(KAL_FALSE);

    /* find free player */
    if (video_player.id != INVALID_JPLAYER_ID)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    if (jma_audio_recorder_is_active() || jma_audio_player_is_active())
    {
        JMA_CS_LEAVE(KAL_FALSE);
    }    
  
    if (video_player.state == JAVA_MEDIA_STATE_NULL)
    {    
        /* Backlight control */
        jvm_force_backlight_on(KAL_TRUE);

        gdi_layer_reset_clip();
        gdi_layer_reset_text_clip();

        /* Enable pure-audio */
        mdi_video_ply_enable_aud_only_video_clip();
        if (filename == NULL)
        {
            /* Copy Data from KNI Layer */
            video_player.buffer = jvm_malloc(length);
            if (video_player.buffer == NULL)
            {
                kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
               
                JMA_CS_LEAVE(KAL_FALSE);
            }
            memcpy(video_player.buffer, data, length);
            video_player.buffer_length = length;
            ms = mdi_video_ply_open_clip_buffer(video_player.buffer, video_player.buffer_length, &vdo_clip);
        }
        else
        {
            /* Copy FileName from KNI Layer */
            mmi_ucs2cpy((S8*) video_player.filename, filename);
            ms = mdi_video_ply_open_clip_file((S8*) video_player.filename, &vdo_clip);
        }

        if (ms == MDI_RES_VDOPLY_SUCCEED)
        {
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_START_DOUBLE_BUFFER);
            jui_widget_start_double_buffer();
            video_player.is_double_buffer = KAL_TRUE;
        }
        else if (ms == MDI_RES_VDOPLY_ERR_DRM_PROHIBITED)
        {
            /* Release buffer */
            if (video_player.buffer != NULL)
            {
                jvm_free(video_player.buffer);
                video_player.buffer = NULL;
            }  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -