/*
 * 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.
 */

package OHOS.CameraStandard;
import CameraTypes;
import ICameraDeviceService;
import ICameraMuteServiceCallback;
import ICameraSharedServiceCallback;
import IControlCenterStatusCallback;
import ICaptureSession;
import IFoldServiceCallback;
import ITorchServiceCallback;
import ICameraServiceCallback;
import IStreamCapture;
import IStreamRepeat;
import IStreamMetadata;
import IStreamDepthData;
import IMechSession;
import IMovieFileOutput;
import ICameraSwitchSession;
import ICameraSpectrumInfoCallback;

sequenceable OHOS.IRemoteObject;
sequenceable CameraMetadataInfo..OHOS.Camera.CameraMetadata;

interface OHOS.IBufferProducer;
interface ICameraBroker;
interface OHOS.CameraStandard.DeferredProcessing.IDeferredPhotoProcessingSession;
interface OHOS.CameraStandard.DeferredProcessing.IDeferredVideoProcessingSession;
interface OHOS.CameraStandard.DeferredProcessing.IDeferredVideoProcessingSessionCallback;
interface OHOS.CameraStandard.DeferredProcessing.IDeferredPhotoProcessingSessionCallback;
option_stub_hooks on;

interface ICameraService{
  [ipccode 0] void CreateCameraDevice([in] String cameraId, [out] ICameraDeviceService device);
  [ipccode 1] void SetCameraCallback([in] ICameraServiceCallback callbackFunc, [in] boolean executeCallbackNow);
  [ipccode 2] void SetMuteCallback([in] ICameraMuteServiceCallback callbackFunc);
  [ipccode 3] void SetTorchCallback([in] ITorchServiceCallback callbackFunc);
  [ipccode 4] void GetCameras([out] List<String> cameraIds, [out] List<sharedptr<CameraMetadata>> cameraAbilityList);
  [ipccode 5] void CreateCaptureSession([out] ICaptureSession session, [in] int operationMode);
  [ipccode 6] void CreatePhotoOutput([in] IBufferProducer producer, [in] int format, [in] int width, [in] int height, [out] IStreamCapture photoOutput);
  [ipccode 7] void CreatePreviewOutput([in] IBufferProducer producer, [in] int format, [in] int width, [in] int height, [out] IStreamRepeat previewOutput);
  [ipccode 8] void CreateDeferredPreviewOutput([in] int format, [in] int width, [in] int height, [out] IStreamRepeat previewOutput);
  [ipccode 9] void CreateVideoOutput([in] IBufferProducer producer, [in] int format, [in] int width, [in] int height, [out] IStreamRepeat videoOutput);
  [ipccode 10] void SetListenerObject([in] IRemoteObject object);
  [ipccode 11] void CreateMetadataOutput([in] IBufferProducer producer, [in] int format, [in] List<int> metadataTypes, [out] IStreamMetadata metadataOutput);
  [ipccode 12] void MuteCamera([in] boolean muteMode);
  [ipccode 13] void IsCameraMuted([inout] boolean muteMode);
  [ipccode 14] void IsTorchSupported([out] boolean isTorchSupported);
  [ipccode 15] void IsCameraMuteSupported([out] boolean isCameraMuteSupported);
  [ipccode 16] void PrelaunchCamera([in] int flag);
  [ipccode 17] void ResetRssPriority();
  [ipccode 18] void SetPrelaunchConfig([in] String cameraId, [in] RestoreParamTypeOhos restoreParamType, [in] int activeTime, [in] EffectParam effectParam);
  [ipccode 19] void SetTorchLevel([in] float level);
  [ipccode 20] void PreSwitchCamera([in] String cameraId);
  [ipccode 21] void CreateDeferredPhotoProcessingSession([in] int userId, [in] IDeferredPhotoProcessingSessionCallback callbackFunc, [out] IDeferredPhotoProcessingSession session);
  [ipccode 22] void GetCameraIds([out] List<String> cameraIds);
  [ipccode 23] void GetCameraAbility([in] String cameraId, [out] sharedptr<CameraMetadata> cameraAbility);
  [ipccode 24] void DestroyStubObj();
  [ipccode 25] void MuteCameraPersist([in] PolicyType policyType, [in] boolean isMute);
  [ipccode 26] void ProxyForFreeze([in] Set<int> pidList, [in] boolean isProxy);
  [ipccode 27] void ResetAllFreezeStatus();
  [ipccode 28] void GetDmDeviceInfo([out] List<dmDeviceInfo> deviceInfos);
  [ipccode 29] void SetFoldStatusCallback([in] IFoldServiceCallback callbackFunc, [in] boolean isInnerCallback);
  [ipccode 30] void GetCameraOutputStatus([in] int pid, [out] int status);
  [ipccode 31] void CreateDepthDataOutput([in] IBufferProducer producer, [in] int format, [in] int width, [in] int height, [out] IStreamDepthData depthDataOutput);
  [ipccode 32] void CreateDeferredVideoProcessingSession([in] int userId, [in] IDeferredVideoProcessingSessionCallback callbackFunc, [out] IDeferredVideoProcessingSession session);
  [ipccode 33] void RequireMemorySize([in] int memSize);
  [ipccode 34] void GetIdforCameraConcurrentType([in] int cameraPosition, [out] String cameraId);
  [ipccode 35] void GetConcurrentCameraAbility([in] String cameraId, [out] sharedptr<CameraMetadata> cameraAbility);
  [ipccode 36] void GetTorchStatus([out] int status);
  [ipccode 37] void UnSetCameraCallback();
  [ipccode 38] void UnSetMuteCallback();
  [ipccode 39] void UnSetTorchCallback();
  [ipccode 40] void UnSetFoldStatusCallback();
  [ipccode 41] void CheckWhiteList([inout] boolean isInWhiteList);
  [ipccode 42] void CloseDelayed([in] String cameraId);
  [ipccode 43] void CreatePhotoOutput([in] int format, [in] int width, [in] int height, [out] IStreamCapture photoOutput);
  [ipccode 44] void CreateMovieFileOutput([in] int format, [in] int width, [in] int height, [out] IStreamRepeat movieFileOutput);
  [ipccode 45] void GetCameraStorageSize([out] long size);
  [ipccode 46] void CreateMechSession([in] int userId, [out] IMechSession session);
  [ipccode 47] void IsMechSupported([out] boolean isMechSupported);
  [ipccode 48] void CreateMovieFileOutput([in] IpcVideoProfile videoProfile, [out] IMovieFileOutput movieFileOutput);
  [ipccode 49] void GetVideoSessionForControlCenter([out] ICaptureSession session);
  [ipccode 50] void SetControlCenterCallback([in] IControlCenterStatusCallback callbackFunc);
  [ipccode 51] void UnSetControlCenterStatusCallback();
  [ipccode 52] void EnableControlCenter([in] boolean status, [in] boolean needPersistEnable);
  [ipccode 53] void SetControlCenterPrecondition([in] boolean condition);
  [ipccode 54] void SetDeviceControlCenterAbility([in] boolean ability);
  [ipccode 55] void GetControlCenterStatus([out] boolean status);
  [ipccode 56] void CheckControlCenterPermission();
  [ipccode 57] void SetUsePhysicalCameraOrientation([in] boolean isUsed);
  [ipccode 58] void CreateCameraSwitchSession([out] ICameraSwitchSession session);
  [ipccode 60] void GetDeviceControlCenterAbility([out] boolean ability);
  [ipccode 63] void IsTorchLevelControlSupported([out] boolean isTorchLevelControlSupported);
  [ipccode 73] void GetOnBoardDisplayId([out] int displayId);
  [ipccode 74] void GetAppNaturalDirection([out] int naturalDirection);
  [ipccode 75] void GetLogicCameraConfig([in] String clientName, [out] List<int> useLogicCamera, [out] List<int> customLogicDirection);
  [ipccode 76] void SetParameters([in] Map<String, String> kvPairs);
  [ipccode 77] void GetParameters([in] String key, [out] List<String> values);
  [ipccode 78] void GetSupportedKeys([out] List<String> keys);
  [ipccode 79] void GetActiveParameter([in] String key, [out] String value);
  [ipccode 81] void SetCameraSharedStatusCallback([in] ICameraSharedServiceCallback callbackFunc);
  [ipccode 82] void UnSetCameraSharedStatusCallback();
  [ipccode 83] void GetNaturalDirectionCorrect([out] boolean isCorrect);
  [ipccode 101] void AllowOpenByOHSide([in] String cameraId, [in] int state, [inout] boolean canOpenCamera);
  [ipccode 102, oneway] void NotifyCameraState([in] String cameraId, [in] int state);
  [ipccode 104] void SetPeerCallback([in] ICameraBroker callbackFunc);
  [ipccode 105] void UnsetPeerCallback();
  [ipccode 106] void PrelaunchScanCamera([in] String bundleName, [in] String pageName, [in] PrelaunchScanModeOhos prelaunchScanMode);
  [ipccode 107] void RequireMemorySizeWithReason([in] String reason, [in] int requiredMemSizeKB);
  [ipccode 108] void GetPhysicalCameraIds([out] List<String> cameraIds);
  [ipccode 109] void SetSpectrumCallback([in] SpectrumCallerInfo info, [in] ICameraSpectrumInfoCallback callbackFunc);
  [ipccode 110] void UnsetSpectrumCallback([in] SpectrumCallerInfo info);
  [ipccode 111] void GetCameraIdByDisPlugin([in] int cameraPosition, [in] int cameraType, [out] String cameraId);
}