diff --git a/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp b/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp index a12079788fb82e2c12fcff8e6618977386651d8c..9c5d53fea52131d6300a77b5b855c4f22865a0bd 100644 --- a/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp @@ -1599,12 +1599,26 @@ uint32_t AudioCoreService::OpenNewAudioPortAndRoute(std::shared_ptrstreamDescriptors_.size() > 0 && pipeInfo->streamDescriptors_.front() != nullptr, OPEN_PORT_FAILURE, "pipeInfo is invalid"); - if (pipeInfo->streamDescriptors_.front()->newDeviceDescs_.front()->deviceType_ == DEVICE_TYPE_REMOTE_CAST) { + std::shared_ptr streamDesc = pipeInfo->streamDescriptors_[0]; + CHECK_AND_RETURN_RET_LOG(streamDesc->newDeviceDescs_.size() > 0 && + streamDesc->newDeviceDescs_[0] != nullptr, OPEN_PORT_FAILURE, "invalid streamDesc"); + if (streamDesc->newDeviceDescs_.front()->deviceType_ == DEVICE_TYPE_REMOTE_CAST) { AUDIO_INFO_LOG("[PipeExecInfo] remote cast device do not need open pipe"); - id = pipeInfo->streamDescriptors_.front()->sessionId_; + id = streamDesc->sessionId_; } else { + if (pipeInfo->moduleInfo_.name == BLUETOOTH_MIC && + streamDesc->newDeviceDescs_[0]->deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP_IN) { + shared_ptr desc = streamDesc->newDeviceDescs_[0]; + audioActiveDevice_.SetActiveBtDeviceMac(desc->macAddress_); + bool ret = audioActiveDevice_.GetActiveA2dpDeviceStreamInfo(DEVICE_TYPE_BLUETOOTH_A2DP_IN, + streamDesc->streamInfo_); + CHECK_AND_RETURN_RET_LOG(ret, OPEN_PORT_FAILURE, "invalid streamDesc"); + SourceType sourceType = streamDesc->capturerInfo_.sourceType; + GetA2dpModuleInfo(pipeInfo->moduleInfo_, streamDesc->streamInfo_, sourceType); + } HandleCommonSourceOpened(pipeInfo); id = audioPolicyManager_.OpenAudioPort(pipeInfo, paIndex); + if (audioActiveDevice_.GetCurrentInputDeviceType() == DEVICE_TYPE_MIC || audioActiveDevice_.GetCurrentInputDeviceType() == DEVICE_TYPE_ACCESSORY) { audioPolicyManager_.SetDeviceActive(audioActiveDevice_.GetCurrentInputDeviceType(), diff --git a/services/audio_policy/test/unittest/audio_core_service_private_unit_test/src/audio_core_service_private_unit_test.cpp b/services/audio_policy/test/unittest/audio_core_service_private_unit_test/src/audio_core_service_private_unit_test.cpp index e10d0fe060caed078c34197833f743396d19fd4c..392fc22df5649b079f9326410510c7c36a9abe63 100644 --- a/services/audio_policy/test/unittest/audio_core_service_private_unit_test/src/audio_core_service_private_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_core_service_private_unit_test/src/audio_core_service_private_unit_test.cpp @@ -2266,5 +2266,72 @@ HWTEST(AudioCoreServicePrivateTest, LoadSplitModule_004, TestSize.Level1) auto ret = audioCoreService->LoadSplitModule(splitArgs, networkId); EXPECT_EQ(ret, 0); } + + +/** + * @tc.name : Test AudioCoreService. + * @tc.number: AudioCoreServicePrivate_124 + * @tc.desc : Test AudioCoreService::OpenNewAudioPortAndRoute() + */ +HWTEST(AudioCoreServicePrivateTest, AudioCoreServicePrivate_124, TestSize.Level1) +{ + uint32_t sessionIDTest = 100; + + auto audioCoreService = std::make_shared(); + ASSERT_NE(audioCoreService, nullptr); + + auto pipeInfo = std::make_shared(); + ASSERT_NE(pipeInfo, nullptr); + auto audioStreamDescriptor = std::make_shared(); + ASSERT_NE(audioStreamDescriptor, nullptr); + pipeInfo->streamDescriptors_.push_back(audioStreamDescriptor); + + auto audioDeviceDescriptor = std::make_shared(); + ASSERT_NE(audioStreamDescriptor, nullptr); + audioDeviceDescriptor->deviceType_ = DEVICE_TYPE_REMOTE_CAST; + audioStreamDescriptor->newDeviceDescs_.push_back(audioDeviceDescriptor); + audioStreamDescriptor->sessionId_ = sessionIDTest; + pipeInfo->streamDescriptors_[0]->newDeviceDescs_.push_back(audioDeviceDescriptor); + + uint32_t paIndex = 0; + auto ret = audioCoreService->OpenNewAudioPortAndRoute(pipeInfo, paIndex); + + EXPECT_EQ(ret, sessionIDTest); +} + +/** + * @tc.name : Test AudioCoreService. + * @tc.number: AudioCoreServicePrivate_125 + * @tc.desc : Test AudioCoreService::OpenNewAudioPortAndRoute() + */ +HWTEST(AudioCoreServicePrivateTest, AudioCoreServicePrivate_125, TestSize.Level1) +{ + uint32_t sessionIDTest = 0; + + auto audioCoreService = std::make_shared(); + ASSERT_NE(audioCoreService, nullptr); + AudioStreamInfo audioStreamInfo = {}; + audioStreamInfo.samplingRate = AudioSamplingRate::SAMPLE_RATE_48000; + audioStreamInfo.format = AudioSampleFormat::SAMPLE_S16LE; + audioStreamInfo.channels = AudioChannel::STEREO; + auto pipeInfo = std::make_shared(); + ASSERT_NE(pipeInfo, nullptr); + auto audioStreamDescriptor = std::make_shared(); + ASSERT_NE(audioStreamDescriptor, nullptr); + audioStreamDescriptor->streamInfo_ = audioStreamInfo; + pipeInfo->streamDescriptors_.push_back(audioStreamDescriptor); + pipeInfo->moduleInfo_.name = BLUETOOTH_MIC; + + auto audioDeviceDescriptor = std::make_shared(); + ASSERT_NE(audioStreamDescriptor, nullptr); + audioDeviceDescriptor->deviceType_ = DEVICE_TYPE_REMOTE_CAST; + audioStreamDescriptor->newDeviceDescs_.push_back(audioDeviceDescriptor); + pipeInfo->streamDescriptors_[0]->newDeviceDescs_.push_back(audioDeviceDescriptor); + + uint32_t paIndex = 0; + auto ret = audioCoreService->OpenNewAudioPortAndRoute(pipeInfo, paIndex); + + EXPECT_NE(ret, sessionIDTest); +} } // namespace AudioStandard } // namespace OHOS