IMAAudioRTP/RTPMPIMAAudio/Headers/IMAAudioQueue.h

/*
    File:       IMAAudioQueue.h
 
    Contains:   Delcaration of IMAAudioQueue, a queue datatype for IMA
                audio sample data.
    
    Copyright:  © 1997-1999 by Apple Computer, Inc., all rights reserved.
 
    
    
    The IMAAudioQueue serves several functions:
    
        -   it internally copies and disposes of RTPMPSampleDataParams
            data structures
        
        -   it converts from the descriptions of arbitrarily large sample
            blocks, given in RTPMPSampleDataParams data structures, to
            descriptions of single frames
        
        -   it can convert incoming data to a lower sample rate by dropping
            frames as necessary
    
*/
 
 
 
#ifndef __IMAAUDIOQUEUE__
#define __IMAAUDIOQUEUE__
 
#pragma once
 
 
 
#include "TQueue.h"
#include <QTStreamingComponents.h>
 
 
 
typedef struct IMAAudioQueueElement
{
    TimeValue64                 itsTimestamp;
    UInt32                      itsChannel;
    RTPMPSampleDataParams *     itsSampleDataParams;
    UInt32                      itsOffset;
} IMAAudioQueueElement;
 
typedef struct IMAAudioQueue
{
    TQueue          __itsQueue;
    TimeValue64     __itsStartTime;
    UInt32          __itsFrameCount;
    UInt32          __itsCurrentOffset;
    UInt32          __itsConsumedFrameCount;
    UInt32          __itsDequeuedFrameCount;
    UnsignedFixed   __itsIncomingSampleRate;
    UnsignedFixed   __itsOutgoingSampleRate;
    UInt16          __itsChannelCount;
} IMAAudioQueue;
 
 
 
extern
void
IMAAudioQueueInitialize(
    IMAAudioQueue *     inQueue );
 
extern
UnsignedFixed
IMAAudioQueueSetFlowControl(
    IMAAudioQueue *     inQueue,
    UnsignedFixed       inIncomingSampleRate,
    UnsignedFixed       inOutgoingSampleRate,
    UInt16              inChannelCount );
 
extern
UInt32
IMAAudioQueueCount(
    const IMAAudioQueue *   inQueue );
 
extern
RTPMPSampleDataParams *
IMAAudioQueueEnqueue(
    IMAAudioQueue *                 inQueue,
    const RTPMPSampleDataParams *   inSampleDataParams );
 
extern
Boolean
IMAAudioQueueDequeue(
    IMAAudioQueue *         inQueue,
    IMAAudioQueueElement *  outElement );
 
extern
void
IMAAudioQueueFlush(
    IMAAudioQueue *     inQueue );
 
 
 
#endif /* __IMAAUDIOQUEUE__ */