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