maa_framework/buffer/
image_buffer.rs

1use std::ffi::c_void;
2
3use crate::{internal, maa_bool, Error, MaaResult};
4
5pub struct MaaImageBuffer {
6    pub(crate) handle: internal::MaaImageBufferHandle,
7    destroy_at_drop: bool,
8}
9
10impl From<internal::MaaImageBufferHandle> for MaaImageBuffer {
11    fn from(handle: internal::MaaImageBufferHandle) -> Self {
12        MaaImageBuffer {
13            handle,
14            destroy_at_drop: false,
15        }
16    }
17}
18
19unsafe impl Send for MaaImageBuffer {}
20unsafe impl Sync for MaaImageBuffer {}
21
22impl MaaImageBuffer {
23    pub fn new() -> Self {
24        let handle = unsafe { internal::MaaCreateImageBuffer() };
25
26        MaaImageBuffer {
27            handle,
28            destroy_at_drop: true,
29        }
30    }
31
32    pub fn empty(&self) -> bool {
33        let empty = unsafe { internal::MaaIsImageEmpty(self.handle) };
34
35        maa_bool!(empty)
36    }
37
38    pub fn clear(&self) -> MaaResult<()> {
39        let ret = unsafe { internal::MaaClearImage(self.handle) };
40        maa_bool!(ret, BufferError)
41    }
42
43    pub fn get_raw(&self) -> *mut c_void {
44        unsafe { internal::MaaGetImageRawData(self.handle) }
45    }
46
47    pub fn width(&self) -> i32 {
48        unsafe { internal::MaaGetImageWidth(self.handle) }
49    }
50
51    pub fn height(&self) -> i32 {
52        unsafe { internal::MaaGetImageHeight(self.handle) }
53    }
54
55    pub fn typ(&self) -> i32 {
56        unsafe { internal::MaaGetImageType(self.handle) }
57    }
58
59    pub fn encoded(&self) -> *mut u8 {
60        unsafe { internal::MaaGetImageEncoded(self.handle) }
61    }
62
63    pub fn encoded_size(&self) -> u64 {
64        unsafe { internal::MaaGetImageEncodedSize(self.handle) }
65    }
66
67    /// # Safety
68    ///
69    /// data must be a valid pointer to a valid encoded image
70    pub unsafe fn set_raw(&self, data: *mut c_void, width: i32, height: i32, typ: i32) {
71        unsafe {
72            internal::MaaSetImageRawData(self.handle, data, width, height, typ);
73        }
74    }
75
76    /// # Safety
77    ///
78    /// data must be a valid pointer to a valid encoded image
79    pub unsafe fn set_encoded(&self, data: *mut u8, size: u64) {
80        unsafe {
81            internal::MaaSetImageEncoded(self.handle, data, size);
82        }
83    }
84}
85
86impl Default for MaaImageBuffer {
87    fn default() -> Self {
88        MaaImageBuffer::new()
89    }
90}
91
92impl Drop for MaaImageBuffer {
93    fn drop(&mut self) {
94        if self.destroy_at_drop {
95            unsafe {
96                internal::MaaDestroyImageBuffer(self.handle);
97            }
98        }
99    }
100}