objc2_metal_performance_shaders/generated/MPSImage/MPSImageMedian.rs
1//! This file has been automatically generated by `objc2`'s `header-translator`.
2//! DO NOT EDIT
3use core::ptr::NonNull;
4use objc2::__framework_prelude::*;
5use objc2_foundation::*;
6use objc2_metal::*;
7
8use crate::*;
9
10extern_class!(
11 /// The MPSImageMedian applies a median filter to an image. A median filter finds the
12 /// median color value for each channel within a kernelDiameter x kernelDiameter
13 /// window surrounding the pixel of interest. It is a common means of noise reduction
14 /// and also as a smoothing filter with edge preserving qualities.
15 ///
16 /// NOTE: The MPSImageMedian filter currently only supports images with
17 /// <
18 /// = 8 bits/channel.
19 ///
20 /// See also [Apple's documentation](https://developer.apple.com/documentation/metalperformanceshaders/mpsimagemedian?language=objc)
21 #[unsafe(super(MPSUnaryImageKernel, MPSKernel, NSObject))]
22 #[derive(Debug, PartialEq, Eq, Hash)]
23 #[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
24 pub struct MPSImageMedian;
25);
26
27#[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
28extern_conformance!(
29 unsafe impl NSCoding for MPSImageMedian {}
30);
31
32#[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
33extern_conformance!(
34 unsafe impl NSCopying for MPSImageMedian {}
35);
36
37#[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
38unsafe impl CopyingHelper for MPSImageMedian {
39 type Result = Self;
40}
41
42#[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
43extern_conformance!(
44 unsafe impl NSObjectProtocol for MPSImageMedian {}
45);
46
47#[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
48extern_conformance!(
49 unsafe impl NSSecureCoding for MPSImageMedian {}
50);
51
52#[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
53impl MPSImageMedian {
54 extern_methods!(
55 /// The diameter in pixels of the filter window.
56 ///
57 /// The median filter is applied to a kernelDiameter x kernelDiameter window
58 /// of pixels centered on the corresponding source pixel for each destination
59 /// pixel. The kernel diameter must be an odd number.
60 #[unsafe(method(kernelDiameter))]
61 #[unsafe(method_family = none)]
62 pub unsafe fn kernelDiameter(&self) -> NSUInteger;
63
64 /// Initialize a filter for a particular kernel size and device
65 ///
66 /// Parameter `device`: The device the filter will run on
67 ///
68 /// Parameter `kernelDiameter`: Diameter of the median filter. Must be an odd number.
69 ///
70 /// Returns: A valid object or nil, if failure.
71 #[unsafe(method(initWithDevice:kernelDiameter:))]
72 #[unsafe(method_family = init)]
73 pub unsafe fn initWithDevice_kernelDiameter(
74 this: Allocated<Self>,
75 device: &ProtocolObject<dyn MTLDevice>,
76 kernel_diameter: NSUInteger,
77 ) -> Retained<Self>;
78
79 /// NSSecureCoding compatability
80 ///
81 /// While the standard NSSecureCoding/NSCoding method
82 /// -initWithCoder: should work, since the file can't
83 /// know which device your data is allocated on, we
84 /// have to guess and may guess incorrectly. To avoid
85 /// that problem, use initWithCoder:device instead.
86 ///
87 /// Parameter `aDecoder`: The NSCoder subclass with your serialized MPSKernel
88 ///
89 /// Parameter `device`: The MTLDevice on which to make the MPSKernel
90 ///
91 /// Returns: A new MPSKernel object, or nil if failure.
92 ///
93 /// # Safety
94 ///
95 /// `a_decoder` possibly has further requirements.
96 #[unsafe(method(initWithCoder:device:))]
97 #[unsafe(method_family = init)]
98 pub unsafe fn initWithCoder_device(
99 this: Allocated<Self>,
100 a_decoder: &NSCoder,
101 device: &ProtocolObject<dyn MTLDevice>,
102 ) -> Option<Retained<Self>>;
103
104 #[unsafe(method(initWithDevice:))]
105 #[unsafe(method_family = init)]
106 pub unsafe fn initWithDevice(
107 this: Allocated<Self>,
108 device: &ProtocolObject<dyn MTLDevice>,
109 ) -> Retained<Self>;
110
111 /// The maximum diameter in pixels of the filter window supported by the median filter.
112 #[unsafe(method(maxKernelDiameter))]
113 #[unsafe(method_family = none)]
114 pub unsafe fn maxKernelDiameter() -> NSUInteger;
115
116 /// The minimum diameter in pixels of the filter window supported by the median filter.
117 #[unsafe(method(minKernelDiameter))]
118 #[unsafe(method_family = none)]
119 pub unsafe fn minKernelDiameter() -> NSUInteger;
120 );
121}
122
123/// Methods declared on superclass `MPSKernel`.
124#[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
125impl MPSImageMedian {
126 extern_methods!(
127 /// Called by NSCoder to decode MPSKernels
128 ///
129 /// This isn't the right interface to decode a MPSKernel, but
130 /// it is the one that NSCoder uses. To enable your NSCoder
131 /// (e.g. NSKeyedUnarchiver) to set which device to use
132 /// extend the object to adopt the MPSDeviceProvider
133 /// protocol. Otherwise, the Metal system default device
134 /// will be used.
135 ///
136 /// # Safety
137 ///
138 /// `a_decoder` possibly has further requirements.
139 #[unsafe(method(initWithCoder:))]
140 #[unsafe(method_family = init)]
141 pub unsafe fn initWithCoder(
142 this: Allocated<Self>,
143 a_decoder: &NSCoder,
144 ) -> Option<Retained<Self>>;
145 );
146}
147
148/// Methods declared on superclass `NSObject`.
149#[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
150impl MPSImageMedian {
151 extern_methods!(
152 #[unsafe(method(init))]
153 #[unsafe(method_family = init)]
154 pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
155
156 #[unsafe(method(new))]
157 #[unsafe(method_family = new)]
158 pub unsafe fn new() -> Retained<Self>;
159 );
160}