Skip to main content

video_toolbox/
decompression_properties.rs

1use core_foundation::{
2    base::TCFType,
3    string::{CFString, CFStringRef},
4};
5
6extern "C" {
7    pub static kVTDecompressionPropertyKey_PixelBufferPool: CFStringRef;
8    pub static kVTDecompressionPropertyKey_PixelBufferPoolIsShared: CFStringRef;
9    pub static kVTDecompressionPropertyKey_OutputPoolRequestedMinimumBufferCount: CFStringRef;
10    pub static kVTDecompressionPropertyKey_NumberOfFramesBeingDecoded: CFStringRef;
11    pub static kVTDecompressionPropertyKey_MinOutputPresentationTimeStampOfFramesBeingDecoded: CFStringRef;
12    pub static kVTDecompressionPropertyKey_MaxOutputPresentationTimeStampOfFramesBeingDecoded: CFStringRef;
13    pub static kVTDecompressionPropertyKey_ContentHasInterframeDependencies: CFStringRef;
14    pub static kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder: CFStringRef;
15    pub static kVTVideoDecoderSpecification_RequireHardwareAcceleratedVideoDecoder: CFStringRef;
16    pub static kVTDecompressionPropertyKey_UsingHardwareAcceleratedVideoDecoder: CFStringRef;
17    pub static kVTDecompressionPropertyKey_RealTime: CFStringRef;
18    pub static kVTDecompressionPropertyKey_ThreadCount: CFStringRef;
19    pub static kVTDecompressionPropertyKey_FieldMode: CFStringRef;
20    pub static kVTDecompressionProperty_FieldMode_BothFields: CFStringRef;
21    pub static kVTDecompressionProperty_FieldMode_TopFieldOnly: CFStringRef;
22    pub static kVTDecompressionProperty_FieldMode_BottomFieldOnly: CFStringRef;
23    pub static kVTDecompressionProperty_FieldMode_SingleField: CFStringRef;
24    pub static kVTDecompressionProperty_FieldMode_DeinterlaceFields: CFStringRef;
25    pub static kVTDecompressionPropertyKey_DeinterlaceMode: CFStringRef;
26    pub static kVTDecompressionProperty_DeinterlaceMode_VerticalFilter: CFStringRef;
27    pub static kVTDecompressionProperty_DeinterlaceMode_Temporal: CFStringRef;
28    pub static kVTDecompressionPropertyKey_ReducedResolutionDecode: CFStringRef;
29    pub static kVTDecompressionResolutionKey_Width: CFStringRef;
30    pub static kVTDecompressionResolutionKey_Height: CFStringRef;
31    pub static kVTDecompressionPropertyKey_ReducedCoefficientDecode: CFStringRef;
32    pub static kVTDecompressionPropertyKey_ReducedFrameDelivery: CFStringRef;
33    pub static kVTDecompressionPropertyKey_OnlyTheseFrames: CFStringRef;
34    pub static kVTDecompressionProperty_OnlyTheseFrames_AllFrames: CFStringRef;
35    pub static kVTDecompressionProperty_OnlyTheseFrames_NonDroppableFrames: CFStringRef;
36    pub static kVTDecompressionProperty_OnlyTheseFrames_IFrames: CFStringRef;
37    pub static kVTDecompressionProperty_OnlyTheseFrames_KeyFrames: CFStringRef;
38    pub static kVTDecompressionProperty_TemporalLevelLimit: CFStringRef;
39    pub static kVTDecompressionPropertyKey_SuggestedQualityOfServiceTiers: CFStringRef;
40    pub static kVTDecompressionPropertyKey_SupportedPixelFormatsOrderedByQuality: CFStringRef;
41    pub static kVTDecompressionPropertyKey_SupportedPixelFormatsOrderedByPerformance: CFStringRef;
42    pub static kVTDecompressionPropertyKey_PixelFormatsWithReducedResolutionSupport: CFStringRef;
43    pub static kVTDecompressionPropertyKey_PixelTransferProperties: CFStringRef;
44    pub static kVTVideoDecoderSpecification_RequiredDecoderGPURegistryID: CFStringRef;
45    pub static kVTVideoDecoderSpecification_PreferredDecoderGPURegistryID: CFStringRef;
46    pub static kVTDecompressionPropertyKey_UsingGPURegistryID: CFStringRef;
47    pub static kVTDecompressionPropertyKey_PropagatePerFrameHDRDisplayMetadata: CFStringRef;
48}
49
50#[derive(Clone, Copy, Debug, Eq, PartialEq)]
51pub enum DecompressionPropertyKey {
52    PixelBufferPool,
53    PixelBufferPoolIsShared,
54    OutputPoolRequestedMinimumBufferCount,
55    NumberOfFramesBeingDecoded,
56    MinOutputPresentationTimeStampOfFramesBeingDecoded,
57    MaxOutputPresentationTimeStampOfFramesBeingDecoded,
58    ContentHasInterframeDependencies,
59    VideoDecoderSpecification,
60    UsingHardwareAcceleratedVideoDecoder,
61    RealTime,
62    ThreadCount,
63    FieldMode,
64    DeinterlaceMode,
65    ReducedResolutionDecode,
66    ReducedCoefficientDecode,
67    ReducedFrameDelivery,
68    OnlyTheseFrames,
69    TemporalLevelLimit,
70    SuggestedQualityOfServiceTiers,
71    SupportedPixelFormatsOrderedByQuality,
72    SupportedPixelFormatsOrderedByPerformance,
73    PixelFormatsWithReducedResolutionSupport,
74    PixelTransferProperties,
75    UsingGPURegistryID,
76    PropagatePerFrameHDRDisplayMetadata,
77}
78
79impl From<DecompressionPropertyKey> for CFStringRef {
80    fn from(key: DecompressionPropertyKey) -> Self {
81        unsafe {
82            match key {
83                DecompressionPropertyKey::PixelBufferPool => kVTDecompressionPropertyKey_PixelBufferPool,
84                DecompressionPropertyKey::PixelBufferPoolIsShared => kVTDecompressionPropertyKey_PixelBufferPoolIsShared,
85                DecompressionPropertyKey::OutputPoolRequestedMinimumBufferCount => kVTDecompressionPropertyKey_OutputPoolRequestedMinimumBufferCount,
86                DecompressionPropertyKey::NumberOfFramesBeingDecoded => kVTDecompressionPropertyKey_NumberOfFramesBeingDecoded,
87                DecompressionPropertyKey::MinOutputPresentationTimeStampOfFramesBeingDecoded => {
88                    kVTDecompressionPropertyKey_MinOutputPresentationTimeStampOfFramesBeingDecoded
89                }
90                DecompressionPropertyKey::MaxOutputPresentationTimeStampOfFramesBeingDecoded => {
91                    kVTDecompressionPropertyKey_MaxOutputPresentationTimeStampOfFramesBeingDecoded
92                }
93                DecompressionPropertyKey::ContentHasInterframeDependencies => kVTDecompressionPropertyKey_ContentHasInterframeDependencies,
94                DecompressionPropertyKey::VideoDecoderSpecification => panic!("Use VideoDecoderSpecification enum for this key"),
95                DecompressionPropertyKey::UsingHardwareAcceleratedVideoDecoder => kVTDecompressionPropertyKey_UsingHardwareAcceleratedVideoDecoder,
96                DecompressionPropertyKey::RealTime => kVTDecompressionPropertyKey_RealTime,
97                DecompressionPropertyKey::ThreadCount => kVTDecompressionPropertyKey_ThreadCount,
98                DecompressionPropertyKey::FieldMode => kVTDecompressionPropertyKey_FieldMode,
99                DecompressionPropertyKey::DeinterlaceMode => kVTDecompressionPropertyKey_DeinterlaceMode,
100                DecompressionPropertyKey::ReducedResolutionDecode => kVTDecompressionPropertyKey_ReducedResolutionDecode,
101                DecompressionPropertyKey::ReducedCoefficientDecode => kVTDecompressionPropertyKey_ReducedCoefficientDecode,
102                DecompressionPropertyKey::ReducedFrameDelivery => kVTDecompressionPropertyKey_ReducedFrameDelivery,
103                DecompressionPropertyKey::OnlyTheseFrames => kVTDecompressionPropertyKey_OnlyTheseFrames,
104                DecompressionPropertyKey::TemporalLevelLimit => kVTDecompressionProperty_TemporalLevelLimit,
105                DecompressionPropertyKey::SuggestedQualityOfServiceTiers => kVTDecompressionPropertyKey_SuggestedQualityOfServiceTiers,
106                DecompressionPropertyKey::SupportedPixelFormatsOrderedByQuality => kVTDecompressionPropertyKey_SupportedPixelFormatsOrderedByQuality,
107                DecompressionPropertyKey::SupportedPixelFormatsOrderedByPerformance => {
108                    kVTDecompressionPropertyKey_SupportedPixelFormatsOrderedByPerformance
109                }
110                DecompressionPropertyKey::PixelFormatsWithReducedResolutionSupport => {
111                    kVTDecompressionPropertyKey_PixelFormatsWithReducedResolutionSupport
112                }
113                DecompressionPropertyKey::PixelTransferProperties => kVTDecompressionPropertyKey_PixelTransferProperties,
114                DecompressionPropertyKey::UsingGPURegistryID => kVTDecompressionPropertyKey_UsingGPURegistryID,
115                DecompressionPropertyKey::PropagatePerFrameHDRDisplayMetadata => kVTDecompressionPropertyKey_PropagatePerFrameHDRDisplayMetadata,
116            }
117        }
118    }
119}
120
121impl From<DecompressionPropertyKey> for CFString {
122    fn from(key: DecompressionPropertyKey) -> Self {
123        unsafe { CFString::wrap_under_get_rule(CFStringRef::from(key)) }
124    }
125}
126
127#[derive(Clone, Copy, Debug, Eq, PartialEq)]
128pub enum FieldMode {
129    BothFields,
130    TopFieldOnly,
131    BottomFieldOnly,
132    SingleField,
133    DeinterlaceFields,
134}
135
136impl From<FieldMode> for CFStringRef {
137    fn from(mode: FieldMode) -> Self {
138        unsafe {
139            match mode {
140                FieldMode::BothFields => kVTDecompressionProperty_FieldMode_BothFields,
141                FieldMode::TopFieldOnly => kVTDecompressionProperty_FieldMode_TopFieldOnly,
142                FieldMode::BottomFieldOnly => kVTDecompressionProperty_FieldMode_BottomFieldOnly,
143                FieldMode::SingleField => kVTDecompressionProperty_FieldMode_SingleField,
144                FieldMode::DeinterlaceFields => kVTDecompressionProperty_FieldMode_DeinterlaceFields,
145            }
146        }
147    }
148}
149
150impl From<FieldMode> for CFString {
151    fn from(mode: FieldMode) -> Self {
152        unsafe { CFString::wrap_under_get_rule(CFStringRef::from(mode)) }
153    }
154}
155
156#[derive(Clone, Copy, Debug, Eq, PartialEq)]
157pub enum DeinterlaceMode {
158    VerticalFilter,
159    Temporal,
160}
161
162impl From<DeinterlaceMode> for CFStringRef {
163    fn from(mode: DeinterlaceMode) -> Self {
164        unsafe {
165            match mode {
166                DeinterlaceMode::VerticalFilter => kVTDecompressionProperty_DeinterlaceMode_VerticalFilter,
167                DeinterlaceMode::Temporal => kVTDecompressionProperty_DeinterlaceMode_Temporal,
168            }
169        }
170    }
171}
172
173impl From<DeinterlaceMode> for CFString {
174    fn from(mode: DeinterlaceMode) -> Self {
175        unsafe { CFString::wrap_under_get_rule(CFStringRef::from(mode)) }
176    }
177}
178
179#[derive(Clone, Copy, Debug, Eq, PartialEq)]
180pub enum OnlyTheseFrames {
181    AllFrames,
182    NonDroppableFrames,
183    IFrames,
184    KeyFrames,
185}
186
187impl From<OnlyTheseFrames> for CFStringRef {
188    fn from(val: OnlyTheseFrames) -> Self {
189        unsafe {
190            match val {
191                OnlyTheseFrames::AllFrames => kVTDecompressionProperty_OnlyTheseFrames_AllFrames,
192                OnlyTheseFrames::NonDroppableFrames => kVTDecompressionProperty_OnlyTheseFrames_NonDroppableFrames,
193                OnlyTheseFrames::IFrames => kVTDecompressionProperty_OnlyTheseFrames_IFrames,
194                OnlyTheseFrames::KeyFrames => kVTDecompressionProperty_OnlyTheseFrames_KeyFrames,
195            }
196        }
197    }
198}
199
200impl From<OnlyTheseFrames> for CFString {
201    fn from(val: OnlyTheseFrames) -> Self {
202        unsafe { CFString::wrap_under_get_rule(CFStringRef::from(val)) }
203    }
204}
205
206#[derive(Clone, Copy, Debug, Eq, PartialEq)]
207pub enum VideoDecoderSpecification {
208    EnableHardwareAcceleratedVideoDecoder,
209    RequireHardwareAcceleratedVideoDecoder,
210    RequiredDecoderGPURegistryID,
211    PreferredDecoderGPURegistryID,
212}
213
214impl From<VideoDecoderSpecification> for CFStringRef {
215    fn from(spec: VideoDecoderSpecification) -> Self {
216        unsafe {
217            match spec {
218                VideoDecoderSpecification::EnableHardwareAcceleratedVideoDecoder => {
219                    kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder
220                }
221                VideoDecoderSpecification::RequireHardwareAcceleratedVideoDecoder => {
222                    kVTVideoDecoderSpecification_RequireHardwareAcceleratedVideoDecoder
223                }
224                VideoDecoderSpecification::RequiredDecoderGPURegistryID => kVTVideoDecoderSpecification_RequiredDecoderGPURegistryID,
225                VideoDecoderSpecification::PreferredDecoderGPURegistryID => kVTVideoDecoderSpecification_PreferredDecoderGPURegistryID,
226            }
227        }
228    }
229}
230
231impl From<VideoDecoderSpecification> for CFString {
232    fn from(spec: VideoDecoderSpecification) -> Self {
233        unsafe { CFString::wrap_under_get_rule(CFStringRef::from(spec)) }
234    }
235}
236
237#[derive(Clone, Copy, Debug, Eq, PartialEq)]
238pub enum DecompressionResolutionKey {
239    Width,
240    Height,
241}
242
243impl From<DecompressionResolutionKey> for CFStringRef {
244    fn from(key: DecompressionResolutionKey) -> Self {
245        unsafe {
246            match key {
247                DecompressionResolutionKey::Width => kVTDecompressionResolutionKey_Width,
248                DecompressionResolutionKey::Height => kVTDecompressionResolutionKey_Height,
249            }
250        }
251    }
252}
253
254impl From<DecompressionResolutionKey> for CFString {
255    fn from(key: DecompressionResolutionKey) -> Self {
256        unsafe { CFString::wrap_under_get_rule(CFStringRef::from(key)) }
257    }
258}