[vlc-commits] auhal: updated to current AudioUnit API
Felix Paul Kühne
git at videolan.org
Tue Feb 8 15:21:31 CET 2011
vlc | branch: master | Felix Paul Kühne <fkuehne at videolan.org> | Tue Feb 8 15:06:15 2011 +0100| [210f2129cb3f3bfa44da0710213055d23662c7a4] | committer: Felix Paul Kühne
auhal: updated to current AudioUnit API
should be tested with SPDIF devices
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=210f2129cb3f3bfa44da0710213055d23662c7a4
---
modules/audio_output/auhal.c | 70 +++++++++++++++--------------------------
1 files changed, 26 insertions(+), 44 deletions(-)
diff --git a/modules/audio_output/auhal.c b/modules/audio_output/auhal.c
index 609b6b0..bb45255 100644
--- a/modules/audio_output/auhal.c
+++ b/modules/audio_output/auhal.c
@@ -1,10 +1,11 @@
/*****************************************************************************
* auhal.c: AUHAL and Coreaudio output plugin
*****************************************************************************
- * Copyright (C) 2005 the VideoLAN team
+ * Copyright (C) 2005, 2011 the VideoLAN team
* $Id$
*
* Authors: Derk-Jan Hartman <hartman at videolan dot org>
+ * Felix Paul Kühne <fkuehne at videolan dot org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -35,33 +36,14 @@
#include <vlc_dialog.h>
#include <vlc_aout.h>
-// By pass part of header which compile with some warnings,
-// and that we don't require.
-#define __MACHINEEXCEPTIONS__
-
#include <CoreAudio/CoreAudio.h>
#include <AudioUnit/AudioUnit.h>
-#include <AudioUnit/AudioUnitProperties.h>
-#include <AudioUnit/AudioUnitParameters.h>
-#include <AudioUnit/AudioOutputUnit.h>
-#include <AudioToolbox/AudioFormat.h>
+#include <AudioToolbox/AudioFormat.h>
#ifndef verify_noerr
#define verify_noerr(a) assert((a) == noErr)
#endif
-#if AUDIO_UNIT_VERSION < 1060
-#define AudioComponent Component
-#define AudioComponentDescription ComponentDescription
-#define AudioComponentFindNext FindNextComponent
-#define AudioComponentInstanceNew OpenAComponent
-#define AudioComponentInstanceDispose CloseComponent
-#define AudioComponentInstanceNew OpenAComponent
-#define AudioComponentInstanceNew OpenAComponent
-#else
-#include <AudioUnit/AudioComponent.h>
-#endif
-
#define STREAM_FORMAT_MSG( pre, sfm ) \
pre "[%u][%4.4s][%u][%u][%u][%u][%u][%u]", \
(UInt32)sfm.mSampleRate, (char *)&sfm.mFormatID, \
@@ -83,7 +65,6 @@
/*
* TODO:
* - clean up the debug info
- * - clean up C99'isms
* - be better at changing stream setup or devices setup changes while playing.
* - fix 6.1 and 7.1
*/
@@ -98,13 +79,14 @@ struct aout_sys_t
{
AudioDeviceID i_default_dev; /* Keeps DeviceID of defaultOutputDevice */
AudioDeviceID i_selected_dev; /* Keeps DeviceID of the selected device */
+ AudioDeviceIOProcID i_procID; /* DeviceID of current device */
UInt32 i_devices; /* Number of CoreAudio Devices */
- bool b_supports_digital;/* Does the currently selected device support digital mode? */
- bool b_digital; /* Are we running in digital mode? */
+ bool b_supports_digital;/* Does the currently selected device support digital mode? */
+ bool b_digital; /* Are we running in digital mode? */
mtime_t clock_diff; /* Difference between VLC clock and Device clock */
/* AUHAL specific */
- AudioComponent au_component; /* The Audiocomponent we use */
+ Component au_component; /* The Audiocomponent we use */
AudioUnit au_unit; /* The AudioUnit we use */
uint8_t p_remainder_buffer[BUFSIZE];
uint32_t i_read_bytes;
@@ -116,8 +98,8 @@ struct aout_sys_t
int i_stream_index; /* The index of i_stream_id in an AudioBufferList */
AudioStreamBasicDescription stream_format; /* The format we changed the stream to */
AudioStreamBasicDescription sfmt_revert; /* The original format of the stream */
- bool b_revert; /* Wether we need to revert the stream format */
- bool b_changed_mixing;/* Wether we need to set the mixing mode back */
+ bool b_revert; /* Wether we need to revert the stream format */
+ bool b_changed_mixing;/* Wether we need to set the mixing mode back */
};
/*****************************************************************************
@@ -300,7 +282,7 @@ static int OpenAnalog( aout_instance_t *p_aout )
OSStatus err = noErr;
UInt32 i_param_size = 0, i = 0;
int i_original;
- AudioComponentDescription desc;
+ ComponentDescription desc;
AudioStreamBasicDescription DeviceFormat;
AudioChannelLayout *layout;
AudioChannelLayout new_layout;
@@ -313,14 +295,14 @@ static int OpenAnalog( aout_instance_t *p_aout )
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
- p_sys->au_component = AudioComponentFindNext( NULL, &desc );
+ p_sys->au_component = FindNextComponent( NULL, &desc );
if( p_sys->au_component == NULL )
{
msg_Warn( p_aout, "we cannot find our HAL component" );
return false;
}
- err = AudioComponentInstanceNew( p_sys->au_component, &p_sys->au_unit );
+ err = OpenAComponent( p_sys->au_component, &p_sys->au_unit );
if( err != noErr )
{
msg_Warn( p_aout, "we cannot open our HAL component" );
@@ -802,13 +784,13 @@ static int OpenSPDIF( aout_instance_t * p_aout )
aout_VolumeNoneInit( p_aout );
/* Add IOProc callback */
- err = AudioDeviceAddIOProc( p_sys->i_selected_dev,
- (AudioDeviceIOProc)RenderCallbackSPDIF,
- (void *)p_aout );
-
+ err = AudioDeviceCreateIOProcID( p_sys->i_selected_dev,
+ (AudioDeviceIOProc)RenderCallbackSPDIF,
+ (void *)p_aout,
+ &p_sys->i_procID );
if( err != noErr )
{
- msg_Err( p_aout, "AudioDeviceAddIOProc failed: [%4.4s]", (char *)&err );
+ msg_Err( p_aout, "AudioDeviceCreateIOProcID failed: [%4.4s]", (char *)&err );
return false;
}
@@ -818,16 +800,16 @@ static int OpenSPDIF( aout_instance_t * p_aout )
p_sys->clock_diff += mdate();
/* Start device */
- err = AudioDeviceStart( p_sys->i_selected_dev, (AudioDeviceIOProc)RenderCallbackSPDIF );
+ err = AudioDeviceStart( p_sys->i_selected_dev, p_sys->i_procID );
if( err != noErr )
{
msg_Err( p_aout, "AudioDeviceStart failed: [%4.4s]", (char *)&err );
- err = AudioDeviceRemoveIOProc( p_sys->i_selected_dev,
- (AudioDeviceIOProc)RenderCallbackSPDIF );
+ err = AudioDeviceDestroyIOProcID( p_sys->i_selected_dev,
+ p_sys->i_procID );
if( err != noErr )
{
- msg_Err( p_aout, "AudioDeviceRemoveIOProc failed: [%4.4s]", (char *)&err );
+ msg_Err( p_aout, "AudioDeviceDestroyIOProcID failed: [%4.4s]", (char *)&err );
}
return false;
}
@@ -850,25 +832,25 @@ static void Close( vlc_object_t * p_this )
{
verify_noerr( AudioOutputUnitStop( p_sys->au_unit ) );
verify_noerr( AudioUnitUninitialize( p_sys->au_unit ) );
- verify_noerr( AudioComponentInstanceDispose( p_sys->au_unit ) );
+ verify_noerr( CloseComponent( p_sys->au_unit ) );
}
if( p_sys->b_digital )
{
/* Stop device */
err = AudioDeviceStop( p_sys->i_selected_dev,
- (AudioDeviceIOProc)RenderCallbackSPDIF );
+ p_sys->i_procID );
if( err != noErr )
{
msg_Err( p_aout, "AudioDeviceStop failed: [%4.4s]", (char *)&err );
}
/* Remove IOProc callback */
- err = AudioDeviceRemoveIOProc( p_sys->i_selected_dev,
- (AudioDeviceIOProc)RenderCallbackSPDIF );
+ err = AudioDeviceDestroyIOProcID( p_sys->i_selected_dev,
+ p_sys->i_procID );
if( err != noErr )
{
- msg_Err( p_aout, "AudioDeviceRemoveIOProc failed: [%4.4s]", (char *)&err );
+ msg_Err( p_aout, "AudioDeviceDestroyIOProcID failed: [%4.4s]", (char *)&err );
}
if( p_sys->b_revert )
More information about the vlc-commits
mailing list