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

📄 vis_msg_handler.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
            result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto merge_error;
        }
        audio_file_open = KAL_TRUE;
        eFSALRet = FSAL_GetFileSize(&fsalAudioFile, &uAudioFileLen);
        if (eFSALRet != FSAL_OK)
        {
            result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto merge_error;
        }

        eFSALRet = FSAL_Seek(&fsalAudioFile, 0);
        if (eFSALRet != FSAL_OK)
        {
            result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto merge_error;
        }

        if (vid_context_p->use_pseudo_merge)
        {
            uAudioFileLen = ((uAudioFileLen + cluster_size - 1) / cluster_size) * cluster_size;
        }

        eFSALRet = FSAL_Write_UINT(&fsalAudioFile, uAudioFileLen);
        if (eFSALRet != FSAL_OK)
        {
            result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto merge_error;
        }

        FSAL_Close(&fsalAudioFile);
        audio_file_open = KAL_FALSE;
        /* Log disc info for debugging */
        FS_GetDiskInfo(drive, &disc_info, FS_DI_BASIC_INFO| FS_DI_FREE_SPACE);
        kal_prompt_trace(MOD_MED, "Free cluster=%d, cluster size= %d, line= %d", disc_info.FreeClusters, cluster_size,__LINE__);
        /* Create audio meta file */
        /* generate audio sample data file */
        result = write_audio_sample_data(&audio_sample_count);
        if (result != MED_RES_OK)
        {
            VID_AUD_ERROR_TRACE(result, __LINE__);
            goto merge_error;
        }

        if (audio_sample_count > 0)
        {
            /* Create audio real meta file */
            med_remove_file_name(med_v_context_p->storing_path);
            kal_wstrcat(med_v_context_p->storing_path, VID_AUDIO_SAMPLE_FILE);
            eFSALRet = FSAL_Open(&fsalAudioSampleDataFile, (void*)med_v_context_p->storing_path, FSAL_READ);
            if (eFSALRet != FSAL_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioSampleDataFile));
                VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
                goto merge_error;
            }
            audio_meta_file_open = KAL_TRUE;
            FSAL_SetBuffer(
                &fsalAudioSampleDataFile,
                (kal_uint32) sizeof(buffer_enc_audio_sample_tmp),
                (kal_uint8*) buffer_enc_audio_sample_tmp);
            eMp4SampleDataStatus = MP4_AudioSampleData_Init(&stMp4SampleData, &fsalAudioSampleDataFile);
            if (eMp4SampleDataStatus != MP4_SAMPLE_DATA_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioSampleDataFile));
                result = MED_RES_MP4_SAMPLEDATA_ERROR;
                goto merge_error;
            }

            MP4_Produce_Init(&stMp4Producer, &stMp4SampleData, &mp4_files.REAL_META_FILE);
            MP4_Produce_Trak_Audio(&stMp4Producer, &audio_trak_size, video_file_size);
            /* Add audio trak size */
            video_file_info.FC_ATOM[moov].size += audio_trak_size;
            eFSALRet = FSAL_Close(&fsalAudioSampleDataFile);
            audio_meta_file_open = KAL_FALSE;
            if (eFSALRet != FSAL_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioSampleDataFile));
                VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
                goto merge_error;
            }

            eFSALRet = FSAL_Write_UINT_AT(
                        &mp4_files.REAL_META_FILE,
                        video_file_info.FC_ATOM[moov].size,
                        video_file_info.FC_ATOM[moov].pos);
            if (eFSALRet != FSAL_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
                VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
                goto merge_error;
            }
            FS_Commit(mp4_files.REAL_META_FILE.hFile);
            /* Merge video real meta file and audio real meta file */

            /* Delete audio meta file to save some space */
            med_remove_file_name(med_v_context_p->storing_path);
            kal_wstrcat(med_v_context_p->storing_path, VID_AUDIO_SAMPLE_FILE);
            FS_Delete(med_v_context_p->storing_path);
            vid_context_p->record_audio = KAL_TRUE;
        }
        else
        {
            eFSALRet = FSAL_Write_UINT_AT(
                        &mp4_files.REAL_META_FILE,
                        video_file_info.FC_ATOM[moov].size,
                        video_file_info.FC_ATOM[moov].pos);
            if (eFSALRet != FSAL_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
                VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
                goto merge_error;
            }
            FS_Commit(mp4_files.REAL_META_FILE.hFile);
            vid_context_p->record_audio = KAL_FALSE;
            FSAL_Close(&fsalAudioFile);
            audio_file_open = KAL_FALSE;
        }
    }
    else
    {
        /* Create audio real meta file */
        med_remove_file_name(med_v_context_p->storing_path);
        kal_wstrcat(med_v_context_p->storing_path, VID_AUDIO_SAMPLE_FILE);
        eFSALRet = FSAL_Open(&fsalAudioSampleDataFile, (void*)med_v_context_p->storing_path, FSAL_READ);
        /* Audio file not exist, but audio meta file exist */
        if (eFSALRet == FSAL_OK)
        {
            audio_meta_file_open = KAL_TRUE;
            FSAL_SetBuffer(
                &fsalAudioSampleDataFile,
                (kal_uint32) sizeof(buffer_enc_audio_sample_tmp),
                (kal_uint8*) buffer_enc_audio_sample_tmp);
            eMp4SampleDataStatus = MP4_AudioSampleData_Init(&stMp4SampleData, &fsalAudioSampleDataFile);
            if (eMp4SampleDataStatus != MP4_SAMPLE_DATA_OK)
            {
                VID_PARSE_ERROR_TRACE(eMp4SampleDataStatus, __LINE__);
                result = MED_RES_MP4_SAMPLEDATA_ERROR;
                goto merge_error;
            }

            /* Log disc info for debugging */
            FS_GetDiskInfo(drive, &disc_info, FS_DI_BASIC_INFO| FS_DI_FREE_SPACE);
            kal_prompt_trace(MOD_MED, "Free cluster=%d, cluster size= %d, line= %d", disc_info.FreeClusters, cluster_size,__LINE__);

            MP4_Produce_Init(&stMp4Producer, &stMp4SampleData, &mp4_files.REAL_META_FILE);
            MP4_Produce_Trak_Audio(&stMp4Producer, &audio_trak_size, video_file_size);
            /* Add audio trak size */
            video_file_info.FC_ATOM[moov].size += audio_trak_size;
            eFSALRet = FSAL_Close(&fsalAudioSampleDataFile);
            audio_meta_file_open = KAL_FALSE;
            if (eFSALRet != FSAL_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioSampleDataFile));
                VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
                goto merge_error;
            }

            eFSALRet = FSAL_Write_UINT_AT(
                        &mp4_files.REAL_META_FILE,
                        video_file_info.FC_ATOM[moov].size,
                        video_file_info.FC_ATOM[moov].pos);
            if (eFSALRet != FSAL_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
                VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
                goto merge_error;
            }
            FS_Commit(mp4_files.REAL_META_FILE.hFile);
            /* Merge video real meta file and audio real meta file */

            /* Delete audio meta file to save some space */
            med_remove_file_name(med_v_context_p->storing_path);
            kal_wstrcat(med_v_context_p->storing_path, VID_AUDIO_SAMPLE_FILE);
            FS_Delete(med_v_context_p->storing_path);

            vid_context_p->record_audio = KAL_TRUE;
        }
        else
        {
            eFSALRet = FSAL_Write_UINT_AT(
                        &mp4_files.REAL_META_FILE,
                        video_file_info.FC_ATOM[moov].size,
                        video_file_info.FC_ATOM[moov].pos);
            if (eFSALRet != FSAL_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
                VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
                goto merge_error;
            }
            FS_Commit(mp4_files.REAL_META_FILE.hFile);
            vid_context_p->record_audio = KAL_FALSE;
        }
    }

    eFSALRet = FSAL_Close(&mp4_files.REAL_META_FILE);
    video_real_meta_file_open = KAL_FALSE;
    if (eFSALRet != FSAL_OK)
    {
        result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        goto merge_error;
    }
    eFSALRet = FSAL_Close(&mp4_files.MEDIA_META_FILE);
    video_meta_file_open = KAL_FALSE;
    if (eFSALRet != FSAL_OK)
    {
        result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_META_FILE));
        VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
        goto merge_error;
    }
    /* Delete Visual Meta file to save some space */
    med_remove_file_name(med_v_context_p->storing_path);
    kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_META_FILE);
    FS_Delete(med_v_context_p->storing_path);

    /* Merge audio/video bistream */
    if (vid_context_p->record_audio)
    {
        med_remove_file_name(med_v_context_p->storing_path);
        kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_FILE);
        med_remove_file_name(med_v_context_p->storing_path2);
        kal_wstrcat(med_v_context_p->storing_path2, VID_AUDIO_FILE);

        if (vid_context_p->use_pseudo_merge)
        {
            FS_PseudoMerge(med_v_context_p->storing_path, med_v_context_p->storing_path2);
        }
        else
        {
            eFSALRet = FSAL_Open(&fsalAudioFile, med_v_context_p->storing_path2, FSAL_READ);
            if (eFSALRet != FSAL_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
                VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
                goto merge_error;
            }
            audio_file_open = KAL_TRUE;

            eFSALRet = FSAL_Open(&mp4_files.MEDIA_VIDEO_FILE, med_v_context_p->storing_path, FSAL_APPEND);
            if (eFSALRet != FSAL_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_VIDEO_FILE));
                VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
                goto merge_error;
            }
            video_file_open = KAL_TRUE;

            result = vis_merge_file(&fsalAudioFile, &mp4_files.MEDIA_VIDEO_FILE);
            if (result != MED_RES_OK)
            {
                VID_VIS_ERROR_TRACE(result, __LINE__);
                goto merge_error;
            }

            eFSALRet = FSAL_Close(&mp4_files.MEDIA_VIDEO_FILE);
            video_file_open = KAL_FALSE;
            if (eFSALRet != FSAL_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_VIDEO_FILE));
                VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
                goto merge_error;
            }
            eFSALRet = FSAL_Close(&fsalAudioFile);
            audio_file_open = KAL_FALSE;
            if (eFSALRet != FSAL_OK)
            {
                result = vid_get_result_from_fsal_error(FSAL_GetLastError(&fsalAudioFile));
                VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
                goto merge_error;
            }
        }

    }

    /* Merge av bitstream file and av real meta file */
    med_remove_file_name(med_v_context_p->storing_path);
    kal_wstrcat(med_v_context_p->storing_path, VID_VISUAL_FILE);
    med_remove_file_name(med_v_context_p->storing_path2);
    kal_wstrcat(med_v_context_p->storing_path2, VID_VISUAL_REAL_META_FILE);

    if (vid_context_p->use_pseudo_merge)
    {
        FS_PseudoMerge(med_v_context_p->storing_path, med_v_context_p->storing_path2);
    }
    else
    {
        eFSALRet = FSAL_Open(&mp4_files.REAL_META_FILE, med_v_context_p->storing_path2, FSAL_READ);
        if (eFSALRet != FSAL_OK)
        {
            result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto merge_error;
        }
        video_real_meta_file_open = KAL_TRUE;

        eFSALRet = FSAL_Open(&mp4_files.MEDIA_VIDEO_FILE, med_v_context_p->storing_path, FSAL_APPEND);
        if (eFSALRet != FSAL_OK)
        {
            result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_VIDEO_FILE));
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto merge_error;
        }
        video_file_open = KAL_TRUE;

        result = vis_merge_file(&mp4_files.REAL_META_FILE, &mp4_files.MEDIA_VIDEO_FILE);
        if (result != MED_RES_OK)
        {
            VID_VIS_ERROR_TRACE(result, __LINE__);
            goto merge_error;
        }

        eFSALRet = FSAL_Close(&mp4_files.MEDIA_VIDEO_FILE);
        video_file_open = KAL_FALSE;
        if (eFSALRet != FSAL_OK)
        {
            result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.MEDIA_VIDEO_FILE));
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto merge_error;
        }
        eFSALRet = FSAL_Close(&mp4_files.REAL_META_FILE);
        video_real_meta_file_open = KAL_FALSE;
        if (eFSALRet != FSAL_OK)
        {
            result = vid_get_result_from_fsal_error(FSAL_GetLastError(&mp4_files.REAL_META_FILE));
            VID_FSAL_ERROR_TRACE(eFSALRet, __LINE__);
            goto merge_error;
        }
    }

    /* Log disc info for debugging */
    FS_GetDiskInfo(drive, &disc_info, FS_DI_BASIC_INFO| FS_DI_FREE_SPACE);
    kal_prompt_trace(MOD_MED, "Free cluster=%d, cluster size= %d, line= %d", disc_info.FreeClusters, cluster_size,__LINE__);

⌨️ 快捷键说明

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