From: 孙春阳 Date: Wed, 6 Aug 2025 13:28:01 +0000 (+0800) Subject: 添加AudioCaptureProcess_AI录音出错返回值打印 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=da1965d13503593c23635112cc6d6077a72c0216;p=mirrors%2FFD230.git 添加AudioCaptureProcess_AI录音出错返回值打印 --- diff --git a/code/sdk/middleware/services/media/foundation/sample/wrapper/voice_call_volte_sample_wrapper.cpp b/code/sdk/middleware/services/media/foundation/sample/wrapper/voice_call_volte_sample_wrapper.cpp index bfcfbdfea..383a26c63 100755 --- a/code/sdk/middleware/services/media/foundation/sample/wrapper/voice_call_volte_sample_wrapper.cpp +++ b/code/sdk/middleware/services/media/foundation/sample/wrapper/voice_call_volte_sample_wrapper.cpp @@ -1276,14 +1276,16 @@ static void AudioCaptureProcess_AI(void* arg) captureConfig.streamType = AUDIO_STREAM_VOICE_ASSISTANT; int ret = g_stream_in_uplink->Init(captureConfig); - + if (ret != 0) { + MEDIA_ERR_LOG("audio stream init failed with error %d", ret); + return; + } // AI_data_assembly(1,start_data, Cur_AI_Model); ret = g_stream_in_uplink->Start(); if (ret != 0) { - MEDIA_ERR_LOG("audio stream out downink play failed"); - return ; - + MEDIA_ERR_LOG("audio stream start failed with error %d", ret); + return; } MEDIA_ERR_LOG("g_stream_in_uplink->Start"); @@ -1295,9 +1297,23 @@ static void AudioCaptureProcess_AI(void* arg) uint8_t* data_buf=(uint8_t *)malloc(ai_size); if(data_buf == NULL) { - MEDIA_ERR_LOG("malloc"); + MEDIA_ERR_LOG("malloc failed for size %d", ai_size); return ; } + + // 初始化内存并验证分配 + if (memset_s(data_buf, ai_size, 0, ai_size) != 0) { + MEDIA_ERR_LOG("memset_s failed"); + free(data_buf); + return; + } + + // 验证内存访问 + if (data_buf[0] != 0 || data_buf[ai_size-1] != 0) { + MEDIA_ERR_LOG("Memory verification failed"); + free(data_buf); + return; + } AudioCaptureTask_is_run=1; @@ -1312,44 +1328,105 @@ static void AudioCaptureProcess_AI(void* arg) while (!g_sample_needStop) { LOS_Msleep(10); + + // 检查数据缓冲区是否有效 + if (data_buf == NULL) { + MEDIA_ERR_LOG("data_buf is NULL, breaking loop"); + break; + } + CapturerBuffer capBuf = {}; capBuf.data = data_buf; capBuf.size = ai_size; capBuf.frameCount = 1; + + // 添加错误处理 + if (g_stream_in_uplink == nullptr) { + MEDIA_ERR_LOG("g_stream_in_uplink is nullptr"); + break; + } + int32_t readlen = g_stream_in_uplink->ObtainBuffer(capBuf, true); - if(readlen>0) + if(readlen > 0 && readlen <= ai_size) { - MEDIA_ERR_LOG("readlen %d",readlen); - send_msg_data_into_Ai_msg_queue((void *)data_buf,(uint16_t)readlen,0); - - record_size+=readlen; - - fwrite(data_buf,1,readlen,fp); - #if TTS_TEST - if(record_size>=1024*80) - { - g_sample_needStop=1; + MEDIA_ERR_LOG("readlen %d",readlen); + + // 检查内存边界 + if (readlen <= ai_size) { + send_msg_data_into_Ai_msg_queue((void *)data_buf,(uint16_t)readlen,0); + record_size+=readlen; + + if (fp != NULL) { + fwrite(data_buf,1,readlen,fp); + } + + #if TTS_TEST + if(record_size>=1024*80) + { + g_sample_needStop=1; + } + #else + if(record_size>=1024*90) + { + g_sample_needStop=1; + } + #endif + + // 安全的内存清零 + if (data_buf != NULL) { + memset_s(data_buf,ai_size,0,ai_size); + } + } else { + MEDIA_ERR_LOG("readlen %d exceeds buffer size %d", readlen, ai_size); } - #else - if(record_size>=1024*90) - { - g_sample_needStop=1; + } else if (readlen < 0) { + MEDIA_ERR_LOG("ObtainBuffer failed with error %d", readlen); + // 增加错误处理和重试逻辑 + static uint32_t error_count = 0; + error_count++; + + if (error_count > 5) { // 减少错误阈值 + MEDIA_ERR_LOG("Too many ObtainBuffer errors, stopping audio capture"); + g_sample_needStop = 1; + break; + } + + // 增加延迟避免频繁重试 + LOS_Msleep(200); // 增加延迟时间 + + // 尝试重新初始化音频流 + if (error_count % 3 == 0) { // 更频繁的重试 + MEDIA_ERR_LOG("Attempting to reinitialize audio stream"); + if (g_stream_in_uplink != nullptr) { + g_stream_in_uplink->Stop(); + LOS_Msleep(100); // 增加停止时间 + int ret = g_stream_in_uplink->Start(); + if (ret != 0) { + MEDIA_ERR_LOG("Audio stream restart failed with error %d", ret); + g_sample_needStop = 1; + break; + } + } } - #endif - memset_s(data_buf,ai_size,0,ai_size); } // 蓝牙接口发送实时录音数据 } uint8_t start_data[19]={0}; AI_data_assembly(0,start_data,Cur_AI_Model); - fclose(fp); + + if (fp != NULL) { + fclose(fp); + fp = NULL; + } + send_msg_data_into_Ai_msg_queue((void *)start_data,19,2); - - - free(data_buf); - data_buf = NULL; + // 安全释放内存 + if (data_buf != NULL) { + free(data_buf); + data_buf = NULL; + } MEDIA_ERR_LOG("AI_audio_size %d",AI_audio_size); ret = g_stream_in_uplink->Stop();