diff --git a/src/rgen/Microsoft.Macios.Generator/Emitters/BindingSyntaxFactory.KnownTypes.cs b/src/rgen/Microsoft.Macios.Generator/Emitters/BindingSyntaxFactory.KnownTypes.cs index 47c7b440f530..091a7fad7de3 100644 --- a/src/rgen/Microsoft.Macios.Generator/Emitters/BindingSyntaxFactory.KnownTypes.cs +++ b/src/rgen/Microsoft.Macios.Generator/Emitters/BindingSyntaxFactory.KnownTypes.cs @@ -68,6 +68,13 @@ static partial class BindingSyntaxFactory { @namespace: ["ObjCRuntime"], @class: "Runtime"); + /// + /// TypeSyntax for ObjCRuntime.BlockLiteral. + /// + public static readonly TypeSyntax BlockLiteral = StringExtensions.GetIdentifierName ( + @namespace: ["ObjCRuntime"], + @class: "BlockLiteral"); + // Foundation types /// diff --git a/src/rgen/Microsoft.Macios.Generator/Emitters/Documentation.cs b/src/rgen/Microsoft.Macios.Generator/Emitters/Documentation.cs index 9025697643e4..d2a1c6028bb7 100644 --- a/src/rgen/Microsoft.Macios.Generator/Emitters/Documentation.cs +++ b/src/rgen/Microsoft.Macios.Generator/Emitters/Documentation.cs @@ -135,5 +135,8 @@ public static string DefaultInitWithHandle (string name) => /// Developers should not invoke this method directly, instead they should call as it will prevent two instances of a managed object pointing to the same native object. /// /// "; + + public static string TrampolineStaticClass (string name) => +"/// This class bridges native block invocations that call into C#"; } } diff --git a/src/rgen/Microsoft.Macios.Generator/Emitters/TrampolineEmitter.cs b/src/rgen/Microsoft.Macios.Generator/Emitters/TrampolineEmitter.cs index 1f06e97b9be2..9479f5d08111 100644 --- a/src/rgen/Microsoft.Macios.Generator/Emitters/TrampolineEmitter.cs +++ b/src/rgen/Microsoft.Macios.Generator/Emitters/TrampolineEmitter.cs @@ -3,21 +3,164 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Linq; using Microsoft.CodeAnalysis; using Microsoft.Macios.Generator.Context; -using Microsoft.Macios.Generator.DataModel; +using Microsoft.Macios.Generator.Formatters; using Microsoft.Macios.Generator.IO; using TypeInfo = Microsoft.Macios.Generator.DataModel.TypeInfo; +using static Microsoft.Macios.Generator.Emitters.BindingSyntaxFactory; namespace Microsoft.Macios.Generator.Emitters; class TrampolineEmitter ( RootContext context, TabbedStringBuilder builder) { + /// + /// The nomenclator is used to generate the name of the static class that will contain the trampoline, needs to + /// be an instance class since we want to keep track of the already generated names. + /// + Nomenclator nomenclator = new (); public string SymbolNamespace => "ObjCRuntime"; public string SymbolName => "Trampolines"; + /// + /// Generate the static helper class for the trampoline uses to bridge the native block invocation. + /// + /// The type info of the trampoline to generate. + /// The trampoline name. + /// The tabbed string builder to use. + /// True if the code was generated, false otherwise. + public bool TryEmitStaticClass (in TypeInfo typeInfo, string trampolineName, TabbedWriter classBuilder) + { + // create a new static class using the name from the nomenclator + var argumentSyntax = GetTrampolineInvokeArguments (trampolineName, typeInfo.Delegate!); + var delegateIdentifier = typeInfo.GetIdentifierSyntax (); + var className = Nomenclator.GetTrampolineClassName (trampolineName, Nomenclator.TrampolineClassType.StaticBridgeClass); + var invokeMethodName = Nomenclator.GetTrampolineInvokeMethodName (); + var trampolineVariableName = Nomenclator.GetTrampolineDelegatePointerVariableName (); + var delegateVariableName = Nomenclator.GetTrampolineDelegateVariableName (); + + classBuilder.WriteDocumentation (Documentation.Class.TrampolineStaticClass (className)); + using (var classBlock = classBuilder.CreateBlock ($"static internal class {className}", true)) { + // Invoke method + classBlock.WriteLine ("[Preserve (Conditional = true)]"); + classBlock.WriteLine ("[UnmanagedCallersOnly]"); + classBlock.WriteLine ($"[UserDelegateType (typeof ({delegateIdentifier}))]"); + using (var invokeMethod = classBlock.CreateBlock (GetTrampolineInvokeSignature (typeInfo).ToString (), true)) { + // initialized the parameters, this might be needed for the parameters that are out or ref + foreach (var argument in argumentSyntax) { + invokeMethod.Write (argument.Initializers); + } + + // get the delegate from the block literal to execute with the trampoline + invokeMethod.WriteLine ($"var {delegateVariableName} = {BlockLiteral}.GetTarget<{delegateIdentifier}> ({Nomenclator.GetTrampolineBlockParameterName (typeInfo.Delegate!.Parameters)});"); + + // if the deletate is null, we return default, otherwise we call the delegate + using (var ifBlock = invokeMethod.CreateBlock ($"if ({delegateVariableName} is not null)", true)) { + + // build any needed pre conversion operations before calling the delegate + foreach (var argument in argumentSyntax) { + ifBlock.Write (argument.PreDelegateCallConversion); + } + + ifBlock.WriteLine ($"{CallTrampolineDelegate (typeInfo.Delegate!, argumentSyntax)}"); + + // build any needed post conversion operations after calling the delegate + foreach (var argument in argumentSyntax) { + ifBlock.Write (argument.PostDelegateCallConversion); + } + + // perform any needed + if (typeInfo.Delegate.ReturnType.SpecialType != SpecialType.System_Void) + ifBlock.WriteLine ($"return {GetTrampolineInvokeReturnType (typeInfo, Nomenclator.GetReturnVariableName ())};"); + } + if (typeInfo.Delegate.ReturnType.SpecialType != SpecialType.System_Void) + invokeMethod.WriteLine ("return default;"); + } + + // CreateNullableBlock + classBlock.WriteLine (); // empty line for readability + using (var createNullableBlock = classBlock.CreateBlock ( + $"internal static unsafe {BlockLiteral} CreateNullableBlock ({delegateIdentifier}? callback)", true)) { + createNullableBlock.WriteRaw ( +$@"if (callback is null) + return default ({BlockLiteral}); +return CreateBlock (callback); +" + ); + } + + // CreateBlock + classBlock.WriteLine (); // empty line for readability + classBlock.WriteLine ("[BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)]"); + using (var createBlock = classBlock.CreateBlock ( + $"internal static unsafe {BlockLiteral} CreateBlock ({delegateIdentifier} callback)", true)) { + createBlock.WriteLine (GetTrampolineDelegatePointer (typeInfo).ToFullString ()); + createBlock.WriteLine ( + $"return new {BlockLiteral} ({trampolineVariableName}, callback, typeof ({className}), nameof ({invokeMethodName}));"); + } + } + return true; + } + + /// + /// Emits the delegate declaration for the trampoline. + /// + /// The type of the trampoline to generate. + /// The current tabbed string builder to use. + /// A hash set with the delegates already added. + /// The delegate name. + /// True if the code was generated, false otherwise. + public bool TryEmitInternalDelegate (in TypeInfo typeInfo, TabbedWriter classBuilder, HashSet addedDelegates, + [NotNullWhen (true)] out string? delegateName) + { + delegateName = null; + if (typeInfo.Delegate is null) + return false; + + // generate the delegate and get its name, if we already emitted it, skip it + var delegateDeclaration = GetTrampolineDelegateDeclaration (typeInfo, out delegateName); + if (addedDelegates.Add (delegateName)) { + // print the attributes needed for the delegate and the delegate itself + classBuilder.WriteLine ("[UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)]"); + classBuilder.WriteLine ($"[UserDelegateType (typeof ({typeInfo.GetIdentifierSyntax ()}))]"); + classBuilder.WriteLine (delegateDeclaration.ToString ()); + } + return true; + } + + /// + /// Write the using statements for the namespaces used by the trampolines. + /// + /// The trampolines to generate. + public void WriteUsedNamespaces (IReadOnlySet trampolines) + { + // create set with the default namespaces + var namespaces = new HashSet () { + "Foundation", + "ObjCBindings", + "ObjCRuntime", + "System", + }; + // loop through the trampolines and add the namespaces used by the delegates + foreach (var info in trampolines) + namespaces.Add (string.Join ('.', info.Namespace)); + + // sort the namespaces so that we can write them in a deterministic way + foreach (var ns in namespaces.OrderBy (x => x)) { + builder.WriteLine ($"using {ns};"); + } + } + + /// + /// Generate the trampolines for the given set of types. + /// + /// The trampolines type info to use for the code generation. + /// Possible diagnostic errors. + /// True if the code was generated, false otherwise. public bool TryEmit (IReadOnlySet trampolines, [NotNullWhen (false)] out ImmutableArray? diagnostics) { @@ -25,19 +168,35 @@ public bool TryEmit (IReadOnlySet trampolines, // and some comments with the trampolines to emit diagnostics = null; - builder.WriteLine ("using Foundation;"); - builder.WriteLine ("using ObjCBindings;"); - builder.WriteLine ("using ObjCRuntime;"); - builder.WriteLine ("using System;"); + // write the using statements + WriteUsedNamespaces (trampolines); builder.WriteLine (); - builder.WriteLine ($"namespace ObjCRuntime;"); + builder.WriteLine ("namespace ObjCRuntime;"); builder.WriteLine (); + // keep track of the already emitted delegates + var addedDelegates = new HashSet (); + using (var classBlock = builder.CreateBlock ($"static partial class {SymbolName}", true)) { classBlock.WriteLine ($"// Generate trampolines for compilation"); _ = context.CurrentPlatform; foreach (var info in trampolines) { + var trampolineName = nomenclator.GetTrampolineName (info); + // write the delegate declaration + if (!TryEmitInternalDelegate (info, classBlock, addedDelegates, out var delegateDeclaration)) { + diagnostics = []; + return false; + } + + classBlock.WriteLine (); // empty line for readability + + // generate the static class + if (!TryEmitStaticClass (info, trampolineName, classBlock)) { + diagnostics = []; + return false; + } + classBlock.WriteLine ($"// TODO: generate trampoline for {info.FullyQualifiedName}"); classBlock.WriteLine (); } diff --git a/tests/rgen/Microsoft.Macios.Generator.Tests/BaseGeneratorTestClass.cs b/tests/rgen/Microsoft.Macios.Generator.Tests/BaseGeneratorTestClass.cs index 959b1f4fdfec..ddb73fcbd323 100644 --- a/tests/rgen/Microsoft.Macios.Generator.Tests/BaseGeneratorTestClass.cs +++ b/tests/rgen/Microsoft.Macios.Generator.Tests/BaseGeneratorTestClass.cs @@ -122,7 +122,7 @@ protected void CompareGeneratedCode (GenerationTestData testData) if (testData.ExpectedTrampolineText is not null) { // validate that Library.g.cs was created by the LibraryEmitter and matches the expectation - var generatedLibSyntax = runResult.GeneratedTrees.Single (t => t.FilePath.EndsWith ("Trampolines.g.cs")); + var generatedLibSyntax = runResult.GeneratedTrees.Single (t => t.FilePath.EndsWith ("ObjCRuntime/Trampolines.g.cs")); Assert.Equal (testData.ExpectedTrampolineText, generatedLibSyntax.GetText ().ToString ()); } } diff --git a/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/ClassGenerationTests.cs b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/ClassGenerationTests.cs index f56062e4641c..0d6387ba8982 100644 --- a/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/ClassGenerationTests.cs +++ b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/ClassGenerationTests.cs @@ -47,6 +47,11 @@ public class TestDataGenerator : BaseTestDataGenerator, IEnumerable { (ApplePlatform.TVOS, "TrampolinePropertyTests", "TrampolinePropertyTests.cs", "ExpectedTrampolinePropertyTests.cs", null, "ExpectedTrampolinePropertyTestsTrampolines.cs"), (ApplePlatform.MacCatalyst, "TrampolinePropertyTests", "TrampolinePropertyTests.cs", "ExpectedTrampolinePropertyTests.cs", null, "ExpectedTrampolinePropertyTestsTrampolines.cs"), (ApplePlatform.MacOSX, "TrampolinePropertyTests", "TrampolinePropertyTests.cs", "ExpectedTrampolinePropertyTests.cs", null, "ExpectedTrampolinePropertyTestsTrampolines.cs"), + + // avfoundation trampoline tests, we are ignoring tvOS because is the same as iOS BUT with the AVCaptureCompletionHandler missing and we want to test that delgate + (ApplePlatform.iOS, "AVFoundationTrampolines", "Trampolines/AVFoundationTrampolines.cs", "Trampolines/ExpectedAVFoundationTrampolinesProperties.cs", null, "Trampolines/ExpectedAVFoundationTrampolinesTrampolines.cs"), + (ApplePlatform.MacCatalyst, "AVFoundationTrampolines", "Trampolines/AVFoundationTrampolines.cs", "Trampolines/ExpectedAVFoundationTrampolinesProperties.cs", null, "Trampolines/ExpectedAVFoundationTrampolinesTrampolines.cs"), + (ApplePlatform.MacOSX, "AVFoundationTrampolines", "Trampolines/AVFoundationTrampolines.cs", "Trampolines/ExpectedAVFoundationTrampolinesProperties.cs", null, "Trampolines/ExpectedAVFoundationTrampolinesTrampolines.cs"), }; public IEnumerator GetEnumerator () diff --git a/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/ExpectedTrampolinePropertyTests.cs b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/ExpectedTrampolinePropertyTests.cs index 34e68a976805..525223609d4b 100644 --- a/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/ExpectedTrampolinePropertyTests.cs +++ b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/ExpectedTrampolinePropertyTests.cs @@ -2,7 +2,9 @@ #nullable enable +using AVFoundation; using CoreGraphics; +using CoreImage; using Foundation; using ObjCBindings; using ObjCRuntime; @@ -20,6 +22,14 @@ namespace Microsoft.Macios.Generator.Tests.Classes.Data.TestNamespace; [Register ("TrampolinePropertyTests", true)] public partial class TrampolinePropertyTests { + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selCreateObjectHandlerX = "createObjectHandler"; + static readonly global::ObjCRuntime.NativeHandle selCreateObjectHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("createObjectHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetCreateObjectHandler_X = "setCreateObjectHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetCreateObjectHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setCreateObjectHandler:"); + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] const string selCompletionHandlerX = "completionHandler"; static readonly global::ObjCRuntime.NativeHandle selCompletionHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("completionHandler"); @@ -28,6 +38,62 @@ public partial class TrampolinePropertyTests const string selSetCompletionHandler_X = "setCompletionHandler:"; static readonly global::ObjCRuntime.NativeHandle selSetCompletionHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setCompletionHandler:"); + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selDuplicateCompletionHandlerX = "duplicateCompletionHandler"; + static readonly global::ObjCRuntime.NativeHandle selDuplicateCompletionHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("duplicateCompletionHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetDuplicateCompletionHandler_X = "setDuplicateCompletionHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetDuplicateCompletionHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setDuplicateCompletionHandler:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selImageGeneratorCompletionHandlerX = "imageGeneratorCompletionHandler"; + static readonly global::ObjCRuntime.NativeHandle selImageGeneratorCompletionHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("imageGeneratorCompletionHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetImageGeneratorCompletionHandler_X = "setImageGeneratorCompletionHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetImageGeneratorCompletionHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setImageGeneratorCompletionHandler:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selKernelRoiCallbackX = "kernelRoiCallback"; + static readonly global::ObjCRuntime.NativeHandle selKernelRoiCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("kernelRoiCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetKernelRoiCallback_X = "setKernelRoiCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetKernelRoiCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setKernelRoiCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selStringActionHandlerX = "stringActionHandler"; + static readonly global::ObjCRuntime.NativeHandle selStringActionHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("stringActionHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetStringActionHandler_X = "setStringActionHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetStringActionHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setStringActionHandler:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selIntActionHandlerX = "intActionHandler"; + static readonly global::ObjCRuntime.NativeHandle selIntActionHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("intActionHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetIntActionHandler_X = "setIntActionHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetIntActionHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setIntActionHandler:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selBoolActionHandlerX = "boolActionHandler"; + static readonly global::ObjCRuntime.NativeHandle selBoolActionHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("boolActionHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetBoolActionHandler_X = "setBoolActionHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetBoolActionHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setBoolActionHandler:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selManualRenderingCallbackX = "manualRenderingCallback"; + static readonly global::ObjCRuntime.NativeHandle selManualRenderingCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("manualRenderingCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetManualRenderingCallback_X = "setManualRenderingCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetManualRenderingCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setManualRenderingCallback:"); + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] static readonly global::ObjCRuntime.NativeHandle class_ptr = global::ObjCRuntime.Class.GetHandle ("TrampolinePropertyTests"); @@ -113,6 +179,27 @@ protected TrampolinePropertyTests (global::Foundation.NSObjectFlag t) : base (t) [EditorBrowsable (EditorBrowsableState.Advanced)] protected internal TrampolinePropertyTests (global::ObjCRuntime.NativeHandle handle) : base (handle) {} + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::System.Action BoolActionHandler + { + get + { + global::System.Action ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("boolActionHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("boolActionHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] public partial global::System.Action CompletionHandler { @@ -133,5 +220,194 @@ protected internal TrampolinePropertyTests (global::ObjCRuntime.NativeHandle han throw new NotImplementedException(); } } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::Microsoft.Macios.Generator.Tests.Classes.Data.TestNamespace.TrampolinePropertyTests.CreateObject CreateObjectHandler + { + get + { + global::Microsoft.Macios.Generator.Tests.Classes.Data.TestNamespace.TrampolinePropertyTests.CreateObject ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("createObjectHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("createObjectHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::System.Action DuplicateCompletionHandler + { + get + { + global::System.Action ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("duplicateCompletionHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("duplicateCompletionHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAssetImageGenerator.AsynchronouslyForTimeCompletionHandler ImageGeneratorCompletionHandler + { + get + { + global::AVFoundation.AVAssetImageGenerator.AsynchronouslyForTimeCompletionHandler ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging._objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("imageGeneratorCompletionHandler")); + } else { + ret = global::ObjCRuntime.Messaging._objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("imageGeneratorCompletionHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler ImageGeneratorCompletionHandler + { + get + { + global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("imageGeneratorCompletionHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("imageGeneratorCompletionHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::System.Action IntActionHandler + { + get + { + global::System.Action ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("intActionHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("intActionHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::CoreImage.CIKernelRoiCallback KernelRoiCallback + { + get + { + global::CoreImage.CIKernelRoiCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("kernelRoiCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("kernelRoiCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::CoreImage.CIKernelRoiCallback KernelRoiCallback + { + get + { + global::CoreImage.CIKernelRoiCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("kernelRoiCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("kernelRoiCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAudioEngineManualRenderingBlock ManualRendering + { + get + { + global::AVFoundation.AVAudioEngineManualRenderingBlock ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("manualRenderingCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("manualRenderingCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::System.Action StringActionHandler + { + get + { + global::System.Action ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("stringActionHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("stringActionHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } // TODO: add binding code here } diff --git a/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/ExpectedTrampolinePropertyTestsTrampolines.cs b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/ExpectedTrampolinePropertyTestsTrampolines.cs index e6dbd4fde887..fa4919703a99 100644 --- a/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/ExpectedTrampolinePropertyTestsTrampolines.cs +++ b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/ExpectedTrampolinePropertyTestsTrampolines.cs @@ -2,7 +2,10 @@ #nullable enable +using AVFoundation; +using CoreImage; using Foundation; +using Microsoft.Macios.Generator.Tests.Classes.Data.TestNamespace; using ObjCBindings; using ObjCRuntime; using System; @@ -12,6 +15,282 @@ namespace ObjCRuntime; static partial class Trampolines { // Generate trampolines for compilation + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::Microsoft.Macios.Generator.Tests.Classes.Data.TestNamespace.TrampolinePropertyTests.CreateObject))] + unsafe internal delegate global::ObjCRuntime.NativeHandle DTrampolinePropertyTests.CreateObject (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle obj); + + /// This class bridges native block invocations that call into C# + static internal class SDTrampolinePropertyTests.CreateObject + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::Microsoft.Macios.Generator.Tests.Classes.Data.TestNamespace.TrampolinePropertyTests.CreateObject))] + internal static unsafe global::ObjCRuntime.NativeHandle Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle obj) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + var ret = del (global::ObjCRuntime.Runtime.GetNSObject (obj)!); + return global::ObjCRuntime.Runtime.RetainAndAutoreleaseNSObject (ret); + } + return default; + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::Microsoft.Macios.Generator.Tests.Classes.Data.TestNamespace.TrampolinePropertyTests.CreateObject? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::Microsoft.Macios.Generator.Tests.Classes.Data.TestNamespace.TrampolinePropertyTests.CreateObject callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDTrampolinePropertyTests.CreateObject), nameof (Invoke)); + } + } + // TODO: generate trampoline for Microsoft.Macios.Generator.Tests.Classes.Data.TestNamespace.TrampolinePropertyTests.CreateObject + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::System.Action))] + unsafe internal delegate void DAction (global::System.IntPtr block_ptr); + + /// This class bridges native block invocations that call into C# + static internal class SDAction + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::System.Action))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::System.Action? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::System.Action callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAction), nameof (Invoke)); + } + } // TODO: generate trampoline for System.Action + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::CoreImage.CIKernelRoiCallback))] + unsafe internal delegate global::CoreGraphics.CGRect DCIKernelRoiCallback (global::System.IntPtr block_ptr, int index, global::CoreGraphics.CGRect rect); + + /// This class bridges native block invocations that call into C# + static internal class SDCIKernelRoiCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::CoreImage.CIKernelRoiCallback))] + internal static unsafe global::CoreGraphics.CGRect Invoke (global::System.IntPtr block_ptr, int index, global::CoreGraphics.CGRect rect) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + var ret = del (index, rect); + return ret; + } + return default; + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::CoreImage.CIKernelRoiCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::CoreImage.CIKernelRoiCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDCIKernelRoiCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for CoreImage.CIKernelRoiCallback + + + /// This class bridges native block invocations that call into C# + static internal class SDActionArity1V0 + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::System.Action))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle obj) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget> (block_ptr); + if (del is not null) + { + del (global::CoreFoundation.CFString.FromHandle (obj)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::System.Action? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::System.Action callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDActionArity1V0), nameof (Invoke)); + } + } + // TODO: generate trampoline for System.Action + + + /// This class bridges native block invocations that call into C# + static internal class SDActionArity1V1 + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::System.Action))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, int obj) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget> (block_ptr); + if (del is not null) + { + del (obj); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::System.Action? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::System.Action callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDActionArity1V1), nameof (Invoke)); + } + } + // TODO: generate trampoline for System.Action + + + /// This class bridges native block invocations that call into C# + static internal class SDActionArity1V2 + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::System.Action))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, byte obj) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget> (block_ptr); + if (del is not null) + { + del (obj != 0); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::System.Action? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::System.Action callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDActionArity1V2), nameof (Invoke)); + } + } + // TODO: generate trampoline for System.Action + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler))] + unsafe internal delegate void DAVAssetImageGenerateAsynchronouslyForTimeCompletionHandler (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle imageRef, global::CoreMedia.CMTime actualTime, global::ObjCRuntime.NativeHandle error); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAssetImageGenerateAsynchronouslyForTimeCompletionHandler + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle imageRef, global::CoreMedia.CMTime actualTime, global::ObjCRuntime.NativeHandle error) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetINativeObject (imageRef, false)!, actualTime, global::ObjCRuntime.Runtime.GetNSObject (error)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAssetImageGenerateAsynchronouslyForTimeCompletionHandler), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAudioEngineManualRenderingBlock))] + unsafe internal delegate global::System.IntPtr DAVAudioEngineManualRenderingBlock (global::System.IntPtr block_ptr, uint numberOfFrames, global::ObjCRuntime.NativeHandle outBuffer, int* outError); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAudioEngineManualRenderingBlock + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAudioEngineManualRenderingBlock))] + internal static unsafe global::System.IntPtr Invoke (global::System.IntPtr block_ptr, uint numberOfFrames, global::ObjCRuntime.NativeHandle outBuffer, int* outError) + { + *outError = default; + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + var ret = del (numberOfFrames, new global::AudioToolbox.AudioBuffers (outBuffer), ref global::System.Runtime.CompilerServices.Unsafe.AsRef (outError)); + return (IntPtr) (long) ret; + } + return default; + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAudioEngineManualRenderingBlock? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAudioEngineManualRenderingBlock callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAudioEngineManualRenderingBlock), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAudioEngineManualRenderingBlock + } diff --git a/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/TrampolinePropertyTests.cs b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/TrampolinePropertyTests.cs index 38701c21642c..1cfb989abb26 100644 --- a/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/TrampolinePropertyTests.cs +++ b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/TrampolinePropertyTests.cs @@ -8,6 +8,8 @@ namespace Microsoft.Macios.Generator.Tests.Classes.Data; using System; using System.Runtime.Versioning; +using AVFoundation; +using CoreImage; using CoreGraphics; using Foundation; using ObjCBindings; @@ -18,6 +20,46 @@ namespace TestNamespace; [BindingType] public partial class TrampolinePropertyTests { + public delegate NSObject CreateObject (NSObject obj); + + [Export ("createObjectHandler", ArgumentSemantic.Copy)] + public partial CreateObject CreateObjectHandler { get; set; } + [Export ("completionHandler", ArgumentSemantic.Copy)] public partial Action CompletionHandler { get; set; } + + // Duplicate property using Action + [Export ("duplicateCompletionHandler", ArgumentSemantic.Copy)] + public partial Action DuplicateCompletionHandler { get; set; } + + [Export ("imageGeneratorCompletionHandler", ArgumentSemantic.Copy)] + public partial AVAssetImageGenerator.AsynchronouslyForTimeCompletionHandler ImageGeneratorCompletionHandler { get; set; } + + // Property using CIKernelRoiCallback + [Export ("kernelRoiCallback", ArgumentSemantic.Copy)] + public partial CIKernelRoiCallback KernelRoiCallback { get; set; }] + + // Property using Action + [Export ("stringActionHandler", ArgumentSemantic.Copy)] + public partial Action StringActionHandler { get; set; } + + // Property using Action + [Export ("intActionHandler", ArgumentSemantic.Copy)] + public partial Action IntActionHandler { get; set; } + + // Property using Action + [Export ("boolActionHandler", ArgumentSemantic.Copy)] + public partial Action BoolActionHandler { get; set; } + + // Property using AVAssetImageGenerator.AsynchronouslyForTimeCompletionHandler + [Export ("imageGeneratorCompletionHandler", ArgumentSemantic.Copy)] + public partial AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler ImageGeneratorCompletionHandler { get; set; } + + // Property using CIKernelRoiCallback + [Export ("kernelRoiCallback", ArgumentSemantic.Copy)] + public partial CIKernelRoiCallback KernelRoiCallback { get; set; } + + // Property using AVAssetImageGenerator.AsynchronouslyForTimeCompletionHandler + [Export ("manualRenderingCallback", ArgumentSemantic.Copy)] + public partial AVAudioEngineManualRenderingBlock ManualRendering { get; set; } } diff --git a/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/Trampolines/AVFoundationTrampolines.cs b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/Trampolines/AVFoundationTrampolines.cs new file mode 100644 index 000000000000..fd60de91d747 --- /dev/null +++ b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/Trampolines/AVFoundationTrampolines.cs @@ -0,0 +1,129 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System; +using System.Runtime.Versioning; +using AVFoundation; +using Foundation; +using ObjCBindings; +using ObjCRuntime; + +namespace TestNamespace; + +[BindingType] +public class AVFoundationTrampolines { + + [Export ("avAssetImageGenerateAsynchronouslyForTimeCompletionHandler", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler { get; set; } + + [Export ("avAssetImageGeneratorCompletionHandler", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAssetImageGeneratorCompletionHandler AVAssetImageGeneratorCompletionHandler { get; set; } + + [Export ("avAssetImageGeneratorCompletionHandler2", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAssetImageGeneratorCompletionHandler2 AVAssetImageGeneratorCompletionHandler2 { get; set; } + + [Export ("avAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler AVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler { get; set; } + + [Export ("avAudioConverterInputHandler", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAudioConverterInputHandler AVAudioConverterInputHandler { get; set; } + + [Export ("avAudioEngineManualRenderingBlock", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAudioEngineManualRenderingBlock AVAudioEngineManualRenderingBlock { get; set; } + + [Export ("avAudioIONodeInputBlock", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAudioIONodeInputBlock AVAudioIONodeInputBlock { get; set; } + + [Export ("avAudioInputNodeMutedSpeechEventListener", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAudioInputNodeMutedSpeechEventListener AVAudioInputNodeMutedSpeechEventListener { get; set; } + + [Export ("avAudioNodeTapBlock", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAudioNodeTapBlock AVAudioNodeTapBlock { get; set; } + + [Export ("avAudioSequencerUserCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAudioSequencerUserCallback AVAudioSequencerUserCallback { get; set; } + + [Export ("avAudioSinkNodeReceiverHandlerRaw", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAudioSinkNodeReceiverHandlerRaw AVAudioSinkNodeReceiverHandlerRaw { get; set; } + + [Export ("avAudioSourceNodeRenderHandlerRaw", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAudioSourceNodeRenderHandlerRaw AVAudioSourceNodeRenderHandlerRaw { get; set; } + + [Export ("avAudioUnitComponentFilter", ArgumentSemantic.Copy)] + public partial AVFoundation.AVAudioUnitComponentFilter AVAudioUnitComponentFilter { get; set; } + + [Export ("avCaptureCompletionHandler", ArgumentSemantic.Copy)] + public partial AVFoundation.AVCaptureCompletionHandler AVCaptureCompletionHandler { get; set; } + + [Export ("avCaptureIndexPickerCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVCaptureIndexPickerCallback AVCaptureIndexPickerCallback { get; set; } + + [Export ("avCaptureIndexPickerTitleTransform", ArgumentSemantic.Copy)] + public partial AVFoundation.AVCaptureIndexPickerTitleTransform AVCaptureIndexPickerTitleTransform { get; set; } + + [Export ("avCaptureSliderCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVCaptureSliderCallback AVCaptureSliderCallback { get; set; } + + [Export ("avCaptureSystemExposureBiasSliderCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVCaptureSystemExposureBiasSliderCallback AVCaptureSystemExposureBiasSliderCallback { get; set; } + + [Export ("avCaptureSystemZoomSliderCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVCaptureSystemZoomSliderCallback AVCaptureSystemZoomSliderCallback { get; set; } + + [Export ("avCompletion", ArgumentSemantic.Copy)] + public partial AVFoundation.AVCompletion AVCompletion { get; set; } + + [Export ("avExternalStorageDeviceRequestAccessCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVExternalStorageDeviceRequestAccessCallback AVExternalStorageDeviceRequestAccessCallback { get; set; } + + [Export ("avMusicEventEnumerationBlock", ArgumentSemantic.Copy)] + public partial AVFoundation.AVMusicEventEnumerationBlock AVMusicEventEnumerationBlock { get; set; } + + [Export ("avMutableCompositionInsertHandler", ArgumentSemantic.Copy)] + public partial AVFoundation.AVMutableCompositionInsertHandler AVMutableCompositionInsertHandler { get; set; } + + [Export ("avMutableVideoCompositionCreateApplier", ArgumentSemantic.Copy)] + public partial AVFoundation.AVMutableVideoCompositionCreateApplier AVMutableVideoCompositionCreateApplier { get; set; } + + [Export ("avMutableVideoCompositionCreateCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVMutableVideoCompositionCreateCallback AVMutableVideoCompositionCreateCallback { get; set; } + + [Export ("avPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback AVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback { get; set; } + + [Export ("avPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback AVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback { get; set; } + + [Export ("avPlayerItemIntegratedTimelineSeekCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVPlayerItemIntegratedTimelineSeekCallback AVPlayerItemIntegratedTimelineSeekCallback { get; set; } + + [Export ("avRequestAccessStatus", ArgumentSemantic.Copy)] + public partial AVFoundation.AVRequestAccessStatus AVRequestAccessStatus { get; set; } + + [Export ("avSampleBufferGeneratorBatchMakeReadyCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVSampleBufferGeneratorBatchMakeReadyCallback AVSampleBufferGeneratorBatchMakeReadyCallback { get; set; } + + [Export ("avSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback AVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback { get; set; } + + [Export ("avSpeechSynthesisProviderOutputBlock", ArgumentSemantic.Copy)] + public partial AVFoundation.AVSpeechSynthesisProviderOutputBlock AVSpeechSynthesisProviderOutputBlock { get; set; } + + [Export ("avSpeechSynthesizerBufferCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVSpeechSynthesizerBufferCallback AVSpeechSynthesizerBufferCallback { get; set; } + + [Export ("avSpeechSynthesizerMarkerCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVSpeechSynthesizerMarkerCallback AVSpeechSynthesizerMarkerCallback { get; set; } + + [Export ("avSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback AVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback { get; set; } + + [Export ("avVideoCompositionCreateApplier", ArgumentSemantic.Copy)] + public partial AVFoundation.AVVideoCompositionCreateApplier AVVideoCompositionCreateApplier { get; set; } + + [Export ("avVideoCompositionCreateCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVVideoCompositionCreateCallback AVVideoCompositionCreateCallback { get; set; } + + [Export ("avVideoCompositionDetermineValidityCallback", ArgumentSemantic.Copy)] + public partial AVFoundation.AVVideoCompositionDetermineValidityCallback AVVideoCompositionDetermineValidityCallback { get; set; } +} diff --git a/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/Trampolines/ExpectedAVFoundationTrampolinesProperties.cs b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/Trampolines/ExpectedAVFoundationTrampolinesProperties.cs new file mode 100644 index 000000000000..7f49b0a57cf8 --- /dev/null +++ b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/Trampolines/ExpectedAVFoundationTrampolinesProperties.cs @@ -0,0 +1,1210 @@ +// + +#nullable enable + +using AVFoundation; +using Foundation; +using ObjCBindings; +using ObjCRuntime; +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; +using System.Threading.Tasks; + +namespace TestNamespace; + +[Register ("AVFoundationTrampolines", true)] +public class AVFoundationTrampolines +{ + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAssetImageGenerateAsynchronouslyForTimeCompletionHandlerX = "avAssetImageGenerateAsynchronouslyForTimeCompletionHandler"; + static readonly global::ObjCRuntime.NativeHandle selAvAssetImageGenerateAsynchronouslyForTimeCompletionHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("avAssetImageGenerateAsynchronouslyForTimeCompletionHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAssetImageGenerateAsynchronouslyForTimeCompletionHandler_X = "setAvAssetImageGenerateAsynchronouslyForTimeCompletionHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAssetImageGenerateAsynchronouslyForTimeCompletionHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAssetImageGenerateAsynchronouslyForTimeCompletionHandler:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAssetImageGeneratorCompletionHandlerX = "avAssetImageGeneratorCompletionHandler"; + static readonly global::ObjCRuntime.NativeHandle selAvAssetImageGeneratorCompletionHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("avAssetImageGeneratorCompletionHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAssetImageGeneratorCompletionHandler_X = "setAvAssetImageGeneratorCompletionHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAssetImageGeneratorCompletionHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAssetImageGeneratorCompletionHandler:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAssetImageGeneratorCompletionHandler2X = "avAssetImageGeneratorCompletionHandler2"; + static readonly global::ObjCRuntime.NativeHandle selAvAssetImageGeneratorCompletionHandler2XHandle = global::ObjCRuntime.Selector.GetHandle ("avAssetImageGeneratorCompletionHandler2"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAssetImageGeneratorCompletionHandler2_X = "setAvAssetImageGeneratorCompletionHandler2:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAssetImageGeneratorCompletionHandler2_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAssetImageGeneratorCompletionHandler2:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandlerX = "avAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler"; + static readonly global::ObjCRuntime.NativeHandle selAvAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("avAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler_X = "setAvAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAudioConverterInputHandlerX = "avAudioConverterInputHandler"; + static readonly global::ObjCRuntime.NativeHandle selAvAudioConverterInputHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("avAudioConverterInputHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAudioConverterInputHandler_X = "setAvAudioConverterInputHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAudioConverterInputHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAudioConverterInputHandler:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAudioEngineManualRenderingBlockX = "avAudioEngineManualRenderingBlock"; + static readonly global::ObjCRuntime.NativeHandle selAvAudioEngineManualRenderingBlockXHandle = global::ObjCRuntime.Selector.GetHandle ("avAudioEngineManualRenderingBlock"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAudioEngineManualRenderingBlock_X = "setAvAudioEngineManualRenderingBlock:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAudioEngineManualRenderingBlock_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAudioEngineManualRenderingBlock:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAudioIONodeInputBlockX = "avAudioIONodeInputBlock"; + static readonly global::ObjCRuntime.NativeHandle selAvAudioIONodeInputBlockXHandle = global::ObjCRuntime.Selector.GetHandle ("avAudioIONodeInputBlock"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAudioIONodeInputBlock_X = "setAvAudioIONodeInputBlock:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAudioIONodeInputBlock_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAudioIONodeInputBlock:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAudioInputNodeMutedSpeechEventListenerX = "avAudioInputNodeMutedSpeechEventListener"; + static readonly global::ObjCRuntime.NativeHandle selAvAudioInputNodeMutedSpeechEventListenerXHandle = global::ObjCRuntime.Selector.GetHandle ("avAudioInputNodeMutedSpeechEventListener"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAudioInputNodeMutedSpeechEventListener_X = "setAvAudioInputNodeMutedSpeechEventListener:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAudioInputNodeMutedSpeechEventListener_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAudioInputNodeMutedSpeechEventListener:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAudioNodeTapBlockX = "avAudioNodeTapBlock"; + static readonly global::ObjCRuntime.NativeHandle selAvAudioNodeTapBlockXHandle = global::ObjCRuntime.Selector.GetHandle ("avAudioNodeTapBlock"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAudioNodeTapBlock_X = "setAvAudioNodeTapBlock:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAudioNodeTapBlock_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAudioNodeTapBlock:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAudioSequencerUserCallbackX = "avAudioSequencerUserCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvAudioSequencerUserCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avAudioSequencerUserCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAudioSequencerUserCallback_X = "setAvAudioSequencerUserCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAudioSequencerUserCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAudioSequencerUserCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAudioSinkNodeReceiverHandlerRawX = "avAudioSinkNodeReceiverHandlerRaw"; + static readonly global::ObjCRuntime.NativeHandle selAvAudioSinkNodeReceiverHandlerRawXHandle = global::ObjCRuntime.Selector.GetHandle ("avAudioSinkNodeReceiverHandlerRaw"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAudioSinkNodeReceiverHandlerRaw_X = "setAvAudioSinkNodeReceiverHandlerRaw:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAudioSinkNodeReceiverHandlerRaw_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAudioSinkNodeReceiverHandlerRaw:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAudioSourceNodeRenderHandlerRawX = "avAudioSourceNodeRenderHandlerRaw"; + static readonly global::ObjCRuntime.NativeHandle selAvAudioSourceNodeRenderHandlerRawXHandle = global::ObjCRuntime.Selector.GetHandle ("avAudioSourceNodeRenderHandlerRaw"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAudioSourceNodeRenderHandlerRaw_X = "setAvAudioSourceNodeRenderHandlerRaw:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAudioSourceNodeRenderHandlerRaw_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAudioSourceNodeRenderHandlerRaw:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvAudioUnitComponentFilterX = "avAudioUnitComponentFilter"; + static readonly global::ObjCRuntime.NativeHandle selAvAudioUnitComponentFilterXHandle = global::ObjCRuntime.Selector.GetHandle ("avAudioUnitComponentFilter"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvAudioUnitComponentFilter_X = "setAvAudioUnitComponentFilter:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvAudioUnitComponentFilter_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvAudioUnitComponentFilter:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvCaptureCompletionHandlerX = "avCaptureCompletionHandler"; + static readonly global::ObjCRuntime.NativeHandle selAvCaptureCompletionHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("avCaptureCompletionHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvCaptureCompletionHandler_X = "setAvCaptureCompletionHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvCaptureCompletionHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvCaptureCompletionHandler:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvCaptureIndexPickerCallbackX = "avCaptureIndexPickerCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvCaptureIndexPickerCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avCaptureIndexPickerCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvCaptureIndexPickerCallback_X = "setAvCaptureIndexPickerCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvCaptureIndexPickerCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvCaptureIndexPickerCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvCaptureIndexPickerTitleTransformX = "avCaptureIndexPickerTitleTransform"; + static readonly global::ObjCRuntime.NativeHandle selAvCaptureIndexPickerTitleTransformXHandle = global::ObjCRuntime.Selector.GetHandle ("avCaptureIndexPickerTitleTransform"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvCaptureIndexPickerTitleTransform_X = "setAvCaptureIndexPickerTitleTransform:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvCaptureIndexPickerTitleTransform_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvCaptureIndexPickerTitleTransform:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvCaptureSliderCallbackX = "avCaptureSliderCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvCaptureSliderCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avCaptureSliderCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvCaptureSliderCallback_X = "setAvCaptureSliderCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvCaptureSliderCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvCaptureSliderCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvCaptureSystemExposureBiasSliderCallbackX = "avCaptureSystemExposureBiasSliderCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvCaptureSystemExposureBiasSliderCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avCaptureSystemExposureBiasSliderCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvCaptureSystemExposureBiasSliderCallback_X = "setAvCaptureSystemExposureBiasSliderCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvCaptureSystemExposureBiasSliderCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvCaptureSystemExposureBiasSliderCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvCaptureSystemZoomSliderCallbackX = "avCaptureSystemZoomSliderCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvCaptureSystemZoomSliderCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avCaptureSystemZoomSliderCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvCaptureSystemZoomSliderCallback_X = "setAvCaptureSystemZoomSliderCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvCaptureSystemZoomSliderCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvCaptureSystemZoomSliderCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvCompletionX = "avCompletion"; + static readonly global::ObjCRuntime.NativeHandle selAvCompletionXHandle = global::ObjCRuntime.Selector.GetHandle ("avCompletion"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvCompletion_X = "setAvCompletion:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvCompletion_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvCompletion:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvExternalStorageDeviceRequestAccessCallbackX = "avExternalStorageDeviceRequestAccessCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvExternalStorageDeviceRequestAccessCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avExternalStorageDeviceRequestAccessCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvExternalStorageDeviceRequestAccessCallback_X = "setAvExternalStorageDeviceRequestAccessCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvExternalStorageDeviceRequestAccessCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvExternalStorageDeviceRequestAccessCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvMusicEventEnumerationBlockX = "avMusicEventEnumerationBlock"; + static readonly global::ObjCRuntime.NativeHandle selAvMusicEventEnumerationBlockXHandle = global::ObjCRuntime.Selector.GetHandle ("avMusicEventEnumerationBlock"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvMusicEventEnumerationBlock_X = "setAvMusicEventEnumerationBlock:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvMusicEventEnumerationBlock_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvMusicEventEnumerationBlock:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvMutableCompositionInsertHandlerX = "avMutableCompositionInsertHandler"; + static readonly global::ObjCRuntime.NativeHandle selAvMutableCompositionInsertHandlerXHandle = global::ObjCRuntime.Selector.GetHandle ("avMutableCompositionInsertHandler"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvMutableCompositionInsertHandler_X = "setAvMutableCompositionInsertHandler:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvMutableCompositionInsertHandler_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvMutableCompositionInsertHandler:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvMutableVideoCompositionCreateApplierX = "avMutableVideoCompositionCreateApplier"; + static readonly global::ObjCRuntime.NativeHandle selAvMutableVideoCompositionCreateApplierXHandle = global::ObjCRuntime.Selector.GetHandle ("avMutableVideoCompositionCreateApplier"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvMutableVideoCompositionCreateApplier_X = "setAvMutableVideoCompositionCreateApplier:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvMutableVideoCompositionCreateApplier_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvMutableVideoCompositionCreateApplier:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvMutableVideoCompositionCreateCallbackX = "avMutableVideoCompositionCreateCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvMutableVideoCompositionCreateCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avMutableVideoCompositionCreateCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvMutableVideoCompositionCreateCallback_X = "setAvMutableVideoCompositionCreateCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvMutableVideoCompositionCreateCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvMutableVideoCompositionCreateCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallbackX = "avPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback_X = "setAvPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallbackX = "avPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback_X = "setAvPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvPlayerItemIntegratedTimelineSeekCallbackX = "avPlayerItemIntegratedTimelineSeekCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvPlayerItemIntegratedTimelineSeekCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avPlayerItemIntegratedTimelineSeekCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvPlayerItemIntegratedTimelineSeekCallback_X = "setAvPlayerItemIntegratedTimelineSeekCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvPlayerItemIntegratedTimelineSeekCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvPlayerItemIntegratedTimelineSeekCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvRequestAccessStatusX = "avRequestAccessStatus"; + static readonly global::ObjCRuntime.NativeHandle selAvRequestAccessStatusXHandle = global::ObjCRuntime.Selector.GetHandle ("avRequestAccessStatus"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvRequestAccessStatus_X = "setAvRequestAccessStatus:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvRequestAccessStatus_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvRequestAccessStatus:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvSampleBufferGeneratorBatchMakeReadyCallbackX = "avSampleBufferGeneratorBatchMakeReadyCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvSampleBufferGeneratorBatchMakeReadyCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avSampleBufferGeneratorBatchMakeReadyCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvSampleBufferGeneratorBatchMakeReadyCallback_X = "setAvSampleBufferGeneratorBatchMakeReadyCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvSampleBufferGeneratorBatchMakeReadyCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvSampleBufferGeneratorBatchMakeReadyCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvSampleBufferVideoRendererLoadVideoPerformanceMetricsCallbackX = "avSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvSampleBufferVideoRendererLoadVideoPerformanceMetricsCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback_X = "setAvSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvSpeechSynthesisProviderOutputBlockX = "avSpeechSynthesisProviderOutputBlock"; + static readonly global::ObjCRuntime.NativeHandle selAvSpeechSynthesisProviderOutputBlockXHandle = global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesisProviderOutputBlock"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvSpeechSynthesisProviderOutputBlock_X = "setAvSpeechSynthesisProviderOutputBlock:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvSpeechSynthesisProviderOutputBlock_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvSpeechSynthesisProviderOutputBlock:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvSpeechSynthesizerBufferCallbackX = "avSpeechSynthesizerBufferCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvSpeechSynthesizerBufferCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesizerBufferCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvSpeechSynthesizerBufferCallback_X = "setAvSpeechSynthesizerBufferCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvSpeechSynthesizerBufferCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvSpeechSynthesizerBufferCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvSpeechSynthesizerMarkerCallbackX = "avSpeechSynthesizerMarkerCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvSpeechSynthesizerMarkerCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesizerMarkerCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvSpeechSynthesizerMarkerCallback_X = "setAvSpeechSynthesizerMarkerCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvSpeechSynthesizerMarkerCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvSpeechSynthesizerMarkerCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvSpeechSynthesizerRequestPersonalVoiceAuthorizationCallbackX = "avSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvSpeechSynthesizerRequestPersonalVoiceAuthorizationCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback_X = "setAvSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvVideoCompositionCreateApplierX = "avVideoCompositionCreateApplier"; + static readonly global::ObjCRuntime.NativeHandle selAvVideoCompositionCreateApplierXHandle = global::ObjCRuntime.Selector.GetHandle ("avVideoCompositionCreateApplier"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvVideoCompositionCreateApplier_X = "setAvVideoCompositionCreateApplier:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvVideoCompositionCreateApplier_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvVideoCompositionCreateApplier:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvVideoCompositionCreateCallbackX = "avVideoCompositionCreateCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvVideoCompositionCreateCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avVideoCompositionCreateCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvVideoCompositionCreateCallback_X = "setAvVideoCompositionCreateCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvVideoCompositionCreateCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvVideoCompositionCreateCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selAvVideoCompositionDetermineValidityCallbackX = "avVideoCompositionDetermineValidityCallback"; + static readonly global::ObjCRuntime.NativeHandle selAvVideoCompositionDetermineValidityCallbackXHandle = global::ObjCRuntime.Selector.GetHandle ("avVideoCompositionDetermineValidityCallback"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + const string selSetAvVideoCompositionDetermineValidityCallback_X = "setAvVideoCompositionDetermineValidityCallback:"; + static readonly global::ObjCRuntime.NativeHandle selSetAvVideoCompositionDetermineValidityCallback_XHandle = global::ObjCRuntime.Selector.GetHandle ("setAvVideoCompositionDetermineValidityCallback:"); + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + static readonly global::ObjCRuntime.NativeHandle class_ptr = global::ObjCRuntime.Class.GetHandle ("AVFoundationTrampolines"); + + /// The Objective-C class handle for this class. + /// The pointer to the Objective-C class. + /// + /// Each managed class mirrors an unmanaged Objective-C class. + /// This value contains the pointer to the Objective-C class. + /// It is similar to calling the managed or the native objc_getClass method with the type name. + /// + public override global::ObjCRuntime.NativeHandle ClassHandle => class_ptr; + + /// Creates a new with default values. + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + [DesignatedInitializer] + [Export ("init")] + public AVFoundationTrampolines () : base (global::Foundation.NSObjectFlag.Empty) + { + if (IsDirectBinding) + InitializeHandle (global::ObjCRuntime.Messaging.IntPtr_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("init")), "init"); + else + InitializeHandle (global::ObjCRuntime.Messaging.IntPtr_objc_msgSendSuper (this.SuperHandle, global::ObjCRuntime.Selector.GetHandle ("init")), "init"); + } + + /// Constructor to call on derived classes to skip initialization and merely allocate the object. + /// Unused sentinel value, pass NSObjectFlag.Empty. + /// + /// + /// This constructor should be called by derived classes when they completely construct the object in managed code and merely want the runtime to allocate and initialize the . + /// This is required to implement the two-step initialization process that Objective-C uses, the first step is to perform the object allocation, the second step is to initialize the object. + /// When developers invoke this constructor, they take advantage of a direct path that goes all the way up to to merely allocate the object's memory and bind the Objective-C and C# objects together. + /// The actual initialization of the object is up to the developer. + /// + /// + /// This constructor is typically used by the binding generator to allocate the object, but prevent the actual initialization to take place. + /// Once the allocation has taken place, the constructor has to initialize the object. + /// With constructors generated by the binding generator this means that it manually invokes one of the "init" methods to initialize the object. + /// + /// It is the developer's responsibility to completely initialize the object if they chain up using this constructor chain. + /// + /// In general, if the developer's constructor invokes the corresponding base implementation, then it should also call an Objective-C init method. + /// If this is not the case, developers should instead chain to the proper constructor in their class. + /// + /// + /// The argument value is ignored and merely ensures that the only code that is executed is the construction phase is the basic allocation and runtime type registration. + /// Typically the chaining would look like this: + /// + /// + /// + /// + /// + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + [EditorBrowsable (EditorBrowsableState.Advanced)] + protected AVFoundationTrampolines (global::Foundation.NSObjectFlag t) : base (t) {} + + /// A constructor used when creating managed representations of unmanaged objects. Called by the runtime. + /// Pointer (handle) to the unmanaged object. + /// + /// + /// This constructor is invoked by the runtime infrastructure () to create a new managed representation for a pointer to an unmanaged Objective-C object. + /// Developers should not invoke this method directly, instead they should call as it will prevent two instances of a managed object pointing to the same native object. + /// + /// + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + [EditorBrowsable (EditorBrowsableState.Advanced)] + protected internal AVFoundationTrampolines (global::ObjCRuntime.NativeHandle handle) : base (handle) {} + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler + { + get + { + global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAssetImageGenerateAsynchronouslyForTimeCompletionHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAssetImageGenerateAsynchronouslyForTimeCompletionHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAssetImageGeneratorCompletionHandler AVAssetImageGeneratorCompletionHandler + { + get + { + global::AVFoundation.AVAssetImageGeneratorCompletionHandler ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAssetImageGeneratorCompletionHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAssetImageGeneratorCompletionHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAssetImageGeneratorCompletionHandler2 AVAssetImageGeneratorCompletionHandler2 + { + get + { + global::AVFoundation.AVAssetImageGeneratorCompletionHandler2 ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAssetImageGeneratorCompletionHandler2")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAssetImageGeneratorCompletionHandler2")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler AVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler + { + get + { + global::AVFoundation.AVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAudioConverterInputHandler AVAudioConverterInputHandler + { + get + { + global::AVFoundation.AVAudioConverterInputHandler ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioConverterInputHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioConverterInputHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAudioEngineManualRenderingBlock AVAudioEngineManualRenderingBlock + { + get + { + global::AVFoundation.AVAudioEngineManualRenderingBlock ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioEngineManualRenderingBlock")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioEngineManualRenderingBlock")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAudioInputNodeMutedSpeechEventListener AVAudioInputNodeMutedSpeechEventListener + { + get + { + global::AVFoundation.AVAudioInputNodeMutedSpeechEventListener ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioInputNodeMutedSpeechEventListener")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioInputNodeMutedSpeechEventListener")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAudioIONodeInputBlock AVAudioIONodeInputBlock + { + get + { + global::AVFoundation.AVAudioIONodeInputBlock ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioIONodeInputBlock")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioIONodeInputBlock")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAudioNodeTapBlock AVAudioNodeTapBlock + { + get + { + global::AVFoundation.AVAudioNodeTapBlock ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioNodeTapBlock")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioNodeTapBlock")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAudioSequencerUserCallback AVAudioSequencerUserCallback + { + get + { + global::AVFoundation.AVAudioSequencerUserCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioSequencerUserCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioSequencerUserCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAudioSinkNodeReceiverHandlerRaw AVAudioSinkNodeReceiverHandlerRaw + { + get + { + global::AVFoundation.AVAudioSinkNodeReceiverHandlerRaw ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioSinkNodeReceiverHandlerRaw")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioSinkNodeReceiverHandlerRaw")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAudioSourceNodeRenderHandlerRaw AVAudioSourceNodeRenderHandlerRaw + { + get + { + global::AVFoundation.AVAudioSourceNodeRenderHandlerRaw ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioSourceNodeRenderHandlerRaw")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioSourceNodeRenderHandlerRaw")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVAudioUnitComponentFilter AVAudioUnitComponentFilter + { + get + { + global::AVFoundation.AVAudioUnitComponentFilter ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioUnitComponentFilter")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avAudioUnitComponentFilter")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVCaptureCompletionHandler AVCaptureCompletionHandler + { + get + { + global::AVFoundation.AVCaptureCompletionHandler ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureCompletionHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureCompletionHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVCaptureIndexPickerCallback AVCaptureIndexPickerCallback + { + get + { + global::AVFoundation.AVCaptureIndexPickerCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureIndexPickerCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureIndexPickerCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVCaptureIndexPickerTitleTransform AVCaptureIndexPickerTitleTransform + { + get + { + global::AVFoundation.AVCaptureIndexPickerTitleTransform ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureIndexPickerTitleTransform")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureIndexPickerTitleTransform")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVCaptureSliderCallback AVCaptureSliderCallback + { + get + { + global::AVFoundation.AVCaptureSliderCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureSliderCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureSliderCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVCaptureSystemExposureBiasSliderCallback AVCaptureSystemExposureBiasSliderCallback + { + get + { + global::AVFoundation.AVCaptureSystemExposureBiasSliderCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureSystemExposureBiasSliderCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureSystemExposureBiasSliderCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVCaptureSystemZoomSliderCallback AVCaptureSystemZoomSliderCallback + { + get + { + global::AVFoundation.AVCaptureSystemZoomSliderCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureSystemZoomSliderCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCaptureSystemZoomSliderCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVCompletion AVCompletion + { + get + { + global::AVFoundation.AVCompletion ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCompletion")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avCompletion")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVExternalStorageDeviceRequestAccessCallback AVExternalStorageDeviceRequestAccessCallback + { + get + { + global::AVFoundation.AVExternalStorageDeviceRequestAccessCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avExternalStorageDeviceRequestAccessCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avExternalStorageDeviceRequestAccessCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVMusicEventEnumerationBlock AVMusicEventEnumerationBlock + { + get + { + global::AVFoundation.AVMusicEventEnumerationBlock ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avMusicEventEnumerationBlock")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avMusicEventEnumerationBlock")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVMutableCompositionInsertHandler AVMutableCompositionInsertHandler + { + get + { + global::AVFoundation.AVMutableCompositionInsertHandler ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avMutableCompositionInsertHandler")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avMutableCompositionInsertHandler")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVMutableVideoCompositionCreateApplier AVMutableVideoCompositionCreateApplier + { + get + { + global::AVFoundation.AVMutableVideoCompositionCreateApplier ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avMutableVideoCompositionCreateApplier")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avMutableVideoCompositionCreateApplier")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVMutableVideoCompositionCreateCallback AVMutableVideoCompositionCreateCallback + { + get + { + global::AVFoundation.AVMutableVideoCompositionCreateCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avMutableVideoCompositionCreateCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avMutableVideoCompositionCreateCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback AVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback + { + get + { + global::AVFoundation.AVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback AVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback + { + get + { + global::AVFoundation.AVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVPlayerItemIntegratedTimelineSeekCallback AVPlayerItemIntegratedTimelineSeekCallback + { + get + { + global::AVFoundation.AVPlayerItemIntegratedTimelineSeekCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avPlayerItemIntegratedTimelineSeekCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avPlayerItemIntegratedTimelineSeekCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVRequestAccessStatus AVRequestAccessStatus + { + get + { + global::AVFoundation.AVRequestAccessStatus ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avRequestAccessStatus")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avRequestAccessStatus")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVSampleBufferGeneratorBatchMakeReadyCallback AVSampleBufferGeneratorBatchMakeReadyCallback + { + get + { + global::AVFoundation.AVSampleBufferGeneratorBatchMakeReadyCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSampleBufferGeneratorBatchMakeReadyCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSampleBufferGeneratorBatchMakeReadyCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback AVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback + { + get + { + global::AVFoundation.AVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVSpeechSynthesisProviderOutputBlock AVSpeechSynthesisProviderOutputBlock + { + get + { + global::AVFoundation.AVSpeechSynthesisProviderOutputBlock ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesisProviderOutputBlock")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesisProviderOutputBlock")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVSpeechSynthesizerBufferCallback AVSpeechSynthesizerBufferCallback + { + get + { + global::AVFoundation.AVSpeechSynthesizerBufferCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesizerBufferCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesizerBufferCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVSpeechSynthesizerMarkerCallback AVSpeechSynthesizerMarkerCallback + { + get + { + global::AVFoundation.AVSpeechSynthesizerMarkerCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesizerMarkerCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesizerMarkerCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback AVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback + { + get + { + global::AVFoundation.AVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVVideoCompositionCreateApplier AVVideoCompositionCreateApplier + { + get + { + global::AVFoundation.AVVideoCompositionCreateApplier ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avVideoCompositionCreateApplier")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avVideoCompositionCreateApplier")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVVideoCompositionCreateCallback AVVideoCompositionCreateCallback + { + get + { + global::AVFoundation.AVVideoCompositionCreateCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avVideoCompositionCreateCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avVideoCompositionCreateCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + public partial global::AVFoundation.AVVideoCompositionDetermineValidityCallback AVVideoCompositionDetermineValidityCallback + { + get + { + global::AVFoundation.AVVideoCompositionDetermineValidityCallback ret; + if (IsDirectBinding) { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSend (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avVideoCompositionDetermineValidityCallback")); + } else { + ret = global::ObjCRuntime.Messaging.NativeHandle_objc_msgSendSuper (this.Handle, global::ObjCRuntime.Selector.GetHandle ("avVideoCompositionDetermineValidityCallback")); + } + GC.KeepAlive (this); + return ret; + } + + set + { + throw new NotImplementedException(); + } + } + // TODO: add binding code here +} diff --git a/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/Trampolines/ExpectedAVFoundationTrampolinesTrampolines.cs b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/Trampolines/ExpectedAVFoundationTrampolinesTrampolines.cs new file mode 100644 index 000000000000..cc1a26df6913 --- /dev/null +++ b/tests/rgen/Microsoft.Macios.Generator.Tests/Classes/Data/Trampolines/ExpectedAVFoundationTrampolinesTrampolines.cs @@ -0,0 +1,1369 @@ +// + +#nullable enable + +using AVFoundation; +using Foundation; +using ObjCBindings; +using ObjCRuntime; +using System; + +namespace ObjCRuntime; + +static partial class Trampolines +{ + // Generate trampolines for compilation + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler))] + unsafe internal delegate void DAVAssetImageGenerateAsynchronouslyForTimeCompletionHandler (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle imageRef, global::CoreMedia.CMTime actualTime, global::ObjCRuntime.NativeHandle error); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAssetImageGenerateAsynchronouslyForTimeCompletionHandler + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle imageRef, global::CoreMedia.CMTime actualTime, global::ObjCRuntime.NativeHandle error) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetINativeObject (imageRef, false)!, actualTime, global::ObjCRuntime.Runtime.GetNSObject (error)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAssetImageGenerateAsynchronouslyForTimeCompletionHandler), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAssetImageGenerateAsynchronouslyForTimeCompletionHandler + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAssetImageGeneratorCompletionHandler))] + unsafe internal delegate void DAVAssetImageGeneratorCompletionHandler (global::System.IntPtr block_ptr, global::CoreMedia.CMTime requestedTime, IntPtr imageRef, global::CoreMedia.CMTime actualTime, global::System.IntPtr result, global::ObjCRuntime.NativeHandle error); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAssetImageGeneratorCompletionHandler + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAssetImageGeneratorCompletionHandler))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::CoreMedia.CMTime requestedTime, IntPtr imageRef, global::CoreMedia.CMTime actualTime, global::System.IntPtr result, global::ObjCRuntime.NativeHandle error) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (requestedTime, imageRef, actualTime, (global::AVFoundation.AVAssetImageGeneratorResult) (long) result, global::ObjCRuntime.Runtime.GetNSObject (error)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAssetImageGeneratorCompletionHandler? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAssetImageGeneratorCompletionHandler callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAssetImageGeneratorCompletionHandler), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAssetImageGeneratorCompletionHandler + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAssetImageGeneratorCompletionHandler2))] + unsafe internal delegate void DAVAssetImageGeneratorCompletionHandler2 (global::System.IntPtr block_ptr, global::CoreMedia.CMTime requestedTime, global::ObjCRuntime.NativeHandle imageRef, global::CoreMedia.CMTime actualTime, global::System.IntPtr result, global::ObjCRuntime.NativeHandle error); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAssetImageGeneratorCompletionHandler2 + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAssetImageGeneratorCompletionHandler2))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::CoreMedia.CMTime requestedTime, global::ObjCRuntime.NativeHandle imageRef, global::CoreMedia.CMTime actualTime, global::System.IntPtr result, global::ObjCRuntime.NativeHandle error) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (requestedTime, global::ObjCRuntime.Runtime.GetINativeObject (imageRef, false)!, actualTime, (global::AVFoundation.AVAssetImageGeneratorResult) (long) result, global::ObjCRuntime.Runtime.GetNSObject (error)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAssetImageGeneratorCompletionHandler2? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAssetImageGeneratorCompletionHandler2 callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAssetImageGeneratorCompletionHandler2), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAssetImageGeneratorCompletionHandler2 + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler))] + unsafe internal delegate void DAVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle playbackConfigurationOptions); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle playbackConfigurationOptions) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::CoreFoundation.CFArray.StringArrayFromHandle (playbackConfigurationOptions)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAssetPlaybackAssistantLoadPlaybackConfigurationOptionsHandler + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAudioConverterInputHandler))] + unsafe internal delegate global::ObjCRuntime.NativeHandle DAVAudioConverterInputHandler (global::System.IntPtr block_ptr, uint inNumberOfPackets, global::System.IntPtr* outStatus); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAudioConverterInputHandler + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAudioConverterInputHandler))] + internal static unsafe global::ObjCRuntime.NativeHandle Invoke (global::System.IntPtr block_ptr, uint inNumberOfPackets, global::System.IntPtr* outStatus) + { + *outStatus = default; + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + var ret = del (inNumberOfPackets, out global::System.Runtime.CompilerServices.Unsafe.AsRef (outStatus)); + return global::ObjCRuntime.Runtime.RetainAndAutoreleaseNSObject (ret); + } + return default; + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAudioConverterInputHandler? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAudioConverterInputHandler callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAudioConverterInputHandler), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAudioConverterInputHandler + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAudioEngineManualRenderingBlock))] + unsafe internal delegate global::System.IntPtr DAVAudioEngineManualRenderingBlock (global::System.IntPtr block_ptr, uint numberOfFrames, global::ObjCRuntime.NativeHandle outBuffer, int* outError); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAudioEngineManualRenderingBlock + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAudioEngineManualRenderingBlock))] + internal static unsafe global::System.IntPtr Invoke (global::System.IntPtr block_ptr, uint numberOfFrames, global::ObjCRuntime.NativeHandle outBuffer, int* outError) + { + *outError = default; + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + var ret = del (numberOfFrames, new global::AudioToolbox.AudioBuffers (outBuffer), ref global::System.Runtime.CompilerServices.Unsafe.AsRef (outError)); + return (IntPtr) (long) ret; + } + return default; + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAudioEngineManualRenderingBlock? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAudioEngineManualRenderingBlock callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAudioEngineManualRenderingBlock), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAudioEngineManualRenderingBlock + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAudioIONodeInputBlock))] + unsafe internal delegate global::ObjCRuntime.NativeHandle DAVAudioIONodeInputBlock (global::System.IntPtr block_ptr, uint frameCount); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAudioIONodeInputBlock + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAudioIONodeInputBlock))] + internal static unsafe global::ObjCRuntime.NativeHandle Invoke (global::System.IntPtr block_ptr, uint frameCount) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + var ret = del (frameCount); + return global::ObjCRuntime.Runtime.RetainAndAutoreleaseNativeObject (ret); + } + return default; + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAudioIONodeInputBlock? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAudioIONodeInputBlock callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAudioIONodeInputBlock), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAudioIONodeInputBlock + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAudioInputNodeMutedSpeechEventListener))] + unsafe internal delegate void DAVAudioInputNodeMutedSpeechEventListener (global::System.IntPtr block_ptr, global::System.IntPtr event); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAudioInputNodeMutedSpeechEventListener + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAudioInputNodeMutedSpeechEventListener))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::System.IntPtr event) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del ((global::AVFoundation.AVAudioVoiceProcessingSpeechActivityEvent) (long) event); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAudioInputNodeMutedSpeechEventListener? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAudioInputNodeMutedSpeechEventListener callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAudioInputNodeMutedSpeechEventListener), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAudioInputNodeMutedSpeechEventListener + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAudioNodeTapBlock))] + unsafe internal delegate void DAVAudioNodeTapBlock (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle buffer, global::ObjCRuntime.NativeHandle when); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAudioNodeTapBlock + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAudioNodeTapBlock))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle buffer, global::ObjCRuntime.NativeHandle when) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetNSObject (buffer)!, global::ObjCRuntime.Runtime.GetNSObject (when)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAudioNodeTapBlock? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAudioNodeTapBlock callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAudioNodeTapBlock), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAudioNodeTapBlock + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAudioSequencerUserCallback))] + unsafe internal delegate void DAVAudioSequencerUserCallback (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle track, global::ObjCRuntime.NativeHandle userData, double timeStamp); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAudioSequencerUserCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAudioSequencerUserCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle track, global::ObjCRuntime.NativeHandle userData, double timeStamp) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetNSObject (track)!, global::ObjCRuntime.Runtime.GetNSObject (userData)!, timeStamp); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAudioSequencerUserCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAudioSequencerUserCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAudioSequencerUserCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAudioSequencerUserCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAudioSinkNodeReceiverHandlerRaw))] + unsafe internal delegate int DAVAudioSinkNodeReceiverHandlerRaw (global::System.IntPtr block_ptr, IntPtr timestamp, uint frameCount, IntPtr inputData); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAudioSinkNodeReceiverHandlerRaw + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAudioSinkNodeReceiverHandlerRaw))] + internal static unsafe int Invoke (global::System.IntPtr block_ptr, IntPtr timestamp, uint frameCount, IntPtr inputData) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + var ret = del (timestamp, frameCount, inputData); + return ret; + } + return default; + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAudioSinkNodeReceiverHandlerRaw? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAudioSinkNodeReceiverHandlerRaw callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAudioSinkNodeReceiverHandlerRaw), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAudioSinkNodeReceiverHandlerRaw + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAudioSourceNodeRenderHandlerRaw))] + unsafe internal delegate int DAVAudioSourceNodeRenderHandlerRaw (global::System.IntPtr block_ptr, IntPtr isSilence, IntPtr timestamp, uint frameCount, IntPtr outputData); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAudioSourceNodeRenderHandlerRaw + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAudioSourceNodeRenderHandlerRaw))] + internal static unsafe int Invoke (global::System.IntPtr block_ptr, IntPtr isSilence, IntPtr timestamp, uint frameCount, IntPtr outputData) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + var ret = del (isSilence, timestamp, frameCount, outputData); + return ret; + } + return default; + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAudioSourceNodeRenderHandlerRaw? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAudioSourceNodeRenderHandlerRaw callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAudioSourceNodeRenderHandlerRaw), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAudioSourceNodeRenderHandlerRaw + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVAudioUnitComponentFilter))] + unsafe internal delegate byte DAVAudioUnitComponentFilter (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle comp, byte* stop); + + /// This class bridges native block invocations that call into C# + static internal class SDAVAudioUnitComponentFilter + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVAudioUnitComponentFilter))] + internal static unsafe byte Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle comp, byte* stop) + { + *stop = default; + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + bool __xamarin_bool__1 = *stop != 0; + var ret = del (global::ObjCRuntime.Runtime.GetNSObject (comp)!, ref __xamarin_bool__1); + *stop = __xamarin_bool__1 ? (byte)1 : (byte)0; + return ret ? (byte) 1 : (byte) 0; + } + return default; + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVAudioUnitComponentFilter? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVAudioUnitComponentFilter callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVAudioUnitComponentFilter), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVAudioUnitComponentFilter + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureCompletionHandler))] + unsafe internal delegate void DAVCaptureCompletionHandler (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle imageDataSampleBuffer, global::ObjCRuntime.NativeHandle error); + + /// This class bridges native block invocations that call into C# + static internal class SDAVCaptureCompletionHandler + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureCompletionHandler))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle imageDataSampleBuffer, global::ObjCRuntime.NativeHandle error) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (imageDataSampleBuffer == IntPtr.Zero ? null! : new global::CoreMedia.CMSampleBuffer (imageDataSampleBuffer, false), global::ObjCRuntime.Runtime.GetNSObject (error)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVCaptureCompletionHandler? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVCaptureCompletionHandler callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVCaptureCompletionHandler), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVCaptureCompletionHandler + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureIndexPickerCallback))] + unsafe internal delegate void DAVCaptureIndexPickerCallback (global::System.IntPtr block_ptr, IntPtr newValue); + + /// This class bridges native block invocations that call into C# + static internal class SDAVCaptureIndexPickerCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureIndexPickerCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, IntPtr newValue) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (newValue); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVCaptureIndexPickerCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVCaptureIndexPickerCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVCaptureIndexPickerCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVCaptureIndexPickerCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureIndexPickerTitleTransform))] + unsafe internal delegate global::ObjCRuntime.NativeHandle DAVCaptureIndexPickerTitleTransform (global::System.IntPtr block_ptr, IntPtr index); + + /// This class bridges native block invocations that call into C# + static internal class SDAVCaptureIndexPickerTitleTransform + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureIndexPickerTitleTransform))] + internal static unsafe global::ObjCRuntime.NativeHandle Invoke (global::System.IntPtr block_ptr, IntPtr index) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + var ret = del (index); + return NFString.CreateNative (ret, true); + } + return default; + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVCaptureIndexPickerTitleTransform? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVCaptureIndexPickerTitleTransform callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVCaptureIndexPickerTitleTransform), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVCaptureIndexPickerTitleTransform + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureSliderCallback))] + unsafe internal delegate void DAVCaptureSliderCallback (global::System.IntPtr block_ptr, float newValue); + + /// This class bridges native block invocations that call into C# + static internal class SDAVCaptureSliderCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureSliderCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, float newValue) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (newValue); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVCaptureSliderCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVCaptureSliderCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVCaptureSliderCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVCaptureSliderCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureSystemExposureBiasSliderCallback))] + unsafe internal delegate void DAVCaptureSystemExposureBiasSliderCallback (global::System.IntPtr block_ptr, global::System.Runtime.InteropServices.NFloat exposureTargetBias); + + /// This class bridges native block invocations that call into C# + static internal class SDAVCaptureSystemExposureBiasSliderCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureSystemExposureBiasSliderCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::System.Runtime.InteropServices.NFloat exposureTargetBias) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (exposureTargetBias); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVCaptureSystemExposureBiasSliderCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVCaptureSystemExposureBiasSliderCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVCaptureSystemExposureBiasSliderCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVCaptureSystemExposureBiasSliderCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureSystemZoomSliderCallback))] + unsafe internal delegate void DAVCaptureSystemZoomSliderCallback (global::System.IntPtr block_ptr, global::System.Runtime.InteropServices.NFloat videoZoomFactor); + + /// This class bridges native block invocations that call into C# + static internal class SDAVCaptureSystemZoomSliderCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVCaptureSystemZoomSliderCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::System.Runtime.InteropServices.NFloat videoZoomFactor) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (videoZoomFactor); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVCaptureSystemZoomSliderCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVCaptureSystemZoomSliderCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVCaptureSystemZoomSliderCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVCaptureSystemZoomSliderCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVCompletion))] + unsafe internal delegate void DAVCompletion (global::System.IntPtr block_ptr, byte finished); + + /// This class bridges native block invocations that call into C# + static internal class SDAVCompletion + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVCompletion))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, byte finished) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (finished != 0); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVCompletion? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVCompletion callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVCompletion), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVCompletion + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVExternalStorageDeviceRequestAccessCallback))] + unsafe internal delegate void DAVExternalStorageDeviceRequestAccessCallback (global::System.IntPtr block_ptr, byte granted); + + /// This class bridges native block invocations that call into C# + static internal class SDAVExternalStorageDeviceRequestAccessCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVExternalStorageDeviceRequestAccessCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, byte granted) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (granted != 0); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVExternalStorageDeviceRequestAccessCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVExternalStorageDeviceRequestAccessCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVExternalStorageDeviceRequestAccessCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVExternalStorageDeviceRequestAccessCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVMusicEventEnumerationBlock))] + unsafe internal delegate void DAVMusicEventEnumerationBlock (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle event, double* timeStamp, byte* removeEvent); + + /// This class bridges native block invocations that call into C# + static internal class SDAVMusicEventEnumerationBlock + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVMusicEventEnumerationBlock))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle event, double* timeStamp, byte* removeEvent) + { + *timeStamp = default; + *removeEvent = default; + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + bool __xamarin_bool__2 = *removeEvent != 0; + del (global::ObjCRuntime.Runtime.GetNSObject (event)!, out global::System.Runtime.CompilerServices.Unsafe.AsRef (timeStamp), out __xamarin_bool__2); + *removeEvent = __xamarin_bool__2 ? (byte)1 : (byte)0; + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVMusicEventEnumerationBlock? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVMusicEventEnumerationBlock callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVMusicEventEnumerationBlock), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVMusicEventEnumerationBlock + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVMutableCompositionInsertHandler))] + unsafe internal delegate void DAVMutableCompositionInsertHandler (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle error); + + /// This class bridges native block invocations that call into C# + static internal class SDAVMutableCompositionInsertHandler + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVMutableCompositionInsertHandler))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle error) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetNSObject (error)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVMutableCompositionInsertHandler? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVMutableCompositionInsertHandler callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVMutableCompositionInsertHandler), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVMutableCompositionInsertHandler + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVMutableVideoCompositionCreateApplier))] + unsafe internal delegate void DAVMutableVideoCompositionCreateApplier (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle request); + + /// This class bridges native block invocations that call into C# + static internal class SDAVMutableVideoCompositionCreateApplier + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVMutableVideoCompositionCreateApplier))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle request) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetNSObject (request)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVMutableVideoCompositionCreateApplier? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVMutableVideoCompositionCreateApplier callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVMutableVideoCompositionCreateApplier), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVMutableVideoCompositionCreateApplier + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVMutableVideoCompositionCreateCallback))] + unsafe internal delegate void DAVMutableVideoCompositionCreateCallback (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle videoComposition, global::ObjCRuntime.NativeHandle error); + + /// This class bridges native block invocations that call into C# + static internal class SDAVMutableVideoCompositionCreateCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVMutableVideoCompositionCreateCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle videoComposition, global::ObjCRuntime.NativeHandle error) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetNSObject (videoComposition)!, global::ObjCRuntime.Runtime.GetNSObject (error)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVMutableVideoCompositionCreateCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVMutableVideoCompositionCreateCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVMutableVideoCompositionCreateCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVMutableVideoCompositionCreateCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback))] + unsafe internal delegate void DAVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback (global::System.IntPtr block_ptr, byte success); + + /// This class bridges native block invocations that call into C# + static internal class SDAVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, byte success) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (success != 0); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVPlayerItemIntegratedTimelineAddBoundaryTimeObserverCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback))] + unsafe internal delegate void DAVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback (global::System.IntPtr block_ptr, global::CoreMedia.CMTime time); + + /// This class bridges native block invocations that call into C# + static internal class SDAVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::CoreMedia.CMTime time) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (time); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVPlayerItemIntegratedTimelineAddPeriodicTimeObserverCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVPlayerItemIntegratedTimelineSeekCallback))] + unsafe internal delegate void DAVPlayerItemIntegratedTimelineSeekCallback (global::System.IntPtr block_ptr, byte success); + + /// This class bridges native block invocations that call into C# + static internal class SDAVPlayerItemIntegratedTimelineSeekCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVPlayerItemIntegratedTimelineSeekCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, byte success) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (success != 0); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVPlayerItemIntegratedTimelineSeekCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVPlayerItemIntegratedTimelineSeekCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVPlayerItemIntegratedTimelineSeekCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVPlayerItemIntegratedTimelineSeekCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVRequestAccessStatus))] + unsafe internal delegate void DAVRequestAccessStatus (global::System.IntPtr block_ptr, byte accessGranted); + + /// This class bridges native block invocations that call into C# + static internal class SDAVRequestAccessStatus + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVRequestAccessStatus))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, byte accessGranted) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (accessGranted != 0); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVRequestAccessStatus? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVRequestAccessStatus callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVRequestAccessStatus), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVRequestAccessStatus + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVSampleBufferGeneratorBatchMakeReadyCallback))] + unsafe internal delegate void DAVSampleBufferGeneratorBatchMakeReadyCallback (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle error); + + /// This class bridges native block invocations that call into C# + static internal class SDAVSampleBufferGeneratorBatchMakeReadyCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVSampleBufferGeneratorBatchMakeReadyCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle error) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetNSObject (error)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVSampleBufferGeneratorBatchMakeReadyCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVSampleBufferGeneratorBatchMakeReadyCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVSampleBufferGeneratorBatchMakeReadyCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVSampleBufferGeneratorBatchMakeReadyCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback))] + unsafe internal delegate void DAVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle videoPerformanceMetrics); + + /// This class bridges native block invocations that call into C# + static internal class SDAVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle videoPerformanceMetrics) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetNSObject (videoPerformanceMetrics)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVSampleBufferVideoRendererLoadVideoPerformanceMetricsCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVSpeechSynthesisProviderOutputBlock))] + unsafe internal delegate void DAVSpeechSynthesisProviderOutputBlock (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle markers, global::ObjCRuntime.NativeHandle request); + + /// This class bridges native block invocations that call into C# + static internal class SDAVSpeechSynthesisProviderOutputBlock + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVSpeechSynthesisProviderOutputBlock))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle markers, global::ObjCRuntime.NativeHandle request) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::CoreFoundation.CFArray.ArrayFromHandle (markers)!, global::ObjCRuntime.Runtime.GetNSObject (request)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVSpeechSynthesisProviderOutputBlock? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVSpeechSynthesisProviderOutputBlock callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVSpeechSynthesisProviderOutputBlock), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVSpeechSynthesisProviderOutputBlock + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVSpeechSynthesizerBufferCallback))] + unsafe internal delegate void DAVSpeechSynthesizerBufferCallback (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle buffer); + + /// This class bridges native block invocations that call into C# + static internal class SDAVSpeechSynthesizerBufferCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVSpeechSynthesizerBufferCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle buffer) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetNSObject (buffer)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVSpeechSynthesizerBufferCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVSpeechSynthesizerBufferCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVSpeechSynthesizerBufferCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVSpeechSynthesizerBufferCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVSpeechSynthesizerMarkerCallback))] + unsafe internal delegate void DAVSpeechSynthesizerMarkerCallback (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle markers); + + /// This class bridges native block invocations that call into C# + static internal class SDAVSpeechSynthesizerMarkerCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVSpeechSynthesizerMarkerCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle markers) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::CoreFoundation.CFArray.ArrayFromHandle (markers)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVSpeechSynthesizerMarkerCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVSpeechSynthesizerMarkerCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVSpeechSynthesizerMarkerCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVSpeechSynthesizerMarkerCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback))] + unsafe internal delegate void DAVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback (global::System.IntPtr block_ptr, global::System.UIntPtr status); + + /// This class bridges native block invocations that call into C# + static internal class SDAVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::System.UIntPtr status) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del ((global::AVFoundation.AVSpeechSynthesisPersonalVoiceAuthorizationStatus) (ulong) status); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVSpeechSynthesizerRequestPersonalVoiceAuthorizationCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVVideoCompositionCreateApplier))] + unsafe internal delegate void DAVVideoCompositionCreateApplier (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle applier); + + /// This class bridges native block invocations that call into C# + static internal class SDAVVideoCompositionCreateApplier + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVVideoCompositionCreateApplier))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle applier) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetNSObject (applier)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVVideoCompositionCreateApplier? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVVideoCompositionCreateApplier callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVVideoCompositionCreateApplier), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVVideoCompositionCreateApplier + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVVideoCompositionCreateCallback))] + unsafe internal delegate void DAVVideoCompositionCreateCallback (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle videoComposition, global::ObjCRuntime.NativeHandle error); + + /// This class bridges native block invocations that call into C# + static internal class SDAVVideoCompositionCreateCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVVideoCompositionCreateCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, global::ObjCRuntime.NativeHandle videoComposition, global::ObjCRuntime.NativeHandle error) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (global::ObjCRuntime.Runtime.GetNSObject (videoComposition)!, global::ObjCRuntime.Runtime.GetNSObject (error)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVVideoCompositionCreateCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVVideoCompositionCreateCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVVideoCompositionCreateCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVVideoCompositionCreateCallback + + [UnmanagedFunctionPointerAttribute (CallingConvention.Cdecl)] + [UserDelegateType (typeof (global::AVFoundation.AVVideoCompositionDetermineValidityCallback))] + unsafe internal delegate void DAVVideoCompositionDetermineValidityCallback (global::System.IntPtr block_ptr, byte isValid, global::ObjCRuntime.NativeHandle error); + + /// This class bridges native block invocations that call into C# + static internal class SDAVVideoCompositionDetermineValidityCallback + { + [Preserve (Conditional = true)] + [UnmanagedCallersOnly] + [UserDelegateType (typeof (global::AVFoundation.AVVideoCompositionDetermineValidityCallback))] + internal static unsafe void Invoke (global::System.IntPtr block_ptr, byte isValid, global::ObjCRuntime.NativeHandle error) + { + var del = global::ObjCRuntime.BlockLiteral.GetTarget (block_ptr); + if (del is not null) + { + del (isValid != 0, global::ObjCRuntime.Runtime.GetNSObject (error)!); + } + } + + internal static unsafe global::ObjCRuntime.BlockLiteral CreateNullableBlock (global::AVFoundation.AVVideoCompositionDetermineValidityCallback? callback) + { + if (callback is null) + return default (global::ObjCRuntime.BlockLiteral); + return CreateBlock (callback); + } + + [BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)] + internal static unsafe global::ObjCRuntime.BlockLiteral CreateBlock (global::AVFoundation.AVVideoCompositionDetermineValidityCallback callback) + { + delegate* unmanaged trampoline = &Invoke; + return new global::ObjCRuntime.BlockLiteral (trampoline, callback, typeof (SDAVVideoCompositionDetermineValidityCallback), nameof (Invoke)); + } + } + // TODO: generate trampoline for AVFoundation.AVVideoCompositionDetermineValidityCallback + +} diff --git a/tests/rgen/Microsoft.Macios.Generator.Tests/Microsoft.Macios.Generator.Tests.csproj b/tests/rgen/Microsoft.Macios.Generator.Tests/Microsoft.Macios.Generator.Tests.csproj index 974bac298d84..706ed2664fce 100644 --- a/tests/rgen/Microsoft.Macios.Generator.Tests/Microsoft.Macios.Generator.Tests.csproj +++ b/tests/rgen/Microsoft.Macios.Generator.Tests/Microsoft.Macios.Generator.Tests.csproj @@ -61,9 +61,11 @@ + +