summaryrefslogtreecommitdiff
path: root/audio/sysvad/TabletAudioSample/micarray2wavtable.h
diff options
context:
space:
mode:
authorDaniel Rugerio <[email protected]>2019-06-28 16:08:54 -0700
committerAdonais Romero González <[email protected]>2019-06-28 16:08:54 -0700
commit8ffcdad009e4d410f92fabc4e322a76a0be3a69d (patch)
tree378b2d98a4210c61e2bc34f5b8959e87e4be5c6c /audio/sysvad/TabletAudioSample/micarray2wavtable.h
parent75b2290f2a4ece68739d07135d352cdfec3a9e89 (diff)
Update audio samples (#387)
* Update SysVAD public sample. * Add WaveTest public sample.
Diffstat (limited to 'audio/sysvad/TabletAudioSample/micarray2wavtable.h')
-rw-r--r--audio/sysvad/TabletAudioSample/micarray2wavtable.h990
1 files changed, 990 insertions, 0 deletions
diff --git a/audio/sysvad/TabletAudioSample/micarray2wavtable.h b/audio/sysvad/TabletAudioSample/micarray2wavtable.h
new file mode 100644
index 00000000..1087d5eb
--- /dev/null
+++ b/audio/sysvad/TabletAudioSample/micarray2wavtable.h
@@ -0,0 +1,990 @@
+/*++
+
+Copyright (c) Microsoft Corporation All Rights Reserved
+
+Module Name:
+ micarray2wavtable.h
+
+Abstract:
+
+ Declaration of wave miniport tables for the rear mic array.
+
+--*/
+
+#ifndef _SYSVAD_MICARRAY2WAVTABLE_H_
+#define _SYSVAD_MICARRAY2WAVTABLE_H_
+
+//
+// Mic array range.
+//
+#define MICARRAY2_RAW_CHANNELS 2 // Channels for raw mode
+#define MICARRAY2_PROCESSED_CHANNELS 1 // Channels for default mode
+#define MICARRAY2_DEVICE_MAX_CHANNELS 2 // Max channels overall
+#define MICARRAY2_16_BITS_PER_SAMPLE_PCM 16 // 16 Bits Per Sample
+#define MICARRAY2_32_BITS_PER_SAMPLE_PCM 32 // 32 Bits Per Sample
+#define MICARRAY2_RAW_SAMPLE_RATE 48000 // Raw sample rate
+#define MICARRAY2_PROCESSED_MIN_SAMPLE_RATE 8000 // Min Sample Rate
+#define MICARRAY2_PROCESSED_MAX_SAMPLE_RATE 48000 // Max Sample Rate
+
+//
+// Max # of pin instances.
+//
+#define MICARRAY2_MAX_INPUT_STREAMS 4
+
+//=============================================================================
+static
+KSDATAFORMAT_WAVEFORMATEXTENSIBLE MicArray2PinSupportedDeviceFormats[] =
+{
+ // 0 - Note the ENDPOINT_MINIPAIR structures for the mic arrays use this first element as the proposed DEFAULT format
+ // 48 KHz 16-bit mono
+ {
+ {
+ sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE),
+ 0,
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ {
+ {
+ WAVE_FORMAT_EXTENSIBLE,
+ 1,
+ 48000,
+ 96000,
+ 2,
+ 16,
+ sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX)
+ },
+ 16,
+ KSAUDIO_SPEAKER_MONO,
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM)
+ }
+ },
+ // 1
+ // 8 KHz 16-bit mono
+ {
+ {
+ sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE),
+ 0,
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ {
+ {
+ WAVE_FORMAT_EXTENSIBLE,
+ 1,
+ 8000,
+ 16000,
+ 2,
+ 16,
+ sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX)
+ },
+ 16,
+ KSAUDIO_SPEAKER_MONO,
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM)
+ }
+ },
+ // 2
+ // 11.025 KHz 16-bit mono
+ {
+ {
+ sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE),
+ 0,
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ {
+ {
+ WAVE_FORMAT_EXTENSIBLE,
+ 1,
+ 11025,
+ 22050,
+ 2,
+ 16,
+ sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX)
+ },
+ 16,
+ KSAUDIO_SPEAKER_MONO,
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM)
+ }
+ },
+ // 3 - Note the ENDPOINT_MINIPAIR structures for the mic arrays use this element as the proposed SPEECH format
+ // 16 KHz 16-bit mono
+ {
+ {
+ sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE),
+ 0,
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ {
+ {
+ WAVE_FORMAT_EXTENSIBLE,
+ 1, // One channel
+ 16000, // 16KHz
+ 32000, // average bytes per second
+ 2, // 2 bytes per frame
+ 16, // 16 bits per sample container
+ sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX)
+ },
+ 16, // valid bits per sample
+ KSAUDIO_SPEAKER_MONO,
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM)
+ }
+ },
+ // 4
+ // 22.05 KHz 16-bit mono
+ {
+ {
+ sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE),
+ 0,
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ {
+ {
+ WAVE_FORMAT_EXTENSIBLE,
+ 1,
+ 22050,
+ 44100,
+ 2,
+ 16,
+ sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX)
+ },
+ 16,
+ KSAUDIO_SPEAKER_MONO,
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM)
+ }
+ },
+ // 5 - Note the ENDPOINT_MINIPAIR structures for the mic arrays use this element as the proposed COMMUNICATIONS format
+ // 24 KHz 16-bit mono
+ {
+ {
+ sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE),
+ 0,
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ {
+ {
+ WAVE_FORMAT_EXTENSIBLE,
+ 1,
+ 24000,
+ 48000,
+ 2,
+ 16,
+ sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX)
+ },
+ 16,
+ KSAUDIO_SPEAKER_MONO,
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM)
+ }
+ },
+ // 6
+ // 32 KHz 16-bit mono
+ {
+ {
+ sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE),
+ 0,
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ {
+ {
+ WAVE_FORMAT_EXTENSIBLE,
+ 1,
+ 32000,
+ 64000,
+ 2,
+ 16,
+ sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX)
+ },
+ 16,
+ KSAUDIO_SPEAKER_MONO,
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM)
+ }
+ },
+ // 7
+ // 44.1 KHz 16-bit mono
+ {
+ {
+ sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE),
+ 0,
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ {
+ {
+ WAVE_FORMAT_EXTENSIBLE,
+ 1,
+ 44100,
+ 88200,
+ 2,
+ 16,
+ sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX)
+ },
+ 16,
+ KSAUDIO_SPEAKER_MONO,
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM)
+ }
+ },
+ // 8 - Note the ENDPOINT_MINIPAIR structures for the mic arrays use this last element as the proposed RAW format
+ // 48 KHz 32-bit 2 channels
+ {
+ {
+ sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE),
+ 0,
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ {
+ {
+ WAVE_FORMAT_EXTENSIBLE,
+ 2,
+ 48000,
+ 384000,
+ 8,
+ 32,
+ sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX)
+ },
+ 32,
+ 0, // No channel configuration for unprocessed mic array
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM)
+ }
+ },
+};
+
+//
+// Supported modes (only on streaming pins).
+//
+static
+MODE_AND_DEFAULT_FORMAT MicArray2PinSupportedDeviceModes[] =
+{
+ {
+ STATIC_AUDIO_SIGNALPROCESSINGMODE_RAW,
+ &MicArray2PinSupportedDeviceFormats[SIZEOF_ARRAY(MicArray2PinSupportedDeviceFormats)-1].DataFormat
+ },
+ {
+ STATIC_AUDIO_SIGNALPROCESSINGMODE_DEFAULT,
+ &MicArray2PinSupportedDeviceFormats[0].DataFormat
+ },
+ {
+ STATIC_AUDIO_SIGNALPROCESSINGMODE_SPEECH,
+ &MicArray2PinSupportedDeviceFormats[3].DataFormat
+ },
+ {
+ STATIC_AUDIO_SIGNALPROCESSINGMODE_COMMUNICATIONS,
+ &MicArray2PinSupportedDeviceFormats[5].DataFormat
+ }
+};
+
+// This structure goes along with the keyword supported device format,
+// to indicate that the audio is interleaved microphone and loopback data.
+INTERLEAVED_AUDIO_FORMAT_INFORMATION InterleavedFormatInformation =
+{
+ sizeof(INTERLEAVED_AUDIO_FORMAT_INFORMATION),
+ 4, // Microphone channel count
+ 0, // Microphone channel start position
+ 0, // No channel configuration for unprocessed mic array
+ 2, // Channel count for interleaved data
+ 2, // Interleaved audio start position
+ KSAUDIO_SPEAKER_STEREO // Channel mask for interleaved loopback data
+};
+
+//=============================================================================
+static
+KSDATAFORMAT_WAVEFORMATEXTENSIBLE KeywordPin2SupportedDeviceFormats[] =
+{
+ {
+ {
+ sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE),
+ 0,
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ {
+ {
+ WAVE_FORMAT_EXTENSIBLE,
+ 6, // six channels, make sure this matches InterleavedFormatInformation, if interleaving loopback audio
+ 16000, // 16KHz
+ 192000, // average bytes per second
+ 12, // 8 bytes per frame
+ 16, // 16 bits per sample container
+ sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX)
+ },
+ 16, // valid bits per sample
+ 0, // No channel configuration for unprocessed mic array
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM)
+ }
+ },
+};
+
+static
+MODE_AND_DEFAULT_FORMAT KeywordPin2SupportedDeviceModes[] =
+{
+ // NOTE: Because we're using the KWS apo as an EFX, this endpoint may only support a single mode.
+ // You can not have an EFX when there are multiple modes supported by the driver, EFX must be implemented
+ // in the driver in that case. Because we are exposing a single mode the audio engine can insert the KWSAPO
+ // as an EFX. Further, in the INF associated to this driver the KWS EFX APO is registered as supporting default
+ // mode. That registration is not coupled to the mode enumerated in this list.
+ {
+ STATIC_AUDIO_SIGNALPROCESSINGMODE_SPEECH,
+ &KeywordPin2SupportedDeviceFormats[SIZEOF_ARRAY(KeywordPin2SupportedDeviceFormats) - 1].DataFormat
+ },
+};
+
+//
+// The entries here must follow the same order as the filter's pin
+// descriptor array.
+//
+static
+PIN_DEVICE_FORMATS_AND_MODES MicArray2PinDeviceFormatsAndModes[] =
+{
+ {
+ BridgePin,
+ NULL,
+ 0,
+ NULL,
+ 0
+ },
+ {
+ SystemCapturePin,
+ MicArray2PinSupportedDeviceFormats,
+ SIZEOF_ARRAY(MicArray2PinSupportedDeviceFormats),
+ MicArray2PinSupportedDeviceModes,
+ SIZEOF_ARRAY(MicArray2PinSupportedDeviceModes)
+ },
+ {
+ KeywordCapturePin,
+ KeywordPin2SupportedDeviceFormats,
+ SIZEOF_ARRAY(KeywordPin2SupportedDeviceFormats),
+ KeywordPin2SupportedDeviceModes,
+ SIZEOF_ARRAY(KeywordPin2SupportedDeviceModes)
+ }
+};
+
+//=============================================================================
+// Data ranges
+//
+// See CMiniportWaveRT::DataRangeIntersection.
+//
+// Both mono and two-channel formats are supported for the mic arrays. The
+// design of this sample driver's data range intersection handler requires a
+// separate data for each supported channel count.
+//
+static
+KSDATARANGE_AUDIO MicArray2PinDataRangesRawStream[] =
+{
+ {
+ {
+ sizeof(KSDATARANGE_AUDIO),
+ KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ MICARRAY2_RAW_CHANNELS,
+ MICARRAY2_32_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_32_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_RAW_SAMPLE_RATE,
+ MICARRAY2_RAW_SAMPLE_RATE
+ },
+};
+
+static
+KSDATARANGE_AUDIO MicArray2PinDataRangesProcessedStream[] =
+{
+ {
+ {
+ sizeof(KSDATARANGE_AUDIO),
+ KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ MICARRAY2_PROCESSED_CHANNELS,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_PROCESSED_MIN_SAMPLE_RATE,
+ MICARRAY2_PROCESSED_MIN_SAMPLE_RATE
+ },
+ {
+ {
+ sizeof(KSDATARANGE_AUDIO),
+ KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ MICARRAY2_PROCESSED_CHANNELS,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ 11025,
+ 11025
+ },
+ {
+ {
+ sizeof(KSDATARANGE_AUDIO),
+ KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ MICARRAY2_PROCESSED_CHANNELS,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ 16000,
+ 16000
+ },
+ {
+ {
+ sizeof(KSDATARANGE_AUDIO),
+ KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ MICARRAY2_PROCESSED_CHANNELS,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ 22050,
+ 22050
+ },
+ {
+ {
+ sizeof(KSDATARANGE_AUDIO),
+ KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ MICARRAY2_PROCESSED_CHANNELS,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ 24000,
+ 24000
+ },
+ {
+ {
+ sizeof(KSDATARANGE_AUDIO),
+ KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ MICARRAY2_PROCESSED_CHANNELS,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ 32000,
+ 32000
+ },
+ {
+ {
+ sizeof(KSDATARANGE_AUDIO),
+ KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ MICARRAY2_PROCESSED_CHANNELS,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ 44100,
+ 44100
+ },
+ {
+ {
+ sizeof(KSDATARANGE_AUDIO),
+ KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ MICARRAY2_PROCESSED_CHANNELS,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_16_BITS_PER_SAMPLE_PCM,
+ MICARRAY2_PROCESSED_MAX_SAMPLE_RATE,
+ MICARRAY2_PROCESSED_MAX_SAMPLE_RATE
+ },
+};
+
+// if MicArray2PinDataRangesProcessedStream is changed, we MUST update MicArray2PinDataRangePointersStream too!
+C_ASSERT(SIZEOF_ARRAY(MicArray2PinDataRangesProcessedStream) == 8);
+
+static
+PKSDATARANGE MicArray2PinDataRangePointersStream[] =
+{
+ // All supported device formats should be listed in the DataRange.
+ PKSDATARANGE(&MicArray2PinDataRangesProcessedStream[0]),
+ PKSDATARANGE(&PinDataRangeAttributeList),
+ PKSDATARANGE(&MicArray2PinDataRangesProcessedStream[1]),
+ PKSDATARANGE(&PinDataRangeAttributeList),
+ PKSDATARANGE(&MicArray2PinDataRangesProcessedStream[2]),
+ PKSDATARANGE(&PinDataRangeAttributeList),
+ PKSDATARANGE(&MicArray2PinDataRangesProcessedStream[3]),
+ PKSDATARANGE(&PinDataRangeAttributeList),
+ PKSDATARANGE(&MicArray2PinDataRangesProcessedStream[4]),
+ PKSDATARANGE(&PinDataRangeAttributeList),
+ PKSDATARANGE(&MicArray2PinDataRangesProcessedStream[5]),
+ PKSDATARANGE(&PinDataRangeAttributeList),
+ PKSDATARANGE(&MicArray2PinDataRangesProcessedStream[6]),
+ PKSDATARANGE(&PinDataRangeAttributeList),
+ PKSDATARANGE(&MicArray2PinDataRangesProcessedStream[7]),
+ PKSDATARANGE(&PinDataRangeAttributeList),
+ PKSDATARANGE(&MicArray2PinDataRangesRawStream[0]),
+ PKSDATARANGE(&PinDataRangeAttributeList),
+};
+
+//=============================================================================
+static
+KSDATARANGE MicArray2PinDataRangesBridge[] =
+{
+ {
+ sizeof(KSDATARANGE),
+ 0,
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE)
+ }
+};
+
+static
+PKSDATARANGE MicArray2PinDataRangePointersBridge[] =
+{
+ &MicArray2PinDataRangesBridge[0]
+};
+
+static
+KSDATARANGE_AUDIO KeywordPin2DataRangesStream[] =
+{
+ {
+ {
+ sizeof(KSDATARANGE_AUDIO),
+ KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range
+ 0,
+ 0,
+ STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
+ STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
+ STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
+ },
+ 6, // max channels
+ 16, // min bits per sample
+ 16, // max bits per sample
+ 16000, // min sample rate
+ 16000 // max sample rate
+ },
+};
+
+static
+PKSDATARANGE KeywordPin2DataRangePointersStream[] =
+{
+ PKSDATARANGE(&KeywordPin2DataRangesStream[0]),
+ PKSDATARANGE(&PinDataRangeAttributeList),
+};
+
+//=============================================================================
+static
+PCPIN_DESCRIPTOR MicArray2WaveMiniportPins[] =
+{
+ // Wave In Bridge Pin (Capture - From Topology) KSPIN_WAVE_BRIDGE
+ {
+ 0,
+ 0,
+ 0,
+ NULL,
+ {
+ 0,
+ NULL,
+ 0,
+ NULL,
+ SIZEOF_ARRAY(MicArray2PinDataRangePointersBridge),
+ MicArray2PinDataRangePointersBridge,
+ KSPIN_DATAFLOW_IN,
+ KSPIN_COMMUNICATION_NONE,
+ &KSCATEGORY_AUDIO,
+ NULL,
+ 0
+ }
+ },
+ // Wave In Streaming Pin (Capture) KSPIN_WAVE_HOST
+ {
+ MICARRAY2_MAX_INPUT_STREAMS,
+ MICARRAY2_MAX_INPUT_STREAMS,
+ 0,
+ NULL,
+ {
+ 0,
+ NULL,
+ 0,
+ NULL,
+ SIZEOF_ARRAY(MicArray2PinDataRangePointersStream),
+ MicArray2PinDataRangePointersStream,
+ KSPIN_DATAFLOW_OUT,
+ KSPIN_COMMUNICATION_SINK,
+ &KSCATEGORY_AUDIO,
+ &KSAUDFNAME_RECORDING_CONTROL,
+ 0
+ }
+ },
+ // Keyword Detector Streaming Pin (Capture) KSPIN_WAVEIN_KEYWORD
+ {
+ 1,
+ 1,
+ 0,
+ NULL,
+ {
+ 0,
+ NULL,
+ 0,
+ NULL,
+ SIZEOF_ARRAY(KeywordPin2DataRangePointersStream),
+ KeywordPin2DataRangePointersStream,
+ KSPIN_DATAFLOW_OUT,
+ KSPIN_COMMUNICATION_SINK,
+ &KSNODETYPE_AUDIO_KEYWORDDETECTOR,
+ NULL,
+ 0
+ }
+ }
+};
+
+//=============================================================================
+static
+PCNODE_DESCRIPTOR MicArray2WaveMiniportNodes[] =
+{
+ // KSNODE_WAVE_ADC
+ {
+ 0, // Flags
+ NULL, // AutomationTable
+ &KSNODETYPE_ADC, // Type
+ NULL // Name
+ }
+};
+
+//=============================================================================
+static
+PCCONNECTION_DESCRIPTOR MicArray2WaveMiniportConnections[] =
+{
+ { PCFILTER_NODE, KSPIN_WAVE_BRIDGE, KSNODE_WAVE_ADC, 1 },
+ { KSNODE_WAVE_ADC, 0, PCFILTER_NODE, KSPIN_WAVEIN_HOST },
+ { KSNODE_WAVE_ADC, 0, PCFILTER_NODE, KSPIN_WAVEIN_KEYWORD },
+};
+
+//=============================================================================
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Get_SoundDetectorSupportedPatterns);
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Set_SoundDetectorPatterns);
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Get_SoundDetectorArmed);
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Set_SoundDetectorArmed);
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Get_SoundDetectorMatchResult);
+
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Get_SoundDetectorSupportedPatterns2);
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Set_SoundDetectorPatterns2);
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Get_SoundDetectorArmed2);
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Set_SoundDetectorArmed2);
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Set_SoundDetectorReset2);
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Get_SoundDetectorStreamingSupport2);
+DECLARE_CLASSPROPERTYHANDLER(CMiniportWaveRT, Get_InterleavedFormatInformation);
+
+
+static
+SYSVADPROPERTY_ITEM PropertiesMicArray2WaveFilter[] =
+{
+ {
+ {
+ &KSPROPSETID_General,
+ KSPROPERTY_GENERAL_COMPONENTID,
+ KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
+ PropertyHandler_WaveFilter,
+ },
+ 0,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_Pin,
+ KSPROPERTY_PIN_PROPOSEDATAFORMAT,
+ KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
+ PropertyHandler_WaveFilter,
+ },
+ 0,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_Pin,
+ KSPROPERTY_PIN_PROPOSEDATAFORMAT2,
+ KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
+ PropertyHandler_WaveFilter,
+ },
+ 0,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_AudioEffectsDiscovery,
+ KSPROPERTY_AUDIOEFFECTSDISCOVERY_EFFECTSLIST,
+ KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
+ PropertyHandler_WaveFilter
+ },
+ 0,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_SoundDetector,
+ KSPROPERTY_SOUNDDETECTOR_SUPPORTEDPATTERNS,
+ KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
+ SysvadPropertyDispatch,
+ },
+ 0,
+ sizeof(CONTOSO_SUPPORTEDPATTERNSVALUE),
+ CMiniportWaveRT_Get_SoundDetectorSupportedPatterns,
+ NULL,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_SoundDetector,
+ KSPROPERTY_SOUNDDETECTOR_PATTERNS,
+ KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT,
+ SysvadPropertyDispatch,
+ },
+ 0,
+ (sizeof(KSMULTIPLE_ITEM) + sizeof(CONTOSO_KEYWORDCONFIGURATION)),
+ NULL,
+ CMiniportWaveRT_Set_SoundDetectorPatterns,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_SoundDetector,
+ KSPROPERTY_SOUNDDETECTOR_ARMED,
+ KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT,
+ SysvadPropertyDispatch,
+ },
+ 0,
+ sizeof(BOOL),
+ CMiniportWaveRT_Get_SoundDetectorArmed,
+ CMiniportWaveRT_Set_SoundDetectorArmed,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_SoundDetector,
+ KSPROPERTY_SOUNDDETECTOR_MATCHRESULT,
+ KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
+ SysvadPropertyDispatch,
+ },
+ 0,
+ sizeof(CONTOSO_KEYWORDDETECTIONRESULT),
+ CMiniportWaveRT_Get_SoundDetectorMatchResult,
+ NULL,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_SoundDetector2,
+ KSPROPERTY_SOUNDDETECTOR_SUPPORTEDPATTERNS,
+ KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
+ SysvadPropertyDispatch,
+ },
+ sizeof(KSSOUNDDETECTORPROPERTY) - sizeof(KSPROPERTY),
+ sizeof(CONTOSO_SUPPORTEDPATTERNSVALUE),
+ CMiniportWaveRT_Get_SoundDetectorSupportedPatterns2,
+ NULL,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_SoundDetector2,
+ KSPROPERTY_SOUNDDETECTOR_PATTERNS,
+ KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT,
+ SysvadPropertyDispatch,
+ },
+ sizeof(KSSOUNDDETECTORPROPERTY) - sizeof(KSPROPERTY),
+ (sizeof(KSMULTIPLE_ITEM) + sizeof(CONTOSO_KEYWORDCONFIGURATION)),
+ NULL,
+ CMiniportWaveRT_Set_SoundDetectorPatterns2,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_SoundDetector2,
+ KSPROPERTY_SOUNDDETECTOR_ARMED,
+ KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT,
+ SysvadPropertyDispatch,
+ },
+ sizeof(KSSOUNDDETECTORPROPERTY) - sizeof(KSPROPERTY),
+ sizeof(BOOL),
+ CMiniportWaveRT_Get_SoundDetectorArmed2,
+ CMiniportWaveRT_Set_SoundDetectorArmed2,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_SoundDetector2,
+ KSPROPERTY_SOUNDDETECTOR_RESET,
+ KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT,
+ SysvadPropertyDispatch,
+ },
+ sizeof(KSSOUNDDETECTORPROPERTY) - sizeof(KSPROPERTY),
+ sizeof(BOOL),
+ NULL,
+ CMiniportWaveRT_Set_SoundDetectorReset2,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_SoundDetector2,
+ KSPROPERTY_SOUNDDETECTOR_STREAMINGSUPPORT,
+ KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
+ SysvadPropertyDispatch,
+ },
+ sizeof(KSSOUNDDETECTORPROPERTY) - sizeof(KSPROPERTY),
+ sizeof(BOOL),
+ CMiniportWaveRT_Get_SoundDetectorStreamingSupport2,
+ NULL,
+ NULL,
+ NULL,
+ 0
+ },
+ {
+ {
+ &KSPROPSETID_InterleavedAudio,
+ KSPROPERTY_INTERLEAVEDAUDIO_FORMATINFORMATION,
+ KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT,
+ SysvadPropertyDispatch,
+ },
+ sizeof(KSP_PIN) - sizeof(KSPROPERTY),
+ sizeof(INTERLEAVED_AUDIO_FORMAT_INFORMATION),
+ CMiniportWaveRT_Get_InterleavedFormatInformation,
+ NULL,
+ NULL,
+ &InterleavedFormatInformation, // format interleaving information for this endpoint
+ sizeof(InterleavedFormatInformation)
+ },
+};
+
+NTSTATUS CMiniportWaveRT_EventHandler_SoundDetectorMatchDetected(
+ _In_ PPCEVENT_REQUEST EventRequest
+ );
+
+static
+PCEVENT_ITEM EventsMicArray2WaveFilter[] =
+{
+ {
+ &KSEVENTSETID_SoundDetector,
+ KSEVENT_SOUNDDETECTOR_MATCHDETECTED,
+ KSEVENT_TYPE_ENABLE | KSEVENT_TYPE_BASICSUPPORT,
+ CMiniportWaveRT_EventHandler_SoundDetectorMatchDetected,
+ }
+};
+
+DEFINE_PCAUTOMATION_TABLE_PROP_EVENT(AutomationMicArray2WaveFilter, PropertiesMicArray2WaveFilter, EventsMicArray2WaveFilter);
+
+//=============================================================================
+static
+PCFILTER_DESCRIPTOR MicArray2WaveMiniportFilterDescriptor =
+{
+ 0, // Version
+ &AutomationMicArray2WaveFilter, // AutomationTable
+ sizeof(PCPIN_DESCRIPTOR), // PinSize
+ SIZEOF_ARRAY(MicArray2WaveMiniportPins), // PinCount
+ MicArray2WaveMiniportPins, // Pins
+ sizeof(PCNODE_DESCRIPTOR), // NodeSize
+ SIZEOF_ARRAY(MicArray2WaveMiniportNodes), // NodeCount
+ MicArray2WaveMiniportNodes, // Nodes
+ SIZEOF_ARRAY(MicArray2WaveMiniportConnections), // ConnectionCount
+ MicArray2WaveMiniportConnections, // Connections
+ 0, // CategoryCount
+ NULL // Categories - use defaults (audio, render, capture)
+};
+
+
+#endif // _SYSVAD_MICARRAY2WAVTABLE_H_
+