1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#include "camera_device.h" 17094332d3Sopenharmony_ci#include "stream_operator.h" 18094332d3Sopenharmony_ci#include "stream_operator_callback_wrapper.h" 19094332d3Sopenharmony_ci#include <memory> 20094332d3Sopenharmony_ci 21094332d3Sopenharmony_cinamespace OHOS::Camera { 22094332d3Sopenharmony_ciCameraDevice::CameraDevice() {} 23094332d3Sopenharmony_ci 24094332d3Sopenharmony_ciCameraDevice::~CameraDevice() {} 25094332d3Sopenharmony_ci 26094332d3Sopenharmony_civoid CameraDevice::Init(CameraDeviceCIF* device) 27094332d3Sopenharmony_ci{ 28094332d3Sopenharmony_ci device_ = device; 29094332d3Sopenharmony_ci} 30094332d3Sopenharmony_ci 31094332d3Sopenharmony_ciCamRetCode CameraDevice::GetStreamOperator(const OHOS::sptr<IStreamOperatorCallback>& callback, 32094332d3Sopenharmony_ci OHOS::sptr<IStreamOperator>& streamOperator) 33094332d3Sopenharmony_ci{ 34094332d3Sopenharmony_ci if (device_ == nullptr) { 35094332d3Sopenharmony_ci return INSUFFICIENT_RESOURCES; 36094332d3Sopenharmony_ci } 37094332d3Sopenharmony_ci 38094332d3Sopenharmony_ci StreamOperatorCallbackCIF cb; 39094332d3Sopenharmony_ci BindStreamOperatorCallback(callback); 40094332d3Sopenharmony_ci 41094332d3Sopenharmony_ci cb.OnCaptureStarted = StreamCBOnCaptureStarted; 42094332d3Sopenharmony_ci cb.OnCaptureEnded = StreamCBOnCaptureEnded; 43094332d3Sopenharmony_ci cb.OnCaptureError = StreamCBOnCaptureError; 44094332d3Sopenharmony_ci cb.OnFrameShutter = StreamCBOnFrameShutter; 45094332d3Sopenharmony_ci 46094332d3Sopenharmony_ci StreamOperatorCIF* op = nullptr; 47094332d3Sopenharmony_ci int ret = device_->GetStreamOperator(cb, op); 48094332d3Sopenharmony_ci OHOS::sptr<StreamOperator> spSO = new StreamOperator; 49094332d3Sopenharmony_ci spSO->Init(op); 50094332d3Sopenharmony_ci streamOperator = spSO; 51094332d3Sopenharmony_ci 52094332d3Sopenharmony_ci return static_cast<CamRetCode>(ret); 53094332d3Sopenharmony_ci} 54094332d3Sopenharmony_ci 55094332d3Sopenharmony_ciCamRetCode CameraDevice::UpdateSettings(const std::shared_ptr<CameraSetting>& settings) 56094332d3Sopenharmony_ci{ 57094332d3Sopenharmony_ci if (device_ == nullptr) { 58094332d3Sopenharmony_ci return INSUFFICIENT_RESOURCES; 59094332d3Sopenharmony_ci } 60094332d3Sopenharmony_ci CameraSettingCIF* meta = settings->get(); 61094332d3Sopenharmony_ci int ret = device_->UpdateSettings(meta); 62094332d3Sopenharmony_ci return static_cast<CamRetCode>(ret); 63094332d3Sopenharmony_ci} 64094332d3Sopenharmony_ci 65094332d3Sopenharmony_ciCamRetCode CameraDevice::SetResultMode(const ResultCallbackMode& mode) 66094332d3Sopenharmony_ci{ 67094332d3Sopenharmony_ci if (device_ == nullptr) { 68094332d3Sopenharmony_ci return INSUFFICIENT_RESOURCES; 69094332d3Sopenharmony_ci } 70094332d3Sopenharmony_ci 71094332d3Sopenharmony_ci int m = static_cast<int>(mode); 72094332d3Sopenharmony_ci int ret = device_->SetResultMode(m); 73094332d3Sopenharmony_ci return static_cast<CamRetCode>(ret); 74094332d3Sopenharmony_ci} 75094332d3Sopenharmony_ci 76094332d3Sopenharmony_ciCamRetCode CameraDevice::GetEnabledResults(std::vector<MetaType>& results) 77094332d3Sopenharmony_ci{ 78094332d3Sopenharmony_ci if (device_ == nullptr) { 79094332d3Sopenharmony_ci return INSUFFICIENT_RESOURCES; 80094332d3Sopenharmony_ci } 81094332d3Sopenharmony_ci 82094332d3Sopenharmony_ci MetaTypeCIF* meta = nullptr; 83094332d3Sopenharmony_ci int count = 0; 84094332d3Sopenharmony_ci int ret = device_->GetEnabledResults(&meta, &count); 85094332d3Sopenharmony_ci for (int i = 0; i < count; i++) { 86094332d3Sopenharmony_ci results.push_back(meta[i]); 87094332d3Sopenharmony_ci } 88094332d3Sopenharmony_ci 89094332d3Sopenharmony_ci return static_cast<CamRetCode>(ret); 90094332d3Sopenharmony_ci} 91094332d3Sopenharmony_ci 92094332d3Sopenharmony_ciCamRetCode CameraDevice::EnableResult(const std::vector<MetaType>& results) 93094332d3Sopenharmony_ci{ 94094332d3Sopenharmony_ci if (device_ == nullptr) { 95094332d3Sopenharmony_ci return INSUFFICIENT_RESOURCES; 96094332d3Sopenharmony_ci } 97094332d3Sopenharmony_ci 98094332d3Sopenharmony_ci int count = results.size(); 99094332d3Sopenharmony_ci if (count <= 0) { 100094332d3Sopenharmony_ci return DEVICE_ERROR; 101094332d3Sopenharmony_ci } 102094332d3Sopenharmony_ci MetaTypeCIF* meta = new MetaTypeCIF[count]; 103094332d3Sopenharmony_ci if (meta == nullptr) { 104094332d3Sopenharmony_ci return INSUFFICIENT_RESOURCES; 105094332d3Sopenharmony_ci } 106094332d3Sopenharmony_ci for (int i = 0; i < count; i++) { 107094332d3Sopenharmony_ci meta[i] = results[i]; 108094332d3Sopenharmony_ci } 109094332d3Sopenharmony_ci int ret = device_->EnableResult(meta, count); 110094332d3Sopenharmony_ci return static_cast<CamRetCode>(ret); 111094332d3Sopenharmony_ci} 112094332d3Sopenharmony_ci 113094332d3Sopenharmony_ciCamRetCode CameraDevice::DisableResult(const std::vector<MetaType>& results) 114094332d3Sopenharmony_ci{ 115094332d3Sopenharmony_ci if (device_ == nullptr) { 116094332d3Sopenharmony_ci return INSUFFICIENT_RESOURCES; 117094332d3Sopenharmony_ci } 118094332d3Sopenharmony_ci 119094332d3Sopenharmony_ci int count = results.size(); 120094332d3Sopenharmony_ci if (count <= 0) { 121094332d3Sopenharmony_ci return DEVICE_ERROR; 122094332d3Sopenharmony_ci } 123094332d3Sopenharmony_ci MetaTypeCIF* meta = new MetaTypeCIF[count]; 124094332d3Sopenharmony_ci if (meta == nullptr) { 125094332d3Sopenharmony_ci return INSUFFICIENT_RESOURCES; 126094332d3Sopenharmony_ci } 127094332d3Sopenharmony_ci for (int i = 0; i < count; i++) { 128094332d3Sopenharmony_ci meta[i] = results[i]; 129094332d3Sopenharmony_ci } 130094332d3Sopenharmony_ci int ret = device_->DisableResult(meta, count); 131094332d3Sopenharmony_ci return static_cast<CamRetCode>(ret); 132094332d3Sopenharmony_ci} 133094332d3Sopenharmony_ci 134094332d3Sopenharmony_civoid CameraDevice::Close() 135094332d3Sopenharmony_ci{ 136094332d3Sopenharmony_ci if (device_ == nullptr) { 137094332d3Sopenharmony_ci return; 138094332d3Sopenharmony_ci } 139094332d3Sopenharmony_ci device_->Close(); 140094332d3Sopenharmony_ci} 141094332d3Sopenharmony_ci 142094332d3Sopenharmony_ci} // end namespace OHOS::Camera 143094332d3Sopenharmony_ci 144