diff options
| author | Girish Pattabiraman <[email protected]> | 2017-06-22 17:23:01 -0700 |
|---|---|---|
| committer | Girish Pattabiraman <[email protected]> | 2017-06-22 17:23:01 -0700 |
| commit | 30789342078bd8876351260a4460a400cfbcb6f6 (patch) | |
| tree | 77754fd10d6d8f987fdc66a0e33a24420bbd7146 /audio/sysvad/ToneGenerator.cpp | |
| parent | e98f4cac93ec65a484be77d8a795538b02dab72e (diff) | |
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; } |
