2
// AVVideoSettings.cs: Implements strongly typed access for AV video settings
4
// Authors: Marek Safar (marek.safar@gmail.com)
6
// Copyright 2012, Xamarin Inc.
8
// Permission is hereby granted, free of charge, to any person obtaining
9
// a copy of this software and associated documentation files (the
10
// "Software"), to deal in the Software without restriction, including
11
// without limitation the rights to use, copy, modify, merge, publish,
12
// distribute, sublicense, and/or sell copies of the Software, and to
13
// permit persons to whom the Software is furnished to do so, subject to
14
// the following conditions:
16
// The above copyright notice and this permission notice shall be
17
// included in all copies or substantial portions of the Software.
19
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30
using MonoMac.Foundation;
31
using MonoMac.CoreFoundation;
32
using MonoMac.ObjCRuntime;
33
using MonoMac.CoreVideo;
35
namespace MonoMac.AVFoundation {
37
public enum AVVideoCodec
43
public enum AVVideoScalingMode
51
public enum AVVideoProfileLevelH264
66
public class AVVideoSettingsUncompressed : CVPixelBufferAttributes
69
public AVVideoSettingsUncompressed ()
73
public AVVideoSettingsUncompressed (NSDictionary dictionary)
78
public AVVideoScalingMode? ScalingMode {
82
case AVVideoScalingMode.Fit:
83
v = AVVideoScalingModeKey.Fit;
85
case AVVideoScalingMode.Resize:
86
v = AVVideoScalingModeKey.Resize;
88
case AVVideoScalingMode.ResizeAspect:
89
v = AVVideoScalingModeKey.ResizeAspect;
91
case AVVideoScalingMode.ResizeAspectFill:
92
v = AVVideoScalingModeKey.ResizeAspectFill;
98
throw new ArgumentException ("value");
102
RemoveValue (AVVideo.ScalingModeKey);
104
SetNativeValue (AVVideo.ScalingModeKey, v);
110
public class AVVideoSettingsCompressed : DictionaryContainer
113
public AVVideoSettingsCompressed ()
114
: base (new NSMutableDictionary ())
118
public AVVideoSettingsCompressed (NSDictionary dictionary)
123
public AVVideoCodec? Codec {
127
case AVVideoCodec.H264:
128
v = AVVideo.CodecH264;
130
case AVVideoCodec.JPEG:
131
v = AVVideo.CodecJPEG;
137
throw new ArgumentException ("value");
141
RemoveValue (AVVideo.CodecKey);
143
SetNativeValue (AVVideo.CodecKey, v);
149
SetNumberValue (AVVideo.WidthKey, value);
152
return GetInt32Value (AVVideo.WidthKey);
158
SetNumberValue (AVVideo.HeightKey, value);
161
return GetInt32Value (AVVideo.HeightKey);
165
public AVVideoScalingMode? ScalingMode {
169
case AVVideoScalingMode.Fit:
170
v = AVVideoScalingModeKey.Fit;
172
case AVVideoScalingMode.Resize:
173
v = AVVideoScalingModeKey.Resize;
175
case AVVideoScalingMode.ResizeAspect:
176
v = AVVideoScalingModeKey.ResizeAspect;
178
case AVVideoScalingMode.ResizeAspectFill:
179
v = AVVideoScalingModeKey.ResizeAspectFill;
185
throw new ArgumentException ("value");
189
RemoveValue (AVVideo.ScalingModeKey);
191
SetNativeValue (AVVideo.ScalingModeKey, v);
195
public AVVideoCodecSettings CodecSettings {
197
SetNativeValue (AVVideo.CompressionPropertiesKey, value == null ? null : value.Dictionary);
203
public class AVVideoCodecSettings : DictionaryContainer
206
public AVVideoCodecSettings ()
207
: base (new NSMutableDictionary ())
211
public AVVideoCodecSettings (NSDictionary dictionary)
216
public int? AverageBitRate {
218
SetNumberValue (AVVideo.AverageBitRateKey, (int?) value);
221
return GetInt32Value (AVVideo.AverageBitRateKey);
225
public float? JPEGQuality {
227
SetNumberValue (AVVideo.QualityKey, value);
230
return GetFloatValue (AVVideo.QualityKey);
234
public int? MaxKeyFrameInterval {
236
SetNumberValue (AVVideo.MaxKeyFrameIntervalKey, (int?) value);
239
return GetInt32Value (AVVideo.MaxKeyFrameIntervalKey);
243
public AVVideoProfileLevelH264? ProfileLevelH264 {
247
case AVVideoProfileLevelH264.Baseline30:
248
v = AVVideo.ProfileLevelH264Baseline30;
250
case AVVideoProfileLevelH264.Baseline31:
251
v = AVVideo.ProfileLevelH264Baseline31;
253
case AVVideoProfileLevelH264.Baseline41:
254
v = AVVideo.ProfileLevelH264Baseline41;
256
case AVVideoProfileLevelH264.Main30:
257
v = AVVideo.ProfileLevelH264Main30;
259
case AVVideoProfileLevelH264.Main31:
260
v = AVVideo.ProfileLevelH264Main31;
262
case AVVideoProfileLevelH264.Main32:
263
v = AVVideo.ProfileLevelH264Main32;
265
case AVVideoProfileLevelH264.Main41:
266
v = AVVideo.ProfileLevelH264Main41;
269
case AVVideoProfileLevelH264.High40:
270
v = AVVideo.ProfileLevelH264High40;
272
case AVVideoProfileLevelH264.High41:
273
v = AVVideo.ProfileLevelH264High41;
280
throw new ArgumentException ("value");
284
RemoveValue (AVVideo.ProfileLevelKey);
286
SetNativeValue (AVVideo.ProfileLevelKey, v);
290
public AVVideoPixelAspectRatioSettings PixelAspectRatio {
292
SetNativeValue (AVVideo.PixelAspectRatioKey, value == null ? null : value.Dictionary);
296
public AVVideoCleanApertureSettings VideoCleanAperture {
298
SetNativeValue (AVVideo.CleanApertureKey, value == null ? null : value.Dictionary);
304
public class AVVideoPixelAspectRatioSettings : DictionaryContainer
307
public AVVideoPixelAspectRatioSettings ()
308
: base (new NSMutableDictionary ())
312
public AVVideoPixelAspectRatioSettings (NSDictionary dictionary)
317
public int? HorizontalSpacing {
319
SetNumberValue (AVVideo.PixelAspectRatioHorizontalSpacingKey, value);
322
return GetInt32Value (AVVideo.PixelAspectRatioHorizontalSpacingKey);
326
public int? VerticalSpacing {
328
SetNumberValue (AVVideo.PixelAspectRatioVerticalSpacingKey, value);
331
return GetInt32Value (AVVideo.PixelAspectRatioVerticalSpacingKey);
337
public class AVVideoCleanApertureSettings : DictionaryContainer
340
public AVVideoCleanApertureSettings ()
341
: base (new NSMutableDictionary ())
345
public AVVideoCleanApertureSettings (NSDictionary dictionary)
352
SetNumberValue (AVVideo.CleanApertureWidthKey, value);
355
return GetInt32Value (AVVideo.CleanApertureWidthKey);
361
SetNumberValue (AVVideo.CleanApertureHeightKey, value);
364
return GetInt32Value (AVVideo.CleanApertureHeightKey);
368
public int? HorizontalOffset {
370
SetNumberValue (AVVideo.CleanApertureHorizontalOffsetKey, value);
373
return GetInt32Value (AVVideo.CleanApertureHorizontalOffsetKey);
377
public int? VerticalOffset {
379
SetNumberValue (AVVideo.CleanApertureVerticalOffsetKey, value);
382
return GetInt32Value (AVVideo.CleanApertureVerticalOffsetKey);