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

📄 vid_msg_handler.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
    {
        med_free_ext_mem((void **)&vid_context_p->extmem_start_address);
    }

}


/*****************************************************************************
 * FUNCTION
 *  vid_stop_unfinished_audio
 * DESCRIPTION
 *  This function is to stop unfinished audio.
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void vid_stop_unfinished_audio(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* if keytone is playing, stop it */
    aud_keytone_stop();

    /* if tone is playing, stop it */
    if (aud_context_p->tone_playing)
    {
        aud_tone_stop();
    }

#ifdef __MED_MMA_MOD__
    /* close all mma tasks */
    aud_mma_close_all();
#endif /* __MED_MMA_MOD__ */ 

    aud_stop_unfinished_process();

}


/*****************************************************************************
 * FUNCTION
 *  vid_audio_record_callback
 * DESCRIPTION
 *  This function is to handle the callback of audio record.
 * PARAMETERS
 *  event       [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void vid_audio_record_callback(Media_Event event)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    switch (event)
    {
        case MEDIA_TERMINATED:
        case MEDIA_ERROR:
        case MEDIA_END:
        {
            aud_media_read_data_ind_struct *ind_p = NULL;

            ind_p = (aud_media_read_data_ind_struct*)
                construct_local_para(sizeof(aud_media_read_data_ind_struct), TD_CTRL);

            ind_p->event = event;

            aud_send_ilm(MOD_MED, MSG_ID_AUD_MEDIA_READ_DATA_IND, ind_p, NULL);
            break;
        }
        case MEDIA_DATA_NOTIFICATION:
            if (!aud_context_p->processing_data)
            {
                aud_media_read_data_ind_struct *ind_p = NULL;

                ind_p = (aud_media_read_data_ind_struct*)
                    construct_local_para(sizeof(aud_media_read_data_ind_struct), TD_CTRL);

                ind_p->event = event;

                aud_send_ilm(MOD_MED, MSG_ID_AUD_MEDIA_READ_DATA_IND, ind_p, NULL);
                aud_context_p->processing_data = KAL_TRUE;
            }
            break;
    }
}


/*****************************************************************************
 * FUNCTION
 *  vid_audio_record_callback_dummy
 * DESCRIPTION
 *  This function is to handle the dummy callback of audio record.
 * PARAMETERS
 *  event       [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void vid_audio_record_callback_dummy(Media_Event event)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    switch (event)
    {
        case MEDIA_TERMINATED:
            break;
        case MEDIA_DATA_NOTIFICATION:
        {
            kal_uint16 *pwBuf;
            kal_uint32 uBufLen;

            Media_GetReadBuffer(&pwBuf, &uBufLen);
            Media_ReadDataDone(uBufLen);
            break;
        }
    }
}


/*****************************************************************************
 * FUNCTION
 *  vid_save_file_path
 * DESCRIPTION
 *  This function is to save file path for further use.
 * PARAMETERS
 *  path        [?]     
 * RETURNS
 *  kal_int16 return result
 *****************************************************************************/
kal_int32 vid_save_file_path(kal_wchar *path)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    FS_HANDLE fd = -1;
    kal_uint32 len;
    kal_int32 result;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    FS_Rename((kal_wchar*) VID_DUMMY_INIT_FILE, (kal_wchar*) VID_INIT_FILE);
    fd = FS_Open((kal_wchar*) VID_INIT_FILE, FS_CREATE | FS_READ_WRITE);
    VID_VALUE_TRACE(fd, -1, __LINE__);
    if (fd >= 0)
    {
        kal_wchar flag;

        if (vid_context_p->use_pseudo_merge)
        {
            flag = L'Y';
        }
        else
        {
            flag = L'N';
        }
        result = FS_Write(fd, &flag, (1) * ENCODE_BYTE, &len);
        result = FS_Write(fd, path, (kal_wstrlen(path) + 1) * ENCODE_BYTE, &len);
        VID_VALUE_TRACE(vid_context_p->use_pseudo_merge, flag, __LINE__);
        FS_Close(fd);
        if (result == FS_NO_ERROR)
        {
            return MED_RES_OK;
        }
        else
        {
            return MED_RES_OPEN_FILE_FAIL;
        }
    }
    else
    {
        return MED_RES_OPEN_FILE_FAIL;
    }

}


/*****************************************************************************
 * FUNCTION
 *  vid_open_m4a_file_for_play
 * DESCRIPTION
 *  This function is to open mp4 audio file for play.
 * PARAMETERS
 *  file_handle     [IN]        
 * RETURNS
 *  kal_int16
 *****************************************************************************/
kal_int16 vid_open_m4a_file_for_play(kal_int32 file_handle)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MP4_Parser_Status eMp4ParserRet;
    FSAL_Status eFSALRet;
    kal_uint32 filesize;
    kal_int32 result;
    kal_uint32 index;
    kal_uint64 temp;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    eFSALRet = FSAL_Open_WithHandle(&stFSAL, (void*)file_handle);
    if (eFSALRet != FSAL_OK)
    {
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        result = MED_RES_OPEN_FILE_FAIL;
    }
    FSAL_SetBuffer(&stFSAL, (kal_uint32) sizeof(buffer_tmp), (kal_uint8*) buffer_tmp);

#ifdef __MTK_TARGET__
    eFSALRet = FSAL_GetFileSize(&stFSAL, &filesize);
    if (eFSALRet != FSAL_OK)
    {
        return MED_RES_OPEN_FILE_FAIL;
    }

    for (index = 0; index < VID_DEC_SEEK_HINT_SIZE; index++)
    {
        temp = ((kal_uint64) filesize * (kal_uint64) (index + 1)) / (kal_uint64) (VID_DEC_SEEK_HINT_SIZE + 1);
        vid_seek_hint[index].Index = (kal_uint32) temp;
    }
    FS_SetSeekHint(stFSAL.hFile, VID_DEC_SEEK_HINT_SIZE, vid_seek_hint);

    eMp4ParserRet = MP4_Parse(&stMp4Parser, &stFSAL);
    if (eMp4ParserRet != MP4_PARSER_OK && eMp4ParserRet != MP4_PARSER_WARNING_TRAILING_GARBAGE)
    {
        VID_PARSE_ERROR_TRACE(eMp4ParserRet,  __LINE__);
        return MED_RES_BAD_FORMAT;
    }

    eMp4ParserRet = MP4_STBL_CacheTablePreprocess(&stMp4Parser, buffer_STBL_cache_pool, 2048);
    if (eMp4ParserRet != MP4_PARSER_OK)
    {
        VID_PARSE_ERROR_TRACE(eMp4ParserRet,  __LINE__);
        return MED_RES_BAD_FORMAT;
    }

    MP4_Audio_SetFSAL(&stMp4Parser, &stFSALAudio);
#endif /* __MTK_TARGET__ */ 
    eFSALRet = FSAL_Open_Attach(&stFSALAudio, &stFSAL);
    if (eFSALRet != FSAL_OK)
    {
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        return MED_RES_OPEN_FILE_FAIL;
    }
    FSAL_SetBuffer(&stFSALAudio, sizeof(buffer_temp_a), (kal_uint8*) buffer_temp_a);

    eFSALRet = FSAL_Open_Attach(&stFSALAudio_STCO, &stFSAL);
    if (eFSALRet != FSAL_OK)
    {
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        return MED_RES_OPEN_FILE_FAIL;
    }
    FSAL_SetBuffer(&stFSALAudio_STCO, sizeof(buffer_temp_stco_a), (kal_uint8*) buffer_temp_stco_a);

    eFSALRet = FSAL_Open_Attach(&stFSALAudio_STSZ, &stFSAL);
    if (eFSALRet != FSAL_OK)
    {
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        return MED_RES_OPEN_FILE_FAIL;
    }
    FSAL_SetBuffer(&stFSALAudio_STSZ, sizeof(buffer_temp_stsz_a), (kal_uint8*) buffer_temp_stsz_a);

    MP4_SetFSAL_STCO(&stMp4Parser, MP4_TRACK_AUDIO, &stFSALAudio_STCO);
    MP4_SetFSAL_STSZ(&stMp4Parser, MP4_TRACK_AUDIO, &stFSALAudio_STSZ);
    MP4_UpdateSampleCount(&stMp4Parser, MP4_TRACK_AUDIO);

    return MED_RES_OK;
}


/*****************************************************************************
 * FUNCTION
 *  vid_open_audio_file_for_record
 * DESCRIPTION
 *  This function is to open audio file for record.
 * PARAMETERS
 *  void
 * RETURNS
 *  kal_int16
 *****************************************************************************/
kal_int16 vid_open_audio_file_for_record(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    FSAL_Status eFSALRet;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    med_remove_file_name(vid_context_p->storing_path);
    kal_wstrcat(vid_context_p->storing_path, VID_AUDIO_FILE);
    /* Open audio file */

    if ((vid_context_p->file_handle = FS_Open(vid_context_p->storing_path, VID_TEMP_FILE_ATTRIBUTES)) < 0)
    {
        if (vid_context_p->file_handle == FS_WRITE_PROTECTION)
        {
            return MED_RES_WRITE_PROTECTION;
        }
        else
        {
            return MED_RES_OPEN_FILE_FAIL;
        }
    }

    eFSALRet = FSAL_Open_WithHandle(&fsalAudioFile, (void*)vid_context_p->file_handle);
    if (eFSALRet == FSAL_OK)
    {

        eFSALRet = FSAL_Write_UINT(&fsalAudioFile, 0);  /* file size */
        if (eFSALRet == FSAL_OK)
        {
            eFSALRet = FSAL_Write_UINT(&fsalAudioFile, BOX_TYPE_MDAT);
            if (eFSALRet == FSAL_OK)
            {
                return MED_RES_OK;
            }
        }
        /* Fail */
        FSAL_Close(&fsalAudioFile);
        return MED_RES_OPEN_FILE_FAIL;
    }
    else
    {
        if (FSAL_GetLastError(&fsalAudioFile) == FS_WRITE_PROTECTION)
        {
            return MED_RES_WRITE_PROTECTION;
        }
        else
        {
            return MED_RES_OPEN_FILE_FAIL;
        }
    }
}


/*****************************************************************************
 * FUNCTION
 *  vid_open_visual_file_for_record
 * DESCRIPTION
 *  This function is to open visual files for record.
 * PARAMETERS
 *  void
 * RETURNS
 *  kal_int16
 *****************************************************************************/
kal_int16 vid_open_visual_file_for_record(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    FSAL_Status eFSALRet;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* Open video file */
    med_remove_file_name(vid_context_p->storing_path);
    kal_wstrcat(vid_context_p->storing_path, VID_VISUAL_FILE);
    if ((vid_context_p->file_handle = FS_Open(vid_context_p->storing_path, VID_TEMP_FILE_ATTRIBUTES)) < 0)
    {
        if (vid_context_p->file_handle == FS_WRITE_PROTECTION)
        {
            return MED_RES_WRITE_PROTECTION;
        }
        else
        {
            return MED_RES_OPEN_FILE_FAIL;
        }
    }
    eFSALRet = FSAL_Open_WithHandle(&mp4_files.MEDIA_VIDEO_FILE, (void*)vid_context_p->file_handle);
    if (eFSALRet == FSAL_OK)
    {
        /* Open meta file */
        med_remove_file_name(vid_context_p->storing_path);
        kal_wstrcat(vid_context_p->storing_path, VID_VISUAL_META_FILE);
        if ((vid_context_p->file_handle = FS_Open(vid_context_p->storing_path, VID_TEMP_FILE_ATTRIBUTES)) < 0)
        {
            FSAL_Close(&mp4_files.MEDIA_VIDEO_FILE);
            if (vid_context_p->file_handle == FS_WRITE_PROTECTION)
            {
                return MED_RES_WRITE_PROTECTION;
            }
            else
            {
                return MED_RES_OPEN_FILE_FAIL;
            }

⌨️ 快捷键说明

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