static int32_t VoiceCAllSeaEnable(const char **param);
static int32_t VoiceCallMicMute(const char **param);
static int32_t StartHFPVoiceCall(const char **param);
+static int32_t NO_LOCAL_VOICE_CALL_RequsetAudioFocus(const char **param);
+static int32_t ReleaseAudioFocus_HFP(const char **param);
// static int32_t updata_Audio_code_hfp(const char **param);
+static AudioSession g_sessionId=0;
+static AudioInterrupt g_interrupt;
+
+static uint8_t is_stop_call=0;
+
+
typedef struct {
AudioCodecFormat code;
uint32_t sampleRate;
int32_t (*func)(const char **param);
} FuncsMap;
+static int32_t stopcall(const char **param)
+{
+ is_stop_call=1;
+ return 0;
+
+}
static FuncsMap g_voiceCallVolteFuncs[] = {
{ "start", StartVoiceCall },
{ "stop", StopVoiceCall },
{ "seaenable", VoiceCAllSeaEnable },
{ "mute", VoiceCallMicMute },
{ "startSCO",StartHFPVoiceCall},
+ { "stopcall",stopcall}
+ // { "RequsetAudioFocus",NO_LOCAL_VOICE_CALL_RequsetAudioFocus},
+ // { "ReleaseAudioFocus",ReleaseAudioFocus_HFP}
// { "updata_Audio_code_hfp",updata_Audio_code_hfp}
};
return true;
}
-static bool NO_LOCAL_VOICE_CALL_RequsetAudioFocus(VoiceCallVolteContext *context)
+static int32_t NO_LOCAL_VOICE_CALL_RequsetAudioFocus(const char **param)
{
bool success;
success = g_amInstance.Initialize();
if (!success) {
MEDIA_ERR_LOG("audiomanager init failed");
- return false;
+ return -1;
}
AudioSession sessionId;
if (sessionId == AUDIO_SESSION_ID_NONE) {
MEDIA_ERR_LOG("audio session id invalid");
- return false;
+ return -1;
}
std::shared_ptr<VoiceCallVolteInterruptListener> interruptListener =
- std::make_shared<VoiceCallVolteInterruptListener>(context);
+ std::make_shared<VoiceCallVolteInterruptListener>((VoiceCallVolteContext*)NULL);
if (interruptListener == nullptr || interruptListener.get() == nullptr) {
MEDIA_ERR_LOG("voice call volte interrupt listener is nullptr");
- return false;
+ return -1;
}
AudioInterrupt interrupt = { AUDIO_STREAM_VOICE_CALL_VOLTE, sessionId, interruptListener };
if (g_amInstance.ActivateAudioInterrupt(interrupt) == INTERRUPT_FAILED) {
MEDIA_ERR_LOG("activate audio interrupt failed");
- return false;
+ return -1;
}
- context->sessionId = sessionId;
- context->interrupt = interrupt;
+ g_sessionId = sessionId;
+ g_interrupt = interrupt;
- return true;
+ return 0;
}
}
#endif
-static bool ReleaseAudioFocus_HFP(VoiceCallVolteContext *context)
+static int32_t ReleaseAudioFocus_HFP(const char **param)
{
- if (g_amInstance.DeactivateAudioInterrupt(context->interrupt) != 0) {
+ if (g_amInstance.DeactivateAudioInterrupt(g_interrupt) != 0) {
MEDIA_ERR_LOG("deactivate audio interrupt failed");
- return false;
+ return -1;
}
- return true;
+ g_sessionId=0;
+ MEDIA_ERR_LOG("succ ReleaseAudioFocus_HFP");
+ return 0;
}
{
VoiceCallVolteContext *context = (VoiceCallVolteContext *)priv;
- bool success = RequsetAudioFocus(context);
- if (!success) {
- MEDIA_ERR_LOG("requset audio focus failed");
- return nullptr;
+ // bool success = RequsetAudioFocus(context);
+ // if (!success) {
+ // MEDIA_ERR_LOG("requset audio focus failed");
+ // return nullptr;
+ // }
+ if(g_sessionId==0)
+ {
+ NO_LOCAL_VOICE_CALL_RequsetAudioFocus(NULL);
}
+ context->sessionId=g_sessionId;
+ context->sessionId=g_sessionId;
+
int32_t ret = RunVoiceCallVolte(context);
- if (ret != 0) {
- MEDIA_ERR_LOG("run voice call volte failed");
-#ifdef LOCAL_VOICE_CALL
- (void)ReleaseAudioFocus();
-#else
- (void)ReleaseAudioFocus(context);
-#endif
- return nullptr;
+// if (ret != 0) {
+// MEDIA_ERR_LOG("run voice call volte failed");
+// #ifdef LOCAL_VOICE_CALL
+// (void)ReleaseAudioFocus();
+// #else
+// (void)ReleaseAudioFocus(context);
+// #endif
+// return nullptr;
+// }
+
+// #ifdef LOCAL_VOICE_CALL
+// success = ReleaseAudioFocus();
+// #else
+// success = ReleaseAudioFocus(context);
+// #endif
+// if (!success) {
+// MEDIA_ERR_LOG("release audio focus failed");
+// return nullptr;
+// }
+ if(is_stop_call)
+ {
+ ReleaseAudioFocus_HFP(NULL);
+ is_stop_call=0;
}
-#ifdef LOCAL_VOICE_CALL
- success = ReleaseAudioFocus();
-#else
- success = ReleaseAudioFocus(context);
-#endif
- if (!success) {
- MEDIA_ERR_LOG("release audio focus failed");
- return nullptr;
- }
printf("VoiceCallVolteThread END");
return nullptr;
}
MEDIA_ERR_LOG("set modem headset out device connect failed");
}
+ MEDIA_INFO_LOG("captureConfig.sampleRate %d",Audio_code_hfp_t.sampleRate);
+
g_stream_in_uplink = std::make_shared<AudioStreamIn>();
CapturerInputConfig captureConfig = {};
return 0;
}
-
-
static void *VoiceCallVolteHFPThread(void *priv)
{
VoiceCallVolteContext *context = (VoiceCallVolteContext *)priv;
-
- bool success = NO_LOCAL_VOICE_CALL_RequsetAudioFocus(context);
- if (!success) {
- MEDIA_ERR_LOG("requset audio focus failed");
- return nullptr;
+ if(g_sessionId==0)
+ {
+ NO_LOCAL_VOICE_CALL_RequsetAudioFocus(NULL);
}
+ context->sessionId=g_sessionId;
+
+
+ // bool success = NO_LOCAL_VOICE_CALL_RequsetAudioFocus(context);
+ // if (!success) {
+ // MEDIA_ERR_LOG("requset audio focus failed");
+ // return nullptr;
+ // }
int32_t ret = RunVoiceCallVolte_NO_LOCAL_VOICE_CALL(context);
if (ret != 0) {
MEDIA_ERR_LOG("run voice call volte failed");
- (void)ReleaseAudioFocus_HFP(context);
+ // (void)ReleaseAudioFocus_HFP(context);
// (void)ReleaseAudioFocus();
return nullptr;
}
-
- success = ReleaseAudioFocus_HFP(context);
- // success = ReleaseAudioFocus();
- if (!success) {
- MEDIA_ERR_LOG("release audio focus failed");
- return nullptr;
+ if(is_stop_call)
+ {
+ ReleaseAudioFocus_HFP(NULL);
+ is_stop_call=0;
}
+
+
printf("VoiceCallVolteHFPThread END");
return nullptr;
}
MediaMutexUnLock(g_voiceCallVolteContextMutex);
// 3. create voice call volte thread
- MediaThreadattr attr = { "VoiceCallVolteThread", 0x2000, THREAD_SCHED_INVALID, 0, false };
+ MediaThreadattr attr = { "VoiceCallVolteHFPThread", 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");