use super::enums::OBFormat;
use super::{OBError, drop_ob_object, orb};
pub struct OBCameraIntrinsic {
inner: orb::OBCameraIntrinsic,
}
impl OBCameraIntrinsic {
pub fn fx(&self) -> f32 {
self.inner.fx
}
pub fn fy(&self) -> f32 {
self.inner.fy
}
pub fn cx(&self) -> f32 {
self.inner.cx
}
pub fn cy(&self) -> f32 {
self.inner.cy
}
pub fn width(&self) -> i16 {
self.inner.width
}
pub fn height(&self) -> i16 {
self.inner.height
}
}
impl From<orb::OBCameraIntrinsic> for OBCameraIntrinsic {
fn from(intrinsic: orb::OBCameraIntrinsic) -> Self {
OBCameraIntrinsic { inner: intrinsic }
}
}
pub struct OBStreamProfile {
inner: *mut orb::ob_stream_profile,
}
drop_ob_object!(OBStreamProfile, ob_delete_stream_profile);
impl OBStreamProfile {
pub(crate) fn new(inner: *mut orb::ob_stream_profile) -> Self {
OBStreamProfile { inner }
}
pub(crate) fn inner(&self) -> *mut orb::ob_stream_profile {
self.inner
}
pub fn get_video_intrinsic(&self) -> Result<OBCameraIntrinsic, OBError> {
let mut err_ptr = std::ptr::null_mut();
let intrinsics =
unsafe { orb::ob_video_stream_profile_get_intrinsic(self.inner, &mut err_ptr) };
OBError::consume(err_ptr)?;
Ok(OBCameraIntrinsic::from(intrinsics))
}
}
pub struct OBStreamProfileList {
inner: *mut orb::ob_stream_profile_list,
}
drop_ob_object!(OBStreamProfileList, ob_delete_stream_profile_list);
impl OBStreamProfileList {
pub(crate) fn new(inner: *mut orb::ob_stream_profile_list) -> Self {
OBStreamProfileList { inner }
}
pub fn get_video_stream_profile(
&self,
width: i32,
height: i32,
format: OBFormat,
fps: i32,
) -> Result<OBStreamProfile, OBError> {
let mut err_ptr = std::ptr::null_mut();
let profile = unsafe {
orb::ob_stream_profile_list_get_video_stream_profile(
self.inner,
width,
height,
format as i32,
fps,
&mut err_ptr,
)
};
OBError::consume(err_ptr)?;
Ok(OBStreamProfile::new(profile))
}
}