• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 #include <algorithm>
17 #include <iterator>
18 #include "stream_operator_service.h"
19 #include "stream_operator_service_callback.h"
20 #include "camera_service_type_converter.h"
21 
22 namespace OHOS::Camera {
23 
StreamOperatorService(OHOS::sptr<IStreamOperatorVdi> streamOperatorVdi)24 StreamOperatorService::StreamOperatorService(OHOS::sptr<IStreamOperatorVdi> streamOperatorVdi)
25     : streamOperatorVdi_(streamOperatorVdi)
26 {
27     CAMERA_LOGD("ctor, instance");
28 }
29 
~StreamOperatorService()30 StreamOperatorService::~StreamOperatorService()
31 {
32     CAMERA_LOGD("dtor, instance");
33 }
34 
IsStreamsSupported(OperationMode mode,const std::vector<uint8_t> & modeSetting,const std::vector<StreamInfo> & infos,StreamSupportType & type)35 int32_t StreamOperatorService::IsStreamsSupported(OperationMode mode, const std::vector<uint8_t> &modeSetting,
36     const std::vector<StreamInfo> &infos, StreamSupportType &type)
37 {
38     CHECK_IF_PTR_NULL_RETURN_VALUE(streamOperatorVdi_, OHOS::HDI::Camera::V1_0::INVALID_ARGUMENT);
39     std::vector<VdiStreamInfo> vdiInfos;
40     for (auto info : infos) {
41         VdiStreamInfo vdiInfo;
42         ConvertStreamInfoHdiToVdi(info, vdiInfo);
43         vdiInfos.push_back(vdiInfo);
44     }
45     VdiStreamSupportType vdiType = static_cast<VdiStreamSupportType>(type);
46     int32_t ret = streamOperatorVdi_->IsStreamsSupported(static_cast<VdiOperationMode>(mode),
47         modeSetting, vdiInfos, vdiType);
48     type = static_cast<StreamSupportType>(vdiType);
49     return ret;
50 }
51 
CreateStreams(const std::vector<StreamInfo> & streamInfos)52 int32_t StreamOperatorService::CreateStreams(const std::vector<StreamInfo> &streamInfos)
53 {
54     CHECK_IF_PTR_NULL_RETURN_VALUE(streamOperatorVdi_, OHOS::HDI::Camera::V1_0::INVALID_ARGUMENT);
55     std::vector<VdiStreamInfo> vdiStreamInfos;
56     for (auto info : streamInfos) {
57         VdiStreamInfo vdiInfo;
58         ConvertStreamInfoHdiToVdi(info, vdiInfo);
59         vdiStreamInfos.push_back(vdiInfo);
60     }
61     return streamOperatorVdi_->CreateStreams(vdiStreamInfos);
62 }
63 
ReleaseStreams(const std::vector<int32_t> & streamIds)64 int32_t StreamOperatorService::ReleaseStreams(const std::vector<int32_t> &streamIds)
65 {
66     CHECK_IF_PTR_NULL_RETURN_VALUE(streamOperatorVdi_, OHOS::HDI::Camera::V1_0::INVALID_ARGUMENT);
67     return streamOperatorVdi_->ReleaseStreams(streamIds);
68 }
69 
CommitStreams(OperationMode mode,const std::vector<uint8_t> & modeSetting)70 int32_t StreamOperatorService::CommitStreams(OperationMode mode, const std::vector<uint8_t> &modeSetting)
71 {
72     CHECK_IF_PTR_NULL_RETURN_VALUE(streamOperatorVdi_, OHOS::HDI::Camera::V1_0::INVALID_ARGUMENT);
73     return streamOperatorVdi_->CommitStreams(static_cast<VdiOperationMode>(mode), modeSetting);
74 }
75 
GetStreamAttributes(std::vector<StreamAttribute> & attributes)76 int32_t StreamOperatorService::GetStreamAttributes(std::vector<StreamAttribute> &attributes)
77 {
78     CHECK_IF_PTR_NULL_RETURN_VALUE(streamOperatorVdi_, OHOS::HDI::Camera::V1_0::INVALID_ARGUMENT);
79     std::vector<VdiStreamAttribute> vdiAttributes;
80     for (auto attribute : attributes) {
81         VdiStreamAttribute vdiAttribute;
82         ConvertStreamAttributeHdiToVdi(attribute, vdiAttribute);
83         vdiAttributes.push_back(vdiAttribute);
84     }
85     int32_t ret = streamOperatorVdi_->GetStreamAttributes(vdiAttributes);
86     std::vector<StreamAttribute>().swap(attributes);
87     for (auto attribute : vdiAttributes) {
88         StreamAttribute hdiAttribute;
89         ConvertStreamAttributeVdiToHdi(attribute, hdiAttribute);
90         attributes.push_back(hdiAttribute);
91     }
92     return ret;
93 }
94 
AttachBufferQueue(int32_t streamId,const sptr<BufferProducerSequenceable> & bufferProducer)95 int32_t StreamOperatorService::AttachBufferQueue(int32_t streamId,
96     const sptr<BufferProducerSequenceable> &bufferProducer)
97 {
98     CHECK_IF_PTR_NULL_RETURN_VALUE(streamOperatorVdi_, OHOS::HDI::Camera::V1_0::INVALID_ARGUMENT);
99     return streamOperatorVdi_->AttachBufferQueue(streamId, bufferProducer);
100 }
101 
DetachBufferQueue(int32_t streamId)102 int32_t StreamOperatorService::DetachBufferQueue(int32_t streamId)
103 {
104     CHECK_IF_PTR_NULL_RETURN_VALUE(streamOperatorVdi_, OHOS::HDI::Camera::V1_0::INVALID_ARGUMENT);
105     return streamOperatorVdi_->DetachBufferQueue(streamId);
106 }
107 
Capture(int32_t captureId,const CaptureInfo & info,bool isStreaming)108 int32_t StreamOperatorService::Capture(int32_t captureId, const CaptureInfo &info, bool isStreaming)
109 {
110     CHECK_IF_PTR_NULL_RETURN_VALUE(streamOperatorVdi_, OHOS::HDI::Camera::V1_0::INVALID_ARGUMENT);
111     VdiCaptureInfo vdiInfo;
112     ConvertCaptureInfoHdiToVdi(info, vdiInfo);
113     return streamOperatorVdi_->Capture(captureId, vdiInfo, isStreaming);
114 }
115 
CancelCapture(int32_t captureId)116 int32_t StreamOperatorService::CancelCapture(int32_t captureId)
117 {
118     CHECK_IF_PTR_NULL_RETURN_VALUE(streamOperatorVdi_, OHOS::HDI::Camera::V1_0::INVALID_ARGUMENT);
119     return streamOperatorVdi_->CancelCapture(captureId);
120 }
121 
ChangeToOfflineStream(const std::vector<int32_t> & streamIds,const sptr<IStreamOperatorCallback> & callbackObj,sptr<IOfflineStreamOperator> & offlineOperator)122 int32_t StreamOperatorService::ChangeToOfflineStream(const std::vector<int32_t> &streamIds,
123     const sptr<IStreamOperatorCallback> &callbackObj, sptr<IOfflineStreamOperator> &offlineOperator)
124 {
125     OHOS::sptr<IOfflineStreamOperatorVdi> offlineOperatorVdi = nullptr;
126     CHECK_IF_PTR_NULL_RETURN_VALUE(streamOperatorVdi_, OHOS::HDI::Camera::V1_0::INVALID_ARGUMENT);
127     OHOS::sptr<IStreamOperatorVdiCallback> vdiCallbackObj = new StreamOperatorServiceCallback(callbackObj);
128     if (vdiCallbackObj == nullptr) {
129         CAMERA_LOGE("Change to offline stream error, vdiCallbackObj is nullptr");
130         return OHOS::HDI::Camera::V1_0::INSUFFICIENT_RESOURCES;
131     }
132     int32_t ret = streamOperatorVdi_->ChangeToOfflineStream(streamIds, vdiCallbackObj, offlineOperatorVdi);
133     if (ret != OHOS::HDI::Camera::V1_0::NO_ERROR) {
134         CAMERA_LOGE("Change to offline stream error, ret=%{public}d", ret);
135         return ret;
136     }
137     if (offlineOperatorVdi == nullptr) {
138         CAMERA_LOGE("Change to offline stream error, offlineOperatorVdi is nullptr");
139         return OHOS::HDI::Camera::V1_0::INSUFFICIENT_RESOURCES;
140     }
141     offlineOperator = new OfflineStreamOperatorService(offlineOperatorVdi);
142     if (offlineOperator == nullptr) {
143         CAMERA_LOGE("Change to offline stream error, offlineOperator is nullptr");
144         return OHOS::HDI::Camera::V1_0::INSUFFICIENT_RESOURCES;
145     }
146 
147     return OHOS::HDI::Camera::V1_0::NO_ERROR;
148 }
149 } // end namespace OHOS::Camera
150