#include <CoreAudio/CoreAudio.h>
-#define A52_FRAME_NB 1536
-
#define STREAM_FORMAT_MSG( pre, sfm ) \
pre ": [%ld][%4.4s][%ld][%ld][%ld][%ld][%ld][%ld]", \
(UInt32)sfm.mSampleRate, (char *)&sfm.mFormatID, \
vlc_bool_t b_revert_sfmt;
AudioStreamBasicDescription sfmt_revert;
- UInt32 i_buffer_size;
+ UInt32 i_bufframe_size;
mtime_t clock_diff;
};
msg_Dbg( p_aout, STREAM_FORMAT_MSG( "using format",
p_sys->stream_format ) );
- /* Get the buffer size */
- i_param_size = sizeof( p_sys->i_buffer_size );
+ /* Get the bufframe size */
+ i_param_size = sizeof( p_sys->i_bufframe_size );
err = AudioDeviceGetProperty( p_sys->devid, i_startingChannel, FALSE,
- kAudioDevicePropertyBufferSize,
- &i_param_size, &p_sys->i_buffer_size );
+ kAudioDevicePropertyBufferFrameSize,
+ &i_param_size, &p_sys->i_bufframe_size );
if( err != noErr )
{
- msg_Err( p_aout, "failed to get buffer size: [%4.4s]",
+ msg_Err( p_aout, "failed to get bufframe size: [%4.4s]",
(char *)&err );
FreeDevice( p_aout );
FreeHardwareInfo( p_aout );
return( VLC_EGENERIC );
}
- msg_Dbg( p_aout, "device buffer size: [%ld]", p_sys->i_buffer_size );
+ msg_Dbg( p_aout, "device bufframe size: [%ld]", p_sys->i_bufframe_size );
msg_Dbg( p_aout, "device buffer index: [%ld]", p_sys->i_stream_index );
-
+
/* If we do AC3 over SPDIF, set buffer size to one AC3 frame */
if( ( p_sys->stream_format.mFormatID == kAudioFormat60958AC3 ||
p_sys->stream_format.mFormatID == 'IAC3' ) &&
- p_sys->i_buffer_size != AOUT_SPDIF_SIZE )
+ p_sys->i_bufframe_size != A52_FRAME_NB )
{
- p_sys->i_buffer_size = AOUT_SPDIF_SIZE;
- i_param_size = sizeof( p_sys->i_buffer_size );
- err = AudioDeviceSetProperty( p_sys->devid, 0, 0, FALSE,
- kAudioDevicePropertyBufferSize,
- i_param_size, &p_sys->i_buffer_size );
- if( err != noErr )
- {
- msg_Err( p_aout, "failed to set buffer size: [%4.4s]",
- (char *)&err );
- FreeDevice( p_aout );
- FreeHardwareInfo( p_aout );
- vlc_mutex_destroy( &p_sys->lock );
- free( (void *)p_sys );
- return( VLC_EGENERIC );
- }
-
- msg_Dbg( p_aout, "device buffer size set to: [%ld]",
- p_sys->i_buffer_size );
-
- /* Set buffer frame size */
- i_param_size = sizeof( p_aout->output.i_nb_samples );
+ p_sys->i_bufframe_size = A52_FRAME_NB;
+ i_param_size = sizeof( p_sys->i_bufframe_size );
err = AudioDeviceSetProperty( p_sys->devid, 0, 0, FALSE,
kAudioDevicePropertyBufferFrameSize,
- i_param_size,
- &p_aout->output.i_nb_samples );
+ i_param_size, &p_sys->i_bufframe_size );
if( err != noErr )
{
- msg_Err( p_aout, "failed to set buffer frame size: [%4.4s]",
- (char *)&err );
+ msg_Err( p_aout, "failed to set bufframe size (%ld): [%4.4s]",
+ p_sys->i_bufframe_size, (char *)&err );
FreeDevice( p_aout );
FreeHardwareInfo( p_aout );
vlc_mutex_destroy( &p_sys->lock );
return( VLC_EGENERIC );
}
- msg_Dbg( p_aout, "device buffer frame size set to: [%d]",
- p_aout->output.i_nb_samples );
+ msg_Dbg( p_aout, "device bufframe size set to: [%ld]",
+ p_sys->i_bufframe_size );
}
switch( p_sys->stream_format.mFormatID )
return( VLC_EGENERIC );
}
- p_aout->output.i_nb_samples = (int)( p_sys->i_buffer_size /
- p_sys->stream_format.mBytesPerFrame );
+ p_aout->output.i_nb_samples = p_sys->i_bufframe_size;
aout_VolumeSoftInit( p_aout );
break;
{
/* move data into output data buffer */
p_aout->p_vlc->pf_memcpy( outOutputData->mBuffers[ p_sys->i_stream_index ].mData,
- p_buffer->p_buffer,
- p_sys->i_buffer_size );
+ p_buffer->p_buffer, p_sys->i_bufframe_size *
+ p_sys->stream_format.mBytesPerFrame );
aout_BufferFree( p_buffer );
}
{
if( p_aout->output.output.i_format == VLC_FOURCC('f','l','3','2') )
{
- UInt32 i, i_size = p_sys->i_buffer_size / sizeof(float);
+ UInt32 i, i_size = p_sys->i_bufframe_size *
+ p_sys->stream_format.mChannelsPerFrame;
float * p = (float *)outOutputData->mBuffers[ p_sys->i_stream_index ].mData;
for( i = 0; i < i_size; i++ )
else
{
memset( outOutputData->mBuffers[ p_sys->i_stream_index ].mData,
- 0, p_sys->i_buffer_size );
+ 0, p_sys->i_bufframe_size *
+ p_sys->stream_format.mBytesPerFrame );
}
}