• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 OHOS_AVSESSION_ITEM_H
17 #define OHOS_AVSESSION_ITEM_H
18 
19 #include <string>
20 #include <map>
21 
22 #include "avsession_stub.h"
23 #include "avsession_callback_proxy.h"
24 #include "avcontrol_command.h"
25 #include "audio_info.h"
26 #include "avcast_control_command.h"
27 
28 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
29 #include "i_avcast_controller_proxy.h"
30 #include "avcast_controller_item.h"
31 #endif
32 
33 namespace OHOS::AVSession {
34 class AVControllerItem;
35 class RemoteSessionSink;
36 class RemoteSessionSource;
37 class AVSessionItem : public AVSessionStub {
38 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
39 class CssListener : public IAVCastSessionStateListener {
40 public:
CssListener(AVSessionItem * ptr)41     explicit CssListener(AVSessionItem *ptr)
42     {
43         ptr_ = ptr;
44     }
45 
OnCastStateChange(int32_t castState,DeviceInfo deviceInfo)46     void OnCastStateChange(int32_t castState, DeviceInfo deviceInfo)
47     {
48         ptr_->OnCastStateChange(castState, deviceInfo);
49     }
50 
OnCastEventRecv(int32_t errorCode,std::string & errorMsg)51     void OnCastEventRecv(int32_t errorCode, std::string& errorMsg)
52     {
53         ptr_->OnCastEventRecv(errorCode, errorMsg);
54     }
55 
56     AVSessionItem *ptr_;
57 };
58 #endif
59 public:
60     explicit AVSessionItem(const AVSessionDescriptor& descriptor);
61 
62     ~AVSessionItem() override;
63 
64 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
65     bool IsCastSinkSession(int32_t castState);
66 
67     void OnCastStateChange(int32_t castState, DeviceInfo deviceInfo);
68 
69     void OnCastEventRecv(int32_t errorCode, std::string& errorMsg);
70 #endif
71 
72     std::string GetSessionId() override;
73 
74     std::string GetSessionType() override;
75 
76     int32_t SetAVCallMetaData(const AVCallMetaData& avCallMetaData) override;
77 
78     int32_t SetAVCallState(const AVCallState& avCallState) override;
79 
80     int32_t GetAVMetaData(AVMetaData& meta) override;
81 
82     int32_t SetAVMetaData(const AVMetaData& meta) override;
83 
84     int32_t GetAVQueueItems(std::vector<AVQueueItem>& items) override;
85 
86     int32_t SetAVQueueItems(const std::vector<AVQueueItem>& items) override;
87 
88     int32_t GetAVQueueTitle(std::string& title) override;
89 
90     int32_t SetAVQueueTitle(const std::string& title) override;
91 
92     int32_t GetAVPlaybackState(AVPlaybackState& state) override;
93 
94     int32_t SetLaunchAbility(const AbilityRuntime::WantAgent::WantAgent& ability) override;
95 
96     int32_t GetExtras(AAFwk::WantParams& extras) override;
97 
98     int32_t SetExtras(const AAFwk::WantParams& extras) override;
99 
100     int32_t Activate() override;
101 
102     int32_t Deactivate() override;
103 
104     bool IsActive() override;
105 
106     int32_t Destroy() override;
107 
108     int32_t AddSupportCommand(int32_t cmd) override;
109 
110     int32_t DeleteSupportCommand(int32_t cmd) override;
111 
112     AVSessionDescriptor GetDescriptor();
113 
114     int32_t SetAVPlaybackState(const AVPlaybackState& state) override;
115 
116     AVCallState GetAVCallState();
117 
118     AVCallMetaData GetAVCallMetaData();
119 
120     AVPlaybackState GetPlaybackState();
121 
122     AVMetaData GetMetaData();
123 
124     std::vector<AVQueueItem> GetQueueItems();
125 
126     std::string GetQueueTitle();
127 
128     AAFwk::WantParams GetExtras();
129 
130     std::vector<int32_t> GetSupportCommand();
131 
132     AbilityRuntime::WantAgent::WantAgent GetLaunchAbility();
133 
134     void HandleMediaKeyEvent(const MMI::KeyEvent& keyEvent);
135 
136     void HandleOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo& outputDeviceInfo);
137 
138     void HandleSkipToQueueItem(const int32_t& itemId);
139 
140     void ExecuteControllerCommand(const AVControlCommand& cmd);
141 
142     void ExecueCommonCommand(const std::string& commonCommand, const AAFwk::WantParams& commandArgs);
143 
144     int32_t AddController(pid_t pid, sptr<AVControllerItem>& controller);
145 
146     void SetPid(pid_t pid);
147 
148     void SetUid(pid_t uid);
149 
150     pid_t GetPid() const;
151 
152     pid_t GetUid() const;
153 
154     std::string GetAbilityName() const;
155 
156     std::string GetBundleName() const;
157 
158     void SetTop(bool top);
159 
160     std::shared_ptr<RemoteSessionSource> GetRemoteSource();
161 
162     void HandleControllerRelease(pid_t pid);
163 
164     void SetServiceCallbackForRelease(const std::function<void(AVSessionItem&)>& callback);
165 
166     void SetServiceCallbackForCallStart(const std::function<void(AVSessionItem&)>& callback);
167 
168     void SetOutputDevice(const OutputDeviceInfo& info);
169 
170     void GetOutputDevice(OutputDeviceInfo& info);
171 
172     int32_t CastAudioToRemote(const std::string& sourceDevice, const std::string& sinkDevice,
173                               const std::string& sinkCapability);
174 
175     int32_t SourceCancelCastAudio(const std::string& sinkDevice);
176 
177     int32_t CastAudioFromRemote(const std::string& sourceSessionId, const std::string& sourceDevice,
178                                 const std::string& sinkDevice, const std::string& sourceCapability);
179 
180     int32_t SinkCancelCastAudio();
181 
182     int32_t SetSessionEvent(const std::string& event, const AAFwk::WantParams& args) override;
183 
184     void SetServiceCallbackForAVQueueInfo(const std::function<void(AVSessionItem&)>& callback);
185 
186 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
187     int32_t AddSupportCastCommand(int32_t cmd);
188 
189     int32_t DeleteSupportCastCommand(int32_t cmd);
190 
191     int32_t ReleaseCast() override;
192 
193     int32_t StartCast(const OutputDeviceInfo& outputDeviceInfo);
194 
195     int32_t AddDevice(const int64_t castHandle, const OutputDeviceInfo& outputDeviceInfo);
196 
197     int32_t StopCast();
198 
199     sptr<IRemoteObject> GetAVCastControllerInner() override;
200 
201     void ReleaseAVCastControllerInner();
202 
203     void UpdateCastDeviceMap(DeviceInfo deviceInfo);
204 
205     void SetCastHandle(int64_t castHandle);
206 
207     void RegisterDeviceStateCallback();
208 
209     void UnRegisterDeviceStateCallback();
210 
211     void StopCastSession();
212 #endif
213 
214 protected:
215     int32_t RegisterCallbackInner(const sptr<IAVSessionCallback>& callback) override;
216     sptr<IRemoteObject> GetControllerInner() override;
217 
218 private:
219     bool HasAvQueueInfo();
220     void HandleOnAVCallAnswer(const AVControlCommand& cmd);
221     void HandleOnAVCallHangUp(const AVControlCommand& cmd);
222     void HandleOnAVCallToggleCallMute(const AVControlCommand& cmd);
223     void HandleOnPlay(const AVControlCommand& cmd);
224     void HandleOnPause(const AVControlCommand& cmd);
225     void HandleOnStop(const AVControlCommand& cmd);
226     void HandleOnPlayNext(const AVControlCommand& cmd);
227     void HandleOnPlayPrevious(const AVControlCommand& cmd);
228     void HandleOnFastForward(const AVControlCommand& cmd);
229     void HandleOnRewind(const AVControlCommand& cmd);
230     void HandleOnSeek(const AVControlCommand& cmd);
231     void HandleOnSetSpeed(const AVControlCommand& cmd);
232     void HandleOnSetLoopMode(const AVControlCommand& cmd);
233     void HandleOnToggleFavorite(const AVControlCommand& cmd);
234     void HandleOnPlayFromAssetId(const AVControlCommand& cmd);
235 
236     using HandlerFuncType = void(AVSessionItem::*)(const AVControlCommand&);
237     static inline HandlerFuncType cmdHandlers[] = {
238         &AVSessionItem::HandleOnPlay,
239         &AVSessionItem::HandleOnPause,
240         &AVSessionItem::HandleOnStop,
241         &AVSessionItem::HandleOnPlayNext,
242         &AVSessionItem::HandleOnPlayPrevious,
243         &AVSessionItem::HandleOnFastForward,
244         &AVSessionItem::HandleOnRewind,
245         &AVSessionItem::HandleOnSeek,
246         &AVSessionItem::HandleOnSetSpeed,
247         &AVSessionItem::HandleOnSetLoopMode,
248         &AVSessionItem::HandleOnToggleFavorite,
249         &AVSessionItem::HandleOnPlayFromAssetId,
250         &AVSessionItem::HandleOnAVCallAnswer,
251         &AVSessionItem::HandleOnAVCallHangUp,
252         &AVSessionItem::HandleOnAVCallToggleCallMute,
253     };
254 
255     std::recursive_mutex controllersLock_;
256     std::map<pid_t, sptr<AVControllerItem>> controllers_;
257     AVCallMetaData avCallMetaData_;
258     AVCallState avCallState_;
259 
260     AVSessionDescriptor descriptor_;
261     AVPlaybackState playbackState_;
262     AVMetaData metaData_;
263     std::recursive_mutex queueItemsLock_;
264     std::vector<AVQueueItem> queueItems_;
265     std::string queueTitle_;
266     AbilityRuntime::WantAgent::WantAgent launchAbility_;
267     AAFwk::WantParams extras_;
268     std::vector<int32_t> supportedCmd_;
269     std::vector<int32_t> supportedCastCmds_;
270     std::recursive_mutex callbackLock_;
271     sptr<IAVSessionCallback> callback_;
272     std::recursive_mutex remoteCallbackLock_;
273     std::shared_ptr<AVSessionCallback> remoteCallback_;
274     std::function<void(AVSessionItem&)> serviceCallback_;
275     std::function<void(AVSessionItem&)> callStartCallback_;
276     friend class AVSessionDumper;
277 
278     std::recursive_mutex remoteSourceLock_;
279     std::shared_ptr<RemoteSessionSource> remoteSource_;
280     std::recursive_mutex remoteSinkLock_;
281     std::shared_ptr<RemoteSessionSink> remoteSink_;
282 
283     std::function<void(AVSessionItem&)> serviceCallbackForAddAVQueueInfo_;
284 
285     int32_t castConnectStateForDisconnect_ = 5;
286     int32_t castConnectStateForConnected_ = 6;
287     int32_t removeCmdStep_ = 1000;
288 
289     std::recursive_mutex destroyLock_;
290     volatile bool isDestroyed_ = false;
291 
292     std::recursive_mutex metaDataLock_;
293 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
294     std::recursive_mutex castHandleLock_;
295     int64_t castHandle_ = 0;
296 
297     std::recursive_mutex castControllerProxyLock_;
298     std::shared_ptr<IAVCastControllerProxy> castControllerProxy_;
299     std::recursive_mutex castControllersLock_;
300     std::vector<std::shared_ptr<AVCastControllerItem>> castControllers_;
301     std::shared_ptr<CssListener> cssListener_;
302     std::shared_ptr<IAVCastSessionStateListener> iAVCastSessionStateListener_;
303 
304     std::map<std::string, DeviceInfo> castDeviceInfoMap_;
305 #endif
306 };
307 } // namespace OHOS::AVSession
308 #endif // OHOS_AVSESSION_ITEM_H
309