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 &timestamp) override;
75 
76     int32_t GetAudioPosition(uint64_t &framePos, uint64_t &timestamp, 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 &timestamp, 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