| 551 | |
| 552 | struct DecompResult { UserFmtChannels channels; UserFmtType type; }; |
| 553 | al::optional<DecompResult> DecomposeUserFormat(ALenum format) |
| 554 | { |
| 555 | struct FormatMap { |
| 556 | ALenum format; |
| 557 | UserFmtChannels channels; |
| 558 | UserFmtType type; |
| 559 | }; |
| 560 | static const std::array<FormatMap,46> UserFmtList{{ |
| 561 | { AL_FORMAT_MONO8, UserFmtMono, UserFmtUByte }, |
| 562 | { AL_FORMAT_MONO16, UserFmtMono, UserFmtShort }, |
| 563 | { AL_FORMAT_MONO_FLOAT32, UserFmtMono, UserFmtFloat }, |
| 564 | { AL_FORMAT_MONO_DOUBLE_EXT, UserFmtMono, UserFmtDouble }, |
| 565 | { AL_FORMAT_MONO_IMA4, UserFmtMono, UserFmtIMA4 }, |
| 566 | { AL_FORMAT_MONO_MSADPCM_SOFT, UserFmtMono, UserFmtMSADPCM }, |
| 567 | { AL_FORMAT_MONO_MULAW, UserFmtMono, UserFmtMulaw }, |
| 568 | { AL_FORMAT_MONO_ALAW_EXT, UserFmtMono, UserFmtAlaw }, |
| 569 | |
| 570 | { AL_FORMAT_STEREO8, UserFmtStereo, UserFmtUByte }, |
| 571 | { AL_FORMAT_STEREO16, UserFmtStereo, UserFmtShort }, |
| 572 | { AL_FORMAT_STEREO_FLOAT32, UserFmtStereo, UserFmtFloat }, |
| 573 | { AL_FORMAT_STEREO_DOUBLE_EXT, UserFmtStereo, UserFmtDouble }, |
| 574 | { AL_FORMAT_STEREO_IMA4, UserFmtStereo, UserFmtIMA4 }, |
| 575 | { AL_FORMAT_STEREO_MSADPCM_SOFT, UserFmtStereo, UserFmtMSADPCM }, |
| 576 | { AL_FORMAT_STEREO_MULAW, UserFmtStereo, UserFmtMulaw }, |
| 577 | { AL_FORMAT_STEREO_ALAW_EXT, UserFmtStereo, UserFmtAlaw }, |
| 578 | |
| 579 | { AL_FORMAT_REAR8, UserFmtRear, UserFmtUByte }, |
| 580 | { AL_FORMAT_REAR16, UserFmtRear, UserFmtShort }, |
| 581 | { AL_FORMAT_REAR32, UserFmtRear, UserFmtFloat }, |
| 582 | { AL_FORMAT_REAR_MULAW, UserFmtRear, UserFmtMulaw }, |
| 583 | |
| 584 | { AL_FORMAT_QUAD8_LOKI, UserFmtQuad, UserFmtUByte }, |
| 585 | { AL_FORMAT_QUAD16_LOKI, UserFmtQuad, UserFmtShort }, |
| 586 | |
| 587 | { AL_FORMAT_QUAD8, UserFmtQuad, UserFmtUByte }, |
| 588 | { AL_FORMAT_QUAD16, UserFmtQuad, UserFmtShort }, |
| 589 | { AL_FORMAT_QUAD32, UserFmtQuad, UserFmtFloat }, |
| 590 | { AL_FORMAT_QUAD_MULAW, UserFmtQuad, UserFmtMulaw }, |
| 591 | |
| 592 | { AL_FORMAT_51CHN8, UserFmtX51, UserFmtUByte }, |
| 593 | { AL_FORMAT_51CHN16, UserFmtX51, UserFmtShort }, |
| 594 | { AL_FORMAT_51CHN32, UserFmtX51, UserFmtFloat }, |
| 595 | { AL_FORMAT_51CHN_MULAW, UserFmtX51, UserFmtMulaw }, |
| 596 | |
| 597 | { AL_FORMAT_61CHN8, UserFmtX61, UserFmtUByte }, |
| 598 | { AL_FORMAT_61CHN16, UserFmtX61, UserFmtShort }, |
| 599 | { AL_FORMAT_61CHN32, UserFmtX61, UserFmtFloat }, |
| 600 | { AL_FORMAT_61CHN_MULAW, UserFmtX61, UserFmtMulaw }, |
| 601 | |
| 602 | { AL_FORMAT_71CHN8, UserFmtX71, UserFmtUByte }, |
| 603 | { AL_FORMAT_71CHN16, UserFmtX71, UserFmtShort }, |
| 604 | { AL_FORMAT_71CHN32, UserFmtX71, UserFmtFloat }, |
| 605 | { AL_FORMAT_71CHN_MULAW, UserFmtX71, UserFmtMulaw }, |
| 606 | |
| 607 | { AL_FORMAT_BFORMAT2D_8, UserFmtBFormat2D, UserFmtUByte }, |
| 608 | { AL_FORMAT_BFORMAT2D_16, UserFmtBFormat2D, UserFmtShort }, |
| 609 | { AL_FORMAT_BFORMAT2D_FLOAT32, UserFmtBFormat2D, UserFmtFloat }, |
| 610 | { AL_FORMAT_BFORMAT2D_MULAW, UserFmtBFormat2D, UserFmtMulaw }, |