1 /*
2 * Copyright (c) 2024 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 #include "cj_avsession_impl.h"
17
18 #include "want_agent.h"
19 #include "avsession_log.h"
20 #include "avsession_manager.h"
21 #include "avsession_errors.h"
22 #include "cj_avsession_utils.h"
23 #include "cj_avsession_manager_impl.h"
24 #include "cj_avsession_controller_impl.h"
25 #include "cj_avsession_cast_controller_impl.h"
26
27 namespace OHOS::AVSession {
28
CJAVSessionImpl(std::shared_ptr<AVSession> session)29 CJAVSessionImpl::CJAVSessionImpl(std::shared_ptr<AVSession> session)
30 {
31 session_ = session;
32 sessionId_ = session_->GetSessionId();
33 sessionType_ = session_->GetSessionType();
34 }
35
OnEvent(int32_t type,int64_t id)36 int32_t CJAVSessionImpl::OnEvent(int32_t type, int64_t id)
37 {
38 if (session_ == nullptr) {
39 SLOGE("OnEvent failed : session is nullptr");
40 return ERR_SESSION_NOT_EXIST;
41 }
42 int32_t ret = AVSESSION_SUCCESS;
43 if (callback_ == nullptr) {
44 callback_ = std::make_shared<CJAVSessionCallback>();
45 ret = session_->RegisterCallback(callback_);
46 if (ret != AVSESSION_SUCCESS) { //in avsession_errors.h
47 SLOGE("OnEvent failed : register callback failed");
48 return ret;
49 }
50 }
51 callback_->RegisterCallback(type, id);
52 return ret;
53 }
54
OffEvent(int32_t type)55 int32_t CJAVSessionImpl::OffEvent(int32_t type)
56 {
57 int32_t ret = AVSESSION_SUCCESS;
58 if (session_ == nullptr) {
59 SLOGE("OffEvent failed : session is nullptr");
60 return ERR_SESSION_NOT_EXIST;
61 }
62 if (callback_ == nullptr) {
63 return ret;
64 }
65 callback_->UnRegisterCallback(type);
66 return ret;
67 }
68
SetAVMetaData(CAVMetaData & data)69 int32_t CJAVSessionImpl::SetAVMetaData(CAVMetaData& data)
70 {
71 auto call = [&](AVMetaData& native) {
72 return session_->SetAVMetaData(native);
73 };
74 return CJAVSessionSetterCStruct<AVMetaData, CAVMetaData>(call, data, "SetAVMetaData");
75 }
76
SetAVCallMetaData(CAVCallMetaData & data)77 int32_t CJAVSessionImpl::SetAVCallMetaData(CAVCallMetaData& data)
78 {
79 auto call = [&](AVCallMetaData& native) {
80 return session_->SetAVCallMetaData(native);
81 };
82 return CJAVSessionSetterCStruct<AVCallMetaData, CAVCallMetaData>(call, data, "SetAVCallMetaData");
83 }
84
SetAVCallState(CAVCallState & state)85 int32_t CJAVSessionImpl::SetAVCallState(CAVCallState& state)
86 {
87 auto call = [&](AVCallState& native) {
88 return session_->SetAVCallState(native);
89 };
90 return CJAVSessionSetterCStruct<AVCallState, CAVCallState>(call, state, "SetAVCallState");
91 }
92
SetAVPlaybackState(CAVPlaybackState & state)93 int32_t CJAVSessionImpl::SetAVPlaybackState(CAVPlaybackState& state)
94 {
95 auto call = [&](AVPlaybackState& native) {
96 return session_->SetAVPlaybackState(native);
97 };
98 return CJAVSessionSetterCStruct<AVPlaybackState, CAVPlaybackState>(call, state, "SetAVPlaybackState");
99 }
100
SetAVQueueItems(CArray & items)101 int32_t CJAVSessionImpl::SetAVQueueItems(CArray& items)
102 {
103 auto call = [&](std::vector<AVQueueItem>& native) {
104 return session_->SetAVQueueItems(native);
105 };
106 return CJAVSessionSetterCStruct<std::vector<AVQueueItem>, CArray>(call, items, "SetAVQueueItems");
107 }
108
SetAVQueueTitle(char * & title)109 int32_t CJAVSessionImpl::SetAVQueueTitle(char*& title)
110 {
111 int32_t ret = session_->SetAVQueueTitle(std::string(title));
112 if (ret != CJNO_ERROR) {
113 SLOGE("controller SetAVQueueTitle failed:%{public}d", ret);
114 }
115 return ret;
116 }
117
SetExtras(CArray & extras)118 int32_t CJAVSessionImpl::SetExtras(CArray& extras)
119 {
120 auto call = [&](AAFwk::WantParams& native) {
121 return session_->SetExtras(native);
122 };
123 return CJAVSessionSetterCStruct<AAFwk::WantParams, CArray>(call, extras, "SetExtras");
124 }
125
SetLaunchAbility(int64_t abilityId)126 int32_t CJAVSessionImpl::SetLaunchAbility(int64_t abilityId)
127 {
128 auto call = [&](std::shared_ptr<AbilityRuntime::WantAgent::WantAgent>& native) {
129 return session_->SetLaunchAbility(*native);
130 };
131 return CJAVSessionSetterCStruct<std::shared_ptr<AbilityRuntime::WantAgent::WantAgent>, int64_t>(
132 call, abilityId, "SetLaunchAbility");
133 }
134
GetController()135 int32_t CJAVSessionImpl::GetController()
136 {
137 auto controller = CJAVSessionControllerImpl::GetInstance(sessionId_);
138 if (controller->Exists()) {
139 return CJNO_ERROR;
140 } else {
141 return CJ_AVSESSION_MANAGER_IMPL->CreateController(sessionId_);
142 }
143 }
144
GetAVCastController()145 int32_t CJAVSessionImpl::GetAVCastController()
146 {
147 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
148 std::shared_ptr<AVCastController> nativeController = session_->GetAVCastController();
149 if (nativeController == nullptr) {
150 SLOGE("GetAVCastController failed : native get controller failed");
151 return AVSESSION_ERROR;
152 }
153 auto controller = CJAVCastControllerImpl::NewInstance(nativeController, sessionId_);
154 if (controller) {
155 return CJNO_ERROR;
156 } else {
157 return ERR_NO_MEMORY;
158 }
159 #else
160 SLOGE("Cast Engine is disabled!");
161 return AVSESSION_ERROR;
162 #endif
163 }
164
GetOutputDevice(COutputDeviceInfo & outputDeviceInfo)165 int32_t CJAVSessionImpl::GetOutputDevice(COutputDeviceInfo& outputDeviceInfo)
166 {
167 AVSessionDescriptor descriptor;
168 int32_t ret = AVSessionManager::GetInstance().GetSessionDescriptorsBySessionId(sessionId_, descriptor);
169 if (ret != CJNO_ERROR) {
170 SLOGE("controller GetOutputDevice failed:%{public}d", ret);
171 return ret;
172 }
173 return ConvertNativeToCJStruct(descriptor.outputDeviceInfo_, outputDeviceInfo);
174 }
175
GetAllCastDisplays(CArray & infos)176 int32_t CJAVSessionImpl::GetAllCastDisplays(CArray& infos)
177 {
178 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
179 auto call = [&](std::vector<CastDisplayInfo>& castDisplays) {
180 return session_->GetAllCastDisplays(castDisplays);
181 };
182 return CJControllerGetterCStruct<std::vector<CastDisplayInfo>, CArray>(call, infos, "GetAllCastDisplays");
183 #else
184 SLOGE("Cast Engine is disabled!");
185 return AVSESSION_ERROR;
186 #endif
187 }
188
Activate()189 int32_t CJAVSessionImpl::Activate()
190 {
191 auto call = [&]() {
192 return session_->Activate();
193 };
194 return CJExecMethod(call, "Activate");
195 }
196
Deactivate()197 int32_t CJAVSessionImpl::Deactivate()
198 {
199 auto call = [&]() {
200 return session_->Deactivate();
201 };
202 return CJExecMethod(call, "Deactivate");
203 }
204
Destroy()205 int32_t CJAVSessionImpl::Destroy()
206 {
207 auto call = [&]() {
208 return session_->Destroy();
209 };
210 return CJExecMethod(call, "Destroy");
211 }
212
StopCasting()213 int32_t CJAVSessionImpl::StopCasting()
214 {
215 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
216 auto call = [&]() {
217 return session_->ReleaseCast();
218 };
219 return CJExecMethod(call, "StopCasting");
220 #else
221 return CJNO_ERROR;
222 #endif
223 }
224
DispatchSessionEvent(char * & event,CArray & args)225 int32_t CJAVSessionImpl::DispatchSessionEvent(char*& event, CArray& args)
226 {
227 AAFwk::WantParams paras;
228 int ret = convertCJStructToNative(args, paras);
229 if (ret != CJNO_ERROR) {
230 SLOGE("Convert CParameters to WantParams Failed!");
231 return ret;
232 }
233 return session_->SetSessionEvent(std::string(event), paras);
234 }
235 } // namespace AVSession::OHOS