Make the decompose functions return false when given an unhandled format

This commit is contained in:
Chris Robinson 2010-11-29 20:34:33 -08:00
parent 51ed22afb9
commit 55262bc6e9
2 changed files with 61 additions and 67 deletions

View File

@ -30,7 +30,7 @@ enum SrcFmtChannels {
SrcFmtX71, /* AL_7POINT1 (WFX order) */ SrcFmtX71, /* AL_7POINT1 (WFX order) */
}; };
void DecomposeInputFormat(ALenum format, enum SrcFmtChannels *chans, ALboolean DecomposeInputFormat(ALenum format, enum SrcFmtChannels *chans,
enum SrcFmtType *type); enum SrcFmtType *type);
ALuint BytesFromSrcFmt(enum SrcFmtType type); ALuint BytesFromSrcFmt(enum SrcFmtType type);
ALuint ChannelsFromSrcFmt(enum SrcFmtChannels chans); ALuint ChannelsFromSrcFmt(enum SrcFmtChannels chans);
@ -57,7 +57,7 @@ enum FmtChannels {
FmtX71, FmtX71,
}; };
void DecomposeFormat(ALenum format, enum FmtChannels *chans, enum FmtType *type); ALboolean DecomposeFormat(ALenum format, enum FmtChannels *chans, enum FmtType *type);
ALuint BytesFromFmt(enum FmtType type); ALuint BytesFromFmt(enum FmtType type);
ALuint ChannelsFromFmt(enum FmtChannels chans); ALuint ChannelsFromFmt(enum FmtChannels chans);
static __inline ALuint FrameSizeFromFmt(enum FmtChannels chans, enum FmtType type) static __inline ALuint FrameSizeFromFmt(enum FmtChannels chans, enum FmtType type)

View File

@ -1423,7 +1423,7 @@ ALuint ChannelsFromSrcFmt(enum SrcFmtChannels chans)
} }
return 0; return 0;
} }
void DecomposeInputFormat(ALenum format, enum SrcFmtChannels *chans, ALboolean DecomposeInputFormat(ALenum format, enum SrcFmtChannels *chans,
enum SrcFmtType *type) enum SrcFmtType *type)
{ {
switch(format) switch(format)
@ -1431,138 +1431,135 @@ void DecomposeInputFormat(ALenum format, enum SrcFmtChannels *chans,
case AL_FORMAT_MONO8: case AL_FORMAT_MONO8:
*chans = SrcFmtMono; *chans = SrcFmtMono;
*type = SrcFmtUByte; *type = SrcFmtUByte;
break; return AL_TRUE;
case AL_FORMAT_MONO16: case AL_FORMAT_MONO16:
*chans = SrcFmtMono; *chans = SrcFmtMono;
*type = SrcFmtShort; *type = SrcFmtShort;
break; return AL_TRUE;
case AL_FORMAT_MONO_FLOAT32: case AL_FORMAT_MONO_FLOAT32:
*chans = SrcFmtMono; *chans = SrcFmtMono;
*type = SrcFmtFloat; *type = SrcFmtFloat;
break; return AL_TRUE;
case AL_FORMAT_MONO_DOUBLE_EXT: case AL_FORMAT_MONO_DOUBLE_EXT:
*chans = SrcFmtMono; *chans = SrcFmtMono;
*type = SrcFmtDouble; *type = SrcFmtDouble;
break; return AL_TRUE;
case AL_FORMAT_MONO_IMA4: case AL_FORMAT_MONO_IMA4:
*chans = SrcFmtMono; *chans = SrcFmtMono;
*type = SrcFmtIMA4; *type = SrcFmtIMA4;
break; return AL_TRUE;
case AL_FORMAT_STEREO8: case AL_FORMAT_STEREO8:
*chans = SrcFmtStereo; *chans = SrcFmtStereo;
*type = SrcFmtUByte; *type = SrcFmtUByte;
break; return AL_TRUE;
case AL_FORMAT_STEREO16: case AL_FORMAT_STEREO16:
*chans = SrcFmtStereo; *chans = SrcFmtStereo;
*type = SrcFmtShort; *type = SrcFmtShort;
break; return AL_TRUE;
case AL_FORMAT_STEREO_FLOAT32: case AL_FORMAT_STEREO_FLOAT32:
*chans = SrcFmtStereo; *chans = SrcFmtStereo;
*type = SrcFmtFloat; *type = SrcFmtFloat;
break; return AL_TRUE;
case AL_FORMAT_STEREO_DOUBLE_EXT: case AL_FORMAT_STEREO_DOUBLE_EXT:
*chans = SrcFmtStereo; *chans = SrcFmtStereo;
*type = SrcFmtDouble; *type = SrcFmtDouble;
break; return AL_TRUE;
case AL_FORMAT_STEREO_IMA4: case AL_FORMAT_STEREO_IMA4:
*chans = SrcFmtStereo; *chans = SrcFmtStereo;
*type = SrcFmtIMA4; *type = SrcFmtIMA4;
break; return AL_TRUE;
case AL_FORMAT_QUAD8_LOKI: case AL_FORMAT_QUAD8_LOKI:
case AL_FORMAT_QUAD8: case AL_FORMAT_QUAD8:
*chans = SrcFmtQuad; *chans = SrcFmtQuad;
*type = SrcFmtUByte; *type = SrcFmtUByte;
break; return AL_TRUE;
case AL_FORMAT_QUAD16_LOKI: case AL_FORMAT_QUAD16_LOKI:
case AL_FORMAT_QUAD16: case AL_FORMAT_QUAD16:
*chans = SrcFmtQuad; *chans = SrcFmtQuad;
*type = SrcFmtShort; *type = SrcFmtShort;
break; return AL_TRUE;
case AL_FORMAT_QUAD32: case AL_FORMAT_QUAD32:
*chans = SrcFmtQuad; *chans = SrcFmtQuad;
*type = SrcFmtFloat; *type = SrcFmtFloat;
break; return AL_TRUE;
case AL_FORMAT_REAR8: case AL_FORMAT_REAR8:
*chans = SrcFmtRear; *chans = SrcFmtRear;
*type = SrcFmtUByte; *type = SrcFmtUByte;
break; return AL_TRUE;
case AL_FORMAT_REAR16: case AL_FORMAT_REAR16:
*chans = SrcFmtRear; *chans = SrcFmtRear;
*type = SrcFmtShort; *type = SrcFmtShort;
break; return AL_TRUE;
case AL_FORMAT_REAR32: case AL_FORMAT_REAR32:
*chans = SrcFmtRear; *chans = SrcFmtRear;
*type = SrcFmtFloat; *type = SrcFmtFloat;
break; return AL_TRUE;
case AL_FORMAT_51CHN8: case AL_FORMAT_51CHN8:
*chans = SrcFmtX51; *chans = SrcFmtX51;
*type = SrcFmtUByte; *type = SrcFmtUByte;
break; return AL_TRUE;
case AL_FORMAT_51CHN16: case AL_FORMAT_51CHN16:
*chans = SrcFmtX51; *chans = SrcFmtX51;
*type = SrcFmtShort; *type = SrcFmtShort;
break; return AL_TRUE;
case AL_FORMAT_51CHN32: case AL_FORMAT_51CHN32:
*chans = SrcFmtX51; *chans = SrcFmtX51;
*type = SrcFmtFloat; *type = SrcFmtFloat;
break; return AL_TRUE;
case AL_FORMAT_61CHN8: case AL_FORMAT_61CHN8:
*chans = SrcFmtX61; *chans = SrcFmtX61;
*type = SrcFmtUByte; *type = SrcFmtUByte;
break; return AL_TRUE;
case AL_FORMAT_61CHN16: case AL_FORMAT_61CHN16:
*chans = SrcFmtX61; *chans = SrcFmtX61;
*type = SrcFmtShort; *type = SrcFmtShort;
break; return AL_TRUE;
case AL_FORMAT_61CHN32: case AL_FORMAT_61CHN32:
*chans = SrcFmtX61; *chans = SrcFmtX61;
*type = SrcFmtFloat; *type = SrcFmtFloat;
break; return AL_TRUE;
case AL_FORMAT_71CHN8: case AL_FORMAT_71CHN8:
*chans = SrcFmtX71; *chans = SrcFmtX71;
*type = SrcFmtUByte; *type = SrcFmtUByte;
break; return AL_TRUE;
case AL_FORMAT_71CHN16: case AL_FORMAT_71CHN16:
*chans = SrcFmtX71; *chans = SrcFmtX71;
*type = SrcFmtShort; *type = SrcFmtShort;
break; return AL_TRUE;
case AL_FORMAT_71CHN32: case AL_FORMAT_71CHN32:
*chans = SrcFmtX71; *chans = SrcFmtX71;
*type = SrcFmtFloat; *type = SrcFmtFloat;
break; return AL_TRUE;
case AL_FORMAT_MONO_MULAW: case AL_FORMAT_MONO_MULAW:
*chans = SrcFmtMono; *chans = SrcFmtMono;
*type = SrcFmtMulaw; *type = SrcFmtMulaw;
break; return AL_TRUE;
case AL_FORMAT_STEREO_MULAW: case AL_FORMAT_STEREO_MULAW:
*chans = SrcFmtStereo; *chans = SrcFmtStereo;
*type = SrcFmtMulaw; *type = SrcFmtMulaw;
break; return AL_TRUE;
case AL_FORMAT_QUAD_MULAW: case AL_FORMAT_QUAD_MULAW:
*chans = SrcFmtQuad; *chans = SrcFmtQuad;
*type = SrcFmtMulaw; *type = SrcFmtMulaw;
break; return AL_TRUE;
case AL_FORMAT_REAR_MULAW: case AL_FORMAT_REAR_MULAW:
*chans = SrcFmtRear; *chans = SrcFmtRear;
*type = SrcFmtMulaw; *type = SrcFmtMulaw;
break; return AL_TRUE;
case AL_FORMAT_51CHN_MULAW: case AL_FORMAT_51CHN_MULAW:
*chans = SrcFmtX51; *chans = SrcFmtX51;
*type = SrcFmtMulaw; *type = SrcFmtMulaw;
break; return AL_TRUE;
case AL_FORMAT_61CHN_MULAW: case AL_FORMAT_61CHN_MULAW:
*chans = SrcFmtX61; *chans = SrcFmtX61;
*type = SrcFmtMulaw; *type = SrcFmtMulaw;
break; return AL_TRUE;
case AL_FORMAT_71CHN_MULAW: case AL_FORMAT_71CHN_MULAW:
*chans = SrcFmtX71; *chans = SrcFmtX71;
*type = SrcFmtMulaw; *type = SrcFmtMulaw;
break; return AL_TRUE;
default:
AL_PRINT("Unhandled format specified: 0x%X\n", format);
abort();
} }
return AL_FALSE;
} }
ALuint BytesFromFmt(enum FmtType type) ALuint BytesFromFmt(enum FmtType type)
@ -1589,101 +1586,98 @@ ALuint ChannelsFromFmt(enum FmtChannels chans)
} }
return 0; return 0;
} }
void DecomposeFormat(ALenum format, enum FmtChannels *chans, enum FmtType *type) ALboolean DecomposeFormat(ALenum format, enum FmtChannels *chans, enum FmtType *type)
{ {
switch(format) switch(format)
{ {
case AL_FORMAT_MONO8: case AL_FORMAT_MONO8:
*chans = FmtMono; *chans = FmtMono;
*type = FmtUByte; *type = FmtUByte;
break; return AL_TRUE;
case AL_FORMAT_MONO16: case AL_FORMAT_MONO16:
*chans = FmtMono; *chans = FmtMono;
*type = FmtShort; *type = FmtShort;
break; return AL_TRUE;
case AL_FORMAT_MONO_FLOAT32: case AL_FORMAT_MONO_FLOAT32:
*chans = FmtMono; *chans = FmtMono;
*type = FmtFloat; *type = FmtFloat;
break; return AL_TRUE;
case AL_FORMAT_STEREO8: case AL_FORMAT_STEREO8:
*chans = FmtStereo; *chans = FmtStereo;
*type = FmtUByte; *type = FmtUByte;
break; return AL_TRUE;
case AL_FORMAT_STEREO16: case AL_FORMAT_STEREO16:
*chans = FmtStereo; *chans = FmtStereo;
*type = FmtShort; *type = FmtShort;
break; return AL_TRUE;
case AL_FORMAT_STEREO_FLOAT32: case AL_FORMAT_STEREO_FLOAT32:
*chans = FmtStereo; *chans = FmtStereo;
*type = FmtFloat; *type = FmtFloat;
break; return AL_TRUE;
case AL_FORMAT_QUAD8_LOKI: case AL_FORMAT_QUAD8_LOKI:
case AL_FORMAT_QUAD8: case AL_FORMAT_QUAD8:
*chans = FmtQuad; *chans = FmtQuad;
*type = FmtUByte; *type = FmtUByte;
break; return AL_TRUE;
case AL_FORMAT_QUAD16_LOKI: case AL_FORMAT_QUAD16_LOKI:
case AL_FORMAT_QUAD16: case AL_FORMAT_QUAD16:
*chans = FmtQuad; *chans = FmtQuad;
*type = FmtShort; *type = FmtShort;
break; return AL_TRUE;
case AL_FORMAT_QUAD32: case AL_FORMAT_QUAD32:
*chans = FmtQuad; *chans = FmtQuad;
*type = FmtFloat; *type = FmtFloat;
break; return AL_TRUE;
case AL_FORMAT_REAR8: case AL_FORMAT_REAR8:
*chans = FmtRear; *chans = FmtRear;
*type = FmtUByte; *type = FmtUByte;
break; return AL_TRUE;
case AL_FORMAT_REAR16: case AL_FORMAT_REAR16:
*chans = FmtRear; *chans = FmtRear;
*type = FmtShort; *type = FmtShort;
break; return AL_TRUE;
case AL_FORMAT_REAR32: case AL_FORMAT_REAR32:
*chans = FmtRear; *chans = FmtRear;
*type = FmtFloat; *type = FmtFloat;
break; return AL_TRUE;
case AL_FORMAT_51CHN8: case AL_FORMAT_51CHN8:
*chans = FmtX51; *chans = FmtX51;
*type = FmtUByte; *type = FmtUByte;
break; return AL_TRUE;
case AL_FORMAT_51CHN16: case AL_FORMAT_51CHN16:
*chans = FmtX51; *chans = FmtX51;
*type = FmtShort; *type = FmtShort;
break; return AL_TRUE;
case AL_FORMAT_51CHN32: case AL_FORMAT_51CHN32:
*chans = FmtX51; *chans = FmtX51;
*type = FmtFloat; *type = FmtFloat;
break; return AL_TRUE;
case AL_FORMAT_61CHN8: case AL_FORMAT_61CHN8:
*chans = FmtX61; *chans = FmtX61;
*type = FmtUByte; *type = FmtUByte;
break; return AL_TRUE;
case AL_FORMAT_61CHN16: case AL_FORMAT_61CHN16:
*chans = FmtX61; *chans = FmtX61;
*type = FmtShort; *type = FmtShort;
break; return AL_TRUE;
case AL_FORMAT_61CHN32: case AL_FORMAT_61CHN32:
*chans = FmtX61; *chans = FmtX61;
*type = FmtFloat; *type = FmtFloat;
break; return AL_TRUE;
case AL_FORMAT_71CHN8: case AL_FORMAT_71CHN8:
*chans = FmtX71; *chans = FmtX71;
*type = FmtUByte; *type = FmtUByte;
break; return AL_TRUE;
case AL_FORMAT_71CHN16: case AL_FORMAT_71CHN16:
*chans = FmtX71; *chans = FmtX71;
*type = FmtShort; *type = FmtShort;
break; return AL_TRUE;
case AL_FORMAT_71CHN32: case AL_FORMAT_71CHN32:
*chans = FmtX71; *chans = FmtX71;
*type = FmtFloat; *type = FmtFloat;
break; return AL_TRUE;
default:
AL_PRINT("Unhandled format specified: 0x%X\n", format);
abort();
} }
return AL_FALSE;
} }