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

📄 vis_msg_handler.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
        result = MED_RES_OPEN_FILE_FAIL;
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        goto audio_sample_error;
    }
    uAMRFilePos = 8;

    eFSALRet = FSAL_Write_UINT8(&fsalAudioSampleDataFile, MP4_AUDIO_AMR);
    if (eFSALRet != FSAL_OK)
    {
        result = MED_RES_OPEN_FILE_FAIL;
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        goto audio_sample_error;
    }

    /* reserve for sample count */
    eFSALRet = FSAL_Write_UINT(&fsalAudioSampleDataFile, 0);
    if (eFSALRet != FSAL_OK)
    {
        result = MED_RES_OPEN_FILE_FAIL;
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        goto audio_sample_error;
    }

    /* parse each audio frame */
    while (uAMRFilePos < uAMRFileLen)
    {
        unsigned char bFrameHeader;
        unsigned char bFrameType;
        unsigned char bFrameLength;
        unsigned char bFQI;

        eFSALRet = FSAL_Seek(&fsalAudioFile, uAMRFilePos);
        if (eFSALRet != FSAL_OK)
        {
            result = MED_RES_OPEN_FILE_FAIL;
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto audio_sample_error;
        }

        eFSALRet = FSAL_Read_Bytes(&fsalAudioFile, &bFrameHeader, 1);
        if (eFSALRet != FSAL_OK)
        {
            result = MED_RES_OPEN_FILE_FAIL;
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto audio_sample_error;
        }

        bFrameType = (bFrameHeader >> 3) & 0x0F;
        bFQI = (bFrameHeader >> 2) & 0x01;
        if (bFQI == 0)
        {
            result = MED_RES_OPEN_FILE_FAIL;
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto audio_sample_error;
        }
        // ASSERT(bFQI==1);
        // After this line, bFQI is no more valid and hence can be used as temporary variable.

        if (bAMRType == 0)
        {
            bFQI = 8;   /* AMR */
        }
        else
        {
            bFQI = 9;   /* AMR-WB */
        }

        if (bFrameType <= bFQI)
        {
            bFrameLength = (lenSpeechBitsAMR[bFrameType] + 7) / 8;
        }
        else if (bFrameType == 15)
        {
            bFrameLength = 0;
        }
        else
        {
            result = MED_RES_OPEN_FILE_FAIL;
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto audio_sample_error;
            /* ASSERT(0); */
        }

        uAMRFilePos += (bFrameLength + 1);

        /* Handle the case for partial frame */
        if (uAMRFilePos > uAMRFileLen)
        {
            break;
        }

        uSampleCount++;

        /* eFSALRet = FSAL_Write_UINT8(&fsalAudioSampleDataFile, bFrameType); */
        eFSALRet = FSAL_Write_Bytes(&fsalAudioSampleDataFile, &bFrameType, 1);
        if (eFSALRet != FSAL_OK)
        {
            result = MED_RES_OPEN_FILE_FAIL;
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto audio_sample_error;
        }
    }

    /* close AMR file */
    eFSALRet = FSAL_Close(&fsalAudioFile);
    audio_file_open = KAL_FALSE;
    if (eFSALRet != FSAL_OK)
    {
        result = MED_RES_OPEN_FILE_FAIL;
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        goto audio_sample_error;
    }

    /* go back to write sample count */
    eFSALRet = FSAL_Seek(&fsalAudioSampleDataFile, 1);
    if (eFSALRet != FSAL_OK)
    {
        result = MED_RES_OPEN_FILE_FAIL;
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        goto audio_sample_error;
    }

    eFSALRet = FSAL_Write_UINT(&fsalAudioSampleDataFile, uSampleCount);
    if (eFSALRet != FSAL_OK)
    {
        result = MED_RES_OPEN_FILE_FAIL;
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        goto audio_sample_error;
    }

    eFSALRet = FSAL_Close(&fsalAudioSampleDataFile);
    audio_meta_file_open = KAL_FALSE;
    if (eFSALRet != FSAL_OK)
    {
        result = MED_RES_OPEN_FILE_FAIL;
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        goto audio_sample_error;
    }

    result = MED_RES_OK;
    *audio_sample_count = uSampleCount;

  audio_sample_error:
    if (audio_file_open)
    {
        FSAL_Close(&fsalAudioFile);
    }
    if (audio_meta_file_open)
    {
        FSAL_Close(&fsalAudioSampleDataFile);
    }

    return result;
}


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

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    fd = FS_Open((kal_wchar*) VID_INIT_FILE, FS_READ_ONLY);
    if (fd >= 0)
    {
        kal_wchar flag;

        result = FS_Read(fd, &flag, 1 * ENCODE_BYTE, &len);
        if (flag == L'Y')
        {
            vid_context_p->use_pseudo_merge = KAL_TRUE;
        }
        else
        {
            vid_context_p->use_pseudo_merge = KAL_FALSE;
        }
        VID_VALUE_TRACE(vid_context_p->use_pseudo_merge, flag, __LINE__);

        result = FS_Read(fd, path, MAX_FILE_NAME_LEN * 2, &len);
        FS_Close(fd);
    }

}


/*****************************************************************************
 * FUNCTION
 *  vis_create_visual_real_meta_file
 * DESCRIPTION
 *  This function is to create visual real meta file for further merge.
 * PARAMETERS
 *  void
 * RETURNS
 *  kal_int16: the return cause of this function.
 *****************************************************************************/
kal_int16 vis_create_visual_real_meta_file(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    return MED_RES_OK;
}


/*****************************************************************************
 * FUNCTION
 *  vis_merge_file
 * DESCRIPTION
 *  This function is to merge two files.
 * PARAMETERS
 *  file_src        [?]     STFSAL *file_dst
 *  file_dst        [?]     
 * RETURNS
 *  kal_int16: the return cause of this function.
 *****************************************************************************/
kal_int16 vis_merge_file(STFSAL *file_src, STFSAL *file_dst)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint32 src_size;
    kal_uint32 dst_size;
    FSAL_Status eFSALRet;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    eFSALRet = FSAL_GetFileSize(file_src, &src_size);
    if (eFSALRet != FSAL_OK)
    {
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        return vid_get_result_from_fsal_error(FSAL_GetLastError(file_src));
    }
    eFSALRet = FSAL_GetFileSize(file_dst, &dst_size);
    if (eFSALRet != FSAL_OK)
    {
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        return vid_get_result_from_fsal_error(FSAL_GetLastError(file_dst));
    }

    eFSALRet = FSAL_Seek(file_dst, dst_size);
    if (eFSALRet != FSAL_OK)
    {
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        return vid_get_result_from_fsal_error(FSAL_GetLastError(file_dst));
    }

    eFSALRet = FSAL_Seek(file_src, 0);
    if (eFSALRet != FSAL_OK)
    {
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        return vid_get_result_from_fsal_error(FSAL_GetLastError(file_src));
    }
    while (src_size >= sizeof(buffer_merge_buffer))
    {
        eFSALRet = FSAL_Read(file_src, (kal_uint8*) buffer_merge_buffer, sizeof(buffer_merge_buffer));
        if (eFSALRet != FSAL_OK)
        {
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            return vid_get_result_from_fsal_error(FSAL_GetLastError(file_src));
        }
        eFSALRet = FSAL_Write(file_dst, (kal_uint8*) buffer_merge_buffer, sizeof(buffer_merge_buffer));
        if (eFSALRet != FSAL_OK)
        {
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            return vid_get_result_from_fsal_error(FSAL_GetLastError(file_dst));
        }
        src_size -= sizeof(buffer_merge_buffer);
    }
    if (src_size)
    {
        eFSALRet = FSAL_Read(file_src, (kal_uint8*) buffer_merge_buffer, src_size);
        if (eFSALRet != FSAL_OK)
        {
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            return vid_get_result_from_fsal_error(FSAL_GetLastError(file_src));
        }
        eFSALRet = FSAL_Write(file_dst, (kal_uint8*) buffer_merge_buffer, src_size);
        if (eFSALRet != FSAL_OK)
        {
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            return vid_get_result_from_fsal_error(FSAL_GetLastError(file_dst));
        }
        src_size = 0;
    }
    return MED_RES_OK;

}


/*****************************************************************************
 * FUNCTION
 *  vis_file_merge_req_hdlr
 * DESCRIPTION
 *  This function is to handle visual file merge request
 * PARAMETERS
 *  ilm_ptr     [?]     
 * RETURNS
 *  void
 *****************************************************************************/
void vis_file_merge_req_hdlr(ilm_struct *ilm_ptr)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    FSAL_Status eFSALRet;
    kal_uint32 video_file_size;
    kal_uint32 audio_trak_size = 0;
    MP4_FILE_INFO video_file_info;
    kal_uint32 video_mdatsz_pos;
    kal_uint32 cluster_size;
    FS_DiskInfo disc_info;
    kal_wchar drive[4] = L" :\\";
    kal_uint8 test_vos_data[60];
    STMp4SampleDataAudio stMp4SampleData;
    MP4_SampleData_Status eMp4SampleDataStatus;
    kal_uint32 uAudioFileLen;
    kal_bool audio_file_exist;
    kal_bool video_real_meta_file_exist;
    kal_bool video_file_open = KAL_FALSE;
    kal_bool video_meta_file_open = KAL_FALSE;

⌨️ 快捷键说明

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