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