sipxmedialib  Version 3.3
Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
MpodCoreAudio Class Reference

Container for device specific output CoreAudio driver. More...

#include <MpodCoreAudio.h>

Inheritance diagram for MpodCoreAudio:
Inheritance graph
[legend]
Collaboration diagram for MpodCoreAudio:
Collaboration graph
[legend]

Public Member Functions

Creators
 MpodCoreAudio (const UtlString &name)
 Default constructor. More...
 
 ~MpodCoreAudio ()
 Destructor. More...
 
Manipulators
OsStatus enableDevice (unsigned samplesPerFrame, unsigned samplesPerSec, MpFrameTime currentFrameTime)
 Initialize device driver and state. More...
 
OsStatus disableDevice ()
 Uninitialize device driver. More...
 
OsStatus pushFrame (unsigned int numSamples, const MpAudioSample *samples, MpFrameTime frameTime)
 Send data to output device. More...
 
OsStatus setTickerNotification (OsNotification *pFrameTicker)
 
- Public Member Functions inherited from MpOutputDeviceDriver
 MpOutputDeviceDriver (const UtlString &name)
 Default constructor. More...
 
virtual ~MpOutputDeviceDriver ()
 Destructor. More...
 
virtual OsStatus enableDevice (unsigned samplesPerFrame, unsigned samplesPerSec, MpFrameTime currentFrameTime, OsCallback &frameTicker)=0
 Initialize device driver and state. More...
 
MpFrameTime getFramePeriod () const
 Calculate the number of milliseconds that a frame occupies in time. More...
 
unsigned getSamplesPerFrame () const
 Get number of samples in a frame. More...
 
unsigned getSamplesPerSec () const
 Get number of samples per second. More...
 
const UtlString & getDeviceName () const
 Get device name. More...
 
virtual OsStatus canEnable ()
 Check if this device can connect. More...
 
virtual UtlBoolean isEnabled () const
 Inquire if this driver is enabled. More...
 

Protected Member Functions

OsStatus signalForNextFrame ()
 Signaling for next frame if notificator used do nothing otherwise. More...
 
void skipFrame ()
 Adding frame time to mCurrentFrameTime. More...
 
bool setAudioUnitFormat (const AudioStreamBasicDescription &ds)
 
bool initResempler (const AudioStreamBasicDescription &ds)
 
bool setBuffers ()
 

Static Protected Member Functions

static void propertyListener (void *inRefCon, AudioUnit ci, AudioUnitPropertyID inID, AudioUnitScope inScope, AudioUnitElement inElement)
 
static OSStatus renderProc (void *inRefCon, AudioUnitRenderActionFlags *inActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumFrames, AudioBufferList *ioData)
 
static OSStatus ACproc (AudioConverterRef inAudioConverter, UInt32 *ioDataPackets, AudioBufferList *ioData, AudioStreamPacketDescription **inUserData, void *inUData)
 

Protected Attributes

AudioUnit mOutputUnit
 AudioUnit output handle. More...
 
AudioConverterRef mConverter
 Sample rate converter. More...
 
CoreAudioHardware mDevice
 CoreAudio hardware device handle. More...
 
double mOutputSampleRate
 Device smaple rate. More...
 
MpAudioSamplemAudioFrame
 Wave buffer for silence. More...
 
MpAudioSamplemAudioFrameData
 Second wave buffer for actual data. More...
 
OsNotification * pNotificator
 Notificator used for signaling next frame. More...
 
MpFrameTime mCurrentFrameTime
 The current frame time for this device. More...
 
- Protected Attributes inherited from MpOutputDeviceDriver
OsAtomicLightBool mIsEnabled
 Whether this device driver is enabled or not. More...
 
OsAtomicLightUInt mSamplesPerFrame
 number of samples. More...
 
OsAtomicLightUInt mSamplesPerSec
 of samples per second. More...
 
OsCallback * mpTickerNotification
 is ready to accept more data. See enableDevice() for details. More...
 

Private Member Functions

 MpodCoreAudio (const MpodCoreAudio &rMpOutputDeviceDriver)
 Copy constructor (not implemented for this class) More...
 
MpodCoreAudiooperator= (const MpodCoreAudio &rhs)
 Assignment operator (not implemented for this class) More...
 

Additional Inherited Members

- Static Public Member Functions inherited from MpOutputDeviceDriver
static MpFrameTime getFramePeriod (unsigned samplesPerFrame, unsigned samplesPerSec)
 Calculate the number of milliseconds that a frame occupies in time. More...
 

Detailed Description

Container for device specific output CoreAudio driver.

Constructor & Destructor Documentation

MpodCoreAudio ( const UtlString &  name)

Default constructor.

Parameters
name- (in) unique device driver name (e.g. "/dev/dsp", "YAMAHA AC-XG WDM Audio", etc.).
nInputBuffers- (in) Maximum number of frames in internal buffer.

Destructor.

MpodCoreAudio ( const MpodCoreAudio rMpOutputDeviceDriver)
private

Copy constructor (not implemented for this class)

Member Function Documentation

OsStatus enableDevice ( unsigned  samplesPerFrame,
unsigned  samplesPerSec,
MpFrameTime  currentFrameTime 
)

Initialize device driver and state.

This method enables the device driver.

this SHOULD NOT be used to mute/unmute a device. Disabling and enabling a device results in state and buffer queues being cleared.

Parameters
[in]samplesPerFrame- the number of samples in a frame of media
[in]samplesPerSec- sample rate for media frame in samples per second
[in]currentFrameTime- time in milliseconds for beginning of frame relative to the MpOutputDeviceManager reference time
[in]frameTicker- notification to signal when device become ready. Device driver MUST signal this notification as soon as it become ready to receive next portion of data to play back. Note, it is a callback which in turn calls pushFrame() method of this device driver. Also notification may be used to signal begin of frame interval for one or several flowgraphs, so it should be as uniform as possible, i.e. it should not burst or hold over, driver should signal this notification after equal intervals of time.
Returns
OS_INVALID_STATE if device already enabled.

This method is supposed to be used from MpAudioOutputConnection only. If you want enable device, use MpOutputDeviceManager or MpAudioOutputConnection methods.

OsStatus disableDevice ( )
virtual

Uninitialize device driver.

This method disables the device driver and should release any platform device resources so that the device might be used else where.

this SHOULD NOT be used to mute/unmute a device. Disabling and enabling a device results in state and buffer queues being cleared.

This method is supposed to be used from MpAudioOutputConnection only. If you want disable device, use MpOutputDeviceManager or MpAudioOutputConnection methods.

Implements MpOutputDeviceDriver.

OsStatus pushFrame ( unsigned int  numSamples,
const MpAudioSample samples,
MpFrameTime  frameTime 
)
virtual

Send data to output device.

This method is called from a callback which is called when we fire ticker notification. See enableDevice() for details.

Parameters
[in]numSamples- Number of samples in samples array.
[in]samples- Array of samples to push to device.
[in]frameTime- Time of pushed frame. Device may consider does it want it or not internally. If frame come too late driver should return OS_SUCCESS and throw out it silently. Common problem is when MediaTask queue is jammed - no frames are processed for some time and then they are processed bursty. Using given frameTime driver may keep its internal queue short. It is guaranteed that frame time would increase monotonically.
Returns
OS_LIMIT_REACHED if mixer buffer is full, i.e. frame come too early.
OS_FAILED for other errors.
OS_SUCCESS if frame sent correctly.
See also
enableDevice() for documentation when this is being called.

Implements MpOutputDeviceDriver.

OsStatus setTickerNotification ( OsNotification *  pFrameTicker)

OsStatus signalForNextFrame ( )
protected

Signaling for next frame if notificator used do nothing otherwise.

void skipFrame ( )
protected

Adding frame time to mCurrentFrameTime.

bool setAudioUnitFormat ( const AudioStreamBasicDescription &  ds)
protected
bool initResempler ( const AudioStreamBasicDescription &  ds)
protected
bool setBuffers ( )
protected
void propertyListener ( void *  inRefCon,
AudioUnit  ci,
AudioUnitPropertyID  inID,
AudioUnitScope  inScope,
AudioUnitElement  inElement 
)
staticprotected
OSStatus renderProc ( void *  inRefCon,
AudioUnitRenderActionFlags *  inActionFlags,
const AudioTimeStamp *  inTimeStamp,
UInt32  inBusNumber,
UInt32  inNumFrames,
AudioBufferList *  ioData 
)
staticprotected
OSStatus ACproc ( AudioConverterRef  inAudioConverter,
UInt32 *  ioDataPackets,
AudioBufferList *  ioData,
AudioStreamPacketDescription **  inUserData,
void *  inUData 
)
staticprotected
MpodCoreAudio& operator= ( const MpodCoreAudio rhs)
private

Assignment operator (not implemented for this class)

Member Data Documentation

AudioUnit mOutputUnit
protected

AudioUnit output handle.

AudioConverterRef mConverter
protected

Sample rate converter.

CoreAudioHardware mDevice
protected

CoreAudio hardware device handle.

double mOutputSampleRate
protected

Device smaple rate.

MpAudioSample* mAudioFrame
protected

Wave buffer for silence.

MpAudioSample* mAudioFrameData
protected

Second wave buffer for actual data.

OsNotification* pNotificator
protected

Notificator used for signaling next frame.

MpFrameTime mCurrentFrameTime
protected

The current frame time for this device.