topical media & game development
lib-of-vs-libs-QTDevWin-CIncludes-QTStreamingComponents.h / h
/*
File: QTStreamingComponents.h
Contains: QuickTime Interfaces.
Version: Technology: QuickTime 6.0
Release: QuickTime 6.0.2
Copyright: (c) 1990-2001 by Apple Computer, Inc., all rights reserved
Bugs?: For bug reports, consult the following page on
the World Wide Web:
http://developer.apple.com/bugreporter/
*/
ifndef __QTSTREAMINGCOMPONENTS__
define __QTSTREAMINGCOMPONENTS__
ifndef __COMPONENTS__
include <Components.h>
endif
ifndef __MACERRORS__
include <MacErrors.h>
endif
ifndef __MOVIES__
include <Movies.h>
endif
ifndef __QUICKTIMESTREAMING__
include <QuickTimeStreaming.h>
endif
if PRAGMA_ONCE
#pragma once
endif
ifdef __cplusplus
extern "C" {
endif
if PRAGMA_IMPORT
#pragma import on
endif
if PRAGMA_STRUCT_ALIGN
#pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
#pragma pack(2)
endif
/*============================================================================
Stream Sourcer
============================================================================*/
enum {
kQTSSourcerType = FOUR_CHAR_CODE('srcr')
};
typedef ComponentInstance QTSSourcer;
enum {
kQTSSGChannelSourcerType = FOUR_CHAR_CODE('sgch'),
kQTSMovieTrackSourcerType = FOUR_CHAR_CODE('trak'),
kQTSPushDataSourcerType = FOUR_CHAR_CODE('push')
};
/* flags for sourcer data */
enum {
kQTSSourcerDataFlag_SyncSample = 0x00000001,
kQTSPushDataSourcerFlag_SampleTimeIsValid = (long)0x80000000
};
enum {
kQTSSourcerInitParamsVersion1 = 1
};
struct QTSSourcerInitParams {
SInt32 version;
SInt32 flags;
OSType dataType;
void * data;
UInt32 dataLength;
};
typedef struct QTSSourcerInitParams QTSSourcerInitParams;
EXTERN_API_C( OSErr )
QTSNewSourcer (void * params,
const QTSSourcerInitParams * inInitParams,
SInt32 inFlags,
ComponentInstance * outSourcer);
/* info selectors for sourcers - get and set */
enum {
kQTSInfo_Track = FOUR_CHAR_CODE('trak'), /* QTSTrackParams* */
kQTSInfo_Loop = FOUR_CHAR_CODE('loop'), /* QTSLoopParams* */
kQTSInfo_SourcerTiming = FOUR_CHAR_CODE('stim'), /* QTSSourcerTimingParams* */
kQTSInfo_TargetFrameRate = FOUR_CHAR_CODE('tfps'), /* Fixed * in frames per second */
kQTSInfo_PushData = FOUR_CHAR_CODE('push'), /* QTSPushDataParams* */
kQTSInfo_SourcerCallbackProc = FOUR_CHAR_CODE('scbp'), /* QTSSourcerCallbackProcParams* */
kQTSInfo_TargetDataRate = FOUR_CHAR_CODE('tdrt'), /* UInt32 * in bytes per second */
kQTSInfo_AudioAutoGainOnOff = FOUR_CHAR_CODE('agc '), /* Boolean* - error if unavailable*/
kQTSInfo_AudioGain = FOUR_CHAR_CODE('gain'), /* Fixed* kFixed1 is unity gain */
kQTSInfo_CroppedInputRect = FOUR_CHAR_CODE('crpr'), /* Rect* - defined relative to kQTSInfo_FullInputRect below */
kQTSInfo_SpatialSettings = FOUR_CHAR_CODE('sptl'), /* pointer to SCSpatialSettings struct*/
kQTSInfo_TemporalSettings = FOUR_CHAR_CODE('tprl'), /* pointer to SCTemporalSettings struct*/
kQTSInfo_DataRateSettings = FOUR_CHAR_CODE('drat'), /* pointer to SCDataRateSettings struct*/
kQTSInfo_CodecFlags = FOUR_CHAR_CODE('cflg'), /* pointer to CodecFlags*/
kQTSInfo_CodecSettings = FOUR_CHAR_CODE('cdec'), /* pointer to Handle*/
kQTSInfo_ForceKeyValue = FOUR_CHAR_CODE('ksim'), /* pointer to long*/
kQTSInfo_SoundSampleRate = FOUR_CHAR_CODE('ssrt'), /* pointer to UnsignedFixed*/
kQTSInfo_SoundSampleSize = FOUR_CHAR_CODE('ssss'), /* pointer to short*/
kQTSInfo_SoundChannelCount = FOUR_CHAR_CODE('sscc'), /* pointer to short*/
kQTSInfo_SoundCompression = FOUR_CHAR_CODE('ssct'), /* pointer to OSType*/
kQTSInfo_CompressionList = FOUR_CHAR_CODE('ctyl'), /* pointer to OSType Handle*/
kQTSInfo_VideoHue = FOUR_CHAR_CODE('hue '), /* UInt16* */
kQTSInfo_VideoSaturation = FOUR_CHAR_CODE('satr'), /* UInt16* */
kQTSInfo_VideoContrast = FOUR_CHAR_CODE('trst'), /* UInt16* */
kQTSInfo_VideoBrightness = FOUR_CHAR_CODE('brit'), /* UInt16* */
kQTSInfo_VideoSharpness = FOUR_CHAR_CODE('shrp'), /* UInt16* */
kQTSInfo_TimeScale = FOUR_CHAR_CODE('scal'), /* UInt32* */
kQTSInfo_SGChannelDeviceName = FOUR_CHAR_CODE('innm'), /* Handle* */
kQTSInfo_SGChannelDeviceList = FOUR_CHAR_CODE('srdl'), /* SGDeviceList* */
kQTSInfo_SGChannelDeviceInput = FOUR_CHAR_CODE('sdii'), /* short* */
kQTSInfo_SGChannelSettings = FOUR_CHAR_CODE('sesg'), /* QTSSGChannelSettingsParams */
kQTSInfo_PreviewWhileRecordingMode = FOUR_CHAR_CODE('srpr'), /* Boolean* */
kQTSInfo_CompressionParams = FOUR_CHAR_CODE('sccp') /* QTAtomContainer* */
};
/* info selectors for sourcers - get only*/
enum {
kQTSInfo_SGChannel = FOUR_CHAR_CODE('sgch'), /* SGChannel* */
kQTSInfo_SGChannelInputName = FOUR_CHAR_CODE('srnm'), /* Handle* */
kQTSInfo_FullInputRect = FOUR_CHAR_CODE('fulr') /* Rect* */
};
/* loop flags */
enum {
kQTSLoopFlag_Loop = 0x00000001
};
enum {
kQTSLoopParamsVersion1 = 1
};
struct QTSLoopParams {
SInt32 version;
SInt32 flags;
SInt32 loopFlags;
SInt32 flagsMask;
SInt32 numLoops;
};
typedef struct QTSLoopParams QTSLoopParams;
enum {
kQTSTrackParamsVersion1 = 1
};
struct QTSTrackParams {
SInt32 version;
SInt32 flags;
Track track;
TimeValue64 trackStartOffset; /* to start other than at the beginning otherwise set to 0*/
TimeValue64 duration; /* to limit the duration otherwise set to 0*/
QTSLoopParams * loopParams; /* set to NULL if not using; default is no looping */
};
typedef struct QTSTrackParams QTSTrackParams;
enum {
kQTSSourcerTimingParamsVersion1 = 1
};
struct QTSSourcerTimingParams {
SInt32 version;
SInt32 flags;
TimeScale timeScale;
TimeValue64 presentationStartTime;
TimeValue64 presentationEndTime;
TimeValue64 presentationCurrentTime;
TimeValue64 localStartTime;
TimeValue64 localEndTime;
TimeValue64 localCurrentTime;
};
typedef struct QTSSourcerTimingParams QTSSourcerTimingParams;
enum {
kQTSPushDataParamsVersion1 = 1
};
enum {
kQTSPushDataFlag_SampleTimeIsValid = 0x00000001,
kQTSPushDataFlag_DurationIsValid = 0x00000002
};
struct QTSPushDataParams {
SInt32 version;
SInt32 flags;
SampleDescriptionHandle sampleDescription; /* caller owns the handle */
UInt32 sampleDescSeed;
TimeValue64 sampleTime; /* also set flag if you set this */
TimeValue64 duration; /* also set flag if you set this */
UInt32 dataLength;
void * dataPtr; /* this does not have to be a real macintosh Ptr */
};
typedef struct QTSPushDataParams QTSPushDataParams;
enum {
kQTSSourcerCallbackProcParamsVersion1 = 1
};
struct QTSSourcerCallbackProcParams {
SInt32 version;
SInt32 flags;
QTSNotificationUPP proc;
void * refCon;
};
typedef struct QTSSourcerCallbackProcParams QTSSourcerCallbackProcParams;
/* track sourcer callback selectors*/
enum {
kQTSSourcerCallback_Done = FOUR_CHAR_CODE('done') /* QTSSourcerDoneParams* */
};
/* push data sourcer callback selectors*/
enum {
kQTSPushDataSourcerCallback_HasCharacteristic = 0x050D, /* QTSPushDataHasCharacteristicParams* */
kQTSPushDataSourcerCallback_SetInfo = 0x0507, /* QTSPushDataInfoParams* */
kQTSPushDataSourcerCallback_GetInfo = 0x0508 /* QTSPushDataInfoParams* */
};
struct QTSPushDataHasCharacteristicParams {
SInt32 version;
SInt32 flags;
OSType characteristic;
Boolean returnedHasIt;
char reserved1;
char reserved2;
char reserved3;
};
typedef struct QTSPushDataHasCharacteristicParams QTSPushDataHasCharacteristicParams;
struct QTSPushDataInfoParams {
SInt32 version;
SInt32 flags;
OSType selector;
void * ioParams;
};
typedef struct QTSPushDataInfoParams QTSPushDataInfoParams;
enum {
kQTSSourcerDoneParamsVersion1 = 1
};
struct QTSSourcerDoneParams {
SInt32 version;
SInt32 flags;
ComponentInstance sourcer;
};
typedef struct QTSSourcerDoneParams QTSSourcerDoneParams;
struct QTSSGChannelSettingsParams {
UserData settings;
SInt32 flags;
};
typedef struct QTSSGChannelSettingsParams QTSSGChannelSettingsParams;
/*-----------------------------------------
Stream Sourcer Selectors
-----------------------------------------*/
enum {
kQTSSourcerInitializeSelect = 0x0500,
kQTSSourcerSetEnableSelect = 0x0503,
kQTSSourcerGetEnableSelect = 0x0504,
kQTSSourcerSetInfoSelect = 0x0507,
kQTSSourcerGetInfoSelect = 0x0508,
kQTSSourcerSetTimeScaleSelect = 0x050E,
kQTSSourcerGetTimeScaleSelect = 0x050F,
kQTSSourcerIdleSelect = 0x0516
};
/*-----------------------------------------
Stream Sourcer Prototypes
-----------------------------------------*/
EXTERN_API( ComponentResult )
QTSSourcerInitialize (QTSSourcer inSourcer,
const QTSSourcerInitParams * inInitParams) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0500, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
QTSSourcerIdle (QTSSourcer inSourcer,
const TimeValue64 * inTime,
SInt32 inFlags,
SInt32 * outFlags) FIVEWORDINLINE(0x2F3C, 0x000C, 0x0516, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
QTSSourcerSetEnable (QTSSourcer inSourcer,
Boolean inEnableMode,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0006, 0x0503, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
QTSSourcerGetEnable (QTSSourcer inSourcer,
Boolean * outEnableMode,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0504, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
QTSSourcerSetTimeScale (QTSSourcer inSourcer,
TimeScale inTimeScale) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050E, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
QTSSourcerGetTimeScale (QTSSourcer inSourcer,
TimeScale * outTimeScale) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050F, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
QTSSourcerSetInfo (QTSSourcer inSourcer,
OSType inSelector,
void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0507, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
QTSSourcerGetInfo (QTSSourcer inSourcer,
OSType inSelector,
void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0508, 0x7000, 0xA82A);
enum {
kQTSInfo_InputDeviceName = FOUR_CHAR_CODE('innm'), /* Handle* */
kQTSInfo_InputSourceName = FOUR_CHAR_CODE('srnm') /* Handle* */
};
/*============================================================================
Stream Handler
============================================================================*/
/*
Server edits are only valid for the current chunk
*/
struct SHServerEditParameters {
UInt32 version;
Fixed editRate;
TimeValue64 dataStartTime_mediaAxis;
TimeValue64 dataEndTime_mediaAxis;
};
typedef struct SHServerEditParameters SHServerEditParameters;
enum {
kSHNoChunkDispatchFlags = 0,
kSHChunkFlagSyncSample = 1 << 2,
kSHChunkFlagDataLoss = 1 << 4,
kSHChunkFlagExtended = 1 << 5
};
struct SHChunkRecord {
UInt32 version;
long reserved1;
SInt32 flags;
UInt32 dataSize;
UInt8 * dataPtr;
long reserved2;
long reserved3;
TimeValue64 presentationTime;
long reserved4;
long reserved5;
const SHServerEditParameters * serverEditParameters;
long reserved6;
long reserved7;
};
typedef struct SHChunkRecord SHChunkRecord;
enum {
kSHNumExtendedDataLongs = 10
};
enum {
kSHExtendedChunkFlag_HasSampleCount = 1 << 0,
kSHExtendedChunkFlag_HasFrameLengths = 1 << 1
};
struct SHExtendedChunkRecord {
SHChunkRecord chunk;
SInt32 extendedFlags;
SInt32 extendedData[10];
};
typedef struct SHExtendedChunkRecord SHExtendedChunkRecord;
/*============================================================================
RTP Components
============================================================================*/
typedef UInt32 RTPSSRC;
enum {
kRTPInvalidSSRC = 0
};
/* RTP standard content encodings for audio */
enum {
kRTPPayload_PCMU = 0, /* 8kHz PCM mu-law mono */
kRTPPayload_1016 = 1, /* 8kHz CELP (Fed Std 1016) mono */
kRTPPayload_G721 = 2, /* 8kHz G.721 ADPCM mono */
kRTPPayload_GSM = 3, /* 8kHz GSM mono */
kRTPPayload_G723 = 4, /* 8kHz G.723 ADPCM mono */
kRTPPayload_DVI_8 = 5, /* 8kHz Intel DVI ADPCM mono */
kRTPPayload_DVI_16 = 6, /* 16kHz Intel DVI ADPCM mono */
kRTPPayload_LPC = 7, /* 8kHz LPC */
kRTPPayload_PCMA = 8, /* 8kHz PCM a-law mono */
kRTPPayload_L16_44_2 = 10, /* 44.1kHz 16-bit linear stereo */
kRTPPayload_L16_44_1 = 11, /* 44.1kHz 16-bit linear mono */
kRTPPayload_PureVoice = 12, /* 8kHz PureVoice mono (QCELP) */
kRTPPayload_MPEGAUDIO = 14, /* MPEG I and II audio */
kRTPPayload_DVI_11 = 16, /* 11kHz Intel DVI ADPCM mono */
kRTPPayload_DVI_22 = 17 /* 22kHz Intel DVI ADPCM mono */
};
/* RTP standard content encodings for video */
enum {
kRTPPayload_CELLB = 25, /* Sun CellB */
kRTPPayload_JPEG = 26, /* JPEG */
kRTPPayload_CUSEEME = 27, /* Cornell CU-SeeMe */
kRTPPayload_NV = 28, /* Xerox PARC nv */
kRTPPayload_PICWIN = 29, /* BBN Picture Window */
kRTPPayload_CPV = 30, /* Bolter CPV */
kRTPPayload_H261 = 31, /* CCITT H.261 */
kRTPPayload_MPEGVIDEO = 32, /* MPEG I and II video */
kRTPPayload_H263 = 34 /* CCITT H.263 */
};
/* Other RTP standard content encodings */
enum {
kRTPPayload_MPEG2T = 33 /* MPEG 2 Transport */
};
/* Dynamic encodings */
enum {
kRTPPayload_FirstDynamic = 96,
kRTPPayload_LastDynamic = 127,
kRTPPayload_Unknown = 0xFF
};
/*
-----------------------------------------
RTP Info selectors
-----------------------------------------
*/
/* ----- these are get and set ----- */
enum {
kRTPInfo_SSRC = FOUR_CHAR_CODE('ssrc'), /* UInt32* */
kRTPInfo_NextSeqNum = FOUR_CHAR_CODE('rnsn') /* UInt16* */
};
/*-----------------------------------------
RTP Statistics
-----------------------------------------*/
enum {
kRTPTotalReceivedPktsStat = FOUR_CHAR_CODE('trcp'),
kRTPTotalLostPktsStat = FOUR_CHAR_CODE('tlsp'),
kRTPTotalProcessedPktsStat = FOUR_CHAR_CODE('tprp'),
kRTPTotalDroppedPktsStat = FOUR_CHAR_CODE('tdrp'),
kRTPBadHeaderDroppedPktsStat = FOUR_CHAR_CODE('bhdp'),
kRTPOurHeaderDroppedPktsStat = FOUR_CHAR_CODE('ohdp'),
kRTPNotReceivingSenderDroppedPktsStat = FOUR_CHAR_CODE('nsdp'),
kRTPNotProcessingDroppedPktsStat = FOUR_CHAR_CODE('npdp'),
kRTPBadSeqDroppedPktsStat = FOUR_CHAR_CODE('bsdp'),
kRTPArriveTooLatePktsStat = FOUR_CHAR_CODE('artl'),
kRTPWaitForSeqDroppedPktsStat = FOUR_CHAR_CODE('wsdp'),
kRTPBadStateDroppedPktsStat = FOUR_CHAR_CODE('stdp'),
kRTPBadPayloadDroppedPktsStat = FOUR_CHAR_CODE('bpdp'),
kRTPNoTimeScaleDroppedPktsStat = FOUR_CHAR_CODE('ntdp'),
kRTPDupSeqNumDroppedPktsStat = FOUR_CHAR_CODE('dsdp'),
kRTPLostPktsPercentStat = FOUR_CHAR_CODE('lspp'),
kRTPDroppedPktsPercentStat = FOUR_CHAR_CODE('dppp'),
kRTPTotalUnprocessedPktsPercentStat = FOUR_CHAR_CODE('tupp'),
kRTPRTCPDataRateStat = FOUR_CHAR_CODE('rrcd'),
kRTPPayloadIDStat = FOUR_CHAR_CODE('rpid'),
kRTPPayloadNameStat = FOUR_CHAR_CODE('rpnm'),
kRTPNumPktsInQueueStat = FOUR_CHAR_CODE('rnpq'),
kRTPTotalPktsInQueueStat = FOUR_CHAR_CODE('rtpq'),
kRTPTotalOutOfOrderPktsStat = FOUR_CHAR_CODE('rtoo'),
kRTPRetransmissionStat = FOUR_CHAR_CODE('rrtx')
};
/*-----------------------------------------
Payload Info
-----------------------------------------*/
enum {
kRTPPayloadSpeedTag = FOUR_CHAR_CODE('sped'), /* 0-255, 255 is fastest*/
kRTPPayloadLossRecoveryTag = FOUR_CHAR_CODE('loss'), /* 0-255, 0 can't handle any loss, 128 can handle 50% packet loss*/
kRTPPayloadConformanceTag = FOUR_CHAR_CODE('conf') /* more than one of these can be present*/
};
struct RTPPayloadCharacteristic {
OSType tag;
long value;
};
typedef struct RTPPayloadCharacteristic RTPPayloadCharacteristic;
/*
pass RTPPayloadSortRequest to QTSFindMediaPacketizer or QTSFindMediaPacketizerForTrack.
define the characteristics to sort by. tag is key to sort on. value is positive for ascending
sort (low value first), negative for descending sort (high value first).
*/
struct RTPPayloadSortRequest {
long characteristicCount;
RTPPayloadCharacteristic characteristic[1]; /* tag is key to sort on, value is + for ascending, - for descending*/
};
typedef struct RTPPayloadSortRequest RTPPayloadSortRequest;
typedef RTPPayloadSortRequest * RTPPayloadSortRequestPtr;
/* flags for RTPPayloadInfo */
enum {
kRTPPayloadTypeStaticFlag = 0x00000001,
kRTPPayloadTypeDynamicFlag = 0x00000002
};
struct RTPPayloadInfo {
long payloadFlags;
UInt8 payloadID;
char reserved1;
char reserved2;
char reserved3;
char payloadName[1];
};
typedef struct RTPPayloadInfo RTPPayloadInfo;
typedef RTPPayloadInfo * RTPPayloadInfoPtr;
typedef RTPPayloadInfoPtr * RTPPayloadInfoHandle;
/*============================================================================
RTP Reassembler
============================================================================*/
typedef ComponentInstance RTPReassembler;
enum {
kRTPReassemblerType = FOUR_CHAR_CODE('rtpr')
};
enum {
kRTPBaseReassemblerType = FOUR_CHAR_CODE('gnrc'),
kRTP261ReassemblerType = FOUR_CHAR_CODE('h261'),
kRTP263ReassemblerType = FOUR_CHAR_CODE('h263'),
kRTP263PlusReassemblerType = FOUR_CHAR_CODE('263+'),
kRTPAudioReassemblerType = FOUR_CHAR_CODE('soun'),
kRTPQTReassemblerType = FOUR_CHAR_CODE('qtim'),
kRTPPureVoiceReassemblerType = FOUR_CHAR_CODE('Qclp'),
kRTPJPEGReassemblerType = FOUR_CHAR_CODE('jpeg'),
kRTPQDesign2ReassemblerType = FOUR_CHAR_CODE('QDM2'),
kRTPSorensonReassemblerType = FOUR_CHAR_CODE('SVQ1'),
kRTPMP3ReassemblerType = FOUR_CHAR_CODE('mp3 '),
kRTPMPEG4AudioReassemblerType = FOUR_CHAR_CODE('mp4a'),
kRTPMPEG4VideoReassemblerType = FOUR_CHAR_CODE('mp4v')
};
struct RTPRssmInitParams {
RTPSSRC ssrc;
UInt8 payloadType;
UInt8 reserved1;
UInt8 reserved2;
UInt8 reserved3;
TimeBase timeBase;
TimeScale timeScale;
};
typedef struct RTPRssmInitParams RTPRssmInitParams;
struct RTPDescParams {
QTAtomContainer container;
QTAtom presentationParentAtom;
QTAtom streamParentAtom;
};
typedef struct RTPDescParams RTPDescParams;
struct RTPRssmMoreInitParams {
RTPRssmInitParams initParams;
SInt32 version;
RTPDescParams desc;
};
typedef struct RTPRssmMoreInitParams RTPRssmMoreInitParams;
enum {
kRTPRssmMoreInitParamsVersion1 = 1
};
/* get/set info selectors*/
enum {
kRTPRssmInfo_MoreInitParams = FOUR_CHAR_CODE('rrmi')
};
struct RTPRssmPacket {
struct RTPRssmPacket * next;
struct RTPRssmPacket * prev;
QTSStreamBuffer * streamBuffer;
Boolean paramsFilledIn;
UInt8 reserved;
UInt16 sequenceNum;
UInt32 transportHeaderLength; /* filled in by base*/
UInt32 payloadHeaderLength; /* derived adjusts this */
UInt32 dataLength;
SHServerEditParameters serverEditParams;
TimeValue64 timeStamp; /* lower 32 bits is original rtp timestamp*/
SInt32 chunkFlags; /* these are or'd together*/
SInt32 flags;
};
typedef struct RTPRssmPacket RTPRssmPacket;
/* flags for RTPRssmPacket struct*/
enum {
kRTPRssmPacketHasMarkerBitSet = 0x00000001,
kRTPRssmPacketHasServerEditFlag = 0x00010000
};
/* flags for RTPRssmSendStreamBufferRange*/
enum {
kRTPRssmCanRefStreamBuffer = 0x00000001
};
/* flags for RTPRssmSendPacketList*/
enum {
kRTPRssmLostSomePackets = 0x00000001
};
/* flags for RTPRssmSetFlags*/
enum {
kRTPRssmEveryPacketAChunkFlag = 0x00000001,
kRTPRssmQueueAndUseMarkerBitFlag = 0x00000002,
kRTPRssmTrackLostPacketsFlag = 0x00010000,
kRTPRssmNoReorderingRequiredFlag = 0x00020000
};
struct RTPSendStreamBufferRangeParams {
QTSStreamBuffer * streamBuffer;
TimeValue64 presentationTime;
UInt32 chunkStartPosition;
UInt32 numDataBytes;
SInt32 chunkFlags;
SInt32 flags;
const SHServerEditParameters * serverEditParams; /* NULL if no edit*/
};
typedef struct RTPSendStreamBufferRangeParams RTPSendStreamBufferRangeParams;
/* characteristics*/
enum {
kRTPCharacteristic_RequiresOrderedPackets = FOUR_CHAR_CODE('rrop'),
kRTPCharacteristic_TimeStampsNotMonoIncreasing = FOUR_CHAR_CODE('tsmi')
};
enum {
kRTPReassemblerInfoResType = FOUR_CHAR_CODE('rsmi')
};
struct RTPReassemblerInfo {
long characteristicCount;
RTPPayloadCharacteristic characteristic[1];
/* after the last characteristic, the payload name (defined by the MediaPacketizerPayloadInfo*/
/* structure) is present. */
};
typedef struct RTPReassemblerInfo RTPReassemblerInfo;
typedef RTPReassemblerInfo * RTPReassemblerInfoPtr;
typedef RTPReassemblerInfoPtr * RTPReassemblerInfoHandle;
define RTPReassemblerInfoToPayloadInfo(_rsmi) ((RTPPayloadInfoPtr)(&((_rsmi)->characteristic[(_rsmi)->characteristicCount])))
/* RTPReassemblerInfoElement structs are padded to 32 bits */
enum {
kRTPReassemblerInfoPadUpToBytes = 4
};
EXTERN_API_C( OSErr )
QTSFindReassemblerForPayloadID (UInt8 inPayloadID,
RTPPayloadSortRequest * inSortInfo,
QTAtomContainer * outReassemblerList);
EXTERN_API_C( OSErr )
QTSFindReassemblerForPayloadName (const char * inPayloadName,
RTPPayloadSortRequest * inSortInfo,
QTAtomContainer * outReassemblerList);
/*-----------------------------------------
RTP Reassembler Selectors
-----------------------------------------*/
enum {
kRTPRssmSetCapabilitiesSelect = 0x0100,
kRTPRssmGetCapabilitiesSelect = 0x0101,
kRTPRssmSetPayloadHeaderLengthSelect = 0x0102,
kRTPRssmGetPayloadHeaderLengthSelect = 0x0103,
kRTPRssmSetTimeScaleSelect = 0x0104,
kRTPRssmGetTimeScaleSelect = 0x0105,
kRTPRssmNewStreamHandlerSelect = 0x0106,
kRTPRssmSetStreamHandlerSelect = 0x0107,
kRTPRssmGetStreamHandlerSelect = 0x0108,
kRTPRssmSendStreamHandlerChangedSelect = 0x0109,
kRTPRssmSetSampleDescriptionSelect = 0x010A,
kRTPRssmGetChunkAndIncrRefCountSelect = 0x010D,
kRTPRssmSendChunkAndDecrRefCountSelect = 0x010E,
kRTPRssmSendLostChunkSelect = 0x010F,
kRTPRssmSendStreamBufferRangeSelect = 0x0110,
kRTPRssmClearCachedPackets = 0x0111,
kRTPRssmFillPacketListParamsSelect = 0x0113,
kRTPRssmReleasePacketListSelect = 0x0114,
kRTPRssmIncrChunkRefCountSelect = 0x0115,
kRTPRssmDecrChunkRefCountSelect = 0x0116,
kRTPRssmGetExtChunkAndIncrRefCountSelect = 0x0117,
kRTPRssmInitializeSelect = 0x0500,
kRTPRssmHandleNewPacketSelect = 0x0501,
kRTPRssmComputeChunkSizeSelect = 0x0502,
kRTPRssmAdjustPacketParamsSelect = 0x0503,
kRTPRssmCopyDataToChunkSelect = 0x0504,
kRTPRssmSendPacketListSelect = 0x0505,
kRTPRssmGetTimeScaleFromPacketSelect = 0x0506,
kRTPRssmSetInfoSelect = 0x0509,
kRTPRssmGetInfoSelect = 0x050A,
kRTPRssmHasCharacteristicSelect = 0x050B,
kRTPRssmResetSelect = 0x050C
};
/*-----------------------------------------
RTP Reassembler functions - base to derived
-----------------------------------------*/
EXTERN_API( ComponentResult )
RTPRssmInitialize (RTPReassembler rtpr,
RTPRssmInitParams * inInitParams) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0500, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmHandleNewPacket (RTPReassembler rtpr,
QTSStreamBuffer * inStreamBuffer,
SInt32 inNumWraparounds) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0501, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmComputeChunkSize (RTPReassembler rtpr,
RTPRssmPacket * inPacketListHead,
SInt32 inFlags,
UInt32 * outChunkDataSize) FIVEWORDINLINE(0x2F3C, 0x000C, 0x0502, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmAdjustPacketParams (RTPReassembler rtpr,
RTPRssmPacket * inPacket,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0503, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmCopyDataToChunk (RTPReassembler rtpr,
RTPRssmPacket * inPacketListHead,
UInt32 inMaxChunkDataSize,
SHChunkRecord * inChunk,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0504, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmSendPacketList (RTPReassembler rtpr,
RTPRssmPacket * inPacketListHead,
const TimeValue64 * inLastChunkPresentationTime,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x000C, 0x0505, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmGetTimeScaleFromPacket (RTPReassembler rtpr,
QTSStreamBuffer * inStreamBuffer,
TimeScale * outTimeScale) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0506, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmSetInfo (RTPReassembler rtpr,
OSType inSelector,
void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0509, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmGetInfo (RTPReassembler rtpr,
OSType inSelector,
void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050A, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmHasCharacteristic (RTPReassembler rtpr,
OSType inCharacteristic,
Boolean * outHasIt) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050B, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmReset (RTPReassembler rtpr,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050C, 0x7000, 0xA82A);
/*-----------------------------------------
RTP Reassembler functions - derived to base
-----------------------------------------*/
/* ----- setup*/
EXTERN_API( ComponentResult )
RTPRssmSetCapabilities (RTPReassembler rtpr,
SInt32 inFlags,
SInt32 inFlagsMask) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0100, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmGetCapabilities (RTPReassembler rtpr,
SInt32 * outFlags) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0101, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmSetPayloadHeaderLength (RTPReassembler rtpr,
UInt32 inPayloadHeaderLength) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0102, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmGetPayloadHeaderLength (RTPReassembler rtpr,
UInt32 * outPayloadHeaderLength) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0103, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmSetTimeScale (RTPReassembler rtpr,
TimeScale inSHTimeScale) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0104, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmGetTimeScale (RTPReassembler rtpr,
TimeScale * outSHTimeScale) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0105, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmNewStreamHandler (RTPReassembler rtpr,
OSType inSHType,
SampleDescriptionHandle inSampleDescription,
TimeScale inSHTimeScale,
ComponentInstance * outHandler) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0106, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmSetStreamHandler (RTPReassembler rtpr,
ComponentInstance inStreamHandler) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0107, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmGetStreamHandler (RTPReassembler rtpr,
ComponentInstance * outStreamHandler) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0108, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmSendStreamHandlerChanged (RTPReassembler rtpr) FIVEWORDINLINE(0x2F3C, 0x0000, 0x0109, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmSetSampleDescription (RTPReassembler rtpr,
SampleDescriptionHandle inSampleDescription) FIVEWORDINLINE(0x2F3C, 0x0004, 0x010A, 0x7000, 0xA82A);
/* ----- manually sending chunks*/
EXTERN_API( ComponentResult )
RTPRssmGetChunkAndIncrRefCount (RTPReassembler rtpr,
UInt32 inChunkDataSize,
const TimeValue64 * inChunkPresentationTime,
SHChunkRecord ** outChunk) FIVEWORDINLINE(0x2F3C, 0x000C, 0x010D, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmGetExtChunkAndIncrRefCount (RTPReassembler rtpr,
UInt32 inChunkDataSize,
const TimeValue64 * inChunkPresentationTime,
SInt32 inFlags,
SHExtendedChunkRecord ** outChunk) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0117, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmSendChunkAndDecrRefCount (RTPReassembler rtpr,
SHChunkRecord * inChunk,
const SHServerEditParameters * inServerEdit) FIVEWORDINLINE(0x2F3C, 0x0008, 0x010E, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmSendLostChunk (RTPReassembler rtpr,
const TimeValue64 * inChunkPresentationTime) FIVEWORDINLINE(0x2F3C, 0x0004, 0x010F, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmSendStreamBufferRange (RTPReassembler rtpr,
RTPSendStreamBufferRangeParams * inParams) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0110, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmClearCachedPackets (RTPReassembler rtpr,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0111, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmFillPacketListParams (RTPReassembler rtpr,
RTPRssmPacket * inPacketListHead,
SInt32 inNumWraparounds,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x000C, 0x0113, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmReleasePacketList (RTPReassembler rtpr,
RTPRssmPacket * inPacketListHead) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0114, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmIncrChunkRefCount (RTPReassembler rtpr,
SHChunkRecord * inChunk) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0115, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPRssmDecrChunkRefCount (RTPReassembler rtpr,
SHChunkRecord * inChunk) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0116, 0x7000, 0xA82A);
/*============================================================================
RTP Media Packetizer
============================================================================*/
enum {
kRTPMediaPacketizerType = FOUR_CHAR_CODE('rtpm')
};
typedef ComponentInstance RTPMediaPacketizer;
enum {
kRTPBaseMediaPacketizerType = FOUR_CHAR_CODE('gnrc'),
kRTP261MediaPacketizerType = FOUR_CHAR_CODE('h261'),
kRTP263PlusMediaPacketizerType = FOUR_CHAR_CODE('263+'),
kRTPAudioMediaPacketizerType = FOUR_CHAR_CODE('soun'),
kRTPQTMediaPacketizerType = FOUR_CHAR_CODE('qtim'),
kRTPPureVoiceMediaPacketizerType = FOUR_CHAR_CODE('Qclp'),
kRTPJPEGMediaPacketizerType = FOUR_CHAR_CODE('jpeg'),
kRTPQDesign2MediaPacketizerType = FOUR_CHAR_CODE('QDM2'),
kRTPSorensonMediaPacketizerType = FOUR_CHAR_CODE('SVQ1'),
kRTPMP3MediaPacketizerType = FOUR_CHAR_CODE('mp3 '),
kRTPMPEG4AudioMediaPacketizerType = FOUR_CHAR_CODE('mp4a'),
kRTPMPEG4VideoMediaPacketizerType = FOUR_CHAR_CODE('mp4v')
};
typedef UInt32 RTPMPSampleRef;
typedef CALLBACK_API( void , RTPMPDataReleaseProcPtr )(UInt8 *inData, void *inRefCon);
typedef STACK_UPP_TYPE(RTPMPDataReleaseProcPtr) RTPMPDataReleaseUPP;
enum {
kMediaPacketizerCanPackEditRate = 1 << 0,
kMediaPacketizerCanPackLayer = 1 << 1,
kMediaPacketizerCanPackVolume = 1 << 2,
kMediaPacketizerCanPackBalance = 1 << 3,
kMediaPacketizerCanPackGraphicsMode = 1 << 4,
kMediaPacketizerCanPackEmptyEdit = 1 << 5
};
struct MediaPacketizerRequirements {
OSType mediaType; /* media type supported (0 for all)*/
OSType dataFormat; /* data format (e.g., compression) supported (0 for all)*/
UInt32 capabilityFlags; /* ability to handle non-standard track characteristics*/
UInt8 canPackMatrixType; /* can pack any matrix type up to this (identityMatrixType for identity only)*/
UInt8 reserved1;
UInt8 reserved2;
UInt8 reserved3;
};
typedef struct MediaPacketizerRequirements MediaPacketizerRequirements;
typedef MediaPacketizerRequirements * MediaPacketizerRequirementsPtr;
struct MediaPacketizerInfo {
OSType mediaType; /* media type supported (0 for all)*/
OSType dataFormat; /* data format (e.g., compression) supported (0 for all)*/
OSType vendor; /* manufacturer of this packetizer (e.g., 'appl' for Apple)*/
UInt32 capabilityFlags; /* ability to handle non-standard track characteristics*/
UInt8 canPackMatrixType; /* can pack any matrix type up to this (identityMatrixType for identity only)*/
UInt8 reserved1;
UInt8 reserved2;
UInt8 reserved3;
long characteristicCount;
RTPPayloadCharacteristic characteristic[1];
/* after the last characteristic, the payload name (defined by the RTPPayloadInfo*/
/* structure) is present. */
};
typedef struct MediaPacketizerInfo MediaPacketizerInfo;
typedef MediaPacketizerInfo * MediaPacketizerInfoPtr;
typedef MediaPacketizerInfoPtr * MediaPacketizerInfoHandle;
define MediaPacketizerInfoToPayloadInfo(_mpi) ((RTPPayloadInfoPtr)(&((_mpi)->characteristic[(_mpi)->characteristicCount])))
/* MediaPacketizerInfo structs are padded to 32 bits */
enum {
kMediaPacketizerInfoPadUpToBytes = 4
};
enum {
kRTPMediaPacketizerInfoRezType = FOUR_CHAR_CODE('pcki')
};
EXTERN_API_C( OSErr )
QTSFindMediaPacketizer (MediaPacketizerRequirementsPtr inPacketizerinfo,
SampleDescriptionHandle inSampleDescription,
RTPPayloadSortRequestPtr inSortInfo,
QTAtomContainer * outPacketizerList);
EXTERN_API_C( OSErr )
QTSFindMediaPacketizerForTrack (Track inTrack,
long inSampleDescriptionIndex,
RTPPayloadSortRequestPtr inSortInfo,
QTAtomContainer * outPacketizerList);
EXTERN_API_C( OSErr )
QTSFindMediaPacketizerForPayloadID (long payloadID,
RTPPayloadSortRequestPtr inSortInfo,
QTAtomContainer * outPacketizerList);
EXTERN_API_C( OSErr )
QTSFindMediaPacketizerForPayloadName (const char * payloadName,
RTPPayloadSortRequestPtr inSortInfo,
QTAtomContainer * outPacketizerList);
/* flags for RTPMPInitialize*/
enum {
kRTPMPRealtimeModeFlag = 0x00000001
};
/* flags for RTPMPSampleDataParams*/
enum {
kRTPMPSyncSampleFlag = 0x00000001,
kRTPMPRespectDurationFlag = 0x00000002
};
struct RTPMPSampleDataParams {
UInt32 version;
UInt32 timeStamp;
UInt32 duration; /* 0 = unknown duration*/
UInt32 playOffset;
Fixed playRate;
SInt32 flags;
UInt32 sampleDescSeed;
Handle sampleDescription;
RTPMPSampleRef sampleRef;
UInt32 dataLength;
const UInt8 * data;
RTPMPDataReleaseUPP releaseProc;
void * refCon;
};
typedef struct RTPMPSampleDataParams RTPMPSampleDataParams;
/* out flags for idle, RTPMPSetSampleData, and RTPMPFlush*/
enum {
kRTPMPStillProcessingData = 0x00000001 /* not done with data you've got*/
};
struct RTPMPPayloadTypeParams {
UInt32 flags;
UInt32 payloadNumber;
short nameLength; /* in: size of payloadName buffer (counting null terminator) -- this will be reset to needed length and paramErr returned if too small */
char * payloadName; /* caller must provide buffer */
};
typedef struct RTPMPPayloadTypeParams RTPMPPayloadTypeParams;
/*-----------------------------------------
RTP Media Packetizer Info selectors
-----------------------------------------*/
/* info selectors - get only */
enum {
kRTPMPPayloadTypeInfo = FOUR_CHAR_CODE('rtpp'), /* RTPMPPayloadTypeParams* */
kRTPMPRTPTimeScaleInfo = FOUR_CHAR_CODE('rtpt'), /* TimeScale* */
kRTPMPRequiredSampleDescriptionInfo = FOUR_CHAR_CODE('sdsc'), /* SampleDescriptionHandle* */
kRTPMPMinPayloadSize = FOUR_CHAR_CODE('mins'), /* UInt32* in bytes, does not include rtp header; default is 0 */
kRTPMPMinPacketDuration = FOUR_CHAR_CODE('mind'), /* UInt3* in milliseconds; default is no min required */
kRTPMPSuggestedRepeatPktCountInfo = FOUR_CHAR_CODE('srpc'), /* UInt32* */
kRTPMPSuggestedRepeatPktSpacingInfo = FOUR_CHAR_CODE('srps'), /* UInt32* in milliseconds */
kRTPMPMaxPartialSampleSizeInfo = FOUR_CHAR_CODE('mpss'), /* UInt32* in bytes */
kRTPMPPreferredBufferDelayInfo = FOUR_CHAR_CODE('prbd'), /* UInt32* in milliseconds */
kRTPMPPayloadNameInfo = FOUR_CHAR_CODE('name'), /* StringPtr */
kRTPInfo_FormatString = FOUR_CHAR_CODE('fmtp') /* char **, caller allocates ptr, callee disposes */
};
/*-----------------------------------------
RTP Media Packetizer Characteristics
-----------------------------------------*/
/* also supports relevant ones in Movies.h and QTSToolbox.h */
enum {
kRTPMPNoSampleDataRequiredCharacteristic = FOUR_CHAR_CODE('nsdr'),
kRTPMPHasUserSettingsDialogCharacteristic = FOUR_CHAR_CODE('sdlg'),
kRTPMPPrefersReliableTransportCharacteristic = FOUR_CHAR_CODE('rely'),
kRTPMPRequiresOutOfBandDimensionsCharacteristic = FOUR_CHAR_CODE('robd'),
kRTPMPReadsPartialSamplesCharacteristic = FOUR_CHAR_CODE('rpsp')
};
/*-----------------------------------------
RTP Media Packetizer selectors
-----------------------------------------*/
enum {
kRTPMPInitializeSelect = 0x0500,
kRTPMPPreflightMediaSelect = 0x0501,
kRTPMPIdleSelect = 0x0502,
kRTPMPSetSampleDataSelect = 0x0503,
kRTPMPFlushSelect = 0x0504,
kRTPMPResetSelect = 0x0505,
kRTPMPSetInfoSelect = 0x0506,
kRTPMPGetInfoSelect = 0x0507,
kRTPMPSetTimeScaleSelect = 0x0508,
kRTPMPGetTimeScaleSelect = 0x0509,
kRTPMPSetTimeBaseSelect = 0x050A,
kRTPMPGetTimeBaseSelect = 0x050B,
kRTPMPHasCharacteristicSelect = 0x050C,
kRTPMPSetPacketBuilderSelect = 0x050E,
kRTPMPGetPacketBuilderSelect = 0x050F,
kRTPMPSetMediaTypeSelect = 0x0510,
kRTPMPGetMediaTypeSelect = 0x0511,
kRTPMPSetMaxPacketSizeSelect = 0x0512,
kRTPMPGetMaxPacketSizeSelect = 0x0513,
kRTPMPSetMaxPacketDurationSelect = 0x0514,
kRTPMPGetMaxPacketDurationSelect = 0x0515, /* for export component and apps who want to*/
/* access dialogs for Media-specific settings*/
/* (such as Pure Voice interleave factor)*/
kRTPMPDoUserDialogSelect = 0x0516,
kRTPMPSetSettingsFromAtomContainerAtAtomSelect = 0x0517,
kRTPMPGetSettingsIntoAtomContainerAtAtomSelect = 0x0518,
kRTPMPGetSettingsAsTextSelect = 0x0519,
kRTPMPGetSettingsSelect = 0x051A,
kRTPMPSetSettingsSelect = 0x051B
};
/*-----------------------------------------
RTP Media Packetizer functions
-----------------------------------------*/
EXTERN_API( ComponentResult )
RTPMPInitialize (RTPMediaPacketizer rtpm,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0500, 0x7000, 0xA82A);
/* return noErr if you can handle this media */
EXTERN_API( ComponentResult )
RTPMPPreflightMedia (RTPMediaPacketizer rtpm,
OSType inMediaType,
SampleDescriptionHandle inSampleDescription) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0501, 0x7000, 0xA82A);
/*
do work here if you need to - give up time periodically
if you're doing time consuming operations
*/
EXTERN_API( ComponentResult )
RTPMPIdle (RTPMediaPacketizer rtpm,
SInt32 inFlags,
SInt32 * outFlags) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0502, 0x7000, 0xA82A);
/*
caller owns the RTPMPSampleDataParams struct
media Packetizer must copy any fields of the struct it wants to keep
media Packetizer must call release proc when done with the data
you can do the processing work here if it does not take up too
much cpu time - otherwise do it in idle
*/
EXTERN_API( ComponentResult )
RTPMPSetSampleData (RTPMediaPacketizer rtpm,
const RTPMPSampleDataParams * inSampleData,
SInt32 * outFlags) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0503, 0x7000, 0xA82A);
/*
send everything you have buffered - you will get idles while
you set the kRTPMPStillProcessingData flag here and in idle
*/
EXTERN_API( ComponentResult )
RTPMPFlush (RTPMediaPacketizer rtpm,
SInt32 inFlags,
SInt32 * outFlags) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0504, 0x7000, 0xA82A);
/*
dispose of anything buffered and get rid of state
do not send the buffered data (because presumably
there is no connection for you to send on)
state should be the same as if you were just initialized
*/
EXTERN_API( ComponentResult )
RTPMPReset (RTPMediaPacketizer rtpm,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0505, 0x7000, 0xA82A);
/*-----------------------------------------
RTP Media Packetizer get / set functions
-----------------------------------------*/
EXTERN_API( ComponentResult )
RTPMPSetInfo (RTPMediaPacketizer rtpm,
OSType inSelector,
const void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0506, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPGetInfo (RTPMediaPacketizer rtpm,
OSType inSelector,
void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0507, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPSetTimeScale (RTPMediaPacketizer rtpm,
TimeScale inTimeScale) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0508, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPGetTimeScale (RTPMediaPacketizer rtpm,
TimeScale * outTimeScale) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0509, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPSetTimeBase (RTPMediaPacketizer rtpm,
TimeBase inTimeBase) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050A, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPGetTimeBase (RTPMediaPacketizer rtpm,
TimeBase * outTimeBase) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050B, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPHasCharacteristic (RTPMediaPacketizer rtpm,
OSType inSelector,
Boolean * outHasIt) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050C, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPSetPacketBuilder (RTPMediaPacketizer rtpm,
ComponentInstance inPacketBuilder) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050E, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPGetPacketBuilder (RTPMediaPacketizer rtpm,
ComponentInstance * outPacketBuilder) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050F, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPSetMediaType (RTPMediaPacketizer rtpm,
OSType inMediaType) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0510, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPGetMediaType (RTPMediaPacketizer rtpm,
OSType * outMediaType) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0511, 0x7000, 0xA82A);
/* size is in bytes*/
EXTERN_API( ComponentResult )
RTPMPSetMaxPacketSize (RTPMediaPacketizer rtpm,
UInt32 inMaxPacketSize) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0512, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPGetMaxPacketSize (RTPMediaPacketizer rtpm,
UInt32 * outMaxPacketSize) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0513, 0x7000, 0xA82A);
/* duration is in milliseconds*/
EXTERN_API( ComponentResult )
RTPMPSetMaxPacketDuration (RTPMediaPacketizer rtpm,
UInt32 inMaxPacketDuration) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0514, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPGetMaxPacketDuration (RTPMediaPacketizer rtpm,
UInt32 * outMaxPacketDuration) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0515, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPDoUserDialog (RTPMediaPacketizer rtpm,
ModalFilterUPP inFilterUPP,
Boolean * canceled) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0516, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPSetSettingsFromAtomContainerAtAtom (RTPMediaPacketizer rtpm,
QTAtomContainer inContainer,
QTAtom inParentAtom) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0517, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPGetSettingsIntoAtomContainerAtAtom (RTPMediaPacketizer rtpm,
QTAtomContainer inOutContainer,
QTAtom inParentAtom) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0518, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPGetSettingsAsText (RTPMediaPacketizer rtpm,
Handle * text) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0519, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPGetSettings (RTPMediaPacketizer rtpm,
QTAtomContainer * outSettings,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0008, 0x051A, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPMPSetSettings (RTPMediaPacketizer rtpm,
QTAtomSpecPtr inSettings,
SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0008, 0x051B, 0x7000, 0xA82A);
/*============================================================================
RTP Packet Builder
============================================================================*/
enum {
kRTPPacketBuilderType = FOUR_CHAR_CODE('rtpb')
};
typedef ComponentInstance RTPPacketBuilder;
typedef struct OpaqueRTPPacketGroupRef* RTPPacketGroupRef;
typedef struct OpaqueRTPPacketRef* RTPPacketRef;
typedef struct OpaqueRTPPacketRepeatedDataRef* RTPPacketRepeatedDataRef;
/* flags for RTPPBBegin/EndPacket, RTPPBBegin/EndPacketGroup*/
enum {
kRTPPBSetMarkerFlag = 0x00000001,
kRTPPBRepeatPacketFlag = 0x00000002,
kRTPPBSyncSampleFlag = 0x00010000,
kRTPPBBFrameFlag = 0x00020000,
kRTPPBDontSendFlag = 0x10000000 /* when set in EndPacketGroup, will not add group*/
};
enum {
kRTPPBUnknownPacketMediaDataLength = 0
};
/* flags for RTPPBGetSampleData*/
enum {
kRTPPBEndOfDataFlag = 0x00000001
};
typedef CALLBACK_API( void , RTPPBCallbackProcPtr )(OSType inSelector, void *ioParams, void *inRefCon);
typedef STACK_UPP_TYPE(RTPPBCallbackProcPtr) RTPPBCallbackUPP;
/*-----------------------------------------
RTP Packet Builder selectors
-----------------------------------------*/
enum {
kRTPPBBeginPacketGroupSelect = 0x0500,
kRTPPBEndPacketGroupSelect = 0x0501,
kRTPPBBeginPacketSelect = 0x0502,
kRTPPBEndPacketSelect = 0x0503,
kRTPPBAddPacketLiteralDataSelect = 0x0504,
kRTPPBAddPacketSampleDataSelect = 0x0505,
kRTPPBAddPacketRepeatedDataSelect = 0x0506,
kRTPPBReleaseRepeatedDataSelect = 0x0507,
kRTPPBSetPacketSequenceNumberSelect = 0x0508,
kRTPPBGetPacketSequenceNumberSelect = 0x0509,
kRTPPBSetCallbackSelect = 0x050A,
kRTPPBGetCallbackSelect = 0x050B,
kRTPPBSetInfoSelect = 0x050C,
kRTPPBGetInfoSelect = 0x050D,
kRTPPBSetPacketTimeStampOffsetSelect = 0x050E,
kRTPPBGetPacketTimeStampOffsetSelect = 0x050F,
kRTPPBAddPacketSampleData64Select = 0x0510,
kRTPPBGetSampleDataSelect = 0x0511,
kRTPPBAddRepeatPacketSelect = 0x0512
};
/*-----------------------------------------
RTP Packet Builder functions
-----------------------------------------*/
EXTERN_API( ComponentResult )
RTPPBBeginPacketGroup (RTPPacketBuilder rtpb,
SInt32 inFlags,
UInt32 inTimeStamp,
RTPPacketGroupRef * outPacketGroup) FIVEWORDINLINE(0x2F3C, 0x000C, 0x0500, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPPBEndPacketGroup (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0501, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPPBBeginPacket (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup,
UInt32 inPacketMediaDataLength,
RTPPacketRef * outPacket) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0502, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPPBEndPacket (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup,
RTPPacketRef inPacket,
UInt32 inTransmissionTimeOffset,
UInt32 inDuration) FIVEWORDINLINE(0x2F3C, 0x0014, 0x0503, 0x7000, 0xA82A);
/*
non-NULL RTPPacketRepeatedDataRef means this data will be repeated later
pb must return a repeated data ref
*/
EXTERN_API( ComponentResult )
RTPPBAddPacketLiteralData (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup,
RTPPacketRef inPacket,
UInt8 * inData,
UInt32 inDataLength,
RTPPacketRepeatedDataRef * outDataRef) FIVEWORDINLINE(0x2F3C, 0x0018, 0x0504, 0x7000, 0xA82A);
/*
non-NULL RTPPacketRepeatedDataRef means this data will be repeated later
pb must return a repeated data ref
*/
EXTERN_API( ComponentResult )
RTPPBAddPacketSampleData (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup,
RTPPacketRef inPacket,
RTPMPSampleDataParams * inSampleDataParams,
UInt32 inSampleOffset,
UInt32 inSampleDataLength,
RTPPacketRepeatedDataRef * outDataRef) FIVEWORDINLINE(0x2F3C, 0x001C, 0x0505, 0x7000, 0xA82A);
/*
non-NULL RTPPacketRepeatedDataRef means this data will be repeated later
pb must return a repeated data ref
*/
EXTERN_API( ComponentResult )
RTPPBAddPacketSampleData64 (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup,
RTPPacketRef inPacket,
RTPMPSampleDataParams * inSampleDataParams,
const UInt64 * inSampleOffset,
UInt32 inSampleDataLength,
RTPPacketRepeatedDataRef * outDataRef) FIVEWORDINLINE(0x2F3C, 0x001C, 0x0510, 0x7000, 0xA82A);
/*
call to add the repeated data using the ref you got from
RTPPBAddPacketLiteralData or RTPPBAddPacketSampleData
*/
EXTERN_API( ComponentResult )
RTPPBAddPacketRepeatedData (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup,
RTPPacketRef inPacket,
RTPPacketRepeatedDataRef inDataRef) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0506, 0x7000, 0xA82A);
/* call when done with repeated data*/
EXTERN_API( ComponentResult )
RTPPBReleaseRepeatedData (RTPPacketBuilder rtpb,
RTPPacketRepeatedDataRef inDataRef) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0507, 0x7000, 0xA82A);
/*
seq number is just relative seq number
don't call if you don't care when seq # is used
*/
EXTERN_API( ComponentResult )
RTPPBSetPacketSequenceNumber (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup,
RTPPacketRef inPacket,
UInt32 inSequenceNumber) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0508, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPPBGetPacketSequenceNumber (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup,
RTPPacketRef inPacket,
UInt32 * outSequenceNumber) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0509, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPPBSetPacketTimeStampOffset (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup,
RTPPacketRef inPacket,
SInt32 inTimeStampOffset) FIVEWORDINLINE(0x2F3C, 0x0010, 0x050E, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPPBGetPacketTimeStampOffset (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup,
RTPPacketRef inPacket,
SInt32 * outTimeStampOffset) FIVEWORDINLINE(0x2F3C, 0x0010, 0x050F, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPPBAddRepeatPacket (RTPPacketBuilder rtpb,
SInt32 inFlags,
RTPPacketGroupRef inPacketGroup,
RTPPacketRef inPacket,
TimeValue inTransmissionOffset,
UInt32 inSequenceNumber) FIVEWORDINLINE(0x2F3C, 0x0014, 0x0512, 0x7000, 0xA82A);
/*
used for communicating with the caller of the media packetizers if needed
NOT used for communicating with the media packetizers themselves
*/
EXTERN_API( ComponentResult )
RTPPBSetCallback (RTPPacketBuilder rtpb,
RTPPBCallbackUPP inCallback,
void * inRefCon) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050A, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPPBGetCallback (RTPPacketBuilder rtpb,
RTPPBCallbackUPP * outCallback,
void ** outRefCon) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050B, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPPBSetInfo (RTPPacketBuilder rtpb,
OSType inSelector,
void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050C, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPPBGetInfo (RTPPacketBuilder rtpb,
OSType inSelector,
void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050D, 0x7000, 0xA82A);
EXTERN_API( ComponentResult )
RTPPBGetSampleData (RTPPacketBuilder rtpb,
RTPMPSampleDataParams * inParams,
const UInt64 * inStartOffset,
UInt8 * outDataBuffer,
UInt32 inBytesToRead,
UInt32 * outBytesRead,
SInt32 * outFlags) FIVEWORDINLINE(0x2F3C, 0x0018, 0x0511, 0x7000, 0xA82A);
/* UPP call backs */
if OPAQUE_UPP_TYPES
EXTERN_API(RTPMPDataReleaseUPP)
NewRTPMPDataReleaseUPP (RTPMPDataReleaseProcPtr userRoutine);
EXTERN_API(RTPPBCallbackUPP)
NewRTPPBCallbackUPP (RTPPBCallbackProcPtr userRoutine);
EXTERN_API(void)
DisposeRTPMPDataReleaseUPP (RTPMPDataReleaseUPP userUPP);
EXTERN_API(void)
DisposeRTPPBCallbackUPP (RTPPBCallbackUPP userUPP);
EXTERN_API(void)
InvokeRTPMPDataReleaseUPP (UInt8 * inData,
void * inRefCon,
RTPMPDataReleaseUPP userUPP);
EXTERN_API(void)
InvokeRTPPBCallbackUPP (OSType inSelector,
void * ioParams,
void * inRefCon,
RTPPBCallbackUPP userUPP);
else
enum { uppRTPMPDataReleaseProcInfo = 0x000003C0 }; /* pascal no_return_value Func(4_bytes, 4_bytes) */
enum { uppRTPPBCallbackProcInfo = 0x00000FC0 }; /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes) */
#define NewRTPMPDataReleaseUPP(userRoutine) (RTPMPDataReleaseUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppRTPMPDataReleaseProcInfo, GetCurrentArchitecture())
#define NewRTPPBCallbackUPP(userRoutine) (RTPPBCallbackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppRTPPBCallbackProcInfo, GetCurrentArchitecture())
#define DisposeRTPMPDataReleaseUPP(userUPP) DisposeRoutineDescriptor(userUPP)
#define DisposeRTPPBCallbackUPP(userUPP) DisposeRoutineDescriptor(userUPP)
#define InvokeRTPMPDataReleaseUPP(inData, inRefCon, userUPP) CALL_TWO_PARAMETER_UPP((userUPP), uppRTPMPDataReleaseProcInfo, (inData), (inRefCon))
#define InvokeRTPPBCallbackUPP(inSelector, ioParams, inRefCon, userUPP) CALL_THREE_PARAMETER_UPP((userUPP), uppRTPPBCallbackProcInfo, (inSelector), (ioParams), (inRefCon))
endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
define NewRTPMPDataReleaseProc(userRoutine) NewRTPMPDataReleaseUPP(userRoutine)
define NewRTPPBCallbackProc(userRoutine) NewRTPPBCallbackUPP(userRoutine)
define CallRTPMPDataReleaseProc(userRoutine, inData, inRefCon) InvokeRTPMPDataReleaseUPP(inData, inRefCon, userRoutine)
define CallRTPPBCallbackProc(userRoutine, inSelector, ioParams, inRefCon) InvokeRTPPBCallbackUPP(inSelector, ioParams, inRefCon, userRoutine)
if PRAGMA_STRUCT_ALIGN
#pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
#pragma pack()
endif
ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
endif
ifdef __cplusplus
}
endif
endif /* __QTSTREAMINGCOMPONENTS__ */
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.