/*
* Copyright (c) 2025 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { camera } from '@kit.CameraKit';
import Logger from './Logger';
import { CameraDataModel } from '../../model/CameraDateModel';
import { CommonConstants as Const } from '../CommonConstants';
const TAG = 'CAMERA_CHECK';
function getPreviewProfile(previewProfiles: Array<camera.Profile>,
size: camera.Size, isHDRVivid: number): undefined | camera.Profile {
let previewProfile: undefined | camera.Profile = previewProfiles.find((profile: camera.Profile) => {
if (isHDRVivid) {
return profile.format === camera.CameraFormat.CAMERA_FORMAT_YCRCB_P010 &&
profile.size.width === size.width && profile.size.height == size.height
} else {
return profile.format === camera.CameraFormat.CAMERA_FORMAT_YUV_420_SP &&
profile.size.width === size.width && profile.size.height == size.height
}
});
Logger.info(TAG, `profile.format: ${previewProfile!.size.width}.`);
return previewProfile;
}
export function previewProfileCameraCheck(cameraManager: camera.CameraManager,
cameraData: CameraDataModel): undefined | camera.Profile {
let cameraDevices = cameraManager.getSupportedCameras();
if (cameraDevices !== undefined && cameraDevices.length <= 0) {
Logger.error(TAG, `cameraManager.getSupportedCameras error!`);
return;
}
let profiles: camera.CameraOutputCapability =
cameraManager.getSupportedOutputCapability(cameraDevices[0], camera.SceneMode.NORMAL_VIDEO);
if (!profiles) {
Logger.error(TAG, `cameraManager.getSupportedOutputCapability error!`);
return;
}
let previewProfilesArray: Array<camera.Profile> = profiles.previewProfiles;
if (!previewProfilesArray) {
Logger.error(TAG, `createOutput previewProfilesArray == null || undefined`);
return;
}
let videoSize: camera.Size = {
width: 1920,
height: 1080
}
let previewProfile: undefined | camera.Profile = getPreviewProfile(previewProfilesArray, videoSize,
cameraData.isHDRVivid);
if (!previewProfile) {
Logger.error(TAG, `previewProfile is not found.`);
return;
}
return previewProfile;
}
// [Start create_video_output2]
export function videoProfileCheck(cameraManager: camera.CameraManager,
cameraData: CameraDataModel): undefined | camera.VideoProfile {
let cameraDevices = cameraManager.getSupportedCameras();
// [StartExclude create_video_output2]
if (cameraDevices !== undefined && cameraDevices.length <= 0) {
Logger.error(TAG, `cameraManager.getSupportedCameras error!`);
return;
}
// [EndExclude create_video_output2]
let profiles: camera.CameraOutputCapability =
cameraManager.getSupportedOutputCapability(cameraDevices[0], camera.SceneMode.NORMAL_VIDEO);
// [StartExclude create_video_output2]
if (!profiles) {
Logger.error(TAG, `cameraManager.getSupportedOutputCapability error!`);
return;
}
// [EndExclude create_video_output2]
let videoProfiles: Array<camera.VideoProfile> = profiles.videoProfiles;
// [StartExclude create_video_output2]
if (!videoProfiles) {
Logger.error(TAG, `Get videoProfiles error!`);
return;
}
// [EndExclude create_video_output2]
let videoProfile: undefined | camera.VideoProfile = videoProfiles.find((profile: camera.VideoProfile) => {
if (cameraData.isHDRVivid) {
// [StartExclude create_video_output2]
if (cameraData.frameRate === Const.FRAMERATE_VIDEO_30FPS) {
// [EndExclude create_video_output2]
return profile.size.width === cameraData.cameraWidth &&
profile.size.height === cameraData.cameraHeight &&
profile.format === camera.CameraFormat.CAMERA_FORMAT_YCBCR_P010 &&
profile.frameRateRange.min === 1 &&
profile.frameRateRange.max === 30;
// [StartExclude create_video_output2]
} else {
return profile.size.width === cameraData.cameraWidth &&
profile.size.height === cameraData.cameraHeight &&
profile.format === camera.CameraFormat.CAMERA_FORMAT_YCBCR_P010 &&
profile.frameRateRange.min === cameraData.frameRate &&
profile.frameRateRange.max === cameraData.frameRate;
}
// [EndExclude create_video_output2]
} else {
// [StartExclude create_video_output2]
if (cameraData.frameRate === Const.FRAMERATE_VIDEO_30FPS) {
return profile.size.width === cameraData.cameraWidth &&
profile.size.height === cameraData.cameraHeight &&
profile.format === camera.CameraFormat.CAMERA_FORMAT_YUV_420_SP &&
profile.frameRateRange.min === 1 &&
profile.frameRateRange.max === 30;
} else {
return profile.size.width === cameraData.cameraWidth &&
profile.size.height === cameraData.cameraHeight &&
profile.format === camera.CameraFormat.CAMERA_FORMAT_YUV_420_SP &&
profile.frameRateRange.min === cameraData.frameRate &&
profile.frameRateRange.max === cameraData.frameRate;
}
// [EndExclude create_video_output2]
}
});
return videoProfile;
}
// [End create_video_output2]