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 /audio/sysvad/ToneGenerator.cpp | |
| parent | 9c98650f5987e83f250c1e643bbc8c10e5c6d541 (diff) | |
| parent | 30789342078bd8876351260a4460a400cfbcb6f6 (diff) | |
Merge pull request #148 from girishpattabiraman/master
Added 32 bit format on Microphone Array 1 & 2 endpoints.
Diffstat (limited to 'audio/sysvad/ToneGenerator.cpp')
| -rw-r--r-- | audio/sysvad/ToneGenerator.cpp | 29 |
1 files changed, 23 insertions, 6 deletions
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; } |
