Functions

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  ) 
static signed long GetStreamWriteAvailable ( PaStream stream  ) 
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 
)
PaError resetBlioRingBuffers ( PaMacBlio blio  ) 
void waitUntilBlioWriteBufferIsFlushed ( PaMacBlio blio  ) 
static PaError WriteStream ( PaStream stream,
const void *  buffer,
unsigned long  frames 
)

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(), paOutputUnderflow, PaUtil_GetRingBufferWriteAvailable(), PaUtil_WriteRingBuffer(), PaMacBlio::statusFlags, UNIX_ERR, VVDBUG, and WriteStream().

Referenced by PaMacCore_Initialize(), PaOSS_Initialize(), PaWinDs_Initialize(), PaWinMme_Initialize(), PaWinWdm_Initialize(), and WriteStream().