libheif_rs/
security_limits.rs

1use std::ptr::NonNull;
2
3use libheif_sys as lh;
4
5/// Security limits.
6///
7/// If you set a limit to 0, the limit is disabled.
8#[derive(Clone, Copy)]
9pub struct SecurityLimits {
10    inner: lh::heif_security_limits,
11}
12
13impl Default for SecurityLimits {
14    fn default() -> Self {
15        let inner_ptr = unsafe { lh::heif_get_global_security_limits() };
16        if inner_ptr.is_null() {
17            panic!("heif_get_global_security_limits returned the null pointer");
18        }
19        Self {
20            inner: unsafe { *inner_ptr },
21        }
22    }
23}
24
25impl SecurityLimits {
26    /// Returns a new instance with default values of limits.
27    pub fn new() -> Self {
28        Self::default()
29    }
30
31    pub(crate) fn from_inner(inner_ptr: NonNull<lh::heif_security_limits>) -> Self {
32        Self {
33            inner: unsafe { *inner_ptr.as_ref() },
34        }
35    }
36
37    pub(crate) fn as_inner(&self) -> &lh::heif_security_limits {
38        &self.inner
39    }
40
41    /// Limit on the maximum image size to avoid allocating too much memory.
42    /// For example, setting this to 32768^2 pixels = 1 Gigapixels results
43    /// in 1.5 GB memory need for YUV-4:2:0 or 4 GB for RGB32.
44    pub fn max_image_size_pixels(&self) -> u64 {
45        self.inner.max_image_size_pixels
46    }
47
48    pub fn set_max_image_size_pixels(&mut self, v: u64) {
49        self.inner.max_image_size_pixels = v
50    }
51
52    pub fn max_number_of_tiles(&self) -> u64 {
53        self.inner.max_number_of_tiles
54    }
55
56    pub fn set_max_number_of_tiles(&mut self, v: u64) {
57        self.inner.max_number_of_tiles = v
58    }
59
60    pub fn max_bayer_pattern_pixels(&self) -> u32 {
61        self.inner.max_bayer_pattern_pixels
62    }
63
64    pub fn set_max_bayer_pattern_pixels(&mut self, v: u32) {
65        self.inner.max_bayer_pattern_pixels = v
66    }
67
68    pub fn max_items(&self) -> u32 {
69        self.inner.max_items
70    }
71
72    pub fn set_max_items(&mut self, v: u32) {
73        self.inner.max_items = v
74    }
75
76    pub fn max_color_profile_size(&self) -> u32 {
77        self.inner.max_color_profile_size
78    }
79
80    pub fn set_max_color_profile_size(&mut self, v: u32) {
81        self.inner.max_color_profile_size = v
82    }
83
84    pub fn max_memory_block_size(&self) -> u64 {
85        self.inner.max_memory_block_size
86    }
87
88    pub fn set_max_memory_block_size(&mut self, v: u64) {
89        self.inner.max_memory_block_size = v
90    }
91
92    pub fn max_components(&self) -> u32 {
93        self.inner.max_components
94    }
95
96    pub fn set_max_components(&mut self, v: u32) {
97        self.inner.max_components = v
98    }
99
100    pub fn max_iloc_extents_per_item(&self) -> u32 {
101        self.inner.max_iloc_extents_per_item
102    }
103
104    pub fn set_max_iloc_extents_per_item(&mut self, v: u32) {
105        self.inner.max_iloc_extents_per_item = v
106    }
107
108    pub fn max_size_entity_group(&self) -> u32 {
109        self.inner.max_size_entity_group
110    }
111
112    pub fn set_max_size_entity_group(&mut self, v: u32) {
113        self.inner.max_size_entity_group = v
114    }
115
116    /// For all boxes that are not covered by other limits.
117    pub fn max_children_per_box(&self) -> u32 {
118        self.inner.max_children_per_box
119    }
120
121    pub fn set_max_children_per_box(&mut self, v: u32) {
122        self.inner.max_children_per_box = v
123    }
124}