• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 
27 namespace OHOS::AVSession {
28 class AVControllerItem;
29 class RemoteSessionSink;
30 class RemoteSessionSource;
31 class AVSessionItem : public AVSessionStub {
32 public:
33     explicit AVSessionItem(const AVSessionDescriptor& descriptor);
34 
35     ~AVSessionItem() override;
36 
37     std::string GetSessionId() override;
38 
39     int32_t GetAVMetaData(AVMetaData& meta) override;
40 
41     int32_t SetAVMetaData(const AVMetaData& meta) override;
42 
43     int32_t GetAVPlaybackState(AVPlaybackState& state) override;
44 
45     int32_t SetLaunchAbility(const AbilityRuntime::WantAgent::WantAgent& ability) override;
46 
47     int32_t Activate() override;
48 
49     int32_t Deactivate() override;
50 
51     bool IsActive() override;
52 
53     int32_t Destroy() override;
54 
55     int32_t AddSupportCommand(int32_t cmd) override;
56 
57     int32_t DeleteSupportCommand(int32_t cmd) override;
58 
59     AVSessionDescriptor GetDescriptor();
60 
61     int32_t SetAVPlaybackState(const AVPlaybackState& state) override;
62 
63     AVPlaybackState GetPlaybackState();
64 
65     AVMetaData GetMetaData();
66 
67     std::vector<int32_t> GetSupportCommand();
68 
69     AbilityRuntime::WantAgent::WantAgent GetLaunchAbility();
70 
71     void HandleMediaKeyEvent(const MMI::KeyEvent& keyEvent);
72 
73     void HandleOutputDeviceChange(const OutputDeviceInfo& outputDeviceInfo);
74 
75     void ExecuteControllerCommand(const AVControlCommand& cmd);
76 
77     int32_t AddController(pid_t pid, sptr<AVControllerItem>& controller);
78 
79     void SetPid(pid_t pid);
80 
81     void SetUid(pid_t uid);
82 
83     pid_t GetPid() const;
84 
85     pid_t GetUid() const;
86 
87     std::string GetAbilityName() const;
88 
89     void SetTop(bool top);
90 
91     std::shared_ptr<RemoteSessionSource> GetRemoteSource();
92 
93     void HandleControllerRelease(pid_t pid);
94 
95     void SetServiceCallbackForRelease(const std::function<void(AVSessionItem&)>& callback);
96 
97     void SetOutputDevice(const OutputDeviceInfo& info);
98 
99     void GetOutputDevice(OutputDeviceInfo& info);
100 
101     int32_t CastAudioToRemote(const std::string& sourceDevice, const std::string& sinkDevice,
102                               const std::string& sinkCapability);
103 
104     int32_t SourceCancelCastAudio(const std::string& sinkDevice);
105 
106     int32_t CastAudioFromRemote(const std::string& sourceSessionId, const std::string& sourceDevice,
107                                 const std::string& sinkDevice, const std::string& sourceCapability);
108 
109     int32_t SinkCancelCastAudio();
110 protected:
111     int32_t RegisterCallbackInner(const sptr<IAVSessionCallback>& callback) override;
112     sptr<IRemoteObject> GetControllerInner() override;
113 
114 private:
115     void HandleOnPlay(const AVControlCommand& cmd);
116     void HandleOnPause(const AVControlCommand& cmd);
117     void HandleOnStop(const AVControlCommand& cmd);
118     void HandleOnPlayNext(const AVControlCommand& cmd);
119     void HandleOnPlayPrevious(const AVControlCommand& cmd);
120     void HandleOnFastForward(const AVControlCommand& cmd);
121     void HandleOnRewind(const AVControlCommand& cmd);
122     void HandleOnSeek(const AVControlCommand& cmd);
123     void HandleOnSetSpeed(const AVControlCommand& cmd);
124     void HandleOnSetLoopMode(const AVControlCommand& cmd);
125     void HandleOnToggleFavorite(const AVControlCommand& cmd);
126 
127     using HandlerFuncType = void(AVSessionItem::*)(const AVControlCommand&);
128     static inline HandlerFuncType cmdHandlers[] = {
129         [AVControlCommand::SESSION_CMD_PLAY] = &AVSessionItem::HandleOnPlay,
130         [AVControlCommand::SESSION_CMD_PAUSE] = &AVSessionItem::HandleOnPause,
131         [AVControlCommand::SESSION_CMD_STOP] = &AVSessionItem::HandleOnStop,
132         [AVControlCommand::SESSION_CMD_PLAY_NEXT] = &AVSessionItem::HandleOnPlayNext,
133         [AVControlCommand::SESSION_CMD_PLAY_PREVIOUS] = &AVSessionItem::HandleOnPlayPrevious,
134         [AVControlCommand::SESSION_CMD_FAST_FORWARD] = &AVSessionItem::HandleOnFastForward,
135         [AVControlCommand::SESSION_CMD_REWIND] = &AVSessionItem::HandleOnRewind,
136         [AVControlCommand::SESSION_CMD_SEEK] = &AVSessionItem::HandleOnSeek,
137         [AVControlCommand::SESSION_CMD_SET_SPEED] = &AVSessionItem::HandleOnSetSpeed,
138         [AVControlCommand::SESSION_CMD_SET_LOOP_MODE] = &AVSessionItem::HandleOnSetLoopMode,
139         [AVControlCommand::SESSION_CMD_TOGGLE_FAVORITE] = &AVSessionItem::HandleOnToggleFavorite,
140     };
141 
142     std::recursive_mutex lock_;
143     std::map<pid_t, sptr<AVControllerItem>> controllers_;
144     AVSessionDescriptor descriptor_;
145     AVPlaybackState playbackState_;
146     AVMetaData metaData_;
147     AbilityRuntime::WantAgent::WantAgent launchAbility_;
148     std::vector<int32_t> supportedCmd_;
149     sptr<IAVSessionCallback> callback_;
150     std::shared_ptr<AVSessionCallback> remoteCallback_;
151     std::function<void(AVSessionItem&)> serviceCallback_;
152     friend class AVSessionDumper;
153 
154     std::shared_ptr<RemoteSessionSource> remoteSource_;
155     std::shared_ptr<RemoteSessionSink> remoteSink_;
156 };
157 } // namespace OHOS::AVSession
158 #endif // OHOS_AVSESSION_ITEM_H