Use struct methods to get a buffer's format info

This commit is contained in:
Chris Robinson
2020-01-18 13:23:59 -08:00
parent 32c9dbd7ff
commit 8a9eef70af
3 changed files with 21 additions and 20 deletions
+7 -8
View File
@@ -911,8 +911,8 @@ START_API_FUNC
context->setError(AL_INVALID_OPERATION, "Unpacking data into mapped buffer %u", buffer);
else
{
ALuint num_chans{ChannelsFromFmt(albuf->mFmtChannels)};
ALuint frame_size{num_chans * BytesFromFmt(albuf->mFmtType)};
ALuint num_chans{albuf->channelsFromFmt()};
ALuint frame_size{num_chans * albuf->bytesFromFmt()};
ALuint byte_align{
(albuf->OriginalType == UserFmtIMA4) ? ((align-1)/2 + 4) * num_chans :
(albuf->OriginalType == UserFmtMSADPCM) ? ((align-2)/2 + 7) * num_chans :
@@ -1279,16 +1279,15 @@ START_API_FUNC
break;
case AL_BITS:
*value = static_cast<ALint>(BytesFromFmt(albuf->mFmtType) * 8);
*value = static_cast<ALint>(albuf->bytesFromFmt() * 8);
break;
case AL_CHANNELS:
*value = static_cast<ALint>(ChannelsFromFmt(albuf->mFmtChannels));
*value = static_cast<ALint>(albuf->channelsFromFmt());
break;
case AL_SIZE:
*value = static_cast<ALint>(albuf->SampleLen *
FrameSizeFromFmt(albuf->mFmtChannels, albuf->mFmtType));
*value = static_cast<ALint>(albuf->SampleLen * albuf->frameSizeFromFmt());
break;
case AL_UNPACK_BLOCK_ALIGNMENT_SOFT:
@@ -1377,7 +1376,7 @@ START_API_FUNC
END_API_FUNC
ALuint BytesFromFmt(FmtType type)
ALuint BytesFromFmt(FmtType type) noexcept
{
switch(type)
{
@@ -1390,7 +1389,7 @@ ALuint BytesFromFmt(FmtType type)
}
return 0;
}
ALuint ChannelsFromFmt(FmtChannels chans)
ALuint ChannelsFromFmt(FmtChannels chans) noexcept
{
switch(chans)
{
+6 -4
View File
@@ -59,10 +59,8 @@ enum FmtChannels : unsigned char {
#define MAX_INPUT_CHANNELS (8)
ALuint BytesFromFmt(FmtType type);
ALuint ChannelsFromFmt(FmtChannels chans);
inline ALuint FrameSizeFromFmt(FmtChannels chans, FmtType type)
{ return ChannelsFromFmt(chans) * BytesFromFmt(type); }
ALuint BytesFromFmt(FmtType type) noexcept;
ALuint ChannelsFromFmt(FmtChannels chans) noexcept;
struct ALbuffer {
@@ -97,6 +95,10 @@ struct ALbuffer {
/* Self ID */
ALuint id{0};
inline ALuint bytesFromFmt() const noexcept { return BytesFromFmt(mFmtType); }
inline ALuint channelsFromFmt() const noexcept { return ChannelsFromFmt(mFmtChannels); }
inline ALuint frameSizeFromFmt() const noexcept { return channelsFromFmt() * bytesFromFmt(); }
};
#endif
+8 -8
View File
@@ -348,7 +348,7 @@ ALdouble GetSourceOffset(ALsource *Source, ALenum name, ALCcontext *context)
{
ALuint FrameBlockSize{BufferFmt->OriginalAlign};
ALuint align{(BufferFmt->OriginalAlign-1)/2 + 4};
ALuint BlockSize{align * ChannelsFromFmt(BufferFmt->mFmtChannels)};
ALuint BlockSize{align * BufferFmt->channelsFromFmt()};
/* Round down to nearest ADPCM block */
offset = static_cast<ALdouble>(readPos / FrameBlockSize * BlockSize);
@@ -357,14 +357,14 @@ ALdouble GetSourceOffset(ALsource *Source, ALenum name, ALCcontext *context)
{
ALuint FrameBlockSize{BufferFmt->OriginalAlign};
ALuint align{(FrameBlockSize-2)/2 + 7};
ALuint BlockSize{align * ChannelsFromFmt(BufferFmt->mFmtChannels)};
ALuint BlockSize{align * BufferFmt->channelsFromFmt()};
/* Round down to nearest ADPCM block */
offset = static_cast<ALdouble>(readPos / FrameBlockSize * BlockSize);
}
else
{
const ALuint FrameSize{FrameSizeFromFmt(BufferFmt->mFmtChannels, BufferFmt->mFmtType)};
const ALuint FrameSize{BufferFmt->frameSizeFromFmt()};
offset = static_cast<ALdouble>(readPos * FrameSize);
}
break;
@@ -416,17 +416,17 @@ al::optional<VoicePos> GetSampleOffset(ALsource *Source)
if(BufferFmt->OriginalType == UserFmtIMA4)
{
const ALuint align{(BufferFmt->OriginalAlign-1)/2 + 4};
offset /= align * ChannelsFromFmt(BufferFmt->mFmtChannels);
offset /= align * BufferFmt->channelsFromFmt();
offset *= BufferFmt->OriginalAlign;
}
else if(BufferFmt->OriginalType == UserFmtMSADPCM)
{
const ALuint align{(BufferFmt->OriginalAlign-2)/2 + 7};
offset /= align * ChannelsFromFmt(BufferFmt->mFmtChannels);
offset /= align * BufferFmt->channelsFromFmt();
offset *= BufferFmt->OriginalAlign;
}
else
offset /= FrameSizeFromFmt(BufferFmt->mFmtChannels, BufferFmt->mFmtType);
offset /= BufferFmt->frameSizeFromFmt();
frac = 0;
break;
@@ -2789,8 +2789,8 @@ START_API_FUNC
ALbuffer *buffer{BufferList->mBuffer};
voice->mFrequency = buffer->Frequency;
voice->mFmtChannels = buffer->mFmtChannels;
voice->mNumChannels = ChannelsFromFmt(buffer->mFmtChannels);
voice->mSampleSize = BytesFromFmt(buffer->mFmtType);
voice->mNumChannels = buffer->channelsFromFmt();
voice->mSampleSize = buffer->bytesFromFmt();
voice->mAmbiLayout = static_cast<AmbiLayout>(buffer->AmbiLayout);
voice->mAmbiScaling = static_cast<AmbiNorm>(buffer->AmbiScaling);
voice->mAmbiOrder = 1;