bool isVoiceCallVolteStopped;
MediaMutexHandle mutex;
MediaThreadCondHandle cond;
+ MediaThreadIdHandle taskHandle;
} VoiceCallVolteContext;
static MediaMutexHandle g_voiceCallVolteContextMutex = nullptr;
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];
{ "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)
}
g_stream_in_uplink = std::make_shared<AudioStreamIn>();
-
+
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;
g_stream_out_uplink = std::make_shared<AudioStreamOut>();
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;
g_stream_in_downink = std::make_shared<AudioStreamIn>();
- 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;
g_stream_out_downink = std::make_shared<AudioStreamOut>();
- 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;
return nullptr;
}
+
static int32_t StartVoiceCall(const char **param)
{
MediaMutexLock(g_voiceCallVolteContextMutex);
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;
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]);
g_stream_in_uplink = std::make_shared<AudioStreamIn>();
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;
g_stream_out_uplink = std::make_shared<AudioStreamOut>();
// 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;
//下行
g_stream_in_downink = std::make_shared<AudioStreamIn>();
- 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;
g_stream_out_downink = std::make_shared<AudioStreamOut>();
- 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;
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;