Mercurial > foo_out_sdl
comparison foosdk/sdk/foobar2000/helpers/fb2k_wfx.h @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:e9bb126753e7 | 1:20d02a178406 |
|---|---|
| 1 #pragma once | |
| 2 | |
| 3 struct fb2k_wfx { | |
| 4 audio_chunk::spec_t spec; | |
| 5 bool bFloat; | |
| 6 unsigned bps; | |
| 7 void parse( const WAVEFORMATEX * wfx ) { | |
| 8 spec.sampleRate = wfx->nSamplesPerSec; | |
| 9 spec.chanCount = wfx->nChannels; | |
| 10 spec.chanMask = audio_chunk::g_guess_channel_config( spec.chanCount ); | |
| 11 bps = wfx->wBitsPerSample; | |
| 12 switch( wfx->wFormatTag ) { | |
| 13 case WAVE_FORMAT_PCM: | |
| 14 bFloat = false; break; | |
| 15 case WAVE_FORMAT_IEEE_FLOAT: | |
| 16 bFloat = true; break; | |
| 17 case WAVE_FORMAT_EXTENSIBLE: | |
| 18 { | |
| 19 auto wfxe = (const WAVEFORMATEXTENSIBLE*) wfx; | |
| 20 auto newMask = audio_chunk::g_channel_config_from_wfx( wfxe->dwChannelMask ); | |
| 21 if ( audio_chunk::g_count_channels(newMask) == spec.chanCount ) { | |
| 22 spec.chanMask = newMask; | |
| 23 } | |
| 24 if ( wfxe->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT ) { | |
| 25 bFloat = true; | |
| 26 } else if ( wfxe->SubFormat == KSDATAFORMAT_SUBTYPE_PCM ) { | |
| 27 bFloat = false; | |
| 28 } else { | |
| 29 throw exception_io_data(); | |
| 30 } | |
| 31 } | |
| 32 break; | |
| 33 default: | |
| 34 throw exception_io_data(); | |
| 35 } | |
| 36 | |
| 37 } | |
| 38 }; |
