| 669 | |
| 670 | struct DecompResult { UserFmtChannels channels; UserFmtType type; }; |
| 671 | al::optional<DecompResult> DecomposeUserFormat(ALenum format) |
| 672 | { |
| 673 | struct FormatMap { |
| 674 | ALenum format; |
| 675 | UserFmtChannels channels; |
| 676 | UserFmtType type; |
| 677 | }; |
| 678 | static const std::array<FormatMap,46> UserFmtList{{ |
| 679 | { AL_FORMAT_MONO8, UserFmtMono, UserFmtUByte }, |
| 680 | { AL_FORMAT_MONO16, UserFmtMono, UserFmtShort }, |
| 681 | { AL_FORMAT_MONO_FLOAT32, UserFmtMono, UserFmtFloat }, |
| 682 | { AL_FORMAT_MONO_DOUBLE_EXT, UserFmtMono, UserFmtDouble }, |
| 683 | { AL_FORMAT_MONO_IMA4, UserFmtMono, UserFmtIMA4 }, |
| 684 | { AL_FORMAT_MONO_MSADPCM_SOFT, UserFmtMono, UserFmtMSADPCM }, |
| 685 | { AL_FORMAT_MONO_MULAW, UserFmtMono, UserFmtMulaw }, |
| 686 | { AL_FORMAT_MONO_ALAW_EXT, UserFmtMono, UserFmtAlaw }, |
| 687 | |
| 688 | { AL_FORMAT_STEREO8, UserFmtStereo, UserFmtUByte }, |
| 689 | { AL_FORMAT_STEREO16, UserFmtStereo, UserFmtShort }, |
| 690 | { AL_FORMAT_STEREO_FLOAT32, UserFmtStereo, UserFmtFloat }, |
| 691 | { AL_FORMAT_STEREO_DOUBLE_EXT, UserFmtStereo, UserFmtDouble }, |
| 692 | { AL_FORMAT_STEREO_IMA4, UserFmtStereo, UserFmtIMA4 }, |
| 693 | { AL_FORMAT_STEREO_MSADPCM_SOFT, UserFmtStereo, UserFmtMSADPCM }, |
| 694 | { AL_FORMAT_STEREO_MULAW, UserFmtStereo, UserFmtMulaw }, |
| 695 | { AL_FORMAT_STEREO_ALAW_EXT, UserFmtStereo, UserFmtAlaw }, |
| 696 | |
| 697 | { AL_FORMAT_REAR8, UserFmtRear, UserFmtUByte }, |
| 698 | { AL_FORMAT_REAR16, UserFmtRear, UserFmtShort }, |
| 699 | { AL_FORMAT_REAR32, UserFmtRear, UserFmtFloat }, |
| 700 | { AL_FORMAT_REAR_MULAW, UserFmtRear, UserFmtMulaw }, |
| 701 | |
| 702 | { AL_FORMAT_QUAD8_LOKI, UserFmtQuad, UserFmtUByte }, |
| 703 | { AL_FORMAT_QUAD16_LOKI, UserFmtQuad, UserFmtShort }, |
| 704 | |
| 705 | { AL_FORMAT_QUAD8, UserFmtQuad, UserFmtUByte }, |
| 706 | { AL_FORMAT_QUAD16, UserFmtQuad, UserFmtShort }, |
| 707 | { AL_FORMAT_QUAD32, UserFmtQuad, UserFmtFloat }, |
| 708 | { AL_FORMAT_QUAD_MULAW, UserFmtQuad, UserFmtMulaw }, |
| 709 | |
| 710 | { AL_FORMAT_51CHN8, UserFmtX51, UserFmtUByte }, |
| 711 | { AL_FORMAT_51CHN16, UserFmtX51, UserFmtShort }, |
| 712 | { AL_FORMAT_51CHN32, UserFmtX51, UserFmtFloat }, |
| 713 | { AL_FORMAT_51CHN_MULAW, UserFmtX51, UserFmtMulaw }, |
| 714 | |
| 715 | { AL_FORMAT_61CHN8, UserFmtX61, UserFmtUByte }, |
| 716 | { AL_FORMAT_61CHN16, UserFmtX61, UserFmtShort }, |
| 717 | { AL_FORMAT_61CHN32, UserFmtX61, UserFmtFloat }, |
| 718 | { AL_FORMAT_61CHN_MULAW, UserFmtX61, UserFmtMulaw }, |
| 719 | |
| 720 | { AL_FORMAT_71CHN8, UserFmtX71, UserFmtUByte }, |
| 721 | { AL_FORMAT_71CHN16, UserFmtX71, UserFmtShort }, |
| 722 | { AL_FORMAT_71CHN32, UserFmtX71, UserFmtFloat }, |
| 723 | { AL_FORMAT_71CHN_MULAW, UserFmtX71, UserFmtMulaw }, |
| 724 | |
| 725 | { AL_FORMAT_BFORMAT2D_8, UserFmtBFormat2D, UserFmtUByte }, |
| 726 | { AL_FORMAT_BFORMAT2D_16, UserFmtBFormat2D, UserFmtShort }, |
| 727 | { AL_FORMAT_BFORMAT2D_FLOAT32, UserFmtBFormat2D, UserFmtFloat }, |
| 728 | { AL_FORMAT_BFORMAT2D_MULAW, UserFmtBFormat2D, UserFmtMulaw }, |