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}