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