1 /* 2 * Copyright (c) 2023-2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef IPC_STREAM_IN_SERVER_H 17 #define IPC_STREAM_IN_SERVER_H 18 19 #include <memory> 20 21 #include "iipc_stream_listener.h" 22 #include "audio_process_config.h" 23 #include "renderer_in_server.h" 24 #include "capturer_in_server.h" 25 #include "ipc_skeleton.h" 26 #include "audio_schedule_guard.h" 27 #include "ipc_stream_stub.h" 28 29 namespace OHOS { 30 namespace AudioStandard { 31 // in plan extends IStatusCallback 32 class StreamListenerHolder : public IStreamListener { 33 public: 34 StreamListenerHolder() = default; 35 ~StreamListenerHolder() = default; 36 int32_t RegisterStreamListener(sptr<IIpcStreamListener> listener); 37 38 // override IStreamListener 39 int32_t OnOperationHandled(Operation operation, int64_t result) override; 40 private: 41 bool IsWakeUpLaterNeeded(Operation operation); 42 std::mutex listenerMutex_; 43 sptr<IIpcStreamListener> streamListener_ = nullptr; 44 }; 45 46 class IpcStreamInServer : public IpcStreamStub { 47 public: 48 static sptr<IpcStreamInServer> Create(const AudioProcessConfig &config, int32_t &ret); 49 50 IpcStreamInServer(const AudioProcessConfig &config, AudioMode mode); 51 ~IpcStreamInServer(); 52 53 int32_t Config(); 54 55 int32_t RegisterStreamListener(const sptr<IRemoteObject>& object) override; 56 57 int32_t ResolveBuffer(std::shared_ptr<OHAudioBuffer> &buffer) override; 58 59 int32_t UpdatePosition() override; 60 61 int32_t GetAudioSessionID(uint32_t &sessionId) override; 62 63 int32_t Start() override; 64 65 int32_t Pause() override; 66 67 int32_t Stop() override; 68 69 int32_t Release(bool isSwitchStream) override; 70 71 int32_t Flush() override; 72 73 int32_t Drain(bool stopFlag) override; 74 75 int32_t UpdatePlaybackCaptureConfig(const AudioPlaybackCaptureConfig &config) override; 76 77 int32_t GetAudioTime(uint64_t &framePos, uint64_t ×tamp) override; 78 79 int32_t GetAudioPosition(uint64_t &framePos, uint64_t ×tamp, uint64_t &latency, int32_t base) override; 80 81 int32_t GetSpeedPosition(uint64_t &framePos, uint64_t ×tamp, uint64_t &latency, int32_t base) override; 82 83 int32_t GetLatency(uint64_t &latency) override; 84 85 int32_t SetRate(int32_t rate) override; // SetRenderRate 86 87 int32_t GetRate(int32_t &rate) override; // SetRenderRate 88 89 int32_t SetLowPowerVolume(float volume) override; // renderer only 90 91 int32_t GetLowPowerVolume(float &volume) override; // renderer only 92 93 int32_t SetAudioEffectMode(int32_t effectMode) override; // renderer only 94 95 int32_t GetAudioEffectMode(int32_t &effectMode) override; // renderer only 96 97 int32_t SetPrivacyType(int32_t privacyType) override; // renderer only 98 99 int32_t GetPrivacyType(int32_t &privacyType) override; // renderer only 100 101 int32_t SetOffloadMode(int32_t state, bool isAppBack) override; // renderer only 102 103 int32_t UnsetOffloadMode() override; // renderer only 104 105 int32_t GetOffloadApproximatelyCacheTime(uint64_t ×tamp, uint64_t &paWriteIndex, 106 uint64_t &cacheTimeDsp, uint64_t &cacheTimePa) override; // renderer only 107 108 int32_t UpdateSpatializationState(bool spatializationEnabled, bool headTrackingEnabled) override; // renderer only 109 110 int32_t GetStreamManagerType() override; 111 112 int32_t SetSilentModeAndMixWithOthers(bool on) override; 113 114 int32_t SetClientVolume() override; 115 116 int32_t SetLoudnessGain(float loudnessGain) override; 117 118 int32_t SetMute(bool isMute) override; 119 120 int32_t SetDuckFactor(float duckFactor) override; 121 122 int32_t RegisterThreadPriority(int32_t tid, const std::string &bundleName, uint32_t method) override; 123 124 int32_t SetDefaultOutputDevice(int32_t defaultOutputDevice, bool skipForce = false) override; 125 126 int32_t SetSourceDuration(int64_t duration) override; 127 128 int32_t SetSpeed(float speed) override; 129 130 int32_t SetOffloadDataCallbackState(int32_t state) override; 131 132 int32_t ResolveBufferBaseAndGetServerSpanSize(std::shared_ptr<OHAudioBufferBase> &buffer, 133 uint32_t &spanSizeInFrame, uint64_t &engineTotalSizeInFrame) override; 134 135 int32_t SetAudioHapticsSyncId(int32_t audioHapticsSyncId) override; 136 137 // for inner-capturer 138 std::shared_ptr<RendererInServer> GetRenderer(); 139 std::shared_ptr<CapturerInServer> GetCapturer(); 140 141 private: 142 int32_t ConfigRenderer(); 143 int32_t ConfigCapturer(); 144 145 private: 146 AudioProcessConfig config_; 147 std::shared_ptr<StreamListenerHolder> streamListenerHolder_ = nullptr; 148 AudioMode mode_ = AUDIO_MODE_PLAYBACK; 149 std::shared_ptr<RendererInServer> rendererInServer_ = nullptr; 150 std::shared_ptr<CapturerInServer> capturerInServer_ = nullptr; 151 152 std::array<std::shared_ptr<SharedAudioScheduleGuard>, METHOD_MAX> scheduleGuards_ = {}; 153 std::mutex scheduleGuardsMutex_; 154 }; 155 } // namespace AudioStandard 156 } // namespace OHOS 157 #endif // IPC_STREAM_IN_SERVER_H 158