/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <unistd.h>
-#include <sys/time.h> /* gettimeofday() */
-
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include <vlc/vlc.h>
+#include <unistd.h>
+
+#include <vlc_common.h>
+#include <vlc_plugin.h>
#include <vlc_interface.h>
#include <vlc_aout.h>
uint8_t p_remainder_buffer[BUFSIZE];
uint32_t i_read_bytes;
uint32_t i_total_bytes;
- AudioDeviceIOProcID procId;
/* CoreAudio SPDIF mode specific */
pid_t i_hog_pid; /* The keep the pid of our hog status */
"audio device, as listed in your 'Audio Device' menu. This device will " \
"then be used by default for audio playback.")
-vlc_module_begin();
- set_shortname( "auhal" );
- set_description( _("HAL AudioUnit output") );
- set_capability( "audio output", 101 );
- set_category( CAT_AUDIO );
- set_subcategory( SUBCAT_AUDIO_AOUT );
- set_callbacks( Open, Close );
- add_integer( "macosx-audio-device", 0, NULL, ADEV_TEXT, ADEV_LONGTEXT, false );
-vlc_module_end();
+vlc_module_begin ()
+ set_shortname( "auhal" )
+ set_description( N_("HAL AudioUnit output") )
+ set_capability( "audio output", 101 )
+ set_category( CAT_AUDIO )
+ set_subcategory( SUBCAT_AUDIO_AOUT )
+ set_callbacks( Open, Close )
+ add_integer( "macosx-audio-device", 0, NULL, ADEV_TEXT, ADEV_LONGTEXT, false )
+vlc_module_end ()
/*****************************************************************************
* Open: open macosx audio output
/* Allocate structure */
p_aout->output.p_sys = malloc( sizeof( aout_sys_t ) );
if( p_aout->output.p_sys == NULL )
- {
- msg_Err( p_aout, "out of memory" );
- return( VLC_ENOMEM );
- }
+ return VLC_ENOMEM;
p_sys = p_aout->output.p_sys;
p_sys->i_default_dev = 0;
if( err != noErr )
{
/* Be tolerant, only give a warning here */
- msg_Warn( p_aout, "could not check whether device [0x%x] is alive: %4.4s", p_sys->i_selected_dev, (char *)&err );
+ msg_Warn( p_aout, "could not check whether device [0x%x] is alive: %4.4s", (unsigned int)p_sys->i_selected_dev, (char *)&err );
b_alive = false;
}
i_streams = i_param_size / sizeof( AudioStreamID );
p_streams = (AudioStreamID *)malloc( i_param_size );
if( p_streams == NULL )
- {
- msg_Err( p_aout, "out of memory" );
return false;
- }
err = AudioDeviceGetProperty( p_sys->i_selected_dev, 0, FALSE,
kAudioDevicePropertyStreams,
i_formats = i_param_size / sizeof( AudioStreamBasicDescription );
p_format_list = (AudioStreamBasicDescription *)malloc( i_param_size );
if( p_format_list == NULL )
- {
- msg_Err( p_aout, "could not malloc the memory" );
continue;
- }
err = AudioStreamGetProperty( p_streams[i], 0,
kAudioStreamPropertyPhysicalFormats,
aout_VolumeNoneInit( p_aout );
/* Add IOProc callback */
- err = AudioDeviceCreateIOProcID( p_sys->i_selected_dev,
- (AudioDeviceIOProc)RenderCallbackSPDIF,
- (void *)p_aout,
- &p_sys->procId);
+ err = AudioDeviceAddIOProc( p_sys->i_selected_dev,
+ (AudioDeviceIOProc)RenderCallbackSPDIF,
+ (void *)p_aout );
+
if( err != noErr )
{
msg_Err( p_aout, "AudioDeviceAddIOProc failed: [%4.4s]", (char *)&err );
{
msg_Err( p_aout, "AudioDeviceStart failed: [%4.4s]", (char *)&err );
- err = AudioDeviceDestroyIOProcID( p_sys->i_selected_dev,
- p_sys->procId );
+ err = AudioDeviceRemoveIOProc( p_sys->i_selected_dev,
+ (AudioDeviceIOProc)RenderCallbackSPDIF );
if( err != noErr )
{
msg_Err( p_aout, "AudioDeviceRemoveIOProc failed: [%4.4s]", (char *)&err );
}
/* Remove IOProc callback */
- err = AudioDeviceDestroyIOProcID( p_sys->i_selected_dev,
- p_sys->procId );
+ err = AudioDeviceRemoveIOProc( p_sys->i_selected_dev,
+ (AudioDeviceIOProc)RenderCallbackSPDIF );
if( err != noErr )
{
msg_Err( p_aout, "AudioDeviceRemoveIOProc failed: [%4.4s]", (char *)&err );
/* Allocate DeviceID array */
p_devices = (AudioDeviceID*)malloc( sizeof(AudioDeviceID) * p_sys->i_devices );
if( p_devices == NULL )
- {
- msg_Err( p_aout, "out of memory" );
goto error;
- }
/* Populate DeviceID array */
err = AudioHardwareGetProperty( kAudioHardwarePropertyDevices,
p_sys->i_default_dev = devid_def;
var_Create( p_aout, "audio-device", VLC_VAR_INTEGER|VLC_VAR_HASCHOICE );
- text.psz_string = _("Audio Device");
+ text.psz_string = (char*)_("Audio Device");
var_Change( p_aout, "audio-device", VLC_VAR_SETTEXT, &text, NULL );
for( i = 0; i < p_sys->i_devices; i++ )
/* Add the menu entries */
val.i_int = (int)p_devices[i];
- text.psz_string = strdup( psz_name );
+ text.psz_string = psz_name;
var_Change( p_aout, "audio-device", VLC_VAR_ADDCHOICE, &val, &text );
+ text.psz_string = NULL;
if( p_sys->i_default_dev == p_devices[i] )
{
/* The default device is the selected device normally */
if( AudioDeviceSupportsDigital( p_aout, p_devices[i] ) )
{
val.i_int = (int)p_devices[i] | AOUT_VAR_SPDIF_FLAG;
- asprintf( &text.psz_string, _("%s (Encoded Output)"), psz_name );
- var_Change( p_aout, "audio-device", VLC_VAR_ADDCHOICE, &val, &text );
- if( p_sys->i_default_dev == p_devices[i] && config_GetInt( p_aout, "spdif" ) )
+ if( asprintf( &text.psz_string, _("%s (Encoded Output)"), psz_name ) != -1 )
{
- /* We selected to prefer SPDIF output if available
- * then this "dummy" entry should be selected */
- var_Change( p_aout, "audio-device", VLC_VAR_SETDEFAULT, &val, NULL );
- var_Set( p_aout, "audio-device", val );
+ 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" ) )
+ {
+ /* We selected to prefer SPDIF output if available
+ * then this "dummy" entry should be selected */
+ var_Change( p_aout, "audio-device", VLC_VAR_SETDEFAULT, &val, NULL );
+ var_Set( p_aout, "audio-device", val );
+ }
}
}
i_streams = i_param_size / sizeof( AudioStreamID );
p_streams = (AudioStreamID *)malloc( i_param_size );
if( p_streams == NULL )
- {
- msg_Err( p_aout, "out of memory" );
return VLC_ENOMEM;
- }
err = AudioDeviceGetProperty( i_dev_id, 0, FALSE,
kAudioDevicePropertyStreams,
i_formats = i_param_size / sizeof( AudioStreamBasicDescription );
p_format_list = (AudioStreamBasicDescription *)malloc( i_param_size );
if( p_format_list == NULL )
- {
- msg_Err( p_aout, "could not malloc the memory" );
return false;
- }
err = AudioStreamGetProperty( i_stream_id, 0,
kAudioStreamPropertyPhysicalFormats,
UInt32 i_param_size = 0;
int i;
- struct timeval now;
- struct timespec timeout;
struct { vlc_mutex_t lock; vlc_cond_t cond; } w;
msg_Dbg( p_aout, STREAM_FORMAT_MSG( "setting stream format: ", change_format ) );
/* Condition because SetProperty is asynchronious */
- vlc_cond_init( p_aout, &w.cond );
- vlc_mutex_init( p_aout, &w.lock );
+ vlc_cond_init( &w.cond );
+ vlc_mutex_init( &w.lock );
vlc_mutex_lock( &w.lock );
/* Install the callback */
for( i = 0; i < 5; i++ )
{
AudioStreamBasicDescription actual_format;
+ mtime_t timeout = mdate() + 500000;
- gettimeofday( &now, NULL );
- timeout.tv_sec = now.tv_sec;
- timeout.tv_nsec = (now.tv_usec + 500000) * 1000;
-
- if( pthread_cond_timedwait( &w.cond.cond, &w.lock.mutex, &timeout ) )
+ if( vlc_cond_timedwait( &w.cond, &w.lock, timeout ) )
{
msg_Dbg( p_aout, "reached timeout" );
}
if( p_sys->i_total_bytes > 0 )
{
i_mData_bytes = __MIN( p_sys->i_total_bytes - p_sys->i_read_bytes, ioData->mBuffers[0].mDataByteSize );
- p_aout->p_libvlc->pf_memcpy( ioData->mBuffers[0].mData, &p_sys->p_remainder_buffer[p_sys->i_read_bytes], i_mData_bytes );
+ vlc_memcpy( ioData->mBuffers[0].mData,
+ &p_sys->p_remainder_buffer[p_sys->i_read_bytes],
+ i_mData_bytes );
p_sys->i_read_bytes += i_mData_bytes;
current_date += (mtime_t) ( (mtime_t) 1000000 / p_aout->output.output.i_rate ) *
( i_mData_bytes / 4 / aout_FormatNbChannels( &p_aout->output.output ) ); // 4 is fl32 specific
{
uint32_t i_second_mData_bytes = __MIN( p_buffer->i_nb_bytes, ioData->mBuffers[0].mDataByteSize - i_mData_bytes );
- p_aout->p_libvlc->pf_memcpy( (uint8_t *)ioData->mBuffers[0].mData + i_mData_bytes, p_buffer->p_buffer, i_second_mData_bytes );
+ vlc_memcpy( (uint8_t *)ioData->mBuffers[0].mData + i_mData_bytes,
+ p_buffer->p_buffer, i_second_mData_bytes );
i_mData_bytes += 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_aout->p_libvlc->pf_memcpy( p_sys->p_remainder_buffer, &p_buffer->p_buffer[i_second_mData_bytes], p_sys->i_total_bytes );
+ vlc_memcpy( p_sys->p_remainder_buffer,
+ &p_buffer->p_buffer[i_second_mData_bytes],
+ p_sys->i_total_bytes );
}
else
{
}
else
{
- p_aout->p_libvlc->pf_memset( (uint8_t *)ioData->mBuffers[0].mData +i_mData_bytes, 0, ioData->mBuffers[0].mDataByteSize - i_mData_bytes );
+ vlc_memset( (uint8_t *)ioData->mBuffers[0].mData +i_mData_bytes,
+ 0,ioData->mBuffers[0].mDataByteSize - i_mData_bytes );
i_mData_bytes += ioData->mBuffers[0].mDataByteSize - i_mData_bytes;
}
}
msg_Warn( p_aout, "bytesize: %d nb_bytes: %d", (int)BUFFER.mDataByteSize, (int)p_buffer->i_nb_bytes );
/* move data into output data buffer */
- p_aout->p_libvlc->pf_memcpy( BUFFER.mData,
- p_buffer->p_buffer, p_buffer->i_nb_bytes );
+ vlc_memcpy( BUFFER.mData, p_buffer->p_buffer, p_buffer->i_nb_bytes );
aout_BufferFree( p_buffer );
}
else
{
- p_aout->p_libvlc->pf_memset( BUFFER.mData, 0, BUFFER.mDataByteSize );
+ vlc_memset( BUFFER.mData, 0, BUFFER.mDataByteSize );
}
#undef BUFFER
{
/* something changed in the list of devices */
/* We trigger the audio-device's aout_ChannelsRestart callback */
- var_Change( p_aout, "audio-device", VLC_VAR_TRIGGER_CALLBACKS, NULL, NULL );
+ var_TriggerCallback( p_aout, "audio-device" );
var_Destroy( p_aout, "audio-device" );
}
break;