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

📄 jma_video_recorder.c

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


/*****************************************************************************
 * FUNCTION
 *  jma_video_recorder_save_file
 * DESCRIPTION
 *  / mmi_vdorec_entry_saving_screen
 *  enter save screen
 * PARAMETERS
 *  native_recorder     [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void jma_video_recorder_save_file(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MDI_RESULT result;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_SAVE_FILE, video_player.id, video_player.state);
    JMA_CS_ENTER(JMA_VOID);

    /* if unsaved file exist, merge them */
    if (mdi_video_rec_has_unsaved_file(NULL))
    {
        video_record_need_merge = KAL_TRUE;
        result = mdi_video_rec_save_file(NULL, jma_video_recorder_save_result_hdlr);
        /* if error occurs, delete file */
        if (result != MDI_RES_VDOREC_SUCCEED) 
        {
            mdi_video_rec_delete_unsaved_file(NULL);
        }
    }
    
    JMA_CS_LEAVE(JMA_VOID);
}




/*****************************************************************************
 * FUNCTION
 *  jma_video_recorder_record_result_hdlr
 * DESCRIPTION
 *  The function is invoked when record size limit is reached or error occurs, 
 *  such as disk full,....
 * PARAMETERS
 *  result      [IN]        
 *  a(?)        [IN]        Current state
 * RETURNS
 *  void
 *****************************************************************************/
void jma_video_recorder_record_result_hdlr(MDI_RESULT result)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int32 recorder;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_RECORD_RESULT_HDLR, video_player.id, video_player.state, result);
    JMA_CS_ENTER(JMA_VOID);

    /* 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);
     
    /* 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;
        
    if (result == MDI_RES_VDOREC_DISK_FULL)
    {
        jma_video_recorder_commit(MMA_TYPE_MPEG, video_player.id);
        jvm_post_mma_event(MMA_EVENT_RECORD_STOPPED, 
            (kal_int16) video_player.id, video_player.current_time);
    }
    else /* Error case */
    {
        recorder = video_player.id;
        jma_video_recorder_close(MMA_TYPE_MPEG, recorder);
        jvm_post_mma_event(MMA_EVENT_RECORD_ERROR, (kal_int16) recorder, (kal_int64) MMA_ERR_RECORD_FAIL);
    }  
    JMA_CS_LEAVE(JMA_VOID);
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_recorder_save_result_hdlr
 * DESCRIPTION
 *  / jma_mpeg_recorder_save_result_hdlr_callback
 *  callback function when save is done
 * PARAMETERS
 *  result      [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void jma_video_recorder_save_result_hdlr(MDI_RESULT result)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int32 recorder;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_SAVE_RESULT_HDLR, video_player.id, video_player.state, result);
    JMA_CS_ENTER(JMA_VOID);
    /* Reset parameter */
    video_record_need_merge = KAL_FALSE;
    
    /* if error occurs, delete file */
    if (result != MDI_RES_VDOREC_SUCCEED) 
    {
        recorder = video_player.id;
        jma_video_recorder_close(MMA_TYPE_MPEG, recorder);
        jvm_post_mma_event(MMA_EVENT_RECORD_ERROR, (kal_int16) recorder, (kal_int64) MMA_ERR_RECORD_FAIL);
    }
    JMA_CS_LEAVE(JMA_VOID);
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_recorder_open
 * DESCRIPTION
 *  This function allocate mpeg recorder context and open file for recording
 * PARAMETERS
 *  mma_type            [IN]        
 *  java_player       [IN]        
 *  filename            [?]         
 *  mode                [IN]        
 * RETURNS
 *  int - 0
 *****************************************************************************/
kal_bool jma_video_recorder_open(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_OPEN, java_player);
    JMA_CS_ENTER(KAL_FALSE);

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


    gdi_layer_reset_clip();
    gdi_layer_reset_text_clip();
    
    /* Check if Bluetooth is in use now */
#ifdef __MMI_FTS_SUPPORT__
    if (mmi_ftp_server_is_receiving())
    {
        j2me_send_not_found(BT_IN_USE);
        JMA_CS_LEAVE(KAL_FALSE);
    }
#endif
#ifdef __MMI_OPP_SUPPORT__
    if (mmi_opp_is_receiving())
    {
        j2me_send_not_found(BT_IN_USE);
        JMA_CS_LEAVE(KAL_FALSE);
    }
#endif

    if (mdi_video_rec_has_unsaved_file(NULL) == TRUE)
    {
        /* residue temp files exist, cleaning needed! */
        mdi_video_rec_delete_unsaved_file(NULL);
    }

    
    
    if (video_player.state == JAVA_MEDIA_STATE_NULL)
    {
        /* Backlight control */
        jvm_force_backlight_on(KAL_TRUE);
        /* camera HW power on */
        result = mdi_video_rec_power_on();
        if (result == MDI_RES_VDOREC_SUCCEED)
        {
            
            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.id = java_player;
            video_player.current_time = 0;
            video_player.device_type = JAVA_MEDIA_MPEG_RECORDER_DEVICE;
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_START_DOUBLE_BUFFER);
            jui_widget_start_double_buffer();
            video_player.is_double_buffer = KAL_TRUE;
            
            jma_register_device(
                JAVA_MEDIA_MPEG_RECORDER_DEVICE, 
                java_player,
                &jma_video_recorder_suspend_hdlr, 
                &jma_video_recorder_resume_hdlr, 
                &jma_video_recorder_close_hdlr);
            JMA_CS_LEAVE(KAL_TRUE);
        }
        else
        {   
            /* Resume MMI Background Audio */
            mdi_audio_resume_background_play();
            JMA_CS_LEAVE(KAL_FALSE);
        }
    }
 
    JMA_CS_LEAVE(KAL_TRUE);
}


/*****************************************************************************
 * FUNCTION
 *  jma_video_recorder_close
 * DESCRIPTION
 *  If the function is called before commit(), it will erase recording material.
 * PARAMETERS
 *  mma_type            [IN]        Int recorder
 *  java_player       [IN]        
 * RETURNS
 *  kal_bool - true
 *****************************************************************************/
kal_bool jma_video_recorder_close(kal_int32 mma_type, kal_int32 java_player)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_CLOSE, 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 ||
        video_player.state == JAVA_MEDIA_STATE_STOPPED_PAUSED)
    {
        /* State will be changed to READY */
        jma_video_recorder_reset(mma_type, java_player);
    }

    if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
    {
        jma_video_recorder_stop_preview(mma_type, java_player);
    }

    if (video_player.state == JAVA_MEDIA_STATE_READY)
    {
        /* Camera power off */
        mdi_video_rec_power_off();
    }
    jma_deregister_device(JAVA_MEDIA_MPEG_RECORDER_DEVICE, java_player);
    kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_NULL);

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

    video_record_need_merge = KAL_FALSE;
    /* Backlight control */
    jvm_force_backlight_on(KAL_FALSE);
    /* Resume MMI Background Audio */
    mdi_audio_resume_background_play();

    JMA_CS_LEAVE(KAL_TRUE);

}


/*****************************************************************************
 * FUNCTION
 *  jma_mpeg_recorder_start_preview
 * DESCRIPTION
 *  () / mmi_vdorec_start_preview()
 *  Start preview
 * PARAMETERS
 *  native_recorder     [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
kal_bool jma_video_recorder_start_preview(kal_int32 mma_type, kal_int32 java_player)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    mdi_video_setting_struct video_preview_data;
    MDI_RESULT result;
    kal_bool ret;
        
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_START_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)
    {
        JMA_CS_LEAVE(KAL_TRUE);
    }
  
    /* preview */
    video_preview_data.wb = MDI_VIDEO_WB_AUTO;              /* vdorec_wb_command_map[g_vdorec_cntx.setting.wb]; */
    video_preview_data.ev = MDI_VIDEO_EV_0;                 /* vdorec_ev_command_map[g_vdorec_cntx.setting.ev]; */
    video_preview_data.banding = MDI_VIDEO_BANDING_60HZ;    /* vdorec_banding_command_map[g_vdorec_cntx.setting.banding]; */
    video_preview_data.effect = MDI_VIDEO_EFFECT_NOMRAL;    /* vdorec_effect_command_map[g_vdorec_cntx.setting.effect]; */
    video_preview_data.zoom = 10;                           /* VDOREC_FEATURE_ZOOM_0; //jma_mpeg_recorder_get_zoom_factor(); */
    video_preview_data.brightness = 128;
    video_preview_data.contrast = 128;
    video_preview_data.saturation = 128;
    video_preview_data.hue = 0;
    video_preview_data.preview_rotate = J2ME_PREVIEW_MAINLCD_ROTATE; //MDI_CAMERA_PREVIEW_ROTATE_0;
#ifdef HORIZONTAL_CAMERA
    video_preview_data.lcm_rotate = MDI_CAMERA_LCM_ROTATE_270;
#else 
    video_preview_data.lcm_rotate = MDI_CAMERA_LCM_ROTATE_0;
#endif 
    video_preview_data.night = 0;                           /* VDOREC_SETTING_NIGHT_OFF; //g_mpgrec_cntx.setting.night; */

    /* record */
    video_preview_data.video_size = MDI_VIDEO_VIDEO_SIZE_QCIF;
    video_preview_data.video_qty = MDI_VIDEO_REC_QTY_NORMAL;  /* dorec_video_qty_command_map[g_vdorec_cntx.setting.video_qty]; */
    video_preview_data.size_limit = 0;
    video_preview_data.time_limit = 0;
    video_preview_data.record_aud = TRUE;
    video_preview_data.video_format = VID_3GP_BIT_STREAM;   /* vdorec_video_format_command_map[g_vdorec_cntx.setting.video_format]; */

    /* preview & record */
    video_preview_data.overlay_frame_mode = FALSE;
    video_preview_data.overlay_frame_depth = 0;

⌨️ 快捷键说明

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