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}