1 /*
2 * Copyright (c) 2021-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 #include <mutex>
17 #include <malloc.h>
18 #include <securec.h>
19 #include "camera_metadata_info.h"
20 #include "camera_log.h"
21 #include "camera_util.h"
22 #include "camera_manager.h"
23 #include "camera_rotation_api_utils.h"
24 #include "input/camera_device.h"
25 #include "input/camera_manager.h"
26 #include "metadata_common_utils.h"
27 #include "capture_scene_const.h"
28 #include "anonymization.h"
29
30 using namespace std;
31
32 namespace OHOS {
33 namespace CameraStandard {
34 const std::unordered_map<camera_type_enum_t, CameraType> CameraDevice::metaToFwCameraType_ = {
35 {OHOS_CAMERA_TYPE_WIDE_ANGLE, CAMERA_TYPE_WIDE_ANGLE},
36 {OHOS_CAMERA_TYPE_ULTRA_WIDE, CAMERA_TYPE_ULTRA_WIDE},
37 {OHOS_CAMERA_TYPE_TELTPHOTO, CAMERA_TYPE_TELEPHOTO},
38 {OHOS_CAMERA_TYPE_TRUE_DEAPTH, CAMERA_TYPE_TRUE_DEPTH},
39 {OHOS_CAMERA_TYPE_LOGICAL, CAMERA_TYPE_UNSUPPORTED},
40 {OHOS_CAMERA_TYPE_UNSPECIFIED, CAMERA_TYPE_DEFAULT}
41 };
42
43 const std::unordered_map<camera_position_enum_t, CameraPosition> CameraDevice::metaToFwCameraPosition_ = {
44 {OHOS_CAMERA_POSITION_FRONT, CAMERA_POSITION_FRONT},
45 {OHOS_CAMERA_POSITION_BACK, CAMERA_POSITION_BACK},
46 {OHOS_CAMERA_POSITION_OTHER, CAMERA_POSITION_UNSPECIFIED}
47 };
48
49 const std::unordered_map<camera_connection_type_t, ConnectionType> CameraDevice::metaToFwConnectionType_ = {
50 {OHOS_CAMERA_CONNECTION_TYPE_REMOTE, CAMERA_CONNECTION_REMOTE},
51 {OHOS_CAMERA_CONNECTION_TYPE_USB_PLUGIN, CAMERA_CONNECTION_USB_PLUGIN},
52 {OHOS_CAMERA_CONNECTION_TYPE_BUILTIN, CAMERA_CONNECTION_BUILT_IN}
53 };
54
55 const std::unordered_map<camera_foldscreen_enum_t, CameraFoldScreenType> CameraDevice::metaToFwCameraFoldScreenType_ = {
56 {OHOS_CAMERA_FOLDSCREEN_INNER, CAMERA_FOLDSCREEN_INNER},
57 {OHOS_CAMERA_FOLDSCREEN_OUTER, CAMERA_FOLDSCREEN_OUTER},
58 {OHOS_CAMERA_FOLDSCREEN_OTHER, CAMERA_FOLDSCREEN_UNSPECIFIED}
59 };
60
CameraDevice(std::string cameraID,std::shared_ptr<Camera::CameraMetadata> metadata)61 CameraDevice::CameraDevice(std::string cameraID, std::shared_ptr<Camera::CameraMetadata> metadata)
62 : cameraID_(cameraID), baseAbility_(MetadataCommonUtils::CopyMetadata(metadata)),
63 cachedMetadata_(MetadataCommonUtils::CopyMetadata(metadata))
64 {
65 CHECK_EXECUTE(metadata != nullptr, init(metadata->get()));
66 }
67
CameraDevice(std::string cameraID,std::shared_ptr<OHOS::Camera::CameraMetadata> metadata,dmDeviceInfo deviceInfo)68 CameraDevice::CameraDevice(
69 std::string cameraID, std::shared_ptr<OHOS::Camera::CameraMetadata> metadata, dmDeviceInfo deviceInfo)
70 : cameraID_(cameraID), baseAbility_(MetadataCommonUtils::CopyMetadata(metadata)),
71 cachedMetadata_(MetadataCommonUtils::CopyMetadata(metadata))
72 {
73 dmDeviceInfo_.deviceName = deviceInfo.deviceName;
74 dmDeviceInfo_.deviceTypeId = deviceInfo.deviceTypeId;
75 dmDeviceInfo_.networkId = deviceInfo.networkId;
76 MEDIA_INFO_LOG("camera cameraid = %{public}s, devicename: = %{public}s", cameraID_.c_str(),
77 OHOS::CameraStandard::Anonymization::AnonymizeString(dmDeviceInfo_.deviceName).c_str());
78 CHECK_RETURN(metadata == nullptr);
79 init(metadata->get());
80 }
81
CameraDevice(std::string cameraID,dmDeviceInfo deviceInfo,std::shared_ptr<OHOS::Camera::CameraMetadata> metadata)82 CameraDevice::CameraDevice(
83 std::string cameraID, dmDeviceInfo deviceInfo, std::shared_ptr<OHOS::Camera::CameraMetadata> metadata)
84 : cameraID_(cameraID)
85 {
86 dmDeviceInfo_.deviceName = deviceInfo.deviceName;
87 dmDeviceInfo_.deviceTypeId = deviceInfo.deviceTypeId;
88 dmDeviceInfo_.networkId = deviceInfo.networkId;
89 MEDIA_INFO_LOG("cameraDevice cameraid = %{public}s, devicename: = %{public}s", cameraID_.c_str(),
90 OHOS::CameraStandard::Anonymization::AnonymizeString(dmDeviceInfo_.deviceName).c_str());
91 CHECK_EXECUTE(metadata != nullptr, init(metadata->get()));
92 }
93
isFindModuleTypeTag(uint32_t & tagId)94 bool CameraDevice::isFindModuleTypeTag(uint32_t &tagId)
95 {
96 std::vector<vendorTag_t> infos;
97 int32_t ret = OHOS::Camera::GetAllVendorTags(infos);
98 if (ret == CAM_META_SUCCESS) {
99 for (auto info : infos) {
100 if (info.tagName != nullptr && strcmp(info.tagName, "hwSensorName") == 0) {
101 tagId = info.tagId;
102 return true;
103 }
104 }
105 }
106 return false;
107 }
108
init(common_metadata_header_t * metadata)109 void CameraDevice::init(common_metadata_header_t* metadata)
110 {
111 camera_metadata_item_t item;
112
113 int cameraDeviceRet = Camera::FindCameraMetadataItem(metadata, OHOS_ABILITY_CAMERA_POSITION, &item);
114 if (cameraDeviceRet == CAM_META_SUCCESS) {
115 auto itr = metaToFwCameraPosition_.find(static_cast<camera_position_enum_t>(item.data.u8[0]));
116 if (itr != metaToFwCameraPosition_.end()) {
117 cameraPosition_ = itr->second;
118 }
119 }
120
121 cameraDeviceRet = Camera::FindCameraMetadataItem(metadata, OHOS_ABILITY_CAMERA_TYPE, &item);
122 if (cameraDeviceRet == CAM_META_SUCCESS) {
123 auto itr = metaToFwCameraType_.find(static_cast<camera_type_enum_t>(item.data.u8[0]));
124 if (itr != metaToFwCameraType_.end()) {
125 cameraType_ = itr->second;
126 }
127 }
128
129 cameraDeviceRet = Camera::FindCameraMetadataItem(metadata, OHOS_ABILITY_CAMERA_CONNECTION_TYPE, &item);
130 if (cameraDeviceRet == CAM_META_SUCCESS) {
131 auto itr = metaToFwConnectionType_.find(static_cast<camera_connection_type_t>(item.data.u8[0]));
132 if (itr != metaToFwConnectionType_.end()) {
133 connectionType_ = itr->second;
134 }
135 }
136
137 cameraDeviceRet = Camera::FindCameraMetadataItem(metadata, OHOS_ABILITY_CAMERA_FOLDSCREEN_TYPE, &item);
138 if (cameraDeviceRet == CAM_META_SUCCESS) {
139 auto itr = metaToFwCameraFoldScreenType_.find(static_cast<camera_foldscreen_enum_t>(item.data.u8[0]));
140 if (itr != metaToFwCameraFoldScreenType_.end()) {
141 foldScreenType_ = itr->second;
142 }
143 }
144
145 cameraDeviceRet = OHOS::Camera::FindCameraMetadataItem(metadata, OHOS_SENSOR_ORIENTATION, &item);
146 if (cameraDeviceRet == CAM_META_SUCCESS) {
147 cameraOrientation_ = static_cast<uint32_t>(item.data.i32[0]);
148 }
149
150 cameraDeviceRet = OHOS::Camera::FindCameraMetadataItem(metadata, OHOS_ABILITY_CAMERA_IS_RETRACTABLE, &item);
151 if (cameraDeviceRet == CAM_META_SUCCESS) {
152 isRetractable_ = static_cast<bool>(item.data.u8[0]);
153 MEDIA_INFO_LOG("Get isRetractable_ = %{public}d", isRetractable_);
154 }
155
156 uint32_t moduleTypeTagId;
157 if (isFindModuleTypeTag(moduleTypeTagId)) {
158 cameraDeviceRet = Camera::FindCameraMetadataItem(metadata, moduleTypeTagId, &item);
159 if (cameraDeviceRet == CAM_META_SUCCESS) {
160 moduleType_ = item.data.ui32[0];
161 }
162 }
163
164 cameraDeviceRet = OHOS::Camera::FindCameraMetadataItem(metadata, OHOS_ABILITY_CAMERA_FOLD_STATUS, &item);
165
166 foldStatus_ = (cameraDeviceRet == CAM_META_SUCCESS) ? item.data.u8[0] : OHOS_CAMERA_FOLD_STATUS_NONFOLDABLE;
167
168 cameraDeviceRet = Camera::FindCameraMetadataItem(metadata, OHOS_ABILITY_CAMERA_MODES, &item);
169 if (cameraDeviceRet == CAM_META_SUCCESS) {
170 for (uint32_t i = 0; i < item.count; i++) {
171 auto it = g_metaToFwSupportedMode_.find(static_cast<HDI::Camera::V1_3::OperationMode>(item.data.u8[i]));
172 if (it != g_metaToFwSupportedMode_.end()) {
173 supportedModes_.emplace_back(it->second);
174 }
175 }
176 }
177
178 cameraDeviceRet = Camera::FindCameraMetadataItem(metadata, OHOS_ABILITY_STATISTICS_DETECT_TYPE, &item);
179 if (cameraDeviceRet == CAM_META_SUCCESS) {
180 for (uint32_t i = 0; i < item.count; i++) {
181 auto iterator = g_metaToFwCameraMetaDetect_.find(static_cast<StatisticsDetectType>(item.data.u8[i]));
182 if (iterator != g_metaToFwCameraMetaDetect_.end()) {
183 objectTypes_.push_back(iterator->second);
184 }
185 }
186 }
187
188 cameraDeviceRet = Camera::FindCameraMetadataItem(metadata, OHOS_ABILITY_PRELAUNCH_AVAILABLE, &item);
189
190 isPrelaunch_ = (cameraDeviceRet == CAM_META_SUCCESS && item.data.u8[0] == 1);
191
192 InitLensEquivalentFocalLength(metadata);
193
194 MEDIA_INFO_LOG("camera position: %{public}d, camera type: %{public}d, camera connection type: %{public}d, "
195 "camera foldScreen type: %{public}d, camera orientation: %{public}d, isretractable: %{public}d, "
196 "moduleType: %{public}u, foldStatus: %{public}d", cameraPosition_, cameraType_, connectionType_,
197 foldScreenType_, cameraOrientation_, isRetractable_, moduleType_, foldStatus_);
198 }
199
InitLensEquivalentFocalLength(common_metadata_header_t * metadata)200 void CameraDevice::InitLensEquivalentFocalLength(common_metadata_header_t* metadata)
201 {
202 std::vector<int32_t> lensEquivalentFocalLength = {};
203 camera_metadata_item_t item;
204 int ret = Camera::FindCameraMetadataItem(metadata, OHOS_ABILITY_LENS_EQUIVALENT_FOCUS, &item);
205 if (ret == CAM_META_SUCCESS) {
206 for (uint32_t i = 0; i < item.count; i++) {
207 lensEquivalentFocalLength.emplace_back(item.data.i32[i]);
208 }
209 }
210 lensEquivalentFocalLength_ = lensEquivalentFocalLength;
211 MEDIA_INFO_LOG("CameraDevice::InitLensEquivalentFocalLength, lensEquivalentFocalLength size: %{public}zu, "
212 "lensEquivalentFocalLength: %{public}s", lensEquivalentFocalLength_.size(),
213 Container2String(lensEquivalentFocalLength_.begin(), lensEquivalentFocalLength_.end()).c_str());
214 }
215
GetID()216 std::string CameraDevice::GetID()
217 {
218 return cameraID_;
219 }
220
GetMetadata()221 std::shared_ptr<Camera::CameraMetadata> CameraDevice::GetMetadata()
222 {
223 std::lock_guard<std::mutex> lock(cachedMetadataMutex_);
224 CHECK_RETURN_RET(cachedMetadata_ != nullptr, cachedMetadata_);
225 auto cameraProxy = CameraManager::GetInstance()->GetServiceProxy();
226 CHECK_RETURN_RET_ELOG(cameraProxy == nullptr, nullptr, "GetMetadata Failed to get cameraProxy");
227 std::shared_ptr<OHOS::Camera::CameraMetadata> metadata;
228 cameraProxy->GetCameraAbility(cameraID_, metadata);
229 return metadata;
230 }
231
GetCachedMetadata()232 std::shared_ptr<Camera::CameraMetadata> CameraDevice::GetCachedMetadata()
233 {
234 std::lock_guard<std::mutex> lock(cachedMetadataMutex_);
235 return cachedMetadata_;
236 }
237
AddMetadata(std::shared_ptr<OHOS::Camera::CameraMetadata> srcMetadata)238 void CameraDevice::AddMetadata(std::shared_ptr<OHOS::Camera::CameraMetadata> srcMetadata)
239 {
240 std::lock_guard<std::mutex> lock(cachedMetadataMutex_);
241 cachedMetadata_ = MetadataCommonUtils::CopyMetadata(srcMetadata);
242 }
243
ResetMetadata()244 void CameraDevice::ResetMetadata()
245 {
246 std::lock_guard<std::mutex> lock(cachedMetadataMutex_);
247 CHECK_RETURN(cachedMetadata_ == nullptr);
248 std::shared_ptr<OHOS::Camera::CameraMetadata> metadata = GetCameraAbility();
249 cachedMetadata_ = MetadataCommonUtils::CopyMetadata(metadata);
250 }
251
GetCameraAbility()252 const std::shared_ptr<OHOS::Camera::CameraMetadata> CameraDevice::GetCameraAbility()
253 {
254 auto cameraProxy = CameraManager::GetInstance()->GetServiceProxy();
255 CHECK_RETURN_RET_ELOG(cameraProxy == nullptr, nullptr, "GetCameraAbility Failed to get cameraProxy");
256 std::shared_ptr<OHOS::Camera::CameraMetadata> metadata;
257 cameraProxy->GetCameraAbility(cameraID_, metadata);
258 return metadata;
259 }
260
GetPosition()261 CameraPosition CameraDevice::GetPosition()
262 {
263 uint32_t apiCompatibleVersion = CameraApiVersion::GetApiVersion();
264 auto foldType = CameraManager::GetInstance()->GetFoldScreenType();
265 if (!foldType.empty() && foldType[0] == '4' && cameraPosition_ == CAMERA_POSITION_FRONT &&
266 foldStatus_ == OHOS_CAMERA_FOLD_STATUS_EXPANDED && !(CameraManager::GetInstance()->GetIsInWhiteList())) {
267 cameraPosition_ = CAMERA_POSITION_FOLD_INNER;
268 return cameraPosition_;
269 }
270 if (apiCompatibleVersion < CameraApiVersion::APIVersion::API_FOURTEEN && cameraPosition_ == CAMERA_POSITION_FRONT &&
271 foldScreenType_ == CAMERA_FOLDSCREEN_INNER) {
272 cameraPosition_ = CAMERA_POSITION_FOLD_INNER;
273 }
274 return cameraPosition_;
275 }
276
GetUsedAsPosition()277 CameraPosition CameraDevice::GetUsedAsPosition()
278 {
279 return usedAsCameraPosition_;
280 }
281
GetCameraType()282 CameraType CameraDevice::GetCameraType()
283 {
284 return cameraType_;
285 }
286
GetConnectionType()287 ConnectionType CameraDevice::GetConnectionType()
288 {
289 return connectionType_;
290 }
291
GetCameraFoldScreenType()292 CameraFoldScreenType CameraDevice::GetCameraFoldScreenType()
293 {
294 return foldScreenType_;
295 }
296
GetSupportedModes() const297 std::vector<SceneMode> CameraDevice::GetSupportedModes() const
298 {
299 return supportedModes_;
300 }
301
GetObjectTypes() const302 std::vector<MetadataObjectType> CameraDevice::GetObjectTypes() const
303 {
304 return objectTypes_;
305 }
306
IsPrelaunch() const307 bool CameraDevice::IsPrelaunch() const
308 {
309 return isPrelaunch_;
310 }
311
GetHostName()312 std::string CameraDevice::GetHostName()
313 {
314 return dmDeviceInfo_.deviceName;
315 }
316
GetDeviceType()317 uint16_t CameraDevice::GetDeviceType()
318 {
319 return dmDeviceInfo_.deviceTypeId;
320 }
321
GetNetWorkId()322 std::string CameraDevice::GetNetWorkId()
323 {
324 return dmDeviceInfo_.networkId;
325 }
326
GetCameraOrientation()327 uint32_t CameraDevice::GetCameraOrientation()
328 {
329 return cameraOrientation_;
330 }
331
GetisRetractable()332 bool CameraDevice::GetisRetractable()
333 {
334 return isRetractable_;
335 }
336
GetLensEquivalentFocalLength()337 std::vector<int32_t> CameraDevice::GetLensEquivalentFocalLength()
338 {
339 MEDIA_INFO_LOG("CameraDevice::GetLensEquivalentFocalLength, lensEquivalentFocalLength size: %{public}zu, "
340 "lensEquivalentFocalLength: %{public}s", lensEquivalentFocalLength_.size(),
341 Container2String(lensEquivalentFocalLength_.begin(), lensEquivalentFocalLength_.end()).c_str());
342 return lensEquivalentFocalLength_;
343 }
344
GetModuleType()345 uint32_t CameraDevice::GetModuleType()
346 {
347 return moduleType_;
348 }
349
GetZoomRatioRange()350 std::vector<float> CameraDevice::GetZoomRatioRange()
351 {
352 int32_t minIndex = 0;
353 int32_t maxIndex = 1;
354 std::vector<float> range;
355
356 CHECK_RETURN_RET(!zoomRatioRange_.empty(), zoomRatioRange_);
357
358 int ret;
359 uint32_t zoomRangeCount = 2;
360 camera_metadata_item_t item;
361
362 CHECK_RETURN_RET_ELOG(cachedMetadata_ == nullptr, {},
363 "Failed to get zoom ratio range with cachedMetadata_ is nullptr");
364 ret = Camera::FindCameraMetadataItem(cachedMetadata_->get(), OHOS_ABILITY_ZOOM_RATIO_RANGE, &item);
365 CHECK_RETURN_RET_ELOG(ret != CAM_META_SUCCESS, {},
366 "Failed to get zoom ratio range with return code %{public}d", ret);
367 CHECK_RETURN_RET_ELOG(item.count != zoomRangeCount, {},
368 "Failed to get zoom ratio range with return code %{public}d", ret);
369 range = {item.data.f[minIndex], item.data.f[maxIndex]};
370
371 CHECK_RETURN_RET_ELOG(range[minIndex] > range[maxIndex], {},
372 "Invalid zoom range. min: %{public}f, max: %{public}f", range[minIndex], range[maxIndex]);
373 MEDIA_DEBUG_LOG("Zoom range min: %{public}f, max: %{public}f", range[minIndex], range[maxIndex]);
374
375 zoomRatioRange_ = range;
376 return zoomRatioRange_;
377 }
378
SetProfile(sptr<CameraOutputCapability> capability)379 void CameraDevice::SetProfile(sptr<CameraOutputCapability> capability)
380 {
381 CHECK_RETURN(capability == nullptr);
382 modePreviewProfiles_[NORMAL] = capability->GetPreviewProfiles();
383 modePhotoProfiles_[NORMAL] = capability->GetPhotoProfiles();
384 modeVideoProfiles_[NORMAL] = capability->GetVideoProfiles();
385 modeDepthProfiles_[NORMAL] = capability->GetDepthProfiles();
386 modePreviewProfiles_[CAPTURE] = capability->GetPreviewProfiles();
387 modePhotoProfiles_[CAPTURE] = capability->GetPhotoProfiles();
388 modeDepthProfiles_[CAPTURE] = capability->GetDepthProfiles();
389 modePreviewProfiles_[VIDEO] = capability->GetPreviewProfiles();
390 modePhotoProfiles_[VIDEO] = capability->GetPhotoProfiles();
391 modeVideoProfiles_[VIDEO] = capability->GetVideoProfiles();
392 modeDepthProfiles_[VIDEO] = capability->GetDepthProfiles();
393 }
394
SetProfile(sptr<CameraOutputCapability> capability,int32_t modeName)395 void CameraDevice::SetProfile(sptr<CameraOutputCapability> capability, int32_t modeName)
396 {
397 CHECK_RETURN(capability == nullptr);
398 modePreviewProfiles_[modeName] = capability->GetPreviewProfiles();
399 modePhotoProfiles_[modeName] = capability->GetPhotoProfiles();
400 modeVideoProfiles_[modeName] = capability->GetVideoProfiles();
401 modeDepthProfiles_[modeName] = capability->GetDepthProfiles();
402 }
403
GetExposureBiasRange()404 std::vector<float> CameraDevice::GetExposureBiasRange()
405 {
406 int32_t minIndex = 0;
407 int32_t maxIndex = 1;
408 uint32_t biasRangeCount = 2;
409
410 if (isConcurrentLimted_ == 1) {
411 std::vector<float> compensationRangeLimted = {};
412 for (int i = 0; i < limtedCapabilitySave_.compensation.count; i++) {
413 float num = static_cast<float>(limtedCapabilitySave_.compensation.range[i]);
414 compensationRangeLimted.push_back(num);
415 }
416 exposureBiasRange_ = compensationRangeLimted;
417 return exposureBiasRange_;
418 }
419
420 CHECK_RETURN_RET(!exposureBiasRange_.empty(), exposureBiasRange_);
421
422 camera_metadata_item_t item;
423 int ret = Camera::FindCameraMetadataItem(GetMetadata()->get(), OHOS_ABILITY_AE_COMPENSATION_RANGE, &item);
424 CHECK_RETURN_RET_ELOG(ret != CAM_META_SUCCESS, {},
425 "Failed to get exposure compensation range with return code %{public}d", ret);
426 CHECK_RETURN_RET_ELOG(item.count != biasRangeCount, {},
427 "Invalid exposure compensation range count: %{public}d", item.count);
428 int32_t minRange = item.data.i32[minIndex];
429 int32_t maxRange = item.data.i32[maxIndex];
430
431 CHECK_RETURN_RET_ELOG(minRange > maxRange, {},
432 "Invalid exposure compensation range. min: %{public}d, max: %{public}d", minRange, maxRange);
433
434 MEDIA_DEBUG_LOG("Exposure hdi compensation min: %{public}d, max: %{public}d", minRange, maxRange);
435 exposureBiasRange_ = { static_cast<float>(minRange), static_cast<float>(maxRange) };
436 return exposureBiasRange_;
437 }
438
SetCameraDeviceUsedAsPosition(CameraPosition usedAsPosition)439 void CameraDevice::SetCameraDeviceUsedAsPosition(CameraPosition usedAsPosition)
440 {
441 MEDIA_INFO_LOG("CameraDevice::SetCameraDeviceUsedAsPosition params: %{public}u", usedAsPosition);
442 usedAsCameraPosition_ = usedAsPosition;
443 }
444
GetSupportedFoldStatus()445 uint32_t CameraDevice::GetSupportedFoldStatus()
446 {
447 return foldStatus_;
448 }
449
SetCameraId(std::string devID)450 void CameraDevice::SetCameraId(std::string devID)
451 {
452 cameraID_ = devID;
453 }
454
isConcurrentDeviceType()455 bool CameraDevice::isConcurrentDeviceType()
456 {
457 return isConcurrentDevice_;
458 }
459
SetConcurrentDeviceType(bool changeType)460 void CameraDevice::SetConcurrentDeviceType(bool changeType)
461 {
462 isConcurrentDevice_ = changeType;
463 }
464
465 } // namespace CameraStandard
466 } // namespace OHOS
467