[AudioToolbox] Make P/Invokes in AudioServices.cs have blittable signatures. (#19841)

Contributes towards #15684.
This commit is contained in:
Rolf Bjarne Kvinge 2024-01-19 20:34:50 +01:00 коммит произвёл GitHub
Родитель b7ee32350f
Коммит aa4e24cfc7
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
4 изменённых файлов: 32 добавлений и 10 удалений

Просмотреть файл

@ -61,12 +61,12 @@ namespace AudioToolbox {
//static extern AudioServicesError AudioServicesGetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, IntPtr specifier, out uint propertyDataSize, IntPtr propertyData);
[DllImport (Constants.AudioToolboxLibrary)]
public static extern AudioServicesError AudioServicesGetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, ref uint specifier, out uint propertyDataSize, out uint propertyData);
public unsafe static extern AudioServicesError AudioServicesGetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, uint* specifier, uint* propertyDataSize, uint* propertyData);
//[DllImport (Constants.AudioToolboxLibrary)]
//static extern AudioServicesError AudioServicesSetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, IntPtr specifier, uint propertyDataSize, IntPtr propertyData);
[DllImport (Constants.AudioToolboxLibrary)]
public static extern AudioServicesError AudioServicesSetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, ref uint specifier, uint propertyDataSize, ref uint propertyData);
public unsafe static extern AudioServicesError AudioServicesSetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, uint* specifier, uint propertyDataSize, uint* propertyData);
}
}

Просмотреть файл

@ -101,8 +101,12 @@ namespace AudioToolbox {
get {
uint out_size = sizeof (uint);
uint data;
AudioServicesError res;
var soundId = this.soundId;
var res = AudioServices.AudioServicesGetProperty (AudioServicesPropertyKey.IsUISound, sizeof (AudioServicesPropertyKey), ref soundId, out out_size, out data);
unsafe {
res = AudioServices.AudioServicesGetProperty (AudioServicesPropertyKey.IsUISound, sizeof (AudioServicesPropertyKey), &soundId, &out_size, &data);
}
if (res != AudioServicesError.None)
throw new ArgumentException (res.ToString ());
@ -111,8 +115,12 @@ namespace AudioToolbox {
set {
uint data = value ? (uint) 1 : 0;
AudioServicesError res;
var soundId = this.soundId;
var res = AudioServices.AudioServicesSetProperty (AudioServicesPropertyKey.IsUISound, sizeof (AudioServicesPropertyKey), ref soundId, sizeof (uint), ref data);
unsafe {
res = AudioServices.AudioServicesSetProperty (AudioServicesPropertyKey.IsUISound, sizeof (AudioServicesPropertyKey), &soundId, sizeof (uint), &data);
}
if (res != AudioServicesError.None)
throw new ArgumentException (res.ToString ());
}
@ -122,8 +130,11 @@ namespace AudioToolbox {
get {
uint out_size = sizeof (uint);
uint data;
var res = AudioServices.AudioServicesGetProperty (AudioServicesPropertyKey.CompletePlaybackIfAppDies, sizeof (AudioServicesPropertyKey), ref soundId, out out_size, out data);
AudioServicesError res;
var soundId = this.soundId;
unsafe {
res = AudioServices.AudioServicesGetProperty (AudioServicesPropertyKey.CompletePlaybackIfAppDies, sizeof (AudioServicesPropertyKey), &soundId, &out_size, &data);
}
if (res != AudioServicesError.None)
throw new ArgumentException (res.ToString ());
@ -132,8 +143,11 @@ namespace AudioToolbox {
set {
uint data = value ? (uint) 1 : 0;
var res = AudioServices.AudioServicesSetProperty (AudioServicesPropertyKey.CompletePlaybackIfAppDies, sizeof (AudioServicesPropertyKey), ref soundId, sizeof (uint), ref data);
AudioServicesError res;
var soundId = this.soundId;
unsafe {
res = AudioServices.AudioServicesSetProperty (AudioServicesPropertyKey.CompletePlaybackIfAppDies, sizeof (AudioServicesPropertyKey), &soundId, sizeof (uint), &data);
}
if (res != AudioServicesError.None)
throw new ArgumentException (res.ToString ());
}

Просмотреть файл

@ -76,8 +76,6 @@ namespace Cecil.Tests {
"AudioToolbox.AudioQueueStatus AudioToolbox.AudioQueueProcessingTap::AudioQueueProcessingTapGetSourceAudio(System.IntPtr,System.UInt32,AudioToolbox.AudioTimeStamp&,AudioToolbox.AudioQueueProcessingTapFlags&,System.UInt32&,System.IntPtr)",
"AudioToolbox.AudioQueueStatus AudioToolbox.OutputAudioQueue::AudioQueueOfflineRender(System.IntPtr,AudioToolbox.AudioTimeStamp&,AudioToolbox.AudioQueueBuffer*,System.Int32)",
"AudioToolbox.AudioQueueStatus AudioToolbox.OutputAudioQueue::AudioQueueSetOfflineRenderFormat(System.IntPtr,AudioToolbox.AudioStreamBasicDescription&,System.IntPtr)",
"AudioToolbox.AudioServicesError AudioToolbox.AudioServices::AudioServicesGetProperty(AudioToolbox.AudioServicesPropertyKey,System.UInt32,System.UInt32&,System.UInt32&,System.UInt32&)",
"AudioToolbox.AudioServicesError AudioToolbox.AudioServices::AudioServicesSetProperty(AudioToolbox.AudioServicesPropertyKey,System.UInt32,System.UInt32&,System.UInt32,System.UInt32&)",
"AudioToolbox.MusicPlayerStatus AudioToolbox.MusicSequence::MusicSequenceBarBeatTimeToBeats(System.IntPtr,AudioToolbox.CABarBeatTime,System.Double&)",
"AudioToolbox.MusicPlayerStatus AudioToolbox.MusicSequence::MusicSequenceBeatsToBarBeatTime(System.IntPtr,System.Double,System.Int32,AudioToolbox.CABarBeatTime&)",
"AudioToolbox.MusicPlayerStatus AudioToolbox.MusicSequence::MusicSequenceFileCreateData(System.IntPtr,AudioToolbox.MusicSequenceFileTypeID,AudioToolbox.MusicSequenceFileFlags,System.UInt16,System.IntPtr&)",

Просмотреть файл

@ -53,6 +53,16 @@ namespace MonoTouchFixtures.AudioToolbox {
using (var ss = SystemSound.FromFile (NSUrl.FromFilename (path))) {
Assert.That (ss.IsUISound, Is.True, "#1");
Assert.That (ss.CompletePlaybackIfAppDies, Is.False, "#2");
ss.CompletePlaybackIfAppDies = true;
ss.IsUISound = false;
Assert.That (ss.IsUISound, Is.False, "#1 B");
Assert.That (ss.CompletePlaybackIfAppDies, Is.True, "#2 B");
ss.CompletePlaybackIfAppDies = false;
ss.IsUISound = true;
Assert.That (ss.IsUISound, Is.True, "#1 C");
Assert.That (ss.CompletePlaybackIfAppDies, Is.False, "#2 C");
}
}