pa_mac_core_blocking.c File Reference

#include "pa_mac_core_blocking.h"
#include "pa_mac_core_internal.h"
#include <assert.h>
#include <libkern/OSAtomic.h>

Functions

PaError initializeBlioRingBuffers (PaMacBlio *blio, PaSampleFormat inputSampleFormat, PaSampleFormat outputSampleFormat, size_t framesPerBuffer, long ringBufferSize, int inChan, int outChan)
PaError resetBlioRingBuffers (PaMacBlio *blio)
PaError destroyBlioRingBuffers (PaMacBlio *blio)
int BlioCallback (const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData)
PaError ReadStream (PaStream *stream, void *buffer, unsigned long frames)
PaError WriteStream (PaStream *stream, const void *buffer, unsigned long frames)
void waitUntilBlioWriteBufferIsFlushed (PaMacBlio *blio)
signed long GetStreamReadAvailable (PaStream *stream)
signed long GetStreamWriteAvailable (PaStream *stream)

Detailed Description

This file contains the implementation required for blocking I/O. It is separated from pa_mac_core.c simply to ease development.

Function Documentation

int BlioCallback ( const void *  input,
void *  output,
unsigned long  frameCount,
const PaStreamCallbackTimeInfo timeInfo,
PaStreamCallbackFlags  statusFlags,
void *  userData 
)

PaError destroyBlioRingBuffers ( PaMacBlio blio  ) 

static signed long GetStreamReadAvailable ( PaStream stream  ) 

Number of frames that can be read from input stream without blocking.

Parameters:
s Pointer to PortAudio stream
Returns:
Number of frames, or PortAudio error code

References PaMacBlio::inputRingBuffer, PaMacBlio::outChan, PaMacBlio::outputSampleSizeActual, PaUtil_GetRingBufferReadAvailable(), and VVDBUG.

Referenced by PaAlsa_Initialize(), PaAsiHpi_Initialize(), PaAsio_Initialize(), PaMacCore_Initialize(), PaOSS_Initialize(), PaSkeleton_Initialize(), PaWinDs_Initialize(), PaWinMme_Initialize(), and PaWinWdm_Initialize().

static signed long GetStreamWriteAvailable ( PaStream stream  ) 

Number of frames that can be written to output stream without blocking.

Parameters:
s Pointer to PortAudio stream
Returns:
Number of frames, or PortAudio error code

References PaMacBlio::outChan, PaMacBlio::outputRingBuffer, PaMacBlio::outputSampleSizeActual, PaUtil_GetRingBufferWriteAvailable(), and VVDBUG.

Referenced by PaAlsa_Initialize(), PaAsiHpi_Initialize(), PaAsio_Initialize(), PaMacCore_Initialize(), PaOSS_Initialize(), PaSkeleton_Initialize(), PaWinDs_Initialize(), PaWinMme_Initialize(), and PaWinWdm_Initialize().

PaError initializeBlioRingBuffers ( PaMacBlio blio,
PaSampleFormat  inputSampleFormat,
PaSampleFormat  outputSampleFormat,
size_t  framesPerBuffer,
long  ringBufferSize,
int  inChan,
int  outChan 
)

static PaError ReadStream ( PaStream stream,
void *  buffer,
unsigned long  frames 
)

Read data from input stream. This reads the indicated number of frames into the supplied buffer from an input stream, and blocks until this is done.

Parameters:
s Pointer to PortAudio stream
buffer Pointer to buffer that will receive interleaved data (or an array of pointers to a buffer for each non-interleaved channel)
frames Number of frames to read from stream
Returns:
PortAudio error code (also indicates overflow via paInputOverflowed)

Todo:
REVIEW: consider what to do if the input overflows. do we requeue all of the buffers? should we be running a thread to make sure they are always queued?

References PaMacBlio::inChan, PaMacBlio::inputRingBuffer, PaMacBlio::inputSampleSizeActual, MIN, PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL, Pa_Sleep(), paInputOverflow, paInputOverflowed, paNoError, PaUtil_GetRingBufferReadAvailable(), PaUtil_ReadRingBuffer(), PaMacBlio::statusFlags, UNIX_ERR, and VVDBUG.

Referenced by PaAlsa_Initialize(), PaAsiHpi_Initialize(), PaAsio_Initialize(), PaMacCore_Initialize(), PaOSS_Initialize(), PaSkeleton_Initialize(), PaWinDs_Initialize(), PaWinMme_Initialize(), and PaWinWdm_Initialize().

PaError resetBlioRingBuffers ( PaMacBlio blio  ) 

void waitUntilBlioWriteBufferIsFlushed ( PaMacBlio blio  ) 

static PaError WriteStream ( PaStream stream,
const void *  buffer,
unsigned long  frames 
)

Write data to output stream. This writes the indicated number of frames from the supplied buffer to an output stream, and blocks until this is done.

Parameters:
s Pointer to PortAudio stream
buffer Pointer to buffer that provides interleaved data (or an array of pointers to a buffer for each non-interleaved channel)
frames Number of frames to write to stream
Returns:
PortAudio error code (also indicates underflow via paOutputUnderflowed)

Todo:
REVIEW: consider what to do if the output underflows. do we requeue all the existing buffers with zeros? should we run a separate thread to keep the buffers enqueued at all times?

References MIN, PaMacBlio::outChan, PaMacBlio::outputRingBuffer, PaMacBlio::outputSampleSizeActual, PA_MAC_BLIO_BUSY_WAIT_SLEEP_INTERVAL, Pa_Sleep(), paNoError, paOutputUnderflow, paOutputUnderflowed, PaUtil_GetRingBufferWriteAvailable(), PaUtil_WriteRingBuffer(), PaMacBlio::statusFlags, UNIX_ERR, and VVDBUG.

Referenced by PaAlsa_Initialize(), PaAsiHpi_Initialize(), PaAsio_Initialize(), PaMacCore_Initialize(), PaOSS_Initialize(), PaSkeleton_Initialize(), PaWinDs_Initialize(), PaWinMme_Initialize(), and PaWinWdm_Initialize().


Generated for PortAudio by  doxygen1.5.8