From 5c59cf06e0222f2b15df364a6ab931ff496d0c1e Mon Sep 17 00:00:00 2001 From: wangjiajun Date: Tue, 2 Sep 2025 11:33:23 +0800 Subject: [PATCH 1/3] move audioparam check ahead Signed-off-by: wangjiajun --- .../audiocapturer/src/audio_capturer.cpp | 12 +++- .../audiorenderer/src/audio_renderer.cpp | 12 +++- .../audiostream/include/i_audio_stream.h | 31 +++----- .../client/src/capturer_in_client.cpp | 9 --- .../client/src/i_audio_stream.cpp | 23 ++++++ .../client/src/renderer_in_client_public.cpp | 11 --- .../client/i_audio_stream_unit_test.cpp | 72 +++++++++++++++++-- 7 files changed, 120 insertions(+), 50 deletions(-) diff --git a/frameworks/native/audiocapturer/src/audio_capturer.cpp b/frameworks/native/audiocapturer/src/audio_capturer.cpp index 6e9357c0aa..da9f2fc6e5 100644 --- a/frameworks/native/audiocapturer/src/audio_capturer.cpp +++ b/frameworks/native/audiocapturer/src/audio_capturer.cpp @@ -300,9 +300,12 @@ int32_t AudioCapturerPrivate::SetParams(const AudioCapturerParams params) // Create Client std::shared_ptr streamDesc = ConvertToStreamDescriptor(audioStreamParams); + + int32_t ret = IAudioStream::CheckAudioStreamInfo(audioStreamParams, AUDIO_MODE_RECORD); + CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckAudioStreamInfo fail!"); + uint32_t flag = AUDIO_INPUT_FLAG_NORMAL; - int32_t ret = AudioPolicyManager::GetInstance().CreateCapturerClient( - streamDesc, flag, audioStreamParams.originalSessionId); + ret = AudioPolicyManager::GetInstance().CreateCapturerClient(streamDesc, flag, audioStreamParams.originalSessionId); CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ERR_OPERATION_FAILED, "CreateCapturerClient failed"); AUDIO_INFO_LOG("StreamClientState for Capturer::CreateClient. id %{public}u, flag :%{public}u", audioStreamParams.originalSessionId, flag); @@ -1520,8 +1523,11 @@ bool AudioCapturerPrivate::GenerateNewStream(IAudioStream::StreamClass targetCla CapturerState previousState, IAudioStream::SwitchInfo &switchInfo) { std::shared_ptr streamDesc = GetStreamDescBySwitchInfo(switchInfo, restoreInfo); + + int32_t ret = IAudioStream::CheckAudioStreamInfo(switchInfo.params, AUDIO_MODE_RECORD); + CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckAudioStreamInfo fail!"); uint32_t flag = AUDIO_INPUT_FLAG_NORMAL; - int32_t ret = AudioPolicyManager::GetInstance().CreateCapturerClient( + ret = AudioPolicyManager::GetInstance().CreateCapturerClient( streamDesc, flag, switchInfo.params.originalSessionId); CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, false, "CreateCapturerClient failed"); diff --git a/frameworks/native/audiorenderer/src/audio_renderer.cpp b/frameworks/native/audiorenderer/src/audio_renderer.cpp index 4356b65223..9f82b6a211 100644 --- a/frameworks/native/audiorenderer/src/audio_renderer.cpp +++ b/frameworks/native/audiorenderer/src/audio_renderer.cpp @@ -651,8 +651,12 @@ int32_t AudioRendererPrivate::SetParams(const AudioRendererParams params) rendererInfo_.rendererFlags = AUDIO_FLAG_NORMAL; IAudioStream::StreamClass streamClass = IAudioStream::PA_STREAM; #endif + + int32_t ret = IAudioStream::CheckAudioStreamInfo(audioStreamParams, AUDIO_MODE_PLAYBACK); + CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckAudioStreamInfo fail!"); + rendererInfo_.audioFlag = AUDIO_OUTPUT_FLAG_NORMAL; - int32_t ret = PrepareAudioStream(audioStreamParams, audioStreamType, streamClass, rendererInfo_.audioFlag); + ret = PrepareAudioStream(audioStreamParams, audioStreamType, streamClass, rendererInfo_.audioFlag); CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ERR_INVALID_PARAM, "PrepareAudioStream failed"); ret = InitAudioStream(audioStreamParams); @@ -2249,9 +2253,13 @@ bool AudioRendererPrivate::GenerateNewStream(IAudioStream::StreamClass targetCla RendererState previousState, IAudioStream::SwitchInfo &switchInfo) { std::shared_ptr streamDesc = GetStreamDescBySwitchInfo(switchInfo, restoreInfo); + + int32_t ret = IAudioStream::CheckAudioStreamInfo(switchInfo.params, AUDIO_MODE_PLAYBACK); + CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckAudioStreamInfo fail!"); + uint32_t flag = AUDIO_OUTPUT_FLAG_NORMAL; std::string networkId = LOCAL_NETWORK_ID; - int32_t ret = AudioPolicyManager::GetInstance().CreateRendererClient( + ret = AudioPolicyManager::GetInstance().CreateRendererClient( streamDesc, flag, switchInfo.params.originalSessionId, networkId); CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, false, "CreateRendererClient failed"); diff --git a/frameworks/native/audiostream/include/i_audio_stream.h b/frameworks/native/audiostream/include/i_audio_stream.h index 0547b081b7..3a30e82857 100644 --- a/frameworks/native/audiostream/include/i_audio_stream.h +++ b/frameworks/native/audiostream/include/i_audio_stream.h @@ -126,6 +126,17 @@ public: static AudioStreamType GetStreamType(ContentType contentType, StreamUsage streamUsage); static std::map, AudioStreamType> CreateStreamMap(); static void CreateStreamMap(std::map, AudioStreamType> &streamMap); + static int32_t CheckAudioStreamInfo(const AudioStreamParams info, AudioMode mode); + static bool IsFormatValid(uint8_t format); + static bool IsRendererChannelValid(uint8_t channel); + static bool IsCapturerChannelValid(uint8_t channel); + static bool IsEncodingTypeValid(uint8_t encodingType); + static bool IsSamplingRateValid(uint32_t samplingRate); + static bool IsCustomSampleRateValid(uint32_t customSampleRate); + static bool IsRendererChannelLayoutValid(uint64_t channelLayout); + static bool IsCapturerChannelLayoutValid(uint64_t channelLayout); + static bool IsPlaybackChannelRelatedInfoValid(uint8_t channels, uint64_t channelLayout); + static bool IsRecordChannelRelatedInfoValid(uint8_t channels, uint64_t channelLayout); static inline bool IsFastStreamClass(StreamClass streamClass) { if (streamClass == FAST_STREAM || streamClass == VOIP_STREAM) { @@ -273,26 +284,6 @@ public: virtual void SetState() {} - bool IsFormatValid(uint8_t format); - - bool IsRendererChannelValid(uint8_t channel); - - bool IsCapturerChannelValid(uint8_t channel); - - bool IsEncodingTypeValid(uint8_t encodingType); - - bool IsSamplingRateValid(uint32_t samplingRate); - - bool IsCustomSampleRateValid(uint32_t customSampleRate); - - bool IsRendererChannelLayoutValid(uint64_t channelLayout); - - bool IsCapturerChannelLayoutValid(uint64_t channelLayout); - - bool IsPlaybackChannelRelatedInfoValid(uint8_t channels, uint64_t channelLayout); - - bool IsRecordChannelRelatedInfoValid(uint8_t channels, uint64_t channelLayout); - virtual void SetSilentModeAndMixWithOthers(bool on) = 0; virtual bool GetSilentModeAndMixWithOthers() = 0; diff --git a/services/audio_service/client/src/capturer_in_client.cpp b/services/audio_service/client/src/capturer_in_client.cpp index c850c4b1be..d770549fb2 100644 --- a/services/audio_service/client/src/capturer_in_client.cpp +++ b/services/audio_service/client/src/capturer_in_client.cpp @@ -202,15 +202,6 @@ int32_t CapturerInClientInner::SetAudioStreamInfo(const AudioStreamParams info, info.encoding); AudioXCollie guard("CapturerInClientInner::SetAudioStreamInfo", CREATE_TIMEOUT_IN_SECOND, nullptr, nullptr, AUDIO_XCOLLIE_FLAG_LOG); - if (!IsFormatValid(info.format) || !IsEncodingTypeValid(info.encoding) || !IsSamplingRateValid(info.samplingRate)) { - AUDIO_ERR_LOG("CapturerInClient: Unsupported audio parameter"); - return ERR_NOT_SUPPORTED; - } - if (!IsRecordChannelRelatedInfoValid(info.channels, info.channelLayout)) { - AUDIO_ERR_LOG("Invalid sink channel %{public}d or channel layout %{public}" PRIu64, info.channels, - info.channelLayout); - return ERR_NOT_SUPPORTED; - } CHECK_AND_RETURN_RET_LOG(IAudioStream::GetByteSizePerFrame(info, sizePerFrameInByte_) == SUCCESS, ERROR_INVALID_PARAM, "GetByteSizePerFrame failed with invalid params"); diff --git a/services/audio_service/client/src/i_audio_stream.cpp b/services/audio_service/client/src/i_audio_stream.cpp index 6753eda52e..634f1d373e 100644 --- a/services/audio_service/client/src/i_audio_stream.cpp +++ b/services/audio_service/client/src/i_audio_stream.cpp @@ -112,6 +112,27 @@ void IAudioStream::CreateStreamMap(std::map, streamMap[std::make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_VOICE_CALL_ASSISTANT)] = STREAM_VOICE_CALL_ASSISTANT; } +int32_t IAudioStream::CheckAudioStreamInfo(const AudioStreamParams info, AudioMode mode) +{ + if (mode == AUDIO_MODE_PLAYBACK) { + if (!IsFormatValid(info.format) || !IsEncodingTypeValid(info.encoding) || + !((info.customSampleRate == 0 && IsSamplingRateValid(info.samplingRate)) || + (info.customSampleRate != 0 && IsCustomSampleRateValid(info.customSampleRate)))) { + AUDIO_ERR_LOG("Unsupported audio renderer parameter"); + return ERR_NOT_SUPPORTED; + } + CHECK_AND_RETURN_RET(IsPlaybackChannelRelatedInfoValid(info.channels, info.channelLayout), ERR_NOT_SUPPORTED); + } else { + if (!IsFormatValid(info.format) || !IsEncodingTypeValid(info.encoding) || + !IsSamplingRateValid(info.samplingRate)) { + AUDIO_ERR_LOG("Unsupported audio capturer parameter"); + return ERR_NOT_SUPPORTED; + } + CHECK_AND_RETURN_RET(IsRecordChannelRelatedInfoValid(info.channels, info.channelLayout), ERR_NOT_SUPPORTED); + } + return SUCCESS; +} + AudioStreamType IAudioStream::GetStreamType(ContentType contentType, StreamUsage streamUsage) { AudioStreamType streamType = STREAM_MUSIC; @@ -321,9 +342,11 @@ bool IAudioStream::IsPlaybackChannelRelatedInfoValid(uint8_t channels, uint64_t bool IAudioStream::IsRecordChannelRelatedInfoValid(uint8_t channels, uint64_t channelLayout) { if (!IsCapturerChannelValid(channels)) { + AUDIO_ERR_LOG("AudioStream: Invalid source channel %{public}d", channels); return false; } if (!IsCapturerChannelLayoutValid(channelLayout)) { + AUDIO_ERR_LOG("AudioStream: Invalid source channel layout"); return false; } return true; diff --git a/services/audio_service/client/src/renderer_in_client_public.cpp b/services/audio_service/client/src/renderer_in_client_public.cpp index cd551f569a..ce4d0631f6 100644 --- a/services/audio_service/client/src/renderer_in_client_public.cpp +++ b/services/audio_service/client/src/renderer_in_client_public.cpp @@ -236,13 +236,6 @@ int32_t RendererInClientInner::SetAudioStreamInfo(const AudioStreamParams info, AudioXCollie guard("RendererInClientInner::SetAudioStreamInfo", CREATE_TIMEOUT_IN_SECOND, nullptr, nullptr, AUDIO_XCOLLIE_FLAG_LOG); - if (!IsFormatValid(info.format) || !IsEncodingTypeValid(info.encoding) || - !((info.customSampleRate == 0 && IsSamplingRateValid(info.samplingRate)) || - (info.customSampleRate != 0 && IsCustomSampleRateValid(info.customSampleRate)))) { - AUDIO_ERR_LOG("Unsupported audio parameter"); - return ERR_NOT_SUPPORTED; - } - streamParams_ = curStreamParams_ = info; // keep it for later use if (curStreamParams_.encoding == ENCODING_AUDIOVIVID) { ConverterConfig cfg = AudioPolicyManager::GetInstance().GetConverterConfig(); @@ -254,10 +247,6 @@ int32_t RendererInClientInner::SetAudioStreamInfo(const AudioStreamParams info, converter_->ConverterChannels(curStreamParams_.channels, curStreamParams_.channelLayout); } - if (!IsPlaybackChannelRelatedInfoValid(curStreamParams_.channels, curStreamParams_.channelLayout)) { - return ERR_NOT_SUPPORTED; - } - CHECK_AND_RETURN_RET_LOG(IAudioStream::GetByteSizePerFrame(curStreamParams_, sizePerFrameInByte_) == SUCCESS, ERROR_INVALID_PARAM, "GetByteSizePerFrame failed with invalid params"); diff --git a/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp b/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp index 16ddb25496..32404b6bb1 100644 --- a/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp +++ b/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp @@ -153,18 +153,18 @@ HWTEST(IAudioStreamUnitTest, IsPlaybackChannelRelatedInfoValid_001, TestSize.Lev std::make_shared(AudioStreamType::STREAM_MUSIC, 0); std::uint8_t audioChannel = 100; std::uint64_t channelLayout = 100; - EXPECT_FALSE(capturerInClientInner_->IsPlaybackChannelRelatedInfoValid(audioChannel, channelLayout)); + EXPECT_FALSE(IAudioStream::IsPlaybackChannelRelatedInfoValid(audioChannel, channelLayout)); audioChannel = 2; channelLayout = 100; - EXPECT_FALSE(capturerInClientInner_->IsPlaybackChannelRelatedInfoValid(audioChannel, channelLayout)); + EXPECT_FALSE(IAudioStream::IsPlaybackChannelRelatedInfoValid(audioChannel, channelLayout)); } /** * @tc.name : Test IsStreamSupported API * @tc.type : FUNC - * @tc.number: IsPlaybackChannelRelatedInfoValid_001 - * @tc.desc : Test IsPlaybackChannelRelatedInfoValid interface. + * @tc.number: IsRecordChannelRelatedInfoValid_001 + * @tc.desc : Test IsRecordChannelRelatedInfoValid interface. */ HWTEST(IAudioStreamUnitTest, IsRecordChannelRelatedInfoValid_001, TestSize.Level1) { @@ -172,7 +172,7 @@ HWTEST(IAudioStreamUnitTest, IsRecordChannelRelatedInfoValid_001, TestSize.Level std::make_shared(AudioStreamType::STREAM_MUSIC, 0); std::uint8_t audioChannel = 2; std::uint64_t channelLayout = 100; - EXPECT_FALSE(capturerInClientInner_->IsRecordChannelRelatedInfoValid(audioChannel, channelLayout)); + EXPECT_FALSE(IAudioStream::IsRecordChannelRelatedInfoValid(audioChannel, channelLayout)); } /** @@ -200,5 +200,67 @@ HWTEST(IAudioStreamUnitTest, IsStreamSupported_003, TestSize.Level1) result = IAudioStream::IsStreamSupported(2, params); EXPECT_TRUE(result); } + +/** + * @tc.name : Test CheckAudioStreamInfo API + * @tc.type : FUNC + * @tc.number: CheckAudioStreamInfo_001 + * @tc.desc : Test CheckAudioStreamInfo interface in AUDIO_MODE_PLAYBACK. + */ +HWTEST(IAudioStreamUnitTest, CheckAudioStreamInfo_001, TestSize.Level1) +{ + AudioStreamParams params; + params.format = SAMPLE_S16LE; + params.encoding = ENCODING_PCM; + params.samplingRate = SAMPLE_RATE_48000; + params.customSampleRate = 0; + params.channels = STEREO; + params.channelLayout = CH_LAYOUT_STEREO; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), SUCCESS); + + params.channelLayout = 12345; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + params.channels = CHANNEL_UNKNOW; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + + params.samplingRate = 12345; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + params.customSampleRate = SAMPLE_RATE_48000; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + params.encoding = ENCODING_INVALID; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + params.format = INVALID_WIDTH; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); +} + +/** + * @tc.name : Test CheckAudioStreamInfo API + * @tc.type : FUNC + * @tc.number: CheckAudioStreamInfo_002 + * @tc.desc : Test CheckAudioStreamInfo interface in AUDIO_MODE_RECORD. + */ +HWTEST(IAudioStreamUnitTest, CheckAudioStreamInfo_002, TestSize.Level1) +{ + AudioStreamParams params; + params.format = SAMPLE_S16LE; + params.encoding = ENCODING_PCM; + params.samplingRate = SAMPLE_RATE_48000; + params.customSampleRate = 0; + params.channels = STEREO; + params.channelLayout = CH_LAYOUT_STEREO; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), SUCCESS); + + params.channelLayout = 12345; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + params.channels = CHANNEL_UNKNOW; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + + params.samplingRate = 12345; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + params.encoding = ENCODING_INVALID; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + params.format = INVALID_WIDTH; + EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); +} } // namespace AudioStandard } // namespace OHOS -- Gitee From 28c87b6846de0fa603b8badf7267a52e59c107d2 Mon Sep 17 00:00:00 2001 From: wangjiajun Date: Wed, 3 Sep 2025 09:26:02 +0800 Subject: [PATCH 2/3] fix codecheck Signed-off-by: wangjiajun --- .../audiocapturer/src/audio_capturer.cpp | 8 ++-- .../audiorenderer/src/audio_renderer.cpp | 9 ++-- .../audiostream/include/i_audio_stream.h | 3 +- .../client/src/i_audio_stream.cpp | 34 ++++++++------- .../client/i_audio_stream_unit_test.cpp | 42 +++++++++---------- 5 files changed, 49 insertions(+), 47 deletions(-) diff --git a/frameworks/native/audiocapturer/src/audio_capturer.cpp b/frameworks/native/audiocapturer/src/audio_capturer.cpp index da9f2fc6e5..435b1e6b6f 100644 --- a/frameworks/native/audiocapturer/src/audio_capturer.cpp +++ b/frameworks/native/audiocapturer/src/audio_capturer.cpp @@ -301,8 +301,8 @@ int32_t AudioCapturerPrivate::SetParams(const AudioCapturerParams params) // Create Client std::shared_ptr streamDesc = ConvertToStreamDescriptor(audioStreamParams); - int32_t ret = IAudioStream::CheckAudioStreamInfo(audioStreamParams, AUDIO_MODE_RECORD); - CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckAudioStreamInfo fail!"); + int32_t ret = IAudioStream::CheckCapturerAudioStreamInfo(audioStreamParams); + CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckCapturerAudioStreamInfo fail!"); uint32_t flag = AUDIO_INPUT_FLAG_NORMAL; ret = AudioPolicyManager::GetInstance().CreateCapturerClient(streamDesc, flag, audioStreamParams.originalSessionId); @@ -1524,8 +1524,8 @@ bool AudioCapturerPrivate::GenerateNewStream(IAudioStream::StreamClass targetCla { std::shared_ptr streamDesc = GetStreamDescBySwitchInfo(switchInfo, restoreInfo); - int32_t ret = IAudioStream::CheckAudioStreamInfo(switchInfo.params, AUDIO_MODE_RECORD); - CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckAudioStreamInfo fail!"); + int32_t ret = IAudioStream::CheckCapturerAudioStreamInfo(switchInfo.params); + CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckCapturerAudioStreamInfo fail!"); uint32_t flag = AUDIO_INPUT_FLAG_NORMAL; ret = AudioPolicyManager::GetInstance().CreateCapturerClient( streamDesc, flag, switchInfo.params.originalSessionId); diff --git a/frameworks/native/audiorenderer/src/audio_renderer.cpp b/frameworks/native/audiorenderer/src/audio_renderer.cpp index 9f82b6a211..b8568f3110 100644 --- a/frameworks/native/audiorenderer/src/audio_renderer.cpp +++ b/frameworks/native/audiorenderer/src/audio_renderer.cpp @@ -652,8 +652,8 @@ int32_t AudioRendererPrivate::SetParams(const AudioRendererParams params) IAudioStream::StreamClass streamClass = IAudioStream::PA_STREAM; #endif - int32_t ret = IAudioStream::CheckAudioStreamInfo(audioStreamParams, AUDIO_MODE_PLAYBACK); - CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckAudioStreamInfo fail!"); + int32_t ret = IAudioStream::CheckRendererAudioStreamInfo(audioStreamParams); + CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckRendererAudioStreamInfo fail!"); rendererInfo_.audioFlag = AUDIO_OUTPUT_FLAG_NORMAL; ret = PrepareAudioStream(audioStreamParams, audioStreamType, streamClass, rendererInfo_.audioFlag); @@ -2254,8 +2254,8 @@ bool AudioRendererPrivate::GenerateNewStream(IAudioStream::StreamClass targetCla { std::shared_ptr streamDesc = GetStreamDescBySwitchInfo(switchInfo, restoreInfo); - int32_t ret = IAudioStream::CheckAudioStreamInfo(switchInfo.params, AUDIO_MODE_PLAYBACK); - CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckAudioStreamInfo fail!"); + int32_t ret = IAudioStream::CheckRendererAudioStreamInfo(switchInfo.params); + CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CheckRendererAudioStreamInfo fail!"); uint32_t flag = AUDIO_OUTPUT_FLAG_NORMAL; std::string networkId = LOCAL_NETWORK_ID; @@ -2269,7 +2269,6 @@ bool AudioRendererPrivate::GenerateNewStream(IAudioStream::StreamClass targetCla std::shared_ptr newAudioStream = IAudioStream::GetPlaybackStream(targetClass, switchInfo.params, switchInfo.eStreamType, appInfo_.appUid); CHECK_AND_RETURN_RET_LOG(newAudioStream != nullptr, false, "SetParams GetPlayBackStream failed."); - AUDIO_INFO_LOG("Get new stream success!"); // The latest route info returned by create needs to be used to update audioFlag, // the server can obtain the route info to proceed with start. diff --git a/frameworks/native/audiostream/include/i_audio_stream.h b/frameworks/native/audiostream/include/i_audio_stream.h index 3a30e82857..0f7ea11366 100644 --- a/frameworks/native/audiostream/include/i_audio_stream.h +++ b/frameworks/native/audiostream/include/i_audio_stream.h @@ -126,7 +126,8 @@ public: static AudioStreamType GetStreamType(ContentType contentType, StreamUsage streamUsage); static std::map, AudioStreamType> CreateStreamMap(); static void CreateStreamMap(std::map, AudioStreamType> &streamMap); - static int32_t CheckAudioStreamInfo(const AudioStreamParams info, AudioMode mode); + static int32_t CheckRendererAudioStreamInfo(const AudioStreamParams info); + static int32_t CheckCapturerAudioStreamInfo(const AudioStreamParams info); static bool IsFormatValid(uint8_t format); static bool IsRendererChannelValid(uint8_t channel); static bool IsCapturerChannelValid(uint8_t channel); diff --git a/services/audio_service/client/src/i_audio_stream.cpp b/services/audio_service/client/src/i_audio_stream.cpp index 634f1d373e..ac94f965bd 100644 --- a/services/audio_service/client/src/i_audio_stream.cpp +++ b/services/audio_service/client/src/i_audio_stream.cpp @@ -112,24 +112,26 @@ void IAudioStream::CreateStreamMap(std::map, streamMap[std::make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_VOICE_CALL_ASSISTANT)] = STREAM_VOICE_CALL_ASSISTANT; } -int32_t IAudioStream::CheckAudioStreamInfo(const AudioStreamParams info, AudioMode mode) +int32_t IAudioStream::CheckRendererAudioStreamInfo(const AudioStreamParams info) { - if (mode == AUDIO_MODE_PLAYBACK) { - if (!IsFormatValid(info.format) || !IsEncodingTypeValid(info.encoding) || - !((info.customSampleRate == 0 && IsSamplingRateValid(info.samplingRate)) || - (info.customSampleRate != 0 && IsCustomSampleRateValid(info.customSampleRate)))) { - AUDIO_ERR_LOG("Unsupported audio renderer parameter"); - return ERR_NOT_SUPPORTED; - } - CHECK_AND_RETURN_RET(IsPlaybackChannelRelatedInfoValid(info.channels, info.channelLayout), ERR_NOT_SUPPORTED); - } else { - if (!IsFormatValid(info.format) || !IsEncodingTypeValid(info.encoding) || - !IsSamplingRateValid(info.samplingRate)) { - AUDIO_ERR_LOG("Unsupported audio capturer parameter"); - return ERR_NOT_SUPPORTED; - } - CHECK_AND_RETURN_RET(IsRecordChannelRelatedInfoValid(info.channels, info.channelLayout), ERR_NOT_SUPPORTED); + if (!IsFormatValid(info.format) || !IsEncodingTypeValid(info.encoding) || + !((info.customSampleRate == 0 && IsSamplingRateValid(info.samplingRate)) || + (info.customSampleRate != 0 && IsCustomSampleRateValid(info.customSampleRate)))) { + AUDIO_ERR_LOG("Unsupported audio renderer parameter"); + return ERR_NOT_SUPPORTED; + } + CHECK_AND_RETURN_RET(IsPlaybackChannelRelatedInfoValid(info.channels, info.channelLayout), ERR_NOT_SUPPORTED); + return SUCCESS; +} + +int32_t IAudioStream::CheckCapturerAudioStreamInfo(const AudioStreamParams info) +{ + if (!IsFormatValid(info.format) || !IsEncodingTypeValid(info.encoding) || + !IsSamplingRateValid(info.samplingRate)) { + AUDIO_ERR_LOG("Unsupported audio capturer parameter"); + return ERR_NOT_SUPPORTED; } + CHECK_AND_RETURN_RET(IsRecordChannelRelatedInfoValid(info.channels, info.channelLayout), ERR_NOT_SUPPORTED); return SUCCESS; } diff --git a/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp b/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp index 32404b6bb1..4212358514 100644 --- a/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp +++ b/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp @@ -202,12 +202,12 @@ HWTEST(IAudioStreamUnitTest, IsStreamSupported_003, TestSize.Level1) } /** - * @tc.name : Test CheckAudioStreamInfo API + * @tc.name : Test CheckRendererAudioStreamInfo API * @tc.type : FUNC - * @tc.number: CheckAudioStreamInfo_001 - * @tc.desc : Test CheckAudioStreamInfo interface in AUDIO_MODE_PLAYBACK. + * @tc.number: CheckRendererAudioStreamInfo_001 + * @tc.desc : Test CheckRendererAudioStreamInfo interface. */ -HWTEST(IAudioStreamUnitTest, CheckAudioStreamInfo_001, TestSize.Level1) +HWTEST(IAudioStreamUnitTest, CheckRendererAudioStreamInfo_001, TestSize.Level1) { AudioStreamParams params; params.format = SAMPLE_S16LE; @@ -216,30 +216,30 @@ HWTEST(IAudioStreamUnitTest, CheckAudioStreamInfo_001, TestSize.Level1) params.customSampleRate = 0; params.channels = STEREO; params.channelLayout = CH_LAYOUT_STEREO; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), SUCCESS); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), SUCCESS); params.channelLayout = 12345; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); params.channels = CHANNEL_UNKNOW; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); params.samplingRate = 12345; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); params.customSampleRate = SAMPLE_RATE_48000; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); params.encoding = ENCODING_INVALID; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); params.format = INVALID_WIDTH; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); } /** - * @tc.name : Test CheckAudioStreamInfo API + * @tc.name : Test CheckCapturerAudioStreamInfo API * @tc.type : FUNC - * @tc.number: CheckAudioStreamInfo_002 - * @tc.desc : Test CheckAudioStreamInfo interface in AUDIO_MODE_RECORD. + * @tc.number: CheckCapturerAudioStreamInfo_001 + * @tc.desc : Test CheckCapturerAudioStreamInfo interface. */ -HWTEST(IAudioStreamUnitTest, CheckAudioStreamInfo_002, TestSize.Level1) +HWTEST(IAudioStreamUnitTest, CheckCapturerAudioStreamInfo_001, TestSize.Level1) { AudioStreamParams params; params.format = SAMPLE_S16LE; @@ -248,19 +248,19 @@ HWTEST(IAudioStreamUnitTest, CheckAudioStreamInfo_002, TestSize.Level1) params.customSampleRate = 0; params.channels = STEREO; params.channelLayout = CH_LAYOUT_STEREO; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), SUCCESS); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), SUCCESS); params.channelLayout = 12345; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); params.channels = CHANNEL_UNKNOW; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); params.samplingRate = 12345; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); params.encoding = ENCODING_INVALID; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); params.format = INVALID_WIDTH; - EXPECT_EQ(IAudioStream::CheckAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); } } // namespace AudioStandard } // namespace OHOS -- Gitee From fe4481491a41943aa9b316d0cf2f6e65db9d5742 Mon Sep 17 00:00:00 2001 From: wangjiajun Date: Thu, 4 Sep 2025 10:23:38 +0800 Subject: [PATCH 3/3] fix ut Signed-off-by: wangjiajun --- .../client/i_audio_stream_unit_test.cpp | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp b/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp index 4212358514..7fb2852203 100644 --- a/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp +++ b/services/audio_service/test/unittest/client/i_audio_stream_unit_test.cpp @@ -216,21 +216,21 @@ HWTEST(IAudioStreamUnitTest, CheckRendererAudioStreamInfo_001, TestSize.Level1) params.customSampleRate = 0; params.channels = STEREO; params.channelLayout = CH_LAYOUT_STEREO; - EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), SUCCESS); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params), SUCCESS); params.channelLayout = 12345; - EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params), ERR_NOT_SUPPORTED); params.channels = CHANNEL_UNKNOW; - EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params), ERR_NOT_SUPPORTED); params.samplingRate = 12345; - EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params), ERR_NOT_SUPPORTED); params.customSampleRate = SAMPLE_RATE_48000; - EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params), ERR_NOT_SUPPORTED); params.encoding = ENCODING_INVALID; - EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params), ERR_NOT_SUPPORTED); params.format = INVALID_WIDTH; - EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params, AUDIO_MODE_PLAYBACK), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckRendererAudioStreamInfo(params), ERR_NOT_SUPPORTED); } /** @@ -248,19 +248,19 @@ HWTEST(IAudioStreamUnitTest, CheckCapturerAudioStreamInfo_001, TestSize.Level1) params.customSampleRate = 0; params.channels = STEREO; params.channelLayout = CH_LAYOUT_STEREO; - EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), SUCCESS); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params), SUCCESS); params.channelLayout = 12345; - EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params), ERR_NOT_SUPPORTED); params.channels = CHANNEL_UNKNOW; - EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params), ERR_NOT_SUPPORTED); params.samplingRate = 12345; - EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params), ERR_NOT_SUPPORTED); params.encoding = ENCODING_INVALID; - EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params), ERR_NOT_SUPPORTED); params.format = INVALID_WIDTH; - EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params, AUDIO_MODE_RECORD), ERR_NOT_SUPPORTED); + EXPECT_EQ(IAudioStream::CheckCapturerAudioStreamInfo(params), ERR_NOT_SUPPORTED); } } // namespace AudioStandard } // namespace OHOS -- Gitee