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