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

📄 jma_audio_recorder.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 3 页
字号:
 *  int result
 *****************************************************************************/
kal_int32 jma_audio_recorder_suspend_hdlr(kal_int32 java_recorder)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    java_media_state_enum original_state;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_SUSPEND_HDLR,
        java_recorder, audio_recorder.state);

    JMA_CS_ENTER(RESOUCE_FAIL);
    original_state = audio_recorder.state;
    if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
        audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
    {
        /* State will be changed to READY */
        jma_audio_recorder_reset(java_recorder);        
    }

    /* Resume to original state */
    audio_recorder.state = original_state;

    JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}


/*****************************************************************************
 * FUNCTION
 *  jma_wav_recorder_close_hdlr
 * DESCRIPTION
 *  This function handles wav recorder close
 * PARAMETERS
 *  hdlr        [IN]        
 * RETURNS
 *  int result
 *****************************************************************************/
kal_int32 jma_audio_recorder_close_hdlr(kal_int32 java_recorder)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_CLOSE_HDLR,
        java_recorder, audio_recorder.state);

    JMA_CS_ENTER(RESOUCE_FAIL);
    if (audio_recorder.id != java_recorder)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
        JMA_CS_LEAVE(RESOUCE_FAIL); 
    }

    if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
        audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
    {
        if (!is_vm_suspend_media)
        {
            /* State will be changed to READY */
            jma_audio_recorder_reset(java_recorder);
        }
        
        jvm_post_mma_event(MMA_EVENT_RECORD_ERROR,
            (kal_int16) audio_recorder.id,
            (kal_int64) MMA_ERR_MMI_INTERRUPT);
    }
    
    kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_NULL);
    audio_recorder.state = JAVA_MEDIA_STATE_NULL;
    jma_audio_recorder_reset_parameter();    

    JMA_CS_LEAVE(RESOUCE_NO_ERROR); 
}


/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_resume_hdlr
 * DESCRIPTION
 *  This function handles wav recorder forec resume
 * PARAMETERS
 *  hdlr        [IN]        
 * RETURNS
 *  int result
 *****************************************************************************/
kal_int32 jma_audio_recorder_resume_hdlr(kal_int32 java_recorder)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_RESUME_HDLR,
        java_recorder, audio_recorder.state);

    JMA_CS_ENTER(RESOUCE_FAIL);
    if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
        audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
    {
        kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_READY);
        audio_recorder.state = JAVA_MEDIA_STATE_READY;

        jvm_post_mma_event(MMA_EVENT_RECORD_ERROR,
            (kal_int16) audio_recorder.id,
            (kal_int64) MMA_ERR_MMI_INTERRUPT);
    }
    JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}


/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_reset_parameter
 * DESCRIPTION
 *  This function resets parameters
 * PARAMETERS
 *    
 * RETURNS
 *  void
 *****************************************************************************/
void jma_audio_recorder_reset_parameter(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_RESET_PARAMETER, audio_recorder.state);

    audio_recorder.state = JAVA_MEDIA_STATE_NULL;
    audio_recorder.format = MED_TYPE_NONE;
    mmi_ucs2cpy((PS8) audio_recorder.filename, "");
    audio_recorder.record_timer = &java_media_timer;
    audio_recorder.id = INVALID_JPLAYER_ID;
    audio_recorder.current_time = 0; 
}


/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_reset
 * DESCRIPTION
 *  The function erases recorded content
 * PARAMETERS
 *  mma_type            [IN]        
 *  java_recorder       [IN]  
 * RETURNS
 *  int - 0
 *****************************************************************************/
kal_bool jma_audio_recorder_reset(kal_int32 java_recorder)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    mdi_result ret;
    kal_int32 file_handle;
    kal_int32 result;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_RESET, java_recorder, audio_recorder.state);
    JMA_CS_ENTER(KAL_FALSE);  
    /* find free player */
    if (audio_recorder.id != java_recorder)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
        JMA_CS_LEAVE(KAL_FALSE);
    }   

    if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
        audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
    {  
    #ifdef __MTK_TARGET__
        audio_recorder.current_time = (long)Media_GetRecordedTime();
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, audio_recorder.current_time);
    #endif            
        ret = mdi_audio_stop_record();

        /* Delete the recorded file */
        file_handle = FS_Open((kal_wchar *) audio_recorder.filename, FS_READ_ONLY);
        if (file_handle > 0) /* Check if file exist */
        {
            result = FS_Close(file_handle); /* need to close file before delete */
            result = FS_Delete((kal_wchar *) audio_recorder.filename);
            if (result != FS_NO_ERROR)
            {
                kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, result);
                JMA_CS_LEAVE(KAL_FALSE);
            }
        }

        /* Handle result */
        if (ret == MDI_AUDIO_SUCCESS)
        {
            kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_READY);
            audio_recorder.state = JAVA_MEDIA_STATE_READY;
            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, ret);
            JMA_CS_LEAVE(KAL_FALSE);
        }
    }

    JMA_CS_LEAVE(KAL_TRUE);
}


/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_commit
 * DESCRIPTION
 *  The function erases recorded content
 * PARAMETERS
 *  mma_type            [IN]        
 *  java_recorder       [IN]  
 * RETURNS
 *  int - 0
 *****************************************************************************/
kal_bool jma_audio_recorder_commit(kal_int32 java_recorder)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    mdi_result ret;


    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_COMMIT, java_recorder, audio_recorder.state);
    JMA_CS_ENTER(KAL_FALSE); 
    /* find free player */
    if (audio_recorder.id != java_recorder)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
        JMA_CS_LEAVE(KAL_FALSE);
    }   

    if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
        audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
    {  
    #ifdef __MTK_TARGET__
        audio_recorder.current_time = (long)Media_GetRecordedTime();
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, audio_recorder.current_time);
    #endif
        ret = mdi_audio_stop_record();

        /* Handle result */
        if (ret == MDI_AUDIO_SUCCESS)
        {
            kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_READY);
            audio_recorder.state = JAVA_MEDIA_STATE_READY;
            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, ret);
            JMA_CS_LEAVE(KAL_FALSE);
        }
    }

    JMA_CS_LEAVE(KAL_TRUE);
}


/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_open
 * DESCRIPTION
 *  This function allocate audio recorder context and open file for recording
 * PARAMETERS
 *  mma_type            [IN]        
 *  java_recorder       [IN]        
 *  filename            [?]         
 *  mode                [IN]        
 * RETURNS
 *  int - 0
 *****************************************************************************/
kal_bool jma_audio_recorder_open(kal_int32 java_recorder)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_OPEN, java_recorder);
    JMA_CS_ENTER(KAL_FALSE);

    /* Audio player, audio recorder, video player, camera, video recorder are multual exclusive */
    if (jma_audio_player_is_active())
    {
        JMA_CS_LEAVE(KAL_FALSE);
    }

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

    if (audio_recorder.state == JAVA_MEDIA_STATE_NULL)
    {       
        /* Succeed to acquire resource */
        jma_register_device(
            JAVA_MEDIA_AUDIO_RECORDER, 
            java_recorder,
            &jma_audio_recorder_suspend_hdlr,
            &jma_audio_recorder_resume_hdlr, 
            &jma_audio_recorder_close_hdlr);

        kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_READY);
        audio_recorder.state = JAVA_MEDIA_STATE_READY;
        audio_recorder.id = java_recorder;
        JMA_CS_LEAVE(KAL_TRUE);
    }
    
    JMA_CS_LEAVE(KAL_FALSE);
}


/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_close
 * DESCRIPTION
 *  This function deallocate audio recorder context
 * PARAMETERS
 *  mma_type            [IN]        Int recorder
 *  java_recorder       [IN]        
 * RETURNS
 *  kal_bool - true
 *****************************************************************************/
kal_bool jma_audio_recorder_close(kal_int32 java_recorder)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
   
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_CLOSE, java_recorder, audio_recorder.state);
    JMA_CS_ENTER(KAL_FALSE);

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

    if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
        audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
    {
        /* State will be changed to READY */
        jma_audio_recorder_reset(java_recorder);
    }
    
    jma_deregister_device(JAVA_MEDIA_AUDIO_RECORDER, java_recorder);
  
    kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_NULL);
    audio_recorder.state = JAVA_MEDIA_STATE_NULL;
    jma_audio_recorder_reset_parameter();    

    JMA_CS_LEAVE(KAL_TRUE);
}


/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_start_record
 * DESCRIPTION

⌨️ 快捷键说明

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