home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 275 / DPCS0111DVD.ISO / Toolkit / Audio-Visual / VirtualDub / Source / VirtualDub-1.9.10-src.7z / src / h / vd2 / plugin / vdaudiofilt.h next >
Encoding:
C/C++ Source or Header  |  2009-09-14  |  5.6 KB  |  149 lines

  1. #ifndef f_VD2_PLUGIN_VDAUDIOFILT_H
  2. #define f_VD2_PLUGIN_VDAUDIOFILT_H
  3.  
  4. ///////////////////////////////////////////////////////////////////////////
  5. //
  6. //    Audio filter support
  7.  
  8. struct VDAudioFilterDefinition;
  9. struct VDXWaveFormat;
  10. struct VDPluginCallbacks;
  11.  
  12. enum {
  13.     kVDPlugin_AudioAPIVersion        = 2
  14. };
  15.  
  16. struct VDAudioFilterPin {
  17.     unsigned            mGranularity;            // Block size a filter reads/writes this pin.
  18.     unsigned            mDelay;                    // Delay in samples on this input.
  19.     unsigned            mBufferSize;            // The size, in samples, of the buffer.
  20.     unsigned            mCurrentLevel;            // The number of samples currently in the buffer.
  21.     sint64                mLength;                // Approximate length of this stream in us.
  22.     const VDXWaveFormat *mpFormat;
  23.     bool                mbVBR;
  24.     bool                mbEnded;
  25.     char                _pad[2];
  26.     void                *mpBuffer;
  27.     unsigned            mSamplesWritten;        // The number of samples just written to the buffer.
  28.     unsigned            mAvailSpace;            // Available room pointed to by mpBuffer (output pins only).
  29.  
  30.     uint32 (VDAPIENTRY *mpReadProc)(VDAudioFilterPin *pPin, void *dst, uint32 samples, bool bAllowFill, int format);
  31.  
  32.     // These helpers are non-virtual inlines and are compiled into filters.
  33.     uint32 Read(void *dst, uint32 samples, bool bAllowFill, int format) {
  34.         return mpReadProc(this, dst, samples, bAllowFill, format);
  35.     }
  36. };
  37.  
  38. struct VDAudioFilterContext;
  39.  
  40. struct VDAudioFilterCallbacks {
  41.     VDXWaveFormat *(VDAPIENTRY *AllocPCMWaveFormat)(unsigned sampling_rate, unsigned channels, unsigned bits, bool bFloat);
  42.     VDXWaveFormat *(VDAPIENTRY *AllocCustomWaveFormat)(unsigned extra_size);
  43.     VDXWaveFormat *(VDAPIENTRY *CopyWaveFormat)(const VDXWaveFormat *);
  44.     void (VDAPIENTRY *FreeWaveFormat)(const VDXWaveFormat *);
  45.     void (VDAPIENTRY *Wake)(const VDAudioFilterContext *pContext);
  46. };
  47.  
  48. struct VDAudioFilterContext {
  49.     void *mpFilterData;
  50.     VDAudioFilterPin    **mpInputs;
  51.     VDAudioFilterPin    **mpOutputs;
  52.     IVDPluginCallbacks *mpServices;
  53.     const VDAudioFilterCallbacks *mpAudioCallbacks;
  54.     const VDAudioFilterDefinition *mpDefinition;
  55.     uint32    mAPIVersion;
  56.     uint32    mInputSamples;            // Number of input samples available on all pins.
  57.     uint32    mInputGranules;            // Number of input granules available on all pins.
  58.     uint32    mInputsEnded;            // Number of inputs that have ended.
  59.     uint32    mOutputSamples;            // Number of output sample spaces available on all pins.
  60.     uint32    mOutputGranules;        // Number of output granule spaces available on all pins.
  61.     uint32    mCommonSamples;            // Number of input samples and output sample spaces.
  62.     uint32    mCommonGranules;        // Number of input and output granules.
  63. };
  64.  
  65. // This structure is intentionally identical to WAVEFORMATEX, with one
  66. // exception -- mExtraSize is *always* present, even for PCM.
  67.  
  68. struct VDXWaveFormat {
  69.     enum { kTagPCM = 1 };
  70.  
  71.     uint16        mTag;
  72.     uint16        mChannels;
  73.     uint32        mSamplingRate;
  74.     uint32        mDataRate;
  75.     uint16        mBlockSize;
  76.     uint16        mSampleBits;
  77.     uint16        mExtraSize;
  78. };
  79.  
  80. enum {
  81.     kVFARun_OK                = 0,
  82.     kVFARun_Finished        = 1,
  83.     kVFARun_InternalWork    = 2,
  84.  
  85.     kVFAPrepare_OK            = 0,
  86.     kVFAPrepare_BadFormat    = 1
  87. };
  88.  
  89. enum {
  90.     kVFARead_Native            = 0,
  91.     kVFARead_PCM8            = 1,
  92.     kVFARead_PCM16            = 2,
  93.     kVFARead_PCM32F            = 3
  94. };
  95.  
  96. typedef void *        (VDAPIENTRY *VDAudioFilterExtProc            )(const VDAudioFilterContext *pContext, const char *pInterfaceName);
  97. typedef uint32        (VDAPIENTRY *VDAudioFilterRunProc            )(const VDAudioFilterContext *pContext);
  98. typedef sint64        (VDAPIENTRY *VDAudioFilterSeekProc            )(const VDAudioFilterContext *pContext, sint64 microsecs);
  99. typedef uint32        (VDAPIENTRY *VDAudioFilterPrepareProc        )(const VDAudioFilterContext *pContext);
  100. typedef void        (VDAPIENTRY *VDAudioFilterStartProc            )(const VDAudioFilterContext *pContext);
  101. typedef void        (VDAPIENTRY *VDAudioFilterStopProc            )(const VDAudioFilterContext *pContext);
  102. typedef void        (VDAPIENTRY *VDAudioFilterInitProc            )(const VDAudioFilterContext *pContext);
  103. typedef void        (VDAPIENTRY *VDAudioFilterDestroyProc        )(const VDAudioFilterContext *pContext);
  104. typedef unsigned    (VDAPIENTRY *VDAudioFilterSuspendProc        )(const VDAudioFilterContext *pContext, void *dst, unsigned size);
  105. typedef void        (VDAPIENTRY *VDAudioFilterResumeProc        )(const VDAudioFilterContext *pContext, const void *src, unsigned size);
  106. typedef unsigned    (VDAPIENTRY *VDAudioFilterGetParamProc        )(const VDAudioFilterContext *pContext, unsigned idx, void *dst, unsigned size);
  107. typedef void        (VDAPIENTRY *VDAudioFilterSetParamProc        )(const VDAudioFilterContext *pContext, unsigned idx, const void *src, unsigned variant_count);
  108. typedef bool        (VDAPIENTRY *VDAudioFilterConfigProc        )(const VDAudioFilterContext *pContext, struct HWND__ *hwnd);
  109.  
  110. enum {
  111.     kVFAF_Zero                = 0,
  112.     kVFAF_HasConfig            = 1,                // Filter has a configuration dialog.
  113.     kVFAF_SerializedIO        = 2,                // Filter must execute in the serialized I/O thread.
  114.  
  115.     kVFAF_Max                = 0xFFFFFFFF,
  116. };
  117.  
  118. struct VDAudioFilterVtbl {
  119.     uint32                                mSize;
  120.     VDAudioFilterDestroyProc            mpDestroy;
  121.     VDAudioFilterPrepareProc            mpPrepare;
  122.     VDAudioFilterStartProc                mpStart;
  123.     VDAudioFilterStopProc                mpStop;
  124.     VDAudioFilterRunProc                mpRun;
  125.     VDAudioFilterSeekProc                mpSeek;
  126.     VDAudioFilterSuspendProc            mpSuspend;
  127.     VDAudioFilterResumeProc                mpResume;
  128.     VDAudioFilterGetParamProc            mpGetParam;
  129.     VDAudioFilterSetParamProc            mpSetParam;
  130.     VDAudioFilterConfigProc                mpConfig;
  131.     VDAudioFilterExtProc                mpExt;
  132. };
  133.  
  134. struct VDAudioFilterDefinition {
  135.     uint32                            mSize;                // size of this structure in bytes
  136.     uint32                            mFlags;
  137.  
  138.     uint32                            mFilterDataSize;
  139.     uint32                            mInputPins;
  140.     uint32                            mOutputPins;
  141.  
  142.     const VDXPluginConfigEntry        *mpConfigInfo;
  143.  
  144.     VDAudioFilterInitProc            mpInit;
  145.     const VDAudioFilterVtbl            *mpVtbl;
  146. };
  147.  
  148. #endif
  149.