123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- #ifndef _duck_dxa_h
- #define _duck_dxa_h
- #include "duck_wav.h"
- #if defined(__cplusplus)
- extern "C" {
- #endif
- typedef struct tXAudioSource* DXL_XAUDIOSRC_HANDLE; /* forward looking ! */
- #define MAX_AUDIO_REGISTRATIONS 20
- /* Structure used to register DXA plugins with dxa by formatTag. */
- /*-------------------------------------------------------------------------*/
- typedef struct tXAudioRegistration {
- unsigned short formatTag;
- int (*audio_dxer_init)(DXL_XAUDIOSRC_HANDLE src);
- int (*audio_dxer_dx)(DXL_XAUDIOSRC_HANDLE src, void *left, void *right, int nSamples);
- int (*audio_dxer_exit)(DXL_XAUDIOSRC_HANDLE src);
- int (*audio_dxer_clear)(DXL_XAUDIOSRC_HANDLE src);
- } DXL_AUDIO_REGISTRATION;
- /* If it's not documented here, if it's only defined here ... then it's probably not needed by most codec plugins */
- /* It may only be used internally to dxa . */
- /*----------------------------------------------------------------------------------------------------------------*/
- typedef struct tXAudioSource
- {
- unsigned char *addr; /* address from which to read compressed audio bytes */
- int totalPos;
- int length; /* length of compressed audio bytes to read from buffer */
- int interleave;
- short aiSamp[2],aiStepIndex[2];
- int blockFinished; /* flags audio system that new data in buffer */
- int samplesRead;
- UINT64 profileStartTime;
- UINT64 profileEndTime;
- UINT64 dxClocks;
- UINT64 samplesDXed;
- short iFirstNibble;
- short iNextInput;
- short sum,diff,nudiff;
- DKWAVEFORM wv; /* details of the compressed audio data */
- DXL_AUDIO_REGISTRATION registration;
- void* more; /* user data ... plugin data */
- } DXL_XAUDIOSRC;
- typedef struct tAudioBuff *DXL_AUDIODST_HANDLE;
- /* audio function prototypes */
- /*@
- @Name DXL_InitAudio
- @Description Initialize audio decompression services. This function allocates memory for requested object pools.
- @Return value DXL_OK on success, or negative error code.
- @*/
- int DXL_InitAudio(
- int srcs, /* max number of audio sources to be created. */
- int dsts /* max number of audio destinations to be created. */
- );
- /*@
- @Name DXL_ExitAudio
- @Description Shutdown audio decompression services, freeing allocated objects.
- @Return value none.
- @*/
- void DXL_ExitAudio(void);
- typedef struct tDKWAVEFORM *DKWAVEFORMPTR; /* place holder pointer */
- /*@
- @Name DXL_CreateXAudioSrc
- @Description Create a compressed audio source (decompressor)
- @Return value returns an DXL_XAUDIOSRC_HANDLE or null unable to create audio source object.
- @*/
- DXL_XAUDIOSRC_HANDLE DXL_CreateXAudioSrc(
-
- DKWAVEFORMPTR wv, /* pointer to compressed waveform struct describing the audio input. */
- unsigned char *addr, /* address of compressed data */
- int length /* length of compressed data in bytes. */
- );
- /*@
- @Name DXL_AlterXAudioData
- @Description Link an audio decompressor to the next unit of compressed data.
- This function cannot change the type of xSource on the fly. That must remain consistent.
- Setting the address of the audio data to null causes the xSource to generate an infinate number of "zero" value samples.
- @Return value void
- @*/
- void DXL_AlterXAudioData(
- DXL_XAUDIOSRC_HANDLE xSource, /* handle to compressed audio source */
- unsigned char *addr, /* pointer to new compressed audio data */
- int length /* length of compressed data in bytes. */
- );
- /*@
- @Name DXL_DestroyXAudioSrc
- @Description clears an audio decompressor and returns it to the pool.
- @Return value void
- @*/
- void DXL_DestroyXAudioSrc(
- DXL_XAUDIOSRC_HANDLE xSource /* compressed audio source */
- );
-
- /*@
- @Name DXL_CreateAudioDst
- @Description Create a audio destination description. When numChannel equals 2 but addrR is null, it
- is assumed that multi-channel samples should be interleaved within the dest buffer pointed to by addrL.
- @Return value returns an object of type DXL_AUDIODST_HANDLE, and audio destination.
- @*/
- DXL_AUDIODST_HANDLE DXL_CreateAudioDst(
- void *addrL, /* pointer to left audio destination channel */
- void *addrR, /* pointer to right audio destination channel */
- int length, /* audio buffer size in bytes. */
- int bitDepth, /* bits per sample */
- int numChannels, /* number of audio channels */
- int sampleRate /* samples per second */
- );
- /*@
- @Name DXL_AlterAudioDst
- @Description Change characteristics of audio destination.
- Specify 0 or null values for no change.
- @Return value void
- @*/
- void DXL_AlterAudioDst(
- DXL_AUDIODST_HANDLE dst, /* handle to audio destionation */
- void *addrL, /* pointer to left audio destination channel */
- void *addrR, /* pointer to right audio destination channel */
- int length, /* audio buffer size in bytes. */
- int bitDepth, /* bits per sample (8 or 16) */
- int numChannels, /* number of audio channels (1 or 2) */
- int sampleRate /* samples per second */
- );
- /*@
- @Name DXL_DestroyAudioDst
- @Description clears and audio destination object and returns it to the pool.
- @Return value none.
- @*/
- void DXL_DestroyAudioDst(
- DXL_AUDIODST_HANDLE dst /* handle to audio destination */
- );
- /*@
- @Name DXL_dxAudio
- @Description decompress up to maxSamplesToDecompress. The number of samples transferred is controlled by two factors.
- One factor is the limit parameter. The other factor is the number of remaining samples in the src (internal buffer).
- If the function returns less that the desired number of samples, get another audio record (via HFB_GetStreamingData()) for source data and try again.
- @Return value returns the actual number of samples decompressed
- @*/
- int DXL_dxAudio(
- DXL_XAUDIOSRC_HANDLE src, /* handle to compressed audio source. */
- DXL_AUDIODST_HANDLE dst, /* handle to uncompressed audio destination */
- int maxSamplesToDecompress /* Try to decompress up to this many samples to the destination */
- );
- /*@
- @Name DXL_ClearAudio
- @Description Clears any internal audio buffers compressed and/or decompressed data so that playback may start from a new point.
- @Return value
- @*/
- int DXL_ClearAudio(DXL_XAUDIOSRC_HANDLE xSourcePublic);
- int DXL_RegisteredAudioDXerGet(DXL_AUDIO_REGISTRATION *oneRegistration);
- int DXL_RegisteredAudioDXerSet(
- unsigned short formatTag,
- int (*audio_dxer_init) (DXL_XAUDIOSRC_HANDLE src),
- int (*audio_dxer_dx) (DXL_XAUDIOSRC_HANDLE src, void *left, void *right, int nSamples),
- int (*audio_dxer_exit) (DXL_XAUDIOSRC_HANDLE src),
- int (*audio_dxer_clear) (DXL_XAUDIOSRC_HANDLE src)
- );
-
-
-
- void DXL_AudioAccurateTime(UINT64* temp);
- /* Register one of the On2 dxa plugins */
- /*-------------------------------------*/
- int DXL_RegisterAVC(void);
- int DXL_RegisterAC3(void);
- int DXL_RegisterQDesign(void);
- int DXL_RegisterACM(unsigned short formatTag);
- int DXL_RegisterDK4(void);
- int DXL_RegisterMP3(void);
- #if defined(__cplusplus)
- }
- #endif
- #endif /* include guards */
|