1 /* 2 * Copyright (c) 2023 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 "ipc_stream_stub.h" 22 #include "audio_info.h" 23 #include "audio_process_config.h" 24 #include "renderer_in_server.h" 25 #include "capturer_in_server.h" 26 27 namespace OHOS { 28 namespace AudioStandard { 29 // in plan extends IStatusCallback 30 class StreamListenerHolder : public IStreamListener { 31 public: 32 StreamListenerHolder(); 33 ~StreamListenerHolder(); 34 int32_t RegisterStreamListener(sptr<IpcStreamListener> listener); 35 36 // override IStreamListener 37 int32_t OnOperationHandled(Operation operation, int64_t result) override; 38 private: 39 std::mutex listenerMutex_; 40 sptr<IpcStreamListener> streamListener_ = nullptr; 41 }; 42 43 class IpcStreamInServer : public IpcStreamStub { 44 public: 45 static sptr<IpcStreamInServer> Create(const AudioProcessConfig &config, int32_t &ret); 46 47 IpcStreamInServer(const AudioProcessConfig &config, AudioMode mode); 48 ~IpcStreamInServer(); 49 50 int32_t Config(); 51 52 int32_t RegisterStreamListener(sptr<IRemoteObject> object) override; 53 54 int32_t ResolveBuffer(std::shared_ptr<OHAudioBuffer> &buffer) override; 55 56 int32_t UpdatePosition() override; 57 58 int32_t GetAudioSessionID(uint32_t &sessionId) override; 59 60 int32_t Start() override; 61 62 int32_t Pause() override; 63 64 int32_t Stop() override; 65 66 int32_t Release() override; 67 68 int32_t Flush() override; 69 70 int32_t Drain(bool stopFlag = false) override; 71 72 int32_t UpdatePlaybackCaptureConfig(const AudioPlaybackCaptureConfig &config) override; 73 74 int32_t GetAudioTime(uint64_t &framePos, uint64_t ×tamp) override; 75 76 int32_t GetAudioPosition(uint64_t &framePos, uint64_t ×tamp, uint64_t &latency) override; 77 78 int32_t GetLatency(uint64_t &latency) override; 79 80 int32_t SetRate(int32_t rate) override; // SetRenderRate 81 82 int32_t GetRate(int32_t &rate) override; // SetRenderRate 83 84 int32_t SetLowPowerVolume(float volume) override; // renderer only 85 86 int32_t GetLowPowerVolume(float &volume) override; // renderer only 87 88 int32_t SetAudioEffectMode(int32_t effectMode) override; // renderer only 89 90 int32_t GetAudioEffectMode(int32_t &effectMode) override; // renderer only 91 92 int32_t SetPrivacyType(int32_t privacyType) override; // renderer only 93 94 int32_t GetPrivacyType(int32_t &privacyType) override; // renderer only 95 96 int32_t SetOffloadMode(int32_t state, bool isAppBack) override; // renderer only 97 98 int32_t UnsetOffloadMode() override; // renderer only 99 100 int32_t GetOffloadApproximatelyCacheTime(uint64_t ×tamp, uint64_t &paWriteIndex, 101 uint64_t &cacheTimeDsp, uint64_t &cacheTimePa) override; // renderer only 102 103 int32_t UpdateSpatializationState(bool spatializationEnabled, bool headTrackingEnabled) override; // renderer only 104 105 int32_t GetStreamManagerType() override; 106 107 int32_t SetSilentModeAndMixWithOthers(bool on) override; 108 109 int32_t SetClientVolume() override; 110 111 int32_t SetMute(bool isMute) override; 112 113 int32_t SetDuckFactor(float duckFactor) override; 114 115 int32_t RegisterThreadPriority(uint32_t tid, const std::string &bundleName) override; 116 117 // for inner-capturer 118 std::shared_ptr<RendererInServer> GetRenderer(); 119 std::shared_ptr<CapturerInServer> GetCapturer(); 120 121 private: 122 int32_t ConfigRenderer(); 123 int32_t ConfigCapturer(); 124 125 private: 126 uint32_t clientTid_ = 0; 127 std::string clientBundleName_; 128 bool clientThreadPriorityRequested_ = false; 129 AudioProcessConfig config_; 130 std::shared_ptr<StreamListenerHolder> streamListenerHolder_ = nullptr; 131 AudioMode mode_ = AUDIO_MODE_PLAYBACK; 132 std::shared_ptr<RendererInServer> rendererInServer_ = nullptr; 133 std::shared_ptr<CapturerInServer> capturerInServer_ = nullptr; 134 }; 135 } // namespace AudioStandard 136 } // namespace OHOS 137 #endif // IPC_STREAM_IN_SERVER_H 138