use crate::blob::Blob;
use crate::{cstr, drop_using_function, try_unsafe, util::Result};
use openvino_sys::{
ie_infer_request_free, ie_infer_request_get_blob, ie_infer_request_infer,
ie_infer_request_set_batch, ie_infer_request_set_blob, ie_infer_request_t,
};
pub struct InferRequest {
pub(crate) instance: *mut ie_infer_request_t,
}
drop_using_function!(InferRequest, ie_infer_request_free);
unsafe impl Send for InferRequest {}
unsafe impl Sync for InferRequest {}
impl InferRequest {
pub fn set_batch_size(&mut self, size: usize) -> Result<()> {
try_unsafe!(ie_infer_request_set_batch(self.instance, size))
}
pub fn set_blob(&mut self, name: &str, blob: &Blob) -> Result<()> {
try_unsafe!(ie_infer_request_set_blob(
self.instance,
cstr!(name),
blob.instance
))
}
pub fn get_blob(&mut self, name: &str) -> Result<Blob> {
let mut instance = std::ptr::null_mut();
try_unsafe!(ie_infer_request_get_blob(
self.instance,
cstr!(name),
std::ptr::addr_of_mut!(instance)
))?;
Ok(unsafe { Blob::from_raw_pointer(instance) })
}
pub fn infer(&mut self) -> Result<()> {
try_unsafe!(ie_infer_request_infer(self.instance))
}
}