#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>
+#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 "[%ld][%4.4s][%ld][%ld][%ld][%ld][%ld][%ld]", \
+ pre "[%u][%4.4s][%u][%u][%u][%u][%u][%u]", \
(UInt32)sfm.mSampleRate, (char *)&sfm.mFormatID, \
sfm.mFormatFlags, sfm.mBytesPerPacket, \
sfm.mFramesPerPacket, sfm.mBytesPerFrame, \
sfm.mChannelsPerFrame, sfm.mBitsPerChannel
#define STREAM_FORMAT_MSG_FULL( pre, sfm ) \
- pre ":\nsamplerate: [%ld]\nFormatID: [%4.4s]\nFormatFlags: [%ld]\nBypesPerPacket: [%ld]\nFramesPerPacket: [%ld]\nBytesPerFrame: [%ld]\nChannelsPerFrame: [%ld]\nBitsPerChannel[%ld]", \
+ pre ":\nsamplerate: [%u]\nFormatID: [%4.4s]\nFormatFlags: [%u]\nBypesPerPacket: [%u]\nFramesPerPacket: [%u]\nBytesPerFrame: [%u]\nChannelsPerFrame: [%u]\nBitsPerChannel[%u]", \
(UInt32)sfm.mSampleRate, (char *)&sfm.mFormatID, \
sfm.mFormatFlags, sfm.mBytesPerPacket, \
sfm.mFramesPerPacket, sfm.mBytesPerFrame, \
sfm.mChannelsPerFrame, sfm.mBitsPerChannel
-#define BUFSIZE 0xffffff
+#define FRAMESIZE 2048
+#define BUFSIZE (FRAMESIZE * 8) * 8
#define AOUT_VAR_SPDIF_FLAG 0xf00000
/*
mtime_t clock_diff; /* Difference between VLC clock and Device clock */
/* AUHAL specific */
- Component au_component; /* The Audiocomponent we use */
+ AudioComponent au_component; /* The Audiocomponent we use */
AudioUnit au_unit; /* The AudioUnit we use */
uint8_t p_remainder_buffer[BUFSIZE];
uint32_t i_read_bytes;
vlc_value_t, vlc_value_t, void * );
+
/*****************************************************************************
* Module descriptor
*****************************************************************************/
OSStatus err = noErr;
UInt32 i_param_size = 0, i = 0;
int i_original;
- ComponentDescription desc;
+ AudioComponentDescription desc;
AudioStreamBasicDescription DeviceFormat;
AudioChannelLayout *layout;
AudioChannelLayout new_layout;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
- p_sys->au_component = FindNextComponent( NULL, &desc );
+ p_sys->au_component = AudioComponentFindNext( NULL, &desc );
if( p_sys->au_component == NULL )
{
msg_Warn( p_aout, "we cannot find our HAL component" );
return false;
}
- err = OpenAComponent( p_sys->au_component, &p_sys->au_unit );
+ err = AudioComponentInstanceNew( p_sys->au_component, &p_sys->au_unit );
if( err != noErr )
{
msg_Warn( p_aout, "we cannot open our HAL component" );
DeviceFormat.mFramesPerPacket = 1;
DeviceFormat.mBytesPerFrame = DeviceFormat.mBitsPerChannel * DeviceFormat.mChannelsPerFrame / 8;
DeviceFormat.mBytesPerPacket = DeviceFormat.mBytesPerFrame * DeviceFormat.mFramesPerPacket;
-
+
/* Set the desired format */
i_param_size = sizeof(AudioStreamBasicDescription);
verify_noerr( AudioUnitSetProperty( p_sys->au_unit,
/* Do the last VLC aout setups */
aout_FormatPrepare( &p_aout->output.output );
- p_aout->output.i_nb_samples = 2048;
+ p_aout->output.i_nb_samples = FRAMESIZE;
aout_VolumeSoftInit( p_aout );
/* set the IOproc callback */
{
verify_noerr( AudioOutputUnitStop( p_sys->au_unit ) );
verify_noerr( AudioUnitUninitialize( p_sys->au_unit ) );
- verify_noerr( CloseComponent( p_sys->au_unit ) );
+ verify_noerr( AudioComponentInstanceDispose( p_sys->au_unit ) );
}
if( p_sys->b_digital )
goto error;
}
- msg_Dbg( p_aout, "system has [%ld] device(s)", p_sys->i_devices );
+ msg_Dbg( p_aout, "system has [%u] device(s)", p_sys->i_devices );
/* Allocate DeviceID array */
p_devices = (AudioDeviceID*)malloc( sizeof(AudioDeviceID) * p_sys->i_devices );
&i_param_size, psz_name);
if( err ) goto error;
- msg_Dbg( p_aout, "DevID: %#lx DevName: %s", p_devices[i], psz_name );
+ msg_Dbg( p_aout, "DevID: %u DevName: %s", p_devices[i], psz_name );
if( !AudioDeviceHasOutput( p_devices[i]) )
{
{
var_Change( p_aout, "audio-device", VLC_VAR_ADDCHOICE, &val, &text );
free( text.psz_string );
- if( p_sys->i_default_dev == p_devices[i] && config_GetInt( p_aout, "spdif" ) )
+ if( p_sys->i_default_dev == p_devices[i]
+ && var_InheritBool( p_aout, "spdif" ) )
{
/* We selected to prefer SPDIF output if available
* then this "dummy" entry should be selected */
/* We don't have enough data yet */
aout_buffer_t * p_buffer;
p_buffer = aout_OutputNextBuffer( p_aout, current_date , false );
-
+
if( p_buffer != NULL )
{
- uint32_t i_second_mData_bytes = __MIN( p_buffer->i_nb_bytes, ioData->mBuffers[0].mDataByteSize - i_mData_bytes );
+ uint32_t i_second_mData_bytes = __MIN( p_buffer->i_buffer, ioData->mBuffers[0].mDataByteSize - i_mData_bytes );
vlc_memcpy( (uint8_t *)ioData->mBuffers[0].mData + i_mData_bytes,
p_buffer->p_buffer, i_second_mData_bytes );
if( i_mData_bytes >= ioData->mBuffers[0].mDataByteSize )
{
- p_sys->i_total_bytes = p_buffer->i_nb_bytes - i_second_mData_bytes;
+ p_sys->i_total_bytes = p_buffer->i_buffer - i_second_mData_bytes;
vlc_memcpy( p_sys->p_remainder_buffer,
&p_buffer->p_buffer[i_second_mData_bytes],
p_sys->i_total_bytes );
+ aout_BufferFree( p_buffer );
+ break;
}
else
{
#define BUFFER outOutputData->mBuffers[p_sys->i_stream_index]
if( p_buffer != NULL )
{
- if( (int)BUFFER.mDataByteSize != (int)p_buffer->i_nb_bytes)
- msg_Warn( p_aout, "bytesize: %d nb_bytes: %d", (int)BUFFER.mDataByteSize, (int)p_buffer->i_nb_bytes );
+ if( (int)BUFFER.mDataByteSize != (int)p_buffer->i_buffer)
+ msg_Warn( p_aout, "bytesize: %d nb_bytes: %d", (int)BUFFER.mDataByteSize, (int)p_buffer->i_buffer );
/* move data into output data buffer */
- vlc_memcpy( BUFFER.mData, p_buffer->p_buffer, p_buffer->i_nb_bytes );
+ vlc_memcpy( BUFFER.mData, p_buffer->p_buffer, p_buffer->i_buffer );
aout_BufferFree( p_buffer );
}
else
{
aout_instance_t *p_aout = (aout_instance_t *)p_this;
var_Set( p_aout->p_libvlc, "macosx-audio-device", new_val );
- msg_Dbg( p_aout, "Set Device: %#x", new_val.i_int );
+ msg_Dbg( p_aout, "Set Device: %#"PRIx64, new_val.i_int );
return aout_ChannelsRestart( p_this, psz_variable, old_val, new_val, param );
}