2
// AudioClassDescription.cs:
5
// Marek Safar (marek.safar@gmail.com)
7
// Copyright 2012 Xamarin Inc
9
// Permission is hereby granted, free of charge, to any person obtaining
10
// a copy of this software and associated documentation files (the
11
// "Software"), to deal in the Software without restriction, including
12
// without limitation the rights to use, copy, modify, merge, publish,
13
// distribute, sublicense, and/or sell copies of the Software, and to
14
// permit persons to whom the Software is furnished to do so, subject to
15
// the following conditions:
17
// The above copyright notice and this permission notice shall be
18
// included in all copies or substantial portions of the Software.
20
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30
using System.Runtime.InteropServices;
31
using MonoMac.CoreFoundation;
32
using MonoMac.Foundation;
33
using MonoMac.AudioUnit;
35
namespace MonoMac.AudioToolbox {
37
[StructLayout (LayoutKind.Sequential)]
38
public struct AudioClassDescription
40
public AudioCodecComponentType Type;
41
public AudioFormatType SubType;
42
public AudioCodecManufacturer Manufacturer;
44
public AudioClassDescription (AudioCodecComponentType type, AudioFormatType subType, AudioCodecManufacturer manufacturer)
48
Manufacturer = manufacturer;
51
public bool IsHardwareCodec {
53
return Manufacturer == AudioCodecManufacturer.AppleHardware;
58
// TODO: Fails with 'prop', so probably Apple never implemented it
59
// The documentation is wrong too
60
public unsafe static uint? HardwareCodecCapabilities (AudioClassDescription[] descriptions)
62
if (descriptions == null)
63
throw new ArgumentNullException ("descriptions");
65
fixed (AudioClassDescription* item = &descriptions[0]) {
66
uint successfulCodecs;
67
int size = sizeof (uint);
68
var ptr_size = Marshal.SizeOf (typeof (AudioClassDescription)) * descriptions.Length;
69
var res = AudioFormatPropertyNative.AudioFormatGetProperty (AudioFormatProperty.HardwareCodecCapabilities, ptr_size, item, ref size, out successfulCodecs);
73
return successfulCodecs;
79
public enum AudioCodecComponentType
81
Decoder = 0x61646563, // 'adec'
82
Encoder = 0x61656e63, // 'aenc'
b'\\ No newline at end of file'