diff options
| author | Wei Mao <[email protected]> | 2017-06-24 16:15:31 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-06-24 16:15:31 -0700 |
| commit | b8e976d7df5e3cc2337d42dc86223389fc794dbc (patch) | |
| tree | 2b453843df52fdd4edc84cc6a813b744eb1c1474 | |
| parent | 9c98650f5987e83f250c1e643bbc8c10e5c6d541 (diff) | |
| parent | 30789342078bd8876351260a4460a400cfbcb6f6 (diff) | |
Merge pull request #148 from girishpattabiraman/master
Added 32 bit format on Microphone Array 1 & 2 endpoints.
| -rw-r--r-- | audio/sysvad/EndpointsCommon/micarraywavtable.h | 50 | ||||
| -rw-r--r-- | audio/sysvad/ToneGenerator.cpp | 29 |
2 files changed, 48 insertions, 31 deletions
diff --git a/audio/sysvad/EndpointsCommon/micarraywavtable.h b/audio/sysvad/EndpointsCommon/micarraywavtable.h index 3b6c2df0..beda8742 100644 --- a/audio/sysvad/EndpointsCommon/micarraywavtable.h +++ b/audio/sysvad/EndpointsCommon/micarraywavtable.h @@ -21,8 +21,8 @@ Abstract: #define MICARRAY_RAW_CHANNELS 2 // Channels for raw mode #define MICARRAY_PROCESSED_CHANNELS 1 // Channels for default mode #define MICARRAY_DEVICE_MAX_CHANNELS 2 // Max channels overall -#define MICARRAY_MIN_BITS_PER_SAMPLE_PCM 16 // Min Bits Per Sample -#define MICARRAY_MAX_BITS_PER_SAMPLE_PCM 16 // Max Bits Per Sample +#define MICARRAY_16_BITS_PER_SAMPLE_PCM 16 // 16 Bits Per Sample +#define MICARRAY_32_BITS_PER_SAMPLE_PCM 32 // 32 Bits Per Sample #define MICARRAY_RAW_SAMPLE_RATE 48000 // Raw sample rate #define MICARRAY_PROCESSED_MIN_SAMPLE_RATE 8000 // Min Sample Rate #define MICARRAY_PROCESSED_MAX_SAMPLE_RATE 48000 // Max Sample Rate @@ -253,7 +253,7 @@ KSDATAFORMAT_WAVEFORMATEXTENSIBLE MicArrayPinSupportedDeviceFormats[] = } }, // 8 - Note the ENDPOINT_MINIPAIR structures for the mic arrays use this last element as the proposed RAW format - // 48 KHz 16-bit 2 channels + // 48 KHz 32-bit 2 channels { { sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), @@ -269,12 +269,12 @@ KSDATAFORMAT_WAVEFORMATEXTENSIBLE MicArrayPinSupportedDeviceFormats[] = WAVE_FORMAT_EXTENSIBLE, 2, 48000, - 192000, - 4, - 16, + 384000, + 8, + 32, sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) }, - 16, + 32, 0, // No channel configuration for unprocessed mic array STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) } @@ -398,8 +398,8 @@ KSDATARANGE_AUDIO MicArrayPinDataRangesRawStream[] = STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) }, MICARRAY_RAW_CHANNELS, - MICARRAY_MIN_BITS_PER_SAMPLE_PCM, - MICARRAY_MAX_BITS_PER_SAMPLE_PCM, + MICARRAY_32_BITS_PER_SAMPLE_PCM, + MICARRAY_32_BITS_PER_SAMPLE_PCM, MICARRAY_RAW_SAMPLE_RATE, MICARRAY_RAW_SAMPLE_RATE }, @@ -419,8 +419,8 @@ KSDATARANGE_AUDIO MicArrayPinDataRangesProcessedStream[] = STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) }, MICARRAY_PROCESSED_CHANNELS, - MICARRAY_MIN_BITS_PER_SAMPLE_PCM, - MICARRAY_MAX_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, MICARRAY_PROCESSED_MIN_SAMPLE_RATE, MICARRAY_PROCESSED_MIN_SAMPLE_RATE }, @@ -435,8 +435,8 @@ KSDATARANGE_AUDIO MicArrayPinDataRangesProcessedStream[] = STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) }, MICARRAY_PROCESSED_CHANNELS, - MICARRAY_MIN_BITS_PER_SAMPLE_PCM, - MICARRAY_MAX_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, 11025, 11025 }, @@ -451,8 +451,8 @@ KSDATARANGE_AUDIO MicArrayPinDataRangesProcessedStream[] = STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) }, MICARRAY_PROCESSED_CHANNELS, - MICARRAY_MIN_BITS_PER_SAMPLE_PCM, - MICARRAY_MAX_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, 16000, 16000 }, @@ -467,8 +467,8 @@ KSDATARANGE_AUDIO MicArrayPinDataRangesProcessedStream[] = STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) }, MICARRAY_PROCESSED_CHANNELS, - MICARRAY_MIN_BITS_PER_SAMPLE_PCM, - MICARRAY_MAX_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, 22050, 22050 }, @@ -483,8 +483,8 @@ KSDATARANGE_AUDIO MicArrayPinDataRangesProcessedStream[] = STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) }, MICARRAY_PROCESSED_CHANNELS, - MICARRAY_MIN_BITS_PER_SAMPLE_PCM, - MICARRAY_MAX_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, 24000, 24000 }, @@ -499,8 +499,8 @@ KSDATARANGE_AUDIO MicArrayPinDataRangesProcessedStream[] = STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) }, MICARRAY_PROCESSED_CHANNELS, - MICARRAY_MIN_BITS_PER_SAMPLE_PCM, - MICARRAY_MAX_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, 32000, 32000 }, @@ -515,8 +515,8 @@ KSDATARANGE_AUDIO MicArrayPinDataRangesProcessedStream[] = STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) }, MICARRAY_PROCESSED_CHANNELS, - MICARRAY_MIN_BITS_PER_SAMPLE_PCM, - MICARRAY_MAX_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, 44100, 44100 }, @@ -531,8 +531,8 @@ KSDATARANGE_AUDIO MicArrayPinDataRangesProcessedStream[] = STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) }, MICARRAY_PROCESSED_CHANNELS, - MICARRAY_MIN_BITS_PER_SAMPLE_PCM, - MICARRAY_MAX_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, + MICARRAY_16_BITS_PER_SAMPLE_PCM, MICARRAY_PROCESSED_MAX_SAMPLE_RATE, MICARRAY_PROCESSED_MAX_SAMPLE_RATE }, diff --git a/audio/sysvad/ToneGenerator.cpp b/audio/sysvad/ToneGenerator.cpp index 807c50c3..2a01e49a 100644 --- a/audio/sysvad/ToneGenerator.cpp +++ b/audio/sysvad/ToneGenerator.cpp @@ -21,6 +21,14 @@ const double TWO_PI = M_PI * 2; extern DWORD g_DisableToneGenerator; // +// Double to long conversion. +// +long ConvertToLong(double Value) +{ + return (long)(Value * _I32_MAX); +}; + +// // Double to short conversion. // short ConvertToShort(double Value) @@ -97,11 +105,23 @@ VOID ToneGenerator::InitNewFrame unsigned char *dataBuffer = reinterpret_cast<unsigned char *>(Frame); dataBuffer[i] = ConvertToUChar(sinValue); } - else // 16 bits per sample + else if (m_BitsPerSample == 16) { short *dataBuffer = reinterpret_cast<short *>(Frame); dataBuffer[i] = ConvertToShort(sinValue); } + else if (m_BitsPerSample == 24) + { + BYTE *dataBuffer = Frame; + long val = ConvertToLong(sinValue); + val = val >> 8; + RtlCopyMemory(dataBuffer, &val, 3); + } + else if (m_BitsPerSample == 32) + { + long *dataBuffer = reinterpret_cast<long *>(Frame); + dataBuffer[i] = ConvertToLong(sinValue); + } } m_Theta += m_SampleIncrement; @@ -120,7 +140,6 @@ VOID ToneGenerator::InitNewFrame // Buffer - Buffer to hold the samples // BufferLength - Length of the buffer. // -// Note: this function supports 16bit and 8bit samples only. // void ToneGenerator::GenerateSine ( @@ -210,13 +229,11 @@ NTSTATUS ToneGenerator::Init KFLOATING_SAVE saveData; // - // This sample supports PCM 16bit formats only. + // This sample supports PCM formats only. // if ((WfExt->Format.wFormatTag != WAVE_FORMAT_PCM && !(WfExt->Format.wFormatTag == WAVE_FORMAT_EXTENSIBLE && - IsEqualGUIDAligned(WfExt->SubFormat, KSDATAFORMAT_SUBTYPE_PCM))) || - (WfExt->Format.wBitsPerSample != 16 && - WfExt->Format.wBitsPerSample != 8)) + IsEqualGUIDAligned(WfExt->SubFormat, KSDATAFORMAT_SUBTYPE_PCM)))) { status = STATUS_NOT_SUPPORTED; } |
