• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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