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