aboutsummaryrefslogtreecommitdiff
path: root/Src/libvp6/include/duck_dxa.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/libvp6/include/duck_dxa.h')
-rw-r--r--Src/libvp6/include/duck_dxa.h230
1 files changed, 230 insertions, 0 deletions
diff --git a/Src/libvp6/include/duck_dxa.h b/Src/libvp6/include/duck_dxa.h
new file mode 100644
index 00000000..6259fc0d
--- /dev/null
+++ b/Src/libvp6/include/duck_dxa.h
@@ -0,0 +1,230 @@
+#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 */