From 9107ee47aa351d7176c5ee9e221ddda443e738b5 Mon Sep 17 00:00:00 2001 From: hcj <1224667075@qq.com> Date: Thu, 9 Jan 2025 15:31:32 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=AE=E6=94=B9=E5=81=B6=E7=8E=B0=E4=BA=92?= =?utf8?q?=E6=96=A5=E9=94=81=E5=AF=BC=E8=87=B4=E7=9A=84=E9=80=9A=E8=B7=AF?= =?utf8?q?=E6=97=A0=E6=B3=95=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../phoneservice/src/PhoneAGService.cpp | 6 +- .../phoneservice/src/PhoneService.cpp | 1 - .../voice_call_volte_sample_wrapper.cpp | 96 +++++++++++++------ .../wrapper/voice_call_volte_sample_wrapper.h | 2 + 4 files changed, 73 insertions(+), 32 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneAGService.cpp b/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneAGService.cpp index ebf31e7c7..0fe30a1c1 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneAGService.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneAGService.cpp @@ -32,7 +32,7 @@ #include "PhoneService.h" #include "CallerLogModel.h" #include "custom_utils.h" - +#include "voice_call_volte_sample_wrapper.h" #define SAMPLE_HFP_TASK_STACK_SIZE 0x1600 @@ -322,10 +322,12 @@ static void sample_hfp_ag_codec_changed_callback(const bd_addr_t *bd_addr, hfp_a if (codec == HFP_AG_CODEC_ID_CVSD) { g_hfp_codec = PCM; + updata_Audio_code_hfp(0); } else if (codec == HFP_AG_CODEC_ID_MSBC) { - g_hfp_codec = mSBC; + // g_hfp_codec = mSBC; + updata_Audio_code_hfp(1); } diff --git a/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp b/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp index a4fbe862f..b1a274c8b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp @@ -415,7 +415,6 @@ void cat1_audio_AudioSetup(void) void cat1_audio_AudioRelease(void) { uapi_cat1_stop_volte_voice(); - sleep(1);//等待释放音频 } 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 23feaa910..f9dfa40ba 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 @@ -43,6 +43,7 @@ typedef struct { bool isVoiceCallVolteStopped; MediaMutexHandle mutex; MediaThreadCondHandle cond; + MediaThreadIdHandle taskHandle; } VoiceCallVolteContext; static MediaMutexHandle g_voiceCallVolteContextMutex = nullptr; @@ -72,6 +73,16 @@ static int32_t VoiceCallSetVolume(const char **param); static int32_t VoiceCAllSeaEnable(const char **param); static int32_t VoiceCallMicMute(const char **param); static int32_t StartHFPVoiceCall(const char **param); +// static int32_t updata_Audio_code_hfp(const char **param); + +typedef struct { + AudioCodecFormat code; + uint32_t sampleRate; +} Audio_code_hfp; + +Audio_code_hfp Audio_code_hfp_t={mSBC,16000}; + + typedef struct { char cmd[MEDIA_CMD_LEN_MAX]; @@ -84,9 +95,27 @@ static FuncsMap g_voiceCallVolteFuncs[] = { { "setvolume", VoiceCallSetVolume }, { "seaenable", VoiceCAllSeaEnable }, { "mute", VoiceCallMicMute }, - { "startSCO",StartHFPVoiceCall} + { "startSCO",StartHFPVoiceCall}, + // { "updata_Audio_code_hfp",updata_Audio_code_hfp} }; + +void updata_Audio_code_hfp(uint32_t type) +{ + if(type) + { + Audio_code_hfp_t.code=mSBC; + Audio_code_hfp_t.sampleRate=16000; + } + else + { + Audio_code_hfp_t.code=PCM; + Audio_code_hfp_t.sampleRate=8000; + } + +} + + class VoiceCallVolteInterruptListener : public InterruptListener { public: VoiceCallVolteInterruptListener(VoiceCallVolteContext *in) @@ -248,12 +277,12 @@ static int32_t RunVoiceCallVolte(VoiceCallVolteContext *context) } g_stream_in_uplink = std::make_shared(); - + CapturerInputConfig captureConfig = {}; - captureConfig.audioFormat = mSBC; + captureConfig.audioFormat = Audio_code_hfp_t.code; captureConfig.channelCount = 1; captureConfig.linkDir = AUDIO_UP_LINK; - captureConfig.sampleRate = 16000; + captureConfig.sampleRate = Audio_code_hfp_t.sampleRate; captureConfig.sessionID = context->sessionId; captureConfig.streamType = AUDIO_STREAM_VOICE_CALL_VOLTE; @@ -265,10 +294,10 @@ static int32_t RunVoiceCallVolte(VoiceCallVolteContext *context) g_stream_out_uplink = std::make_shared(); AudioRendererConfig renderConfig = {}; - renderConfig.audioFormat = mSBC; + renderConfig.audioFormat =Audio_code_hfp_t.code; renderConfig.channelCount = 1; renderConfig.linkDir = AUDIO_UP_LINK; - renderConfig.sampleRate = 16000; + renderConfig.sampleRate = Audio_code_hfp_t.sampleRate; renderConfig.sessionID = context->sessionId; renderConfig.streamType = AUDIO_STREAM_VOICE_CALL_VOLTE; @@ -279,10 +308,10 @@ static int32_t RunVoiceCallVolte(VoiceCallVolteContext *context) g_stream_in_downink = std::make_shared(); - captureConfig.audioFormat = mSBC; + captureConfig.audioFormat = Audio_code_hfp_t.code; captureConfig.channelCount = 1; captureConfig.linkDir = AUDIO_DOWN_LINK; - captureConfig.sampleRate = 16000; + captureConfig.sampleRate = Audio_code_hfp_t.sampleRate; captureConfig.sessionID = context->sessionId; captureConfig.streamType = AUDIO_STREAM_VOICE_CALL_VOLTE; @@ -293,10 +322,10 @@ static int32_t RunVoiceCallVolte(VoiceCallVolteContext *context) g_stream_out_downink = std::make_shared(); - renderConfig.audioFormat = mSBC; + renderConfig.audioFormat = Audio_code_hfp_t.code; renderConfig.channelCount = 1; renderConfig.linkDir = AUDIO_DOWN_LINK; - renderConfig.sampleRate = 16000; + renderConfig.sampleRate = Audio_code_hfp_t.sampleRate; renderConfig.sessionID = context->sessionId; renderConfig.streamType = AUDIO_STREAM_VOICE_CALL_VOLTE; @@ -604,6 +633,7 @@ static void *VoiceCallVolteThread(void *priv) return nullptr; } + static int32_t StartVoiceCall(const char **param) { MediaMutexLock(g_voiceCallVolteContextMutex); @@ -625,9 +655,9 @@ static int32_t StartVoiceCall(const char **param) MediaMutexUnLock(g_voiceCallVolteContextMutex); // 3. create voice call volte thread - MediaThreadattr attr = { "VoiceCallVolteThread", 0x2000, THREAD_SCHED_INVALID, 0, true }; - MediaThreadIdHandle taskHandle = MediaThreadCreate(VoiceCallVolteThread, g_voiceCallVolteContext, &attr); - if (taskHandle == nullptr) { + MediaThreadattr attr = { "VoiceCallVolteThread", 0x2000, THREAD_SCHED_INVALID, 0, false }; + g_voiceCallVolteContext->taskHandle= MediaThreadCreate(VoiceCallVolteThread, g_voiceCallVolteContext, &attr); + if (g_voiceCallVolteContext->taskHandle == nullptr) { MEDIA_ERR_LOG("create voice call volte thread failed"); free(g_voiceCallVolteContext); g_voiceCallVolteContext = nullptr; @@ -638,29 +668,37 @@ static int32_t StartVoiceCall(const char **param) return 0; } + static int32_t StopVoiceCall(const char **param) { + MEDIA_UNUSED(param); + MediaMutexLock(g_voiceCallVolteContextMutex); if (g_voiceCallVolteContext == nullptr) { MEDIA_ERR_LOG("voice call volte context is null, execute start command first"); + MediaMutexUnLock(g_voiceCallVolteContextMutex); return -1; } - - MediaMutexLock(g_voiceCallVolteContextMutex); if (g_voiceCallVolteContext->isVoiceCallVolteStopped) { MEDIA_ERR_LOG("voice call volte already stopped"); - return 0; } - - MEDIA_ERR_LOG("voice call volte stop signal one"); MediaMutexLock(g_voiceCallVolteContext->mutex); g_voiceCallVolteContext->isVoiceCallVolteStopped = true; MediaThreadCondSignal(g_voiceCallVolteContext->cond); MediaMutexUnLock(g_voiceCallVolteContext->mutex); + MediaThreadJoin(&g_voiceCallVolteContext->taskHandle); + + // (void)MediaThreadCondDestroy(&g_voiceCallVolteContext->cond); + // (void)MediaMutexDestroy(&g_voiceCallVolteContext->mutex); + // if (g_voiceCallVolteContext != nullptr) { + // free(g_voiceCallVolteContext); + // g_voiceCallVolteContext = nullptr; + // } MediaMutexUnLock(g_voiceCallVolteContextMutex); return 0; } + static int32_t VoiceCAllSeaEnable(const char **param) { int32_t enable = atoi(param[0x1]); @@ -761,10 +799,10 @@ static int32_t RunVoiceCallVolte_NO_LOCAL_VOICE_CALL(VoiceCallVolteContext *cont g_stream_in_uplink = std::make_shared(); CapturerInputConfig captureConfig = {}; - captureConfig.audioFormat = mSBC; + captureConfig.audioFormat = Audio_code_hfp_t.code; captureConfig.channelCount = 1; captureConfig.linkDir = AUDIO_UP_LINK; - captureConfig.sampleRate = 16000; + captureConfig.sampleRate = Audio_code_hfp_t.sampleRate; captureConfig.sessionID = context->sessionId; captureConfig.streamType = AUDIO_STREAM_VOICE_CALL_VOLTE; @@ -776,10 +814,10 @@ static int32_t RunVoiceCallVolte_NO_LOCAL_VOICE_CALL(VoiceCallVolteContext *cont g_stream_out_uplink = std::make_shared(); // 16000 32000 44100 48000 AudioRendererConfig renderConfig = {}; - renderConfig.audioFormat = mSBC; + renderConfig.audioFormat = Audio_code_hfp_t.code; renderConfig.channelCount = 1; renderConfig.linkDir = AUDIO_UP_LINK; - renderConfig.sampleRate = 16000; + renderConfig.sampleRate = Audio_code_hfp_t.sampleRate; renderConfig.sessionID = context->sessionId; renderConfig.streamType = AUDIO_STREAM_VOICE_CALL_VOLTE; @@ -791,10 +829,10 @@ static int32_t RunVoiceCallVolte_NO_LOCAL_VOICE_CALL(VoiceCallVolteContext *cont //下行 g_stream_in_downink = std::make_shared(); - captureConfig.audioFormat = mSBC; + captureConfig.audioFormat = Audio_code_hfp_t.code; captureConfig.channelCount = 1; captureConfig.linkDir = AUDIO_DOWN_LINK; - captureConfig.sampleRate = 16000; + captureConfig.sampleRate = Audio_code_hfp_t.sampleRate; captureConfig.sessionID = context->sessionId; captureConfig.streamType = AUDIO_STREAM_VOICE_CALL_VOLTE; @@ -805,10 +843,10 @@ static int32_t RunVoiceCallVolte_NO_LOCAL_VOICE_CALL(VoiceCallVolteContext *cont g_stream_out_downink = std::make_shared(); - renderConfig.audioFormat = mSBC; + renderConfig.audioFormat = Audio_code_hfp_t.code; renderConfig.channelCount = 1; renderConfig.linkDir = AUDIO_DOWN_LINK; - renderConfig.sampleRate = 16000; + renderConfig.sampleRate = Audio_code_hfp_t.sampleRate; renderConfig.sessionID = context->sessionId; renderConfig.streamType = AUDIO_STREAM_VOICE_CALL_VOLTE; @@ -979,9 +1017,9 @@ static int32_t StartHFPVoiceCall(const char **param) MediaMutexUnLock(g_voiceCallVolteContextMutex); // 3. create voice call volte thread - MediaThreadattr attr = { "VoiceCallVolteThread", 0x2000, THREAD_SCHED_INVALID, 0, true }; - MediaThreadIdHandle taskHandle = MediaThreadCreate(VoiceCallVolteHFPThread, g_voiceCallVolteContext, &attr); - if (taskHandle == nullptr) { + MediaThreadattr attr = { "VoiceCallVolteThread", 0x2000, THREAD_SCHED_INVALID, 0, false }; + g_voiceCallVolteContext->taskHandle = MediaThreadCreate(VoiceCallVolteHFPThread, g_voiceCallVolteContext, &attr); + if ( g_voiceCallVolteContext->taskHandle == nullptr) { MEDIA_ERR_LOG("create voice call volte thread failed"); free(g_voiceCallVolteContext); g_voiceCallVolteContext = nullptr; diff --git a/code/sdk/middleware/services/media/foundation/sample/wrapper/voice_call_volte_sample_wrapper.h b/code/sdk/middleware/services/media/foundation/sample/wrapper/voice_call_volte_sample_wrapper.h index e26a455e6..bfeb4150a 100755 --- a/code/sdk/middleware/services/media/foundation/sample/wrapper/voice_call_volte_sample_wrapper.h +++ b/code/sdk/middleware/services/media/foundation/sample/wrapper/voice_call_volte_sample_wrapper.h @@ -16,6 +16,8 @@ extern "C" { int32_t VoiceCallVolteSample(int32_t argc, const char *argv[]); +void updata_Audio_code_hfp(uint32_t type); + #ifdef __cplusplus }; #endif -- 2.17.1