From 34f292b49425335a2a63592cb05e4dc6f730f9cb Mon Sep 17 00:00:00 2001 From: liuyuehua1 Date: Wed, 3 Aug 2022 09:03:38 +0800 Subject: [PATCH 1/3] get single stream volume. Signed-off-by: liuyuehua1 Change-Id: I04a430d2921890048a5c13b3a5e09bfe6b8b7cd8 --- .../include/audio_capturer_proxy_obj.h | 1 + .../src/audio_capturer_proxy_obj.cpp | 5 ++ .../include/audio_policy_manager.h | 2 + .../include/audio_renderer_private.h | 1 + .../include/audio_renderer_proxy_obj.h | 1 + .../audiorenderer/src/audio_renderer.cpp | 5 ++ .../src/audio_renderer_proxy_obj.cpp | 5 ++ .../native/audiostream/include/audio_stream.h | 1 + .../include/audio_stream_manager.h | 1 + .../include/audio_system_manager.h | 1 + .../audiorenderer/include/audio_renderer.h | 8 +++ .../audio_client_tracker_callback_stub.h | 1 + .../audio_policy/client/audio_policy_base.h | 2 + .../client/audio_policy_manager_stub.h | 1 + .../audio_policy/client/audio_policy_proxy.h | 2 + .../audio_policy/common/audio_policy_types.h | 1 + .../common/i_standard_client_tracker.h | 2 + .../audio_client_tracker_callback_proxy.h | 2 + .../audio_policy/server/audio_policy_server.h | 2 + .../server/audio_stream_collector.h | 1 + .../server/service/audio_policy_service.h | 2 + .../client/audio_service_client.h | 1 + .../audio_client_tracker_callback_stub.cpp | 22 ++++++- .../client/audio_policy_manager.cpp | 5 ++ .../client/audio_policy_proxy.cpp | 19 ++++++ .../audio_client_tracker_callback_proxy.cpp | 25 ++++++++ .../server/audio_policy_manager_stub.cpp | 11 ++++ .../server/audio_policy_server.cpp | 5 ++ .../server/audio_stream_collector.cpp | 12 ++++ .../server/service/audio_policy_service.cpp | 5 ++ .../client/audio_service_client.cpp | 25 ++++++++ .../src/audio_service/client/audio_stream.cpp | 5 ++ .../client/audio_system_manager.cpp | 5 ++ services/test/audio_policy_test.cpp | 60 ++++++++++--------- .../src/audio_manager_unit_test.cpp | 45 ++++++++++++++ 35 files changed, 260 insertions(+), 32 deletions(-) diff --git a/frameworks/native/audiocapturer/include/audio_capturer_proxy_obj.h b/frameworks/native/audiocapturer/include/audio_capturer_proxy_obj.h index ecb2c9deac..3533373d23 100644 --- a/frameworks/native/audiocapturer/include/audio_capturer_proxy_obj.h +++ b/frameworks/native/audiocapturer/include/audio_capturer_proxy_obj.h @@ -31,6 +31,7 @@ public: void SetLowPowerVolumeImpl(float volume); void GetLowPowerVolumeImpl(float &volume); + void GetSingleStreamVolumeImpl(uint32_t &volume); private: const AudioCapturer *capturer; diff --git a/frameworks/native/audiocapturer/src/audio_capturer_proxy_obj.cpp b/frameworks/native/audiocapturer/src/audio_capturer_proxy_obj.cpp index eb2ee57e6d..56c1e11334 100644 --- a/frameworks/native/audiocapturer/src/audio_capturer_proxy_obj.cpp +++ b/frameworks/native/audiocapturer/src/audio_capturer_proxy_obj.cpp @@ -45,5 +45,10 @@ void AudioCapturerProxyObj::GetLowPowerVolumeImpl(float &volume) { volume = 1.0; } + +void AudioCapturerProxyObj::GetSingleStreamVolumeImpl(uint32_t &volume) +{ + volume = 0; +} } // namespace AudioStandard } // namespace OHOS diff --git a/frameworks/native/audiopolicy/include/audio_policy_manager.h b/frameworks/native/audiopolicy/include/audio_policy_manager.h index 3fb067d5e1..40b55d4b14 100644 --- a/frameworks/native/audiopolicy/include/audio_policy_manager.h +++ b/frameworks/native/audiopolicy/include/audio_policy_manager.h @@ -56,6 +56,8 @@ public: float GetLowPowerVolume(int32_t streamId); + uint32_t GetSingleStreamVolume(int32_t streamId); + int32_t SetStreamMute(AudioStreamType streamType, bool mute); bool GetStreamMute(AudioStreamType streamType); diff --git a/frameworks/native/audiorenderer/include/audio_renderer_private.h b/frameworks/native/audiorenderer/include/audio_renderer_private.h index be5f047ec0..acfc0068f4 100644 --- a/frameworks/native/audiorenderer/include/audio_renderer_private.h +++ b/frameworks/native/audiorenderer/include/audio_renderer_private.h @@ -68,6 +68,7 @@ public: void SetInterruptMode(InterruptMode mode) override; int32_t SetLowPowerVolume(float volume) const override; float GetLowPowerVolume() const override; + uint32_t GetSingleStreamVolume() const override; AudioRendererInfo rendererInfo_ = {}; diff --git a/frameworks/native/audiorenderer/include/audio_renderer_proxy_obj.h b/frameworks/native/audiorenderer/include/audio_renderer_proxy_obj.h index 9d0d429750..8d94cfa1b4 100644 --- a/frameworks/native/audiorenderer/include/audio_renderer_proxy_obj.h +++ b/frameworks/native/audiorenderer/include/audio_renderer_proxy_obj.h @@ -30,6 +30,7 @@ public: void ResumeStreamImpl(const StreamSetStateEventInternal &streamSetStateEventInternal); void SetLowPowerVolumeImpl(float volume); void GetLowPowerVolumeImpl(float &volume); + void GetSingleStreamVolumeImpl(uint32_t &volume); private: const AudioRenderer *renderer; }; diff --git a/frameworks/native/audiorenderer/src/audio_renderer.cpp b/frameworks/native/audiorenderer/src/audio_renderer.cpp index e79e22021e..679efb7c7e 100644 --- a/frameworks/native/audiorenderer/src/audio_renderer.cpp +++ b/frameworks/native/audiorenderer/src/audio_renderer.cpp @@ -716,5 +716,10 @@ float AudioRendererPrivate::GetLowPowerVolume() const { return audioStream_->GetLowPowerVolume(); } + +uint32_t AudioRendererPrivate::GetSingleStreamVolume() const +{ + return audioStream_->GetSingleStreamVolume(); +} } // namespace AudioStandard } // namespace OHOS diff --git a/frameworks/native/audiorenderer/src/audio_renderer_proxy_obj.cpp b/frameworks/native/audiorenderer/src/audio_renderer_proxy_obj.cpp index d13602750f..da2c31533d 100644 --- a/frameworks/native/audiorenderer/src/audio_renderer_proxy_obj.cpp +++ b/frameworks/native/audiorenderer/src/audio_renderer_proxy_obj.cpp @@ -45,5 +45,10 @@ void AudioRendererProxyObj::GetLowPowerVolumeImpl(float &volume) { volume = renderer->GetLowPowerVolume(); } + +void AudioRendererProxyObj::GetSingleStreamVolumeImpl(uint32_t &volume) +{ + volume = renderer->GetSingleStreamVolume(); +} } // namespace AudioStandard } // namespace OHOS diff --git a/frameworks/native/audiostream/include/audio_stream.h b/frameworks/native/audiostream/include/audio_stream.h index fef8ed041e..3214bf572b 100644 --- a/frameworks/native/audiostream/include/audio_stream.h +++ b/frameworks/native/audiostream/include/audio_stream.h @@ -62,6 +62,7 @@ public: int32_t Clear(); int32_t SetLowPowerVolume(float volume); float GetLowPowerVolume(); + uint32_t GetSingleStreamVolume(); std::vector GetSupportedFormats() const; std::vector GetSupportedEncodingTypes() const; diff --git a/interfaces/inner_api/native/audiomanager/include/audio_stream_manager.h b/interfaces/inner_api/native/audiomanager/include/audio_stream_manager.h index 2c06e7e783..f75a1d47c6 100644 --- a/interfaces/inner_api/native/audiomanager/include/audio_stream_manager.h +++ b/interfaces/inner_api/native/audiomanager/include/audio_stream_manager.h @@ -63,6 +63,7 @@ public: virtual void ResumeStreamImpl(const StreamSetStateEventInternal &streamSetStateEventInternal) = 0; virtual void SetLowPowerVolumeImpl(float volume) = 0; virtual void GetLowPowerVolumeImpl(float &volume) = 0; + virtual void GetSingleStreamVolumeImpl(uint32_t &volume) = 0; }; class AudioStreamManager { diff --git a/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h b/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h index 9e7dc71f56..b1816ae381 100644 --- a/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h +++ b/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h @@ -212,6 +212,7 @@ public: int32_t GetVolume(AudioVolumeType volumeType) const; int32_t SetLowPowerVolume(int32_t streamId, float volume) const; float GetLowPowerVolume(int32_t streamId) const; + uint32_t GetSingleStreamVolume(int32_t streamId) const; int32_t GetMaxVolume(AudioVolumeType volumeType); int32_t GetMinVolume(AudioVolumeType volumeType); int32_t SetMute(AudioVolumeType volumeType, bool mute) const; diff --git a/interfaces/inner_api/native/audiorenderer/include/audio_renderer.h b/interfaces/inner_api/native/audiorenderer/include/audio_renderer.h index 56a86b3a81..347f880269 100644 --- a/interfaces/inner_api/native/audiorenderer/include/audio_renderer.h +++ b/interfaces/inner_api/native/audiorenderer/include/audio_renderer.h @@ -538,6 +538,14 @@ public: * @return volume adjustment percentage. */ virtual float GetLowPowerVolume() const = 0; + + /** + * @brief Get single stream volume. + * + * @param none. + * @return single stream volume. + */ + virtual uint32_t GetSingleStreamVolume() const = 0; virtual ~AudioRenderer(); }; diff --git a/services/include/audio_policy/client/audio_client_tracker_callback_stub.h b/services/include/audio_policy/client/audio_client_tracker_callback_stub.h index 9e97a5cfb6..fb125cae8f 100644 --- a/services/include/audio_policy/client/audio_client_tracker_callback_stub.h +++ b/services/include/audio_policy/client/audio_client_tracker_callback_stub.h @@ -34,6 +34,7 @@ public: void SetLowPowerVolumeImpl(float volume) override; void GetLowPowerVolumeImpl(float &volume) override; + void GetSingleStreamVolumeImpl(uint32_t &volume) override; private: std::weak_ptr callback_; diff --git a/services/include/audio_policy/client/audio_policy_base.h b/services/include/audio_policy/client/audio_policy_base.h index 34e5fe3df2..4362ac9c22 100644 --- a/services/include/audio_policy/client/audio_policy_base.h +++ b/services/include/audio_policy/client/audio_policy_base.h @@ -38,6 +38,8 @@ public: virtual float GetLowPowerVolume(int32_t streamId) = 0; + virtual uint32_t GetSingleStreamVolume(int32_t streamId) = 0; + virtual int32_t SetStreamMute(AudioStreamType streamType, bool mute) = 0; virtual bool GetStreamMute(AudioStreamType streamType) = 0; diff --git a/services/include/audio_policy/client/audio_policy_manager_stub.h b/services/include/audio_policy/client/audio_policy_manager_stub.h index 8b61891406..0f0896c9db 100644 --- a/services/include/audio_policy/client/audio_policy_manager_stub.h +++ b/services/include/audio_policy/client/audio_policy_manager_stub.h @@ -34,6 +34,7 @@ private: void GetStreamVolumeInternal(MessageParcel &data, MessageParcel &reply); void SetLowPowerVolumeInternal(MessageParcel &data, MessageParcel &reply); void GetLowPowerVolumeInternal(MessageParcel &data, MessageParcel &reply); + void GetSingleStreamVolumeInternal(MessageParcel &data, MessageParcel &reply); void SetStreamMuteInternal(MessageParcel &data, MessageParcel &reply); void GetStreamMuteInternal(MessageParcel &data, MessageParcel &reply); void IsStreamActiveInternal(MessageParcel &data, MessageParcel &reply); diff --git a/services/include/audio_policy/client/audio_policy_proxy.h b/services/include/audio_policy/client/audio_policy_proxy.h index 875825836a..b7e6a0fdbd 100644 --- a/services/include/audio_policy/client/audio_policy_proxy.h +++ b/services/include/audio_policy/client/audio_policy_proxy.h @@ -36,6 +36,8 @@ public: float GetLowPowerVolume(int32_t streamId) override; + uint32_t GetSingleStreamVolume(int32_t streamId) override; + int32_t SetStreamMute(AudioStreamType streamType, bool mute) override; bool GetStreamMute(AudioStreamType streamType) override; diff --git a/services/include/audio_policy/common/audio_policy_types.h b/services/include/audio_policy/common/audio_policy_types.h index f7c1502725..cb2396914c 100644 --- a/services/include/audio_policy/common/audio_policy_types.h +++ b/services/include/audio_policy/common/audio_policy_types.h @@ -69,6 +69,7 @@ enum AudioPolicyCommand { SET_LOW_POWER_STREM_VOLUME, GET_LOW_POWRR_STREM_VOLUME, UPDATE_STREAM_STATE, + GET_SINGLE_STREAM_VOLUME, }; } // namespace AudioStandard } // namespace OHOS diff --git a/services/include/audio_policy/common/i_standard_client_tracker.h b/services/include/audio_policy/common/i_standard_client_tracker.h index 50f5777ef6..642e59f43e 100644 --- a/services/include/audio_policy/common/i_standard_client_tracker.h +++ b/services/include/audio_policy/common/i_standard_client_tracker.h @@ -31,6 +31,7 @@ public: virtual void ResumeStreamImpl(const StreamSetStateEventInternal &streamSetStateEventInternal) = 0; virtual void SetLowPowerVolumeImpl(float volume) = 0; virtual void GetLowPowerVolumeImpl(float& volume) = 0; + virtual void GetSingleStreamVolumeImpl(uint32_t& volume) = 0; enum AudioClientTrackerMsg { ON_ERROR = 0, @@ -39,6 +40,7 @@ public: GETLOWPOWERVOL, PAUSEDSTREAM, RESUMESTREAM, + GETSINGLESTREAMVOL, }; DECLARE_INTERFACE_DESCRIPTOR(u"IStandardClientTracker"); diff --git a/services/include/audio_policy/server/audio_client_tracker_callback_proxy.h b/services/include/audio_policy/server/audio_client_tracker_callback_proxy.h index e4d0c0ba34..b1284be14f 100644 --- a/services/include/audio_policy/server/audio_client_tracker_callback_proxy.h +++ b/services/include/audio_policy/server/audio_client_tracker_callback_proxy.h @@ -33,6 +33,7 @@ public: virtual void SetLowPowerVolumeImpl(float volume) override; virtual void GetLowPowerVolumeImpl(float &volume) override; + virtual void GetSingleStreamVolumeImpl(uint32_t &volume) override; private: sptr listener_ = nullptr; @@ -47,6 +48,7 @@ public: virtual void SetLowPowerVolumeImpl(float volume) override; virtual void GetLowPowerVolumeImpl(float &volume) override; + virtual void GetSingleStreamVolumeImpl(uint32_t &volume) override; private: static inline BrokerDelegator delegator_; diff --git a/services/include/audio_policy/server/audio_policy_server.h b/services/include/audio_policy/server/audio_policy_server.h index b5f64394ce..6363bc6338 100644 --- a/services/include/audio_policy/server/audio_policy_server.h +++ b/services/include/audio_policy/server/audio_policy_server.h @@ -58,6 +58,8 @@ public: float GetLowPowerVolume(int32_t streamId) override; + uint32_t GetSingleStreamVolume(int32_t streamId) override; + int32_t SetStreamMute(AudioStreamType streamType, bool mute) override; bool GetStreamMute(AudioStreamType streamType) override; diff --git a/services/include/audio_policy/server/audio_stream_collector.h b/services/include/audio_policy/server/audio_stream_collector.h index 7b5bb34751..70debc3ea6 100644 --- a/services/include/audio_policy/server/audio_stream_collector.h +++ b/services/include/audio_policy/server/audio_stream_collector.h @@ -48,6 +48,7 @@ public: int32_t UpdateStreamState(int32_t clientUid, StreamSetStateEventInternal &streamSetStateEventInternal); int32_t SetLowPowerVolume(int32_t streamId, float volume); float GetLowPowerVolume(int32_t streamId); + uint32_t GetSingleStreamVolume(int32_t streamId); private: AudioStreamEventDispatcher &mDispatcherService; std::mutex streamsInfoMutex_; diff --git a/services/include/audio_policy/server/service/audio_policy_service.h b/services/include/audio_policy/server/service/audio_policy_service.h index eb2998ff62..438ae55131 100644 --- a/services/include/audio_policy/server/service/audio_policy_service.h +++ b/services/include/audio_policy/server/service/audio_policy_service.h @@ -53,6 +53,8 @@ public: float GetLowPowerVolume(int32_t streamId) const; + uint32_t GetSingleStreamVolume(int32_t streamId) const; + int32_t SetStreamMute(AudioStreamType streamType, bool mute) const; bool GetStreamMute(AudioStreamType streamType) const; diff --git a/services/include/audio_service/client/audio_service_client.h b/services/include/audio_service/client/audio_service_client.h index 439bc0b2f0..08e087face 100644 --- a/services/include/audio_service/client/audio_service_client.h +++ b/services/include/audio_service/client/audio_service_client.h @@ -498,6 +498,7 @@ public: bool VerifyClientPermission(const std::string &permissionName, uint32_t appTokenId, int32_t appUid); int32_t SetStreamLowPowerVolume(float powerVolumeFactor); float GetStreamLowPowerVolume(); + uint32_t GetSingleStreamVol(); // Audio timer callback virtual void OnTimeOut(); diff --git a/services/src/audio_policy/client/audio_client_tracker_callback_stub.cpp b/services/src/audio_policy/client/audio_client_tracker_callback_stub.cpp index ce8acad532..297ef6fbc5 100644 --- a/services/src/audio_policy/client/audio_client_tracker_callback_stub.cpp +++ b/services/src/audio_policy/client/audio_client_tracker_callback_stub.cpp @@ -59,7 +59,12 @@ int AudioClientTrackerCallbackStub::OnRemoteRequest( float volume; GetLowPowerVolumeImpl(volume); reply.WriteFloat(volume); - data.WriteFloat(static_cast(volume)); + return AUDIO_OK; + } + case GETSINGLESTREAMVOL: { + uint32_t volume; + GetSingleStreamVolumeImpl(volume); + reply.WriteUint32(volume); return AUDIO_OK; } default: { @@ -97,7 +102,7 @@ void AudioClientTrackerCallbackStub::SetLowPowerVolumeImpl(float volume) if (cb != nullptr) { cb->SetLowPowerVolumeImpl(volume); } else { - AUDIO_ERR_LOG("AudioClientTrackerCallbackStub: callback_ is nullptr"); + AUDIO_ERR_LOG("AudioClientTrackerCallbackStub: SetLowPowerVolumeImpl callback_ is nullptr"); } } @@ -120,7 +125,18 @@ void AudioClientTrackerCallbackStub::GetLowPowerVolumeImpl(float &volume) if (cb != nullptr) { cb->GetLowPowerVolumeImpl(volume); } else { - AUDIO_ERR_LOG("AudioClientTrackerCallbackStub: callback_ is nullptr"); + AUDIO_ERR_LOG("AudioClientTrackerCallbackStub: GetLowPowerVolumeImpl callback_ is nullptr"); + } +} + +void AudioClientTrackerCallbackStub::GetSingleStreamVolumeImpl(uint32_t &volume) +{ + AUDIO_DEBUG_LOG("AudioClientTrackerCallbackStub GetSingleStreamVolumeImpl start"); + std::shared_ptr cb = callback_.lock(); + if (cb != nullptr) { + cb->GetSingleStreamVolumeImpl(volume); + } else { + AUDIO_ERR_LOG("AudioClientTrackerCallbackStub: GetSingleStreamVolumeImpl callback_ is nullptr"); } } } // namespace AudioStandard diff --git a/services/src/audio_policy/client/audio_policy_manager.cpp b/services/src/audio_policy/client/audio_policy_manager.cpp index 821b0e035f..9d095f6c87 100644 --- a/services/src/audio_policy/client/audio_policy_manager.cpp +++ b/services/src/audio_policy/client/audio_policy_manager.cpp @@ -122,6 +122,11 @@ float AudioPolicyManager::GetLowPowerVolume(int32_t streamId) return g_sProxy->GetLowPowerVolume(streamId); } +uint32_t AudioPolicyManager::GetSingleStreamVolume(int32_t streamId) +{ + return g_sProxy->GetSingleStreamVolume(streamId); +} + bool AudioPolicyManager::IsStreamActive(AudioStreamType streamType) { return g_sProxy->IsStreamActive(streamType); diff --git a/services/src/audio_policy/client/audio_policy_proxy.cpp b/services/src/audio_policy/client/audio_policy_proxy.cpp index 5d61c6c2b4..823043e038 100644 --- a/services/src/audio_policy/client/audio_policy_proxy.cpp +++ b/services/src/audio_policy/client/audio_policy_proxy.cpp @@ -221,6 +221,25 @@ float AudioPolicyProxy::GetLowPowerVolume(int32_t streamId) return reply.ReadFloat(); } +uint32_t AudioPolicyProxy::GetSingleStreamVolume(int32_t streamId) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + + if (!data.WriteInterfaceToken(GetDescriptor())) { + AUDIO_ERR_LOG("AudioPolicyProxy: WriteInterfaceToken failed"); + return -1; + } + data.WriteInt32(streamId); + int32_t error = Remote()->SendRequest(GET_SINGLE_STREAM_VOLUME, data, reply, option); + if (error != ERR_NONE) { + AUDIO_ERR_LOG("get single stream volume failed, error: %d", error); + return error; + } + return reply.ReadFloat(); +} + int32_t AudioPolicyProxy::SetStreamMute(AudioStreamType streamType, bool mute) { MessageParcel data; diff --git a/services/src/audio_policy/server/audio_client_tracker_callback_proxy.cpp b/services/src/audio_policy/server/audio_client_tracker_callback_proxy.cpp index ea23ef8ccf..1dd3384b39 100644 --- a/services/src/audio_policy/server/audio_client_tracker_callback_proxy.cpp +++ b/services/src/audio_policy/server/audio_client_tracker_callback_proxy.cpp @@ -93,6 +93,24 @@ void AudioClientTrackerCallbackProxy::GetLowPowerVolumeImpl(float &volume) volume = reply.ReadFloat(); } +void AudioClientTrackerCallbackProxy::GetSingleStreamVolumeImpl(uint32_t &volume) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!data.WriteInterfaceToken(GetDescriptor())) { + AUDIO_ERR_LOG("AudioClientTrackerCallbackProxy: WriteInterfaceToken failed"); + return; + } + + int error = Remote()->SendRequest(GETSINGLESTREAMVOL, data, reply, option); + if (error != ERR_NONE) { + AUDIO_ERR_LOG("GETSINGLESTREAMVOL failed, error: %{public}d", error); + } + + volume = reply.ReadUint32(); +} + ClientTrackerCallbackListener::ClientTrackerCallbackListener(const sptr &listener) : listener_(listener) { @@ -134,5 +152,12 @@ void ClientTrackerCallbackListener::GetLowPowerVolumeImpl(float &volume) listener_->GetLowPowerVolumeImpl(volume); } } + +void ClientTrackerCallbackListener::GetSingleStreamVolumeImpl(uint32_t &volume) +{ + if (listener_ != nullptr) { + listener_->GetSingleStreamVolumeImpl(volume); + } +} } // namespace AudioStandard } // namespace OHOS diff --git a/services/src/audio_policy/server/audio_policy_manager_stub.cpp b/services/src/audio_policy/server/audio_policy_manager_stub.cpp index 2d27c96290..08dee43526 100644 --- a/services/src/audio_policy/server/audio_policy_manager_stub.cpp +++ b/services/src/audio_policy/server/audio_policy_manager_stub.cpp @@ -130,6 +130,13 @@ void AudioPolicyManagerStub::GetLowPowerVolumeInternal(MessageParcel &data, Mess reply.WriteFloat(volume); } +void AudioPolicyManagerStub::GetSingleStreamVolumeInternal(MessageParcel &data, MessageParcel &reply) +{ + int32_t streamId = data.ReadInt32(); + uint32_t volume = GetSingleStreamVolume(streamId); + reply.WriteUint32(volume); +} + void AudioPolicyManagerStub::SetStreamMuteInternal(MessageParcel &data, MessageParcel &reply) { AudioStreamType streamType = static_cast(data.ReadInt32()); @@ -807,6 +814,10 @@ int AudioPolicyManagerStub::OnRemoteRequest( GetLowPowerVolumeInternal(data, reply); break; + case GET_SINGLE_STREAM_VOLUME: + GetSingleStreamVolumeInternal(data, reply); + break; + default: AUDIO_ERR_LOG("default case, need check AudioPolicyManagerStub"); return IPCObjectStub::OnRemoteRequest(code, data, reply, option); diff --git a/services/src/audio_policy/server/audio_policy_server.cpp b/services/src/audio_policy/server/audio_policy_server.cpp index 4b841aa881..aaaad10640 100644 --- a/services/src/audio_policy/server/audio_policy_server.cpp +++ b/services/src/audio_policy/server/audio_policy_server.cpp @@ -251,6 +251,11 @@ float AudioPolicyServer::GetLowPowerVolume(int32_t streamId) return mPolicyService.GetLowPowerVolume(streamId); } +uint32_t AudioPolicyServer::GetSingleStreamVolume(int32_t streamId) +{ + return mPolicyService.GetSingleStreamVolume(streamId); +} + int32_t AudioPolicyServer::SetStreamMute(AudioStreamType streamType, bool mute) { if (streamType == AudioStreamType::STREAM_RING) { diff --git a/services/src/audio_policy/server/audio_stream_collector.cpp b/services/src/audio_policy/server/audio_stream_collector.cpp index d11b677e7d..eeae0566d8 100644 --- a/services/src/audio_policy/server/audio_stream_collector.cpp +++ b/services/src/audio_policy/server/audio_stream_collector.cpp @@ -490,5 +490,17 @@ float AudioStreamCollector::GetLowPowerVolume(int32_t streamId) callback->GetLowPowerVolumeImpl(volume); return volume; } + +uint32_t AudioStreamCollector::GetSingleStreamVolume(int32_t streamId) +{ + CHECK_AND_RETURN_RET_LOG(!(clientTracker_.count(streamId) == 0), + ERR_INVALID_PARAM, "AudioStreamCollector:GetSingleStreamVolume streamId invalid."); + uint32_t volume; + std::shared_ptr callback = clientTracker_[streamId]; + CHECK_AND_RETURN_RET_LOG(callback != nullptr, + ERR_INVALID_PARAM, "AudioStreamCollector:GetSingleStreamVolume callback failed"); + callback->GetSingleStreamVolumeImpl(volume); + return volume; +} } // namespace AudioStandard } // namespace OHOS diff --git a/services/src/audio_policy/server/service/audio_policy_service.cpp b/services/src/audio_policy/server/service/audio_policy_service.cpp index 288a6abe72..f9e0947fcc 100644 --- a/services/src/audio_policy/server/service/audio_policy_service.cpp +++ b/services/src/audio_policy/server/service/audio_policy_service.cpp @@ -145,6 +145,11 @@ float AudioPolicyService::GetLowPowerVolume(int32_t streamId) const return mStreamCollector.GetLowPowerVolume(streamId); } +uint32_t AudioPolicyService::GetSingleStreamVolume(int32_t streamId) const +{ + return mStreamCollector.GetSingleStreamVolume(streamId); +} + int32_t AudioPolicyService::SetStreamMute(AudioStreamType streamType, bool mute) const { return mAudioPolicyManager.SetStreamMute(streamType, mute); diff --git a/services/src/audio_service/client/audio_service_client.cpp b/services/src/audio_service/client/audio_service_client.cpp index 677239bde0..a42a6386a5 100644 --- a/services/src/audio_service/client/audio_service_client.cpp +++ b/services/src/audio_service/client/audio_service_client.cpp @@ -2298,5 +2298,30 @@ float AudioServiceClient::GetStreamLowPowerVolume() { return mPowerVolumeFactor; } + +uint32_t AudioServiceClient::GetSingleStreamVol() +{ + int32_t systemVolumeInt + = mAudioSystemMgr->GetVolume(static_cast(mStreamType)); + float systemVolume = AudioSystemManager::MapVolumeToHDI(systemVolumeInt); + float vol = systemVolume * mVolumeFactor * mPowerVolumeFactor; + + AudioRingerMode ringerMode = mAudioSystemMgr->GetRingerMode(); + if ((mStreamType == STREAM_RING) && (ringerMode != RINGER_MODE_NORMAL)) { + vol = MIN_STREAM_VOLUME_LEVEL; + } + + if (mAudioSystemMgr->IsStreamMute(static_cast(mStreamType))) { + if (mUnMute_) { + mAudioSystemMgr->SetMute(static_cast(mStreamType), + false); + } else { + vol = MIN_STREAM_VOLUME_LEVEL; + } + } + uint32_t volume = pa_sw_volume_from_linear(vol); + + return volume; +} } // namespace AudioStandard } // namespace OHOS diff --git a/services/src/audio_service/client/audio_stream.cpp b/services/src/audio_service/client/audio_stream.cpp index 4bd131cf3b..1afa4bb2e7 100644 --- a/services/src/audio_service/client/audio_stream.cpp +++ b/services/src/audio_service/client/audio_stream.cpp @@ -945,5 +945,10 @@ float AudioStream::GetLowPowerVolume() { return GetStreamLowPowerVolume(); } + +uint32_t AudioStream::GetSingleStreamVolume() +{ + return GetSingleStreamVol(); +} } // namespace AudioStandard } // namespace OHOS diff --git a/services/src/audio_service/client/audio_system_manager.cpp b/services/src/audio_service/client/audio_system_manager.cpp index 02eac4d6e7..d92427b434 100644 --- a/services/src/audio_service/client/audio_system_manager.cpp +++ b/services/src/audio_service/client/audio_system_manager.cpp @@ -343,6 +343,11 @@ float AudioSystemManager::GetLowPowerVolume(int32_t streamId) const return AudioPolicyManager::GetInstance().GetLowPowerVolume(streamId); } +uint32_t AudioSystemManager::GetSingleStreamVolume(int32_t streamId) const +{ + return AudioPolicyManager::GetInstance().GetSingleStreamVolume(streamId); +} + float AudioSystemManager::MapVolumeToHDI(int32_t volume) { float value = (float)volume / MAX_VOLUME_LEVEL; diff --git a/services/test/audio_policy_test.cpp b/services/test/audio_policy_test.cpp index c29273e53c..65f937a559 100644 --- a/services/test/audio_policy_test.cpp +++ b/services/test/audio_policy_test.cpp @@ -43,6 +43,8 @@ namespace AudioPolicyTest { const int TWELFTH_ARG = 12; const int OPT_ARG_BASE = 10; const int OPT_SHORT_LEN = 3; + const int OPT_GET_VOL_FACTOR = 1; + const int OPT_GET_SS_VOL = 2; } static void PrintUsage(void) @@ -73,10 +75,8 @@ static void PrintUsage(void) cout << "-r\n\tGets RingerMode status" << endl << endl; cout << "-C\n\tSets AudioScene" << endl << endl; cout << "-c\n\tGets AudioScene status" << endl << endl; - cout << "-N\n\tSet the discount volume factor to 0" << endl << endl; - cout << "-O\n\tSet the discount volume factor to 0.5f" << endl << endl; - cout << "-P\n\tSet the discount volume factor to 1.0f" << endl << endl; - cout << "-G\n\tGet the discount volume factor" << endl << endl; + cout << "-N\n\tSet the discount volume factor" << endl << endl; + cout << "-n\n\tGet the discount volume factor or Get single stream volume" << endl << endl; cout << "-s\n\tGet Stream Status" << endl << endl; cout << "AUTHOR" << endl << endl; cout << "\tWritten by Sajeesh Sidharthan and Anurup M" << endl << endl; @@ -384,31 +384,34 @@ static void HandleUpdateStreamState(int type, char *seg1) cout << "result : " << result << endl; } -static void HandleLowPowerVolumeOption(char option) +static void HandleSingleStreamVolumeOption(int argc, char* argv[], char opt) { + if (argc != AudioPolicyTest::FOURTH_ARG) { + cout << "Incorrect number of test commands." << endl; + return; + } + AudioSystemManager *audioSystemMgr = AudioSystemManager::GetInstance(); - int32_t streamId = stoi(optarg); - switch (option) { - case 'N': - audioSystemMgr->SetLowPowerVolume(streamId, 0); - cout << "Set low power volume 0" << endl; - break; - case 'O': - audioSystemMgr->SetLowPowerVolume(streamId, 0.5f); - cout << "Set low power volume 0.5" << endl; - break; - case 'P': - audioSystemMgr->SetLowPowerVolume(streamId, 1.0f); - cout << "Set low power volume 1.0" << endl; - break; - case 'G': { + int32_t streamId = atoi(argv[AudioPolicyTest::SECOND_ARG]); + if (opt == 'N') { + float volume = atof(argv[AudioPolicyTest::THIRD_ARG]); + if (volume < 0 || volume > 1.0f) { + cout << "volume out of range." << endl; + return; + } + audioSystemMgr->SetLowPowerVolume(streamId, volume); + cout << "Set low power volume :" << volume << endl; + } else { + int32_t opt_flag = atoi(argv[AudioPolicyTest::THIRD_ARG]); + if (opt_flag == AudioPolicyTest::OPT_GET_VOL_FACTOR) { float volume = audioSystemMgr->GetLowPowerVolume(streamId); - cout << "Get low power volume is: " << volume << endl; - break; + cout << "Get discounted volume factor: " << volume << endl; + } else if (opt_flag == AudioPolicyTest::OPT_GET_SS_VOL) { + uint32_t volume = audioSystemMgr->GetSingleStreamVolume(streamId); + cout << "Get single stream volume: " << volume << endl; + } else { + cout << "invalid operation." << endl; } - default : - cout << "This operation is not supported" << endl; - break; } } @@ -422,7 +425,7 @@ int main(int argc, char* argv[]) } int streamType = static_cast(AudioVolumeType::STREAM_MUSIC); - while ((opt = getopt(argc, argv, ":V:U:S:D:M:R:C:X:Z:d:L:l:s:vmrucOoIiGg")) != -1) { + while ((opt = getopt(argc, argv, ":V:U:S:D:M:R:C:X:Z:d:s:vmrucOoIiGgNn")) != -1) { switch (opt) { case 'G': case 'g': @@ -468,7 +471,6 @@ int main(int argc, char* argv[]) case 'c': HandleAudioScene(opt); break; - case 'X': HandleUpdateStreamState(0, optarg); break; @@ -476,8 +478,8 @@ int main(int argc, char* argv[]) HandleUpdateStreamState(1, optarg); break; case 'N': - case 'P': - HandleLowPowerVolumeOption(opt); + case 'n': + HandleSingleStreamVolumeOption(argc, argv, opt); break; case ':': NoValueError(); diff --git a/test/unittest/manager_test/src/audio_manager_unit_test.cpp b/test/unittest/manager_test/src/audio_manager_unit_test.cpp index e972a160af..576d885fb2 100644 --- a/test/unittest/manager_test/src/audio_manager_unit_test.cpp +++ b/test/unittest/manager_test/src/audio_manager_unit_test.cpp @@ -41,6 +41,8 @@ namespace { constexpr float DISCOUNT_VOLUME = 0.5; constexpr float DISCOUNT_VOLUME_MIN = 0; constexpr float DISCOUNT_VOLUME_MAX = 1.0; + constexpr uint32_t SINGLE_STREAM_VOLUME_MIN = 0; + constexpr uint32_t SINGLE_STREAM_VOLUME_MAX = 65536; } void AudioManagerUnitTest::SetUpTestCase(void) {} @@ -823,6 +825,49 @@ HWTEST(AudioManagerUnitTest, GetLowPowerVolume_001, TestSize.Level1) audioRenderer->Release(); } +/** +* @tc.name : Test GetSingleStreamVolume API +* @tc.number: GetSingleStreamVolume_001 +* @tc.desc : Test get single stream volume. +*/ +HWTEST(AudioManagerUnitTest, GetSingleStreamVolume_001, TestSize.Level1) +{ + int32_t streamId = 0; + vector> audioRendererChangeInfos; + AudioRendererOptions rendererOptions = {}; + AppInfo appInfo = {}; + appInfo.appUid = static_cast(getuid()); + rendererOptions.streamInfo.samplingRate = AudioSamplingRate::SAMPLE_RATE_44100; + rendererOptions.streamInfo.encoding = AudioEncodingType::ENCODING_PCM; + rendererOptions.streamInfo.format = AudioSampleFormat::SAMPLE_S16LE; + rendererOptions.streamInfo.channels = AudioChannel::STEREO; + rendererOptions.rendererInfo.contentType = ContentType::CONTENT_TYPE_MUSIC; + rendererOptions.rendererInfo.streamUsage = StreamUsage::STREAM_USAGE_MEDIA; + rendererOptions.rendererInfo.rendererFlags = 0; + + unique_ptr audioRenderer = AudioRenderer::Create(rendererOptions, appInfo); + ASSERT_NE(nullptr, audioRenderer); + int32_t ret = AudioStreamManager::GetInstance()->GetCurrentRendererChangeInfos(audioRendererChangeInfos); + EXPECT_EQ(SUCCESS, ret); + + for (auto it = audioRendererChangeInfos.begin(); it != audioRendererChangeInfos.end(); it++) { + AudioRendererChangeInfo audioRendererChangeInfos_ = **it; + if (audioRendererChangeInfos_.clientUID == appInfo.appUid) { + streamId = audioRendererChangeInfos_.sessionId; + } + } + ASSERT_NE(0, streamId); + + uint32_t vol = AudioSystemManager::GetInstance()->GetSingleStreamVolume(streamId); + if (vol < SINGLE_STREAM_VOLUME_MIN || vol > SINGLE_STREAM_VOLUME_MAX) { + ret = ERROR; + } else { + ret = SUCCESS; + } + EXPECT_EQ(SUCCESS, ret); + audioRenderer->Release(); +} + /** * @tc.name : Test SetPauseOrResumeStream API * @tc.number: SetPauseOrResumeStream_001 -- Gitee From 63f1f13d0709e3a596f9e7f228feb08360b2ea2c Mon Sep 17 00:00:00 2001 From: liuyuehua1 Date: Wed, 3 Aug 2022 14:57:56 +0800 Subject: [PATCH 2/3] Modify the return value type of a single audio stream. Signed-off-by: liuyuehua1 --- .../audiocapturer/include/audio_capturer_proxy_obj.h | 2 +- .../audiocapturer/src/audio_capturer_proxy_obj.cpp | 2 +- .../audiopolicy/include/audio_policy_manager.h | 2 +- .../audiorenderer/include/audio_renderer_private.h | 2 +- .../audiorenderer/include/audio_renderer_proxy_obj.h | 2 +- .../native/audiorenderer/src/audio_renderer.cpp | 2 +- .../audiorenderer/src/audio_renderer_proxy_obj.cpp | 2 +- frameworks/native/audiostream/include/audio_stream.h | 2 +- .../audiomanager/include/audio_stream_manager.h | 2 +- .../audiomanager/include/audio_system_manager.h | 2 +- .../native/audiorenderer/include/audio_renderer.h | 2 +- .../client/audio_client_tracker_callback_stub.h | 2 +- .../include/audio_policy/client/audio_policy_base.h | 2 +- .../include/audio_policy/client/audio_policy_proxy.h | 2 +- .../audio_policy/common/i_standard_client_tracker.h | 2 +- .../server/audio_client_tracker_callback_proxy.h | 4 ++-- .../audio_policy/server/audio_policy_server.h | 2 +- .../audio_policy/server/audio_stream_collector.h | 2 +- .../server/service/audio_policy_service.h | 2 +- .../audio_service/client/audio_service_client.h | 2 +- .../client/audio_client_tracker_callback_stub.cpp | 6 +++--- .../src/audio_policy/client/audio_policy_manager.cpp | 2 +- .../src/audio_policy/client/audio_policy_proxy.cpp | 2 +- .../server/audio_client_tracker_callback_proxy.cpp | 6 +++--- .../server/audio_policy_manager_stub.cpp | 4 ++-- .../src/audio_policy/server/audio_policy_server.cpp | 2 +- .../audio_policy/server/audio_stream_collector.cpp | 4 ++-- .../server/service/audio_policy_service.cpp | 2 +- .../audio_service/client/audio_service_client.cpp | 5 ++--- services/src/audio_service/client/audio_stream.cpp | 2 +- .../audio_service/client/audio_system_manager.cpp | 2 +- services/test/audio_policy_test.cpp | 2 +- .../manager_test/src/audio_manager_unit_test.cpp | 12 +++++------- 33 files changed, 45 insertions(+), 48 deletions(-) diff --git a/frameworks/native/audiocapturer/include/audio_capturer_proxy_obj.h b/frameworks/native/audiocapturer/include/audio_capturer_proxy_obj.h index 3533373d23..40f217ec2d 100644 --- a/frameworks/native/audiocapturer/include/audio_capturer_proxy_obj.h +++ b/frameworks/native/audiocapturer/include/audio_capturer_proxy_obj.h @@ -31,7 +31,7 @@ public: void SetLowPowerVolumeImpl(float volume); void GetLowPowerVolumeImpl(float &volume); - void GetSingleStreamVolumeImpl(uint32_t &volume); + void GetSingleStreamVolumeImpl(float &volume); private: const AudioCapturer *capturer; diff --git a/frameworks/native/audiocapturer/src/audio_capturer_proxy_obj.cpp b/frameworks/native/audiocapturer/src/audio_capturer_proxy_obj.cpp index 56c1e11334..7b9e2cc89a 100644 --- a/frameworks/native/audiocapturer/src/audio_capturer_proxy_obj.cpp +++ b/frameworks/native/audiocapturer/src/audio_capturer_proxy_obj.cpp @@ -46,7 +46,7 @@ void AudioCapturerProxyObj::GetLowPowerVolumeImpl(float &volume) volume = 1.0; } -void AudioCapturerProxyObj::GetSingleStreamVolumeImpl(uint32_t &volume) +void AudioCapturerProxyObj::GetSingleStreamVolumeImpl(float &volume) { volume = 0; } diff --git a/frameworks/native/audiopolicy/include/audio_policy_manager.h b/frameworks/native/audiopolicy/include/audio_policy_manager.h index 40b55d4b14..91e464a2b8 100644 --- a/frameworks/native/audiopolicy/include/audio_policy_manager.h +++ b/frameworks/native/audiopolicy/include/audio_policy_manager.h @@ -56,7 +56,7 @@ public: float GetLowPowerVolume(int32_t streamId); - uint32_t GetSingleStreamVolume(int32_t streamId); + float GetSingleStreamVolume(int32_t streamId); int32_t SetStreamMute(AudioStreamType streamType, bool mute); diff --git a/frameworks/native/audiorenderer/include/audio_renderer_private.h b/frameworks/native/audiorenderer/include/audio_renderer_private.h index acfc0068f4..8da12141e5 100644 --- a/frameworks/native/audiorenderer/include/audio_renderer_private.h +++ b/frameworks/native/audiorenderer/include/audio_renderer_private.h @@ -68,7 +68,7 @@ public: void SetInterruptMode(InterruptMode mode) override; int32_t SetLowPowerVolume(float volume) const override; float GetLowPowerVolume() const override; - uint32_t GetSingleStreamVolume() const override; + float GetSingleStreamVolume() const override; AudioRendererInfo rendererInfo_ = {}; diff --git a/frameworks/native/audiorenderer/include/audio_renderer_proxy_obj.h b/frameworks/native/audiorenderer/include/audio_renderer_proxy_obj.h index 8d94cfa1b4..4633cf8cde 100644 --- a/frameworks/native/audiorenderer/include/audio_renderer_proxy_obj.h +++ b/frameworks/native/audiorenderer/include/audio_renderer_proxy_obj.h @@ -30,7 +30,7 @@ public: void ResumeStreamImpl(const StreamSetStateEventInternal &streamSetStateEventInternal); void SetLowPowerVolumeImpl(float volume); void GetLowPowerVolumeImpl(float &volume); - void GetSingleStreamVolumeImpl(uint32_t &volume); + void GetSingleStreamVolumeImpl(float &volume); private: const AudioRenderer *renderer; }; diff --git a/frameworks/native/audiorenderer/src/audio_renderer.cpp b/frameworks/native/audiorenderer/src/audio_renderer.cpp index 679efb7c7e..cfcc9b3951 100644 --- a/frameworks/native/audiorenderer/src/audio_renderer.cpp +++ b/frameworks/native/audiorenderer/src/audio_renderer.cpp @@ -717,7 +717,7 @@ float AudioRendererPrivate::GetLowPowerVolume() const return audioStream_->GetLowPowerVolume(); } -uint32_t AudioRendererPrivate::GetSingleStreamVolume() const +float AudioRendererPrivate::GetSingleStreamVolume() const { return audioStream_->GetSingleStreamVolume(); } diff --git a/frameworks/native/audiorenderer/src/audio_renderer_proxy_obj.cpp b/frameworks/native/audiorenderer/src/audio_renderer_proxy_obj.cpp index da2c31533d..afd42c376f 100644 --- a/frameworks/native/audiorenderer/src/audio_renderer_proxy_obj.cpp +++ b/frameworks/native/audiorenderer/src/audio_renderer_proxy_obj.cpp @@ -46,7 +46,7 @@ void AudioRendererProxyObj::GetLowPowerVolumeImpl(float &volume) volume = renderer->GetLowPowerVolume(); } -void AudioRendererProxyObj::GetSingleStreamVolumeImpl(uint32_t &volume) +void AudioRendererProxyObj::GetSingleStreamVolumeImpl(float &volume) { volume = renderer->GetSingleStreamVolume(); } diff --git a/frameworks/native/audiostream/include/audio_stream.h b/frameworks/native/audiostream/include/audio_stream.h index 3214bf572b..de028acc18 100644 --- a/frameworks/native/audiostream/include/audio_stream.h +++ b/frameworks/native/audiostream/include/audio_stream.h @@ -62,7 +62,7 @@ public: int32_t Clear(); int32_t SetLowPowerVolume(float volume); float GetLowPowerVolume(); - uint32_t GetSingleStreamVolume(); + float GetSingleStreamVolume(); std::vector GetSupportedFormats() const; std::vector GetSupportedEncodingTypes() const; diff --git a/interfaces/inner_api/native/audiomanager/include/audio_stream_manager.h b/interfaces/inner_api/native/audiomanager/include/audio_stream_manager.h index f75a1d47c6..59cb311092 100644 --- a/interfaces/inner_api/native/audiomanager/include/audio_stream_manager.h +++ b/interfaces/inner_api/native/audiomanager/include/audio_stream_manager.h @@ -63,7 +63,7 @@ public: virtual void ResumeStreamImpl(const StreamSetStateEventInternal &streamSetStateEventInternal) = 0; virtual void SetLowPowerVolumeImpl(float volume) = 0; virtual void GetLowPowerVolumeImpl(float &volume) = 0; - virtual void GetSingleStreamVolumeImpl(uint32_t &volume) = 0; + virtual void GetSingleStreamVolumeImpl(float &volume) = 0; }; class AudioStreamManager { diff --git a/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h b/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h index b1816ae381..d248f7448b 100644 --- a/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h +++ b/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h @@ -212,7 +212,7 @@ public: int32_t GetVolume(AudioVolumeType volumeType) const; int32_t SetLowPowerVolume(int32_t streamId, float volume) const; float GetLowPowerVolume(int32_t streamId) const; - uint32_t GetSingleStreamVolume(int32_t streamId) const; + float GetSingleStreamVolume(int32_t streamId) const; int32_t GetMaxVolume(AudioVolumeType volumeType); int32_t GetMinVolume(AudioVolumeType volumeType); int32_t SetMute(AudioVolumeType volumeType, bool mute) const; diff --git a/interfaces/inner_api/native/audiorenderer/include/audio_renderer.h b/interfaces/inner_api/native/audiorenderer/include/audio_renderer.h index 347f880269..d6fc209830 100644 --- a/interfaces/inner_api/native/audiorenderer/include/audio_renderer.h +++ b/interfaces/inner_api/native/audiorenderer/include/audio_renderer.h @@ -545,7 +545,7 @@ public: * @param none. * @return single stream volume. */ - virtual uint32_t GetSingleStreamVolume() const = 0; + virtual float GetSingleStreamVolume() const = 0; virtual ~AudioRenderer(); }; diff --git a/services/include/audio_policy/client/audio_client_tracker_callback_stub.h b/services/include/audio_policy/client/audio_client_tracker_callback_stub.h index fb125cae8f..b9fef89615 100644 --- a/services/include/audio_policy/client/audio_client_tracker_callback_stub.h +++ b/services/include/audio_policy/client/audio_client_tracker_callback_stub.h @@ -34,7 +34,7 @@ public: void SetLowPowerVolumeImpl(float volume) override; void GetLowPowerVolumeImpl(float &volume) override; - void GetSingleStreamVolumeImpl(uint32_t &volume) override; + void GetSingleStreamVolumeImpl(float &volume) override; private: std::weak_ptr callback_; diff --git a/services/include/audio_policy/client/audio_policy_base.h b/services/include/audio_policy/client/audio_policy_base.h index 4362ac9c22..7534b95eb8 100644 --- a/services/include/audio_policy/client/audio_policy_base.h +++ b/services/include/audio_policy/client/audio_policy_base.h @@ -38,7 +38,7 @@ public: virtual float GetLowPowerVolume(int32_t streamId) = 0; - virtual uint32_t GetSingleStreamVolume(int32_t streamId) = 0; + virtual float GetSingleStreamVolume(int32_t streamId) = 0; virtual int32_t SetStreamMute(AudioStreamType streamType, bool mute) = 0; diff --git a/services/include/audio_policy/client/audio_policy_proxy.h b/services/include/audio_policy/client/audio_policy_proxy.h index b7e6a0fdbd..e4458d25c5 100644 --- a/services/include/audio_policy/client/audio_policy_proxy.h +++ b/services/include/audio_policy/client/audio_policy_proxy.h @@ -36,7 +36,7 @@ public: float GetLowPowerVolume(int32_t streamId) override; - uint32_t GetSingleStreamVolume(int32_t streamId) override; + float GetSingleStreamVolume(int32_t streamId) override; int32_t SetStreamMute(AudioStreamType streamType, bool mute) override; diff --git a/services/include/audio_policy/common/i_standard_client_tracker.h b/services/include/audio_policy/common/i_standard_client_tracker.h index 642e59f43e..182bbd79d5 100644 --- a/services/include/audio_policy/common/i_standard_client_tracker.h +++ b/services/include/audio_policy/common/i_standard_client_tracker.h @@ -31,7 +31,7 @@ public: virtual void ResumeStreamImpl(const StreamSetStateEventInternal &streamSetStateEventInternal) = 0; virtual void SetLowPowerVolumeImpl(float volume) = 0; virtual void GetLowPowerVolumeImpl(float& volume) = 0; - virtual void GetSingleStreamVolumeImpl(uint32_t& volume) = 0; + virtual void GetSingleStreamVolumeImpl(float& volume) = 0; enum AudioClientTrackerMsg { ON_ERROR = 0, diff --git a/services/include/audio_policy/server/audio_client_tracker_callback_proxy.h b/services/include/audio_policy/server/audio_client_tracker_callback_proxy.h index b1284be14f..bcf7f4f304 100644 --- a/services/include/audio_policy/server/audio_client_tracker_callback_proxy.h +++ b/services/include/audio_policy/server/audio_client_tracker_callback_proxy.h @@ -33,7 +33,7 @@ public: virtual void SetLowPowerVolumeImpl(float volume) override; virtual void GetLowPowerVolumeImpl(float &volume) override; - virtual void GetSingleStreamVolumeImpl(uint32_t &volume) override; + virtual void GetSingleStreamVolumeImpl(float &volume) override; private: sptr listener_ = nullptr; @@ -48,7 +48,7 @@ public: virtual void SetLowPowerVolumeImpl(float volume) override; virtual void GetLowPowerVolumeImpl(float &volume) override; - virtual void GetSingleStreamVolumeImpl(uint32_t &volume) override; + virtual void GetSingleStreamVolumeImpl(float &volume) override; private: static inline BrokerDelegator delegator_; diff --git a/services/include/audio_policy/server/audio_policy_server.h b/services/include/audio_policy/server/audio_policy_server.h index 6363bc6338..a4889e06a9 100644 --- a/services/include/audio_policy/server/audio_policy_server.h +++ b/services/include/audio_policy/server/audio_policy_server.h @@ -58,7 +58,7 @@ public: float GetLowPowerVolume(int32_t streamId) override; - uint32_t GetSingleStreamVolume(int32_t streamId) override; + float GetSingleStreamVolume(int32_t streamId) override; int32_t SetStreamMute(AudioStreamType streamType, bool mute) override; diff --git a/services/include/audio_policy/server/audio_stream_collector.h b/services/include/audio_policy/server/audio_stream_collector.h index 70debc3ea6..cf7a6feda9 100644 --- a/services/include/audio_policy/server/audio_stream_collector.h +++ b/services/include/audio_policy/server/audio_stream_collector.h @@ -48,7 +48,7 @@ public: int32_t UpdateStreamState(int32_t clientUid, StreamSetStateEventInternal &streamSetStateEventInternal); int32_t SetLowPowerVolume(int32_t streamId, float volume); float GetLowPowerVolume(int32_t streamId); - uint32_t GetSingleStreamVolume(int32_t streamId); + float GetSingleStreamVolume(int32_t streamId); private: AudioStreamEventDispatcher &mDispatcherService; std::mutex streamsInfoMutex_; diff --git a/services/include/audio_policy/server/service/audio_policy_service.h b/services/include/audio_policy/server/service/audio_policy_service.h index 438ae55131..7e9945f803 100644 --- a/services/include/audio_policy/server/service/audio_policy_service.h +++ b/services/include/audio_policy/server/service/audio_policy_service.h @@ -53,7 +53,7 @@ public: float GetLowPowerVolume(int32_t streamId) const; - uint32_t GetSingleStreamVolume(int32_t streamId) const; + float GetSingleStreamVolume(int32_t streamId) const; int32_t SetStreamMute(AudioStreamType streamType, bool mute) const; diff --git a/services/include/audio_service/client/audio_service_client.h b/services/include/audio_service/client/audio_service_client.h index 08e087face..9fe5f72882 100644 --- a/services/include/audio_service/client/audio_service_client.h +++ b/services/include/audio_service/client/audio_service_client.h @@ -498,7 +498,7 @@ public: bool VerifyClientPermission(const std::string &permissionName, uint32_t appTokenId, int32_t appUid); int32_t SetStreamLowPowerVolume(float powerVolumeFactor); float GetStreamLowPowerVolume(); - uint32_t GetSingleStreamVol(); + float GetSingleStreamVol(); // Audio timer callback virtual void OnTimeOut(); diff --git a/services/src/audio_policy/client/audio_client_tracker_callback_stub.cpp b/services/src/audio_policy/client/audio_client_tracker_callback_stub.cpp index 297ef6fbc5..7f5e05c24c 100644 --- a/services/src/audio_policy/client/audio_client_tracker_callback_stub.cpp +++ b/services/src/audio_policy/client/audio_client_tracker_callback_stub.cpp @@ -62,9 +62,9 @@ int AudioClientTrackerCallbackStub::OnRemoteRequest( return AUDIO_OK; } case GETSINGLESTREAMVOL: { - uint32_t volume; + float volume; GetSingleStreamVolumeImpl(volume); - reply.WriteUint32(volume); + reply.WriteFloat(volume); return AUDIO_OK; } default: { @@ -129,7 +129,7 @@ void AudioClientTrackerCallbackStub::GetLowPowerVolumeImpl(float &volume) } } -void AudioClientTrackerCallbackStub::GetSingleStreamVolumeImpl(uint32_t &volume) +void AudioClientTrackerCallbackStub::GetSingleStreamVolumeImpl(float &volume) { AUDIO_DEBUG_LOG("AudioClientTrackerCallbackStub GetSingleStreamVolumeImpl start"); std::shared_ptr cb = callback_.lock(); diff --git a/services/src/audio_policy/client/audio_policy_manager.cpp b/services/src/audio_policy/client/audio_policy_manager.cpp index 9d095f6c87..510e4018e6 100644 --- a/services/src/audio_policy/client/audio_policy_manager.cpp +++ b/services/src/audio_policy/client/audio_policy_manager.cpp @@ -122,7 +122,7 @@ float AudioPolicyManager::GetLowPowerVolume(int32_t streamId) return g_sProxy->GetLowPowerVolume(streamId); } -uint32_t AudioPolicyManager::GetSingleStreamVolume(int32_t streamId) +float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId) { return g_sProxy->GetSingleStreamVolume(streamId); } diff --git a/services/src/audio_policy/client/audio_policy_proxy.cpp b/services/src/audio_policy/client/audio_policy_proxy.cpp index 823043e038..9cfe004520 100644 --- a/services/src/audio_policy/client/audio_policy_proxy.cpp +++ b/services/src/audio_policy/client/audio_policy_proxy.cpp @@ -221,7 +221,7 @@ float AudioPolicyProxy::GetLowPowerVolume(int32_t streamId) return reply.ReadFloat(); } -uint32_t AudioPolicyProxy::GetSingleStreamVolume(int32_t streamId) +float AudioPolicyProxy::GetSingleStreamVolume(int32_t streamId) { MessageParcel data; MessageParcel reply; diff --git a/services/src/audio_policy/server/audio_client_tracker_callback_proxy.cpp b/services/src/audio_policy/server/audio_client_tracker_callback_proxy.cpp index 1dd3384b39..9c1a859dc2 100644 --- a/services/src/audio_policy/server/audio_client_tracker_callback_proxy.cpp +++ b/services/src/audio_policy/server/audio_client_tracker_callback_proxy.cpp @@ -93,7 +93,7 @@ void AudioClientTrackerCallbackProxy::GetLowPowerVolumeImpl(float &volume) volume = reply.ReadFloat(); } -void AudioClientTrackerCallbackProxy::GetSingleStreamVolumeImpl(uint32_t &volume) +void AudioClientTrackerCallbackProxy::GetSingleStreamVolumeImpl(float &volume) { MessageParcel data; MessageParcel reply; @@ -108,7 +108,7 @@ void AudioClientTrackerCallbackProxy::GetSingleStreamVolumeImpl(uint32_t &volume AUDIO_ERR_LOG("GETSINGLESTREAMVOL failed, error: %{public}d", error); } - volume = reply.ReadUint32(); + volume = reply.ReadFloat(); } ClientTrackerCallbackListener::ClientTrackerCallbackListener(const sptr &listener) @@ -153,7 +153,7 @@ void ClientTrackerCallbackListener::GetLowPowerVolumeImpl(float &volume) } } -void ClientTrackerCallbackListener::GetSingleStreamVolumeImpl(uint32_t &volume) +void ClientTrackerCallbackListener::GetSingleStreamVolumeImpl(float &volume) { if (listener_ != nullptr) { listener_->GetSingleStreamVolumeImpl(volume); diff --git a/services/src/audio_policy/server/audio_policy_manager_stub.cpp b/services/src/audio_policy/server/audio_policy_manager_stub.cpp index 08dee43526..1235b86b95 100644 --- a/services/src/audio_policy/server/audio_policy_manager_stub.cpp +++ b/services/src/audio_policy/server/audio_policy_manager_stub.cpp @@ -133,8 +133,8 @@ void AudioPolicyManagerStub::GetLowPowerVolumeInternal(MessageParcel &data, Mess void AudioPolicyManagerStub::GetSingleStreamVolumeInternal(MessageParcel &data, MessageParcel &reply) { int32_t streamId = data.ReadInt32(); - uint32_t volume = GetSingleStreamVolume(streamId); - reply.WriteUint32(volume); + float volume = GetSingleStreamVolume(streamId); + reply.WriteFloat(volume); } void AudioPolicyManagerStub::SetStreamMuteInternal(MessageParcel &data, MessageParcel &reply) diff --git a/services/src/audio_policy/server/audio_policy_server.cpp b/services/src/audio_policy/server/audio_policy_server.cpp index aaaad10640..2f2b97d63c 100644 --- a/services/src/audio_policy/server/audio_policy_server.cpp +++ b/services/src/audio_policy/server/audio_policy_server.cpp @@ -251,7 +251,7 @@ float AudioPolicyServer::GetLowPowerVolume(int32_t streamId) return mPolicyService.GetLowPowerVolume(streamId); } -uint32_t AudioPolicyServer::GetSingleStreamVolume(int32_t streamId) +float AudioPolicyServer::GetSingleStreamVolume(int32_t streamId) { return mPolicyService.GetSingleStreamVolume(streamId); } diff --git a/services/src/audio_policy/server/audio_stream_collector.cpp b/services/src/audio_policy/server/audio_stream_collector.cpp index eeae0566d8..29c92baaab 100644 --- a/services/src/audio_policy/server/audio_stream_collector.cpp +++ b/services/src/audio_policy/server/audio_stream_collector.cpp @@ -491,11 +491,11 @@ float AudioStreamCollector::GetLowPowerVolume(int32_t streamId) return volume; } -uint32_t AudioStreamCollector::GetSingleStreamVolume(int32_t streamId) +float AudioStreamCollector::GetSingleStreamVolume(int32_t streamId) { CHECK_AND_RETURN_RET_LOG(!(clientTracker_.count(streamId) == 0), ERR_INVALID_PARAM, "AudioStreamCollector:GetSingleStreamVolume streamId invalid."); - uint32_t volume; + float volume; std::shared_ptr callback = clientTracker_[streamId]; CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "AudioStreamCollector:GetSingleStreamVolume callback failed"); diff --git a/services/src/audio_policy/server/service/audio_policy_service.cpp b/services/src/audio_policy/server/service/audio_policy_service.cpp index f9e0947fcc..a5d24ab790 100644 --- a/services/src/audio_policy/server/service/audio_policy_service.cpp +++ b/services/src/audio_policy/server/service/audio_policy_service.cpp @@ -145,7 +145,7 @@ float AudioPolicyService::GetLowPowerVolume(int32_t streamId) const return mStreamCollector.GetLowPowerVolume(streamId); } -uint32_t AudioPolicyService::GetSingleStreamVolume(int32_t streamId) const +float AudioPolicyService::GetSingleStreamVolume(int32_t streamId) const { return mStreamCollector.GetSingleStreamVolume(streamId); } diff --git a/services/src/audio_service/client/audio_service_client.cpp b/services/src/audio_service/client/audio_service_client.cpp index a42a6386a5..498b02748c 100644 --- a/services/src/audio_service/client/audio_service_client.cpp +++ b/services/src/audio_service/client/audio_service_client.cpp @@ -2299,7 +2299,7 @@ float AudioServiceClient::GetStreamLowPowerVolume() return mPowerVolumeFactor; } -uint32_t AudioServiceClient::GetSingleStreamVol() +float AudioServiceClient::GetSingleStreamVol() { int32_t systemVolumeInt = mAudioSystemMgr->GetVolume(static_cast(mStreamType)); @@ -2319,9 +2319,8 @@ uint32_t AudioServiceClient::GetSingleStreamVol() vol = MIN_STREAM_VOLUME_LEVEL; } } - uint32_t volume = pa_sw_volume_from_linear(vol); - return volume; + return vol; } } // namespace AudioStandard } // namespace OHOS diff --git a/services/src/audio_service/client/audio_stream.cpp b/services/src/audio_service/client/audio_stream.cpp index 1afa4bb2e7..ff73d8b9ec 100644 --- a/services/src/audio_service/client/audio_stream.cpp +++ b/services/src/audio_service/client/audio_stream.cpp @@ -946,7 +946,7 @@ float AudioStream::GetLowPowerVolume() return GetStreamLowPowerVolume(); } -uint32_t AudioStream::GetSingleStreamVolume() +float AudioStream::GetSingleStreamVolume() { return GetSingleStreamVol(); } diff --git a/services/src/audio_service/client/audio_system_manager.cpp b/services/src/audio_service/client/audio_system_manager.cpp index d92427b434..aa165a5d32 100644 --- a/services/src/audio_service/client/audio_system_manager.cpp +++ b/services/src/audio_service/client/audio_system_manager.cpp @@ -343,7 +343,7 @@ float AudioSystemManager::GetLowPowerVolume(int32_t streamId) const return AudioPolicyManager::GetInstance().GetLowPowerVolume(streamId); } -uint32_t AudioSystemManager::GetSingleStreamVolume(int32_t streamId) const +float AudioSystemManager::GetSingleStreamVolume(int32_t streamId) const { return AudioPolicyManager::GetInstance().GetSingleStreamVolume(streamId); } diff --git a/services/test/audio_policy_test.cpp b/services/test/audio_policy_test.cpp index 65f937a559..6327c93000 100644 --- a/services/test/audio_policy_test.cpp +++ b/services/test/audio_policy_test.cpp @@ -407,7 +407,7 @@ static void HandleSingleStreamVolumeOption(int argc, char* argv[], char opt) float volume = audioSystemMgr->GetLowPowerVolume(streamId); cout << "Get discounted volume factor: " << volume << endl; } else if (opt_flag == AudioPolicyTest::OPT_GET_SS_VOL) { - uint32_t volume = audioSystemMgr->GetSingleStreamVolume(streamId); + float volume = audioSystemMgr->GetSingleStreamVolume(streamId); cout << "Get single stream volume: " << volume << endl; } else { cout << "invalid operation." << endl; diff --git a/test/unittest/manager_test/src/audio_manager_unit_test.cpp b/test/unittest/manager_test/src/audio_manager_unit_test.cpp index 576d885fb2..c087c47da8 100644 --- a/test/unittest/manager_test/src/audio_manager_unit_test.cpp +++ b/test/unittest/manager_test/src/audio_manager_unit_test.cpp @@ -39,10 +39,8 @@ namespace { constexpr int32_t INV_CHANNEL = -1; constexpr int32_t CHANNEL_10 = 10; constexpr float DISCOUNT_VOLUME = 0.5; - constexpr float DISCOUNT_VOLUME_MIN = 0; - constexpr float DISCOUNT_VOLUME_MAX = 1.0; - constexpr uint32_t SINGLE_STREAM_VOLUME_MIN = 0; - constexpr uint32_t SINGLE_STREAM_VOLUME_MAX = 65536; + constexpr float VOLUME_MIN = 0; + constexpr float VOLUME_MAX = 1.0; } void AudioManagerUnitTest::SetUpTestCase(void) {} @@ -816,7 +814,7 @@ HWTEST(AudioManagerUnitTest, GetLowPowerVolume_001, TestSize.Level1) ASSERT_NE(0, streamId); float vol = AudioSystemManager::GetInstance()->GetLowPowerVolume(streamId); - if (vol < DISCOUNT_VOLUME_MIN || vol > DISCOUNT_VOLUME_MAX) { + if (vol < VOLUME_MIN || vol > VOLUME_MAX) { ret = ERROR; } else { ret = SUCCESS; @@ -858,8 +856,8 @@ HWTEST(AudioManagerUnitTest, GetSingleStreamVolume_001, TestSize.Level1) } ASSERT_NE(0, streamId); - uint32_t vol = AudioSystemManager::GetInstance()->GetSingleStreamVolume(streamId); - if (vol < SINGLE_STREAM_VOLUME_MIN || vol > SINGLE_STREAM_VOLUME_MAX) { + float vol = AudioSystemManager::GetInstance()->GetSingleStreamVolume(streamId); + if (vol < VOLUME_MIN || vol > VOLUME_MAX) { ret = ERROR; } else { ret = SUCCESS; -- Gitee From 57f12b82f2e7caabb2484d2fadbe6b982cf58bf2 Mon Sep 17 00:00:00 2001 From: liuyuehua1 Date: Wed, 3 Aug 2022 15:05:46 +0800 Subject: [PATCH 3/3] Code format adjustment. Signed-off-by: liuyuehua1 --- services/src/audio_service/client/audio_service_client.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/services/src/audio_service/client/audio_service_client.cpp b/services/src/audio_service/client/audio_service_client.cpp index 498b02748c..09d4eed7b2 100644 --- a/services/src/audio_service/client/audio_service_client.cpp +++ b/services/src/audio_service/client/audio_service_client.cpp @@ -2301,8 +2301,7 @@ float AudioServiceClient::GetStreamLowPowerVolume() float AudioServiceClient::GetSingleStreamVol() { - int32_t systemVolumeInt - = mAudioSystemMgr->GetVolume(static_cast(mStreamType)); + int32_t systemVolumeInt = mAudioSystemMgr->GetVolume(static_cast(mStreamType)); float systemVolume = AudioSystemManager::MapVolumeToHDI(systemVolumeInt); float vol = systemVolume * mVolumeFactor * mPowerVolumeFactor; @@ -2313,8 +2312,7 @@ float AudioServiceClient::GetSingleStreamVol() if (mAudioSystemMgr->IsStreamMute(static_cast(mStreamType))) { if (mUnMute_) { - mAudioSystemMgr->SetMute(static_cast(mStreamType), - false); + mAudioSystemMgr->SetMute(static_cast(mStreamType), false); } else { vol = MIN_STREAM_VOLUME_LEVEL; } -- Gitee