#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
use crate::raw::{
gx_interface::*,
gx_handle::GX_DEV_HANDLE,
gx_enum::*,
gx_struct::*,
};
use std::ffi::{c_int,c_void};
pub struct GXFrameDataFacade {
pub nStatus: c_int,
pub pImgBuf: *mut c_void, pub nWidth: i32, pub nHeight: i32, pub nPixelFormat: i32, pub nImgSize: i32, pub nFrameID: u64, pub nTimestamp: u64, pub reserved: [i32; 1], }
pub fn convert_to_frame_data(facade: &GXFrameDataFacade) -> GX_FRAME_DATA {
GX_FRAME_DATA {
nStatus: facade.nStatus,
pImgBuf: facade.pImgBuf,
nWidth: facade.nWidth,
nHeight: facade.nHeight,
nPixelFormat: facade.nPixelFormat,
nImgSize: facade.nImgSize,
nFrameID: facade.nFrameID,
nTimestamp: facade.nTimestamp,
reserved: facade.reserved,
}
}
pub fn fetch_frame_data(gx: &GXInstance, device_handle: GX_DEV_HANDLE) ->Result<(GXFrameDataFacade,Vec<u8>)> {
let mut width_value: i64 = 0;
let mut height_value: i64 = 0;
let mut pixel_format: i64 = 1;
let mut payload_size: i64 = 1;
let mut pixel_size: i64 = 1;
gx.gx_get_int(device_handle, GX_FEATURE_ID::GX_INT_WIDTH, &mut width_value)?;
gx.gx_get_int(device_handle, GX_FEATURE_ID::GX_INT_HEIGHT, &mut height_value)?;
gx.gx_get_enum(device_handle, GX_FEATURE_ID::GX_ENUM_PIXEL_SIZE, &mut pixel_size)?;
gx.gx_get_enum(device_handle, GX_FEATURE_ID::GX_ENUM_PIXEL_FORMAT, &mut pixel_format)?;
gx.gx_get_int(device_handle, GX_FEATURE_ID::GX_INT_PAYLOAD_SIZE, &mut payload_size)?;
let image_size = (width_value * height_value * pixel_size) as usize;
let mut image_buffer = vec![1u8; image_size]; let p_img_buf = image_buffer.as_mut_ptr();
Ok((GXFrameDataFacade {
nStatus: 0,
pImgBuf: p_img_buf as *mut c_void,
nWidth: width_value as i32,
nHeight: height_value as i32,
nPixelFormat: pixel_format as i32,
nImgSize: image_size as i32,
nFrameID: 0,
nTimestamp: 0,
reserved: [pixel_format as i32],
},
image_buffer))
}