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

📄 jma_video_recorder.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 4 页
字号:
    video_preview_data.overlay_frame_source_key = 0;
    video_preview_data.overlay_frame_width = 0;
    video_preview_data.overlay_frame_height = 0;
    video_preview_data.overlay_frame_buffer_address = NULL;


    if (video_player.state == JAVA_MEDIA_STATE_READY)
    {
        
        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);
        }
        
        result = mdi_video_rec_preview_start(
                    preview_layer_handle,
                    blt_layer_flag,
                    preview_layer_flag,
                    video_ctrl_info.is_visible, //MMI_TRUE,
                    &video_preview_data);
        
        if (result == MDI_RES_VDOREC_SUCCEED)
        {
            kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_PLAYING);
            video_player.state = JAVA_MEDIA_STATE_PLAYING;
            JMA_CS_LEAVE(KAL_TRUE);
        }
        else
        {
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, result);

            /* 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(KAL_FALSE);
        }
    }
    
    JMA_CS_LEAVE(KAL_FALSE);
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_recorder_stop_preview
 * DESCRIPTION
 *  function to be called to stop preview
 * PARAMETERS
 *  void
 *  native_player(?)        [IN]        Play ID
 *  int mma_type(?)
 * RETURNS
 *  Bool.
 *****************************************************************************/
kal_bool jma_video_recorder_stop_preview(kal_int32 mma_type, kal_int32 java_player)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MDI_RESULT result;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_STOP_PREVIEW, java_player, video_player.state);
    JMA_CS_ENTER(KAL_FALSE);

    if (video_player.id != java_player)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
    {
        result = mdi_video_rec_preview_stop();

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

        }
       
        kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_READY);
        video_player.state = JAVA_MEDIA_STATE_READY;
    }   
    
    JMA_CS_LEAVE(KAL_TRUE);
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_recorder_start_record
 * DESCRIPTION
 *  This function submit Record request to media task.
 * PARAMETERS
 *  mma_type            [IN]        Int recorder
 *  java_player       [IN]        
 * RETURNS
 *  int - 0
 *****************************************************************************/
kal_bool jma_video_recorder_start_record(kal_int32 mma_type, kal_int32 java_player)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MDI_RESULT result;
    kal_int32 ticks = kal_milli_secs_to_ticks(200); /* 200 ms */
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_START_RECORD, java_player, video_player.state);
    JMA_CS_ENTER(KAL_FALSE);

    if (video_player.id != java_player)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    /* Spec says ignore. */
    if (video_player.state == JAVA_MEDIA_STATE_RECORDING)
    {
        JMA_CS_LEAVE(KAL_TRUE);
    }

    if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
    {
        result = mdi_video_rec_record_start(
                    (S8*) video_player.filename,
                    jma_video_recorder_record_result_hdlr);
    }
    else if (video_player.state == JAVA_MEDIA_STATE_PAUSED)
    {
        result = mdi_video_rec_record_resume();
    }
    else
    {
        kal_print("Video Record FAIL: state is not right!");
        jma_video_recorder_close(mma_type, java_player);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    if (result == MDI_RES_VDOREC_SUCCEED)
    {
        kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_RECORDING);
        video_player.state = JAVA_MEDIA_STATE_RECORDING;

        if (video_player.record_size_limit != -1)
        {
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STACK_START_TIMER);
            stack_start_timer(&java_media_timer, JAVA_MEDIA_TIMER_VIDEO_RECORDER, ticks);
        }
        JMA_CS_LEAVE(KAL_TRUE);
    }
    else
    {
        jma_video_recorder_close(mma_type, java_player);
        jvm_post_mma_event(MMA_EVENT_RECORD_ERROR, (kal_int16) java_player, (kal_int64) MMA_ERR_RECORD_FAIL);
        JMA_CS_LEAVE(KAL_FALSE);
    }
   
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_recorder_pause_record
 * DESCRIPTION
 *  This function submit stop request to media task.
 * PARAMETERS
 *  mma_type            [IN]        
 *  java_player       [IN]        
 *  int recorder(?)
 * RETURNS
 *  int - 0
 *****************************************************************************/
kal_bool jma_video_recorder_pause_record(kal_int32 mma_type, kal_int32 java_player)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MDI_RESULT result;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_PAUSE_RECORD, java_player, video_player.state); 
    JMA_CS_ENTER(KAL_FALSE);

    if (video_player.id != java_player)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    if (video_player.state == JAVA_MEDIA_STATE_RECORDING)
    {
        result = mdi_video_rec_record_pause(KAL_FALSE);
        if (result == MDI_RES_VDOREC_SUCCEED)
        {
            if (video_player.record_size_limit != -1)
            {
                kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STACK_STOP_TIMER);
                stack_stop_timer(&java_media_timer);
            }
            
            kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_PAUSED);
            video_player.state = JAVA_MEDIA_STATE_PAUSED;            
            /* get record time */
            mdi_video_rec_get_cur_record_time(&video_player.current_time);
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, (int) video_player.current_time);

        }
        else
        {
            jma_video_recorder_close(mma_type, java_player);
            JMA_CS_LEAVE(KAL_FALSE);
        }
    }
    JMA_CS_LEAVE(KAL_TRUE);
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_recorder_stop_record
 * DESCRIPTION
 *  This function deallocate mpeg recorder context
 * PARAMETERS
 *  mma_type            [IN]        Int recorder
 *  java_player       [IN]        
 * RETURNS
 *  kal_bool - true
 *****************************************************************************/
static kal_bool jma_video_recorder_stop_record(kal_int32 mma_type, kal_int32 java_player)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MDI_RESULT result;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_STOP_RECORD, java_player, video_player.state);  
    JMA_CS_ENTER(KAL_FALSE);

    if (video_player.id != java_player)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    /* Stop timer */
    if (video_player.state == JAVA_MEDIA_STATE_RECORDING)
    {
        if (video_player.record_size_limit != -1)
        {
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STACK_STOP_TIMER);
            stack_stop_timer(&java_media_timer);
        }
    }

    if (video_player.state == JAVA_MEDIA_STATE_RECORDING ||
        video_player.state == JAVA_MEDIA_STATE_PAUSED)
    {        
        /* get record time */
        mdi_video_rec_get_cur_record_time(&video_player.current_time);
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, (int) video_player.current_time);

        result = mdi_video_rec_record_stop();      
        
        /* 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);
        }

        /* MED recorder stopped, JAL has not saved file yet */
        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;
    }

    JMA_CS_LEAVE(KAL_TRUE);
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_recorder_close
 * DESCRIPTION
 *  This function deallocate mpeg recorder context
 * PARAMETERS
 *  mma_type            [IN]        Int recorder
 *  java_player       [IN]        
 * RETURNS
 *  kal_bool - true
 *****************************************************************************/
kal_bool jma_video_recorder_commit(kal_int32 mma_type, kal_int32 java_player)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_COMMIT, java_player, video_player.state); 
    JMA_CS_ENTER(KAL_FALSE);

    if (video_player.id != java_player)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
        JMA_CS_LEAVE(KAL_FALSE);
    }
    
    if (video_player.state == JAVA_MEDIA_STATE_RECORDING ||
        video_player.state == JAVA_MEDIA_STATE_PAUSED)
    {
        /* State will be changed */
        jma_video_recorder_stop_record(mma_type, java_player);
    }

    /* MED recorder has stopped, JAL has not saved file yet */
    if (video_player.state == JAVA_MEDIA_STATE_STOPPED_PAUSED)
    {
        /* save file */
        jma_video_recorder_save_file();
        
        /* After commit(), setRecordLocation needs to be called again */
        mmi_ucs2cpy((S8*) video_player.filename, "");

        kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_READY);
        video_player.state = JAVA_MEDIA_STATE_READY;
    }

    JMA_CS_LEAVE(KAL_TRUE);
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_recorder_reset
 * DESCRIPTION
 *  This function deallocate mpeg recorder context

⌨️ 快捷键说明

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