/* * Copyright (c) 2025 LG Electronics Inc. * SPDX-License-Identifier: LicenseRef-LGE-Proprietary */ using Aurora.Api; using Aurora.Api.DataType; using System; using System.Collections.Generic; using System.Linq; using System.Reactive.Linq; using System.Text; using System.Threading.Tasks; namespace VisionCommon { public abstract class CameraAgentBase { protected FovInfo _FovInfo; protected CameraBase _CamDev; protected CamConfig _CamConfig; public CameraAgentBase(FovInfo fovInfo) { _FovInfo = fovInfo; UpdateRecipe(); SetObservable(); } protected void SetObservable() { var observable = VisionEventId.GetRecipeUpdateObservable(); observable.Subscribe(_ => UpdateRecipe()); ; } protected void UpdateRecipe() { _FovInfo = VisionRecipeManager.GetFovInfo(_FovInfo); if (_FovInfo == null) { return; } var camRecipe = VisionRecipeManager.GetCamRecipe(_FovInfo); _CamDev = VisionEnv.AuroraEnv.DeviceManager[camRecipe.CamId.ToString()] as CameraBase; _CamConfig = VisionEnv.AuroraEnv.DeviceManager.GetDeviceConfig(camRecipe.CamId.ToString()) as CamConfig; } public CameraBase GetDevice() => _CamDev; public abstract int GetGrabImageFromBuffer(ICameraDisplay cameraDisplay, ref object image); public abstract int GrabSync(ICameraDisplay cameraDisplay, ref object image); public abstract void StartLive(ICameraDisplay cameraDisplay); public abstract void StopLive(); public abstract bool IsLiveRunning(); public abstract ImageSize GetImageSize(); public abstract object CloneImageBuffer(); public abstract double GetExposure(); public abstract int SetExposure(double exposureTime_ms); public abstract int ResetFlipAndRotation(FlipAndRotation flipAndRotation); #region Activate & Deactivate public abstract int Activate(); public abstract int Deactivate(); #endregion #region For Flying /// /// 플라잉 시작 /// /// FOV 정보 /// 추가 파라미터 /// 성공 유무 public abstract int StartFlying(FovInfo fovInfo, object param = null); /// /// 플라잉 종료 /// /// 추가 파라미터 /// 성공 유무 public abstract int StopFlying(object param = null); /// /// 플라잉 상태 체크 /// /// 성공 유무 public abstract bool IsFlyingRunning(); /// /// 현재 플라잉 인덱스 가져오기 /// /// 현재 플라잉 인덱스 public abstract int GetCurrentFlyingIdx(); /// /// 플라잉 이미지 가져오기 /// /// 플라잉 인덱스 /// 플라잉 이미지 public abstract object GetFlyingImage(int flyingIdx); /// /// 플라잉 이미지 전체 가져오기 /// /// 플라잉 이미지 전체 public abstract object[] GetFlyingImages(); /// /// 플라잉 합성(원장) 이미지 가져오기. *원장 : Child 이미지를 조합하여 한 장으로 만듬 /// /// 플아잉 합성(원장) 이미지 public abstract object GetParentImage(); #endregion #region For Child Image public abstract int VerifyChildImage(ICameraDisplay cameraDisplay, ref object image); #endregion } }