cannam@162: #ifndef PA_WIN_WDMKS_H cannam@162: #define PA_WIN_WDMKS_H cannam@162: /* cannam@162: * $Id$ cannam@162: * PortAudio Portable Real-Time Audio Library cannam@162: * WDM/KS specific extensions cannam@162: * cannam@162: * Copyright (c) 1999-2007 Ross Bencina and Phil Burk cannam@162: * cannam@162: * Permission is hereby granted, free of charge, to any person obtaining cannam@162: * a copy of this software and associated documentation files cannam@162: * (the "Software"), to deal in the Software without restriction, cannam@162: * including without limitation the rights to use, copy, modify, merge, cannam@162: * publish, distribute, sublicense, and/or sell copies of the Software, cannam@162: * and to permit persons to whom the Software is furnished to do so, cannam@162: * subject to the following conditions: cannam@162: * cannam@162: * The above copyright notice and this permission notice shall be cannam@162: * included in all copies or substantial portions of the Software. cannam@162: * cannam@162: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, cannam@162: * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF cannam@162: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. cannam@162: * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR cannam@162: * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF cannam@162: * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION cannam@162: * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. cannam@162: */ cannam@162: cannam@162: /* cannam@162: * The text above constitutes the entire PortAudio license; however, cannam@162: * the PortAudio community also makes the following non-binding requests: cannam@162: * cannam@162: * Any person wishing to distribute modifications to the Software is cannam@162: * requested to send the modifications to the original developer so that cannam@162: * they can be incorporated into the canonical version. It is also cannam@162: * requested that these non-binding requests be included along with the cannam@162: * license above. cannam@162: */ cannam@162: cannam@162: /** @file cannam@162: @ingroup public_header cannam@162: @brief WDM Kernel Streaming-specific PortAudio API extension header file. cannam@162: */ cannam@162: cannam@162: cannam@162: #include "portaudio.h" cannam@162: cannam@162: #include cannam@162: cannam@162: #ifdef __cplusplus cannam@162: extern "C" cannam@162: { cannam@162: #endif /* __cplusplus */ cannam@162: cannam@162: /** Flags to indicate valid fields in PaWinWDMKSInfo. cannam@162: @see PaWinWDMKSInfo cannam@162: @version Available as of 19.5.0. cannam@162: */ cannam@162: typedef enum PaWinWDMKSFlags cannam@162: { cannam@162: /** Makes WDMKS use the supplied latency figures instead of relying on the frame size reported cannam@162: by the WaveCyclic device. Use at own risk! cannam@162: */ cannam@162: paWinWDMKSOverrideFramesize = (1 << 0), cannam@162: cannam@162: /** Makes WDMKS (output stream) use the given channelMask instead of the default. cannam@162: @version Available as of 19.5.0. cannam@162: */ cannam@162: paWinWDMKSUseGivenChannelMask = (1 << 1), cannam@162: cannam@162: } PaWinWDMKSFlags; cannam@162: cannam@162: typedef struct PaWinWDMKSInfo{ cannam@162: unsigned long size; /**< sizeof(PaWinWDMKSInfo) */ cannam@162: PaHostApiTypeId hostApiType; /**< paWDMKS */ cannam@162: unsigned long version; /**< 1 */ cannam@162: cannam@162: /** Flags indicate which fields are valid. cannam@162: @see PaWinWDMKSFlags cannam@162: @version Available as of 19.5.0. cannam@162: */ cannam@162: unsigned long flags; cannam@162: cannam@162: /** The number of packets to use for WaveCyclic devices, range is [2, 8]. Set to zero for default value of 2. */ cannam@162: unsigned noOfPackets; cannam@162: cannam@162: /** If paWinWDMKSUseGivenChannelMask bit is set in flags, use this as channelMask instead of default. cannam@162: @see PaWinWDMKSFlags cannam@162: @version Available as of 19.5.0. cannam@162: */ cannam@162: unsigned channelMask; cannam@162: } PaWinWDMKSInfo; cannam@162: cannam@162: typedef enum PaWDMKSType cannam@162: { cannam@162: Type_kNotUsed, cannam@162: Type_kWaveCyclic, cannam@162: Type_kWaveRT, cannam@162: Type_kCnt, cannam@162: } PaWDMKSType; cannam@162: cannam@162: typedef enum PaWDMKSSubType cannam@162: { cannam@162: SubType_kUnknown, cannam@162: SubType_kNotification, cannam@162: SubType_kPolled, cannam@162: SubType_kCnt, cannam@162: } PaWDMKSSubType; cannam@162: cannam@162: typedef struct PaWinWDMKSDeviceInfo { cannam@162: wchar_t filterPath[MAX_PATH]; /**< KS filter path in Unicode! */ cannam@162: wchar_t topologyPath[MAX_PATH]; /**< Topology filter path in Unicode! */ cannam@162: PaWDMKSType streamingType; cannam@162: GUID deviceProductGuid; /**< The product GUID of the device (if supported) */ cannam@162: } PaWinWDMKSDeviceInfo; cannam@162: cannam@162: typedef struct PaWDMKSDirectionSpecificStreamInfo cannam@162: { cannam@162: PaDeviceIndex device; cannam@162: unsigned channels; /**< No of channels the device is opened with */ cannam@162: unsigned framesPerHostBuffer; /**< No of frames of the device buffer */ cannam@162: int endpointPinId; /**< Endpoint pin ID (on topology filter if topologyName is not empty) */ cannam@162: int muxNodeId; /**< Only valid for input */ cannam@162: PaWDMKSSubType streamingSubType; /**< Not known until device is opened for streaming */ cannam@162: } PaWDMKSDirectionSpecificStreamInfo; cannam@162: cannam@162: typedef struct PaWDMKSSpecificStreamInfo { cannam@162: PaWDMKSDirectionSpecificStreamInfo input; cannam@162: PaWDMKSDirectionSpecificStreamInfo output; cannam@162: } PaWDMKSSpecificStreamInfo; cannam@162: cannam@162: #ifdef __cplusplus cannam@162: } cannam@162: #endif /* __cplusplus */ cannam@162: cannam@162: #endif /* PA_WIN_DS_H */