issues addressed

cropped trailing spaces
put TYPE_MAX_ENUM in getDurationAtomic
moved around variables in seekAtomic

--HG--
branch : minor
This commit is contained in:
rcoaxil
2016-10-15 20:04:08 +03:00
parent c5e0846c52
commit 38a6176665
7 changed files with 60 additions and 60 deletions
+2 -2
View File
@@ -101,10 +101,10 @@ public:
virtual float getMaxDistance() const = 0;
virtual int getChannels() const = 0;
virtual int getFreeBufferCount() const = 0;
virtual bool queue(void *data, int length, int dataSampleRate, int dataBitDepth, int dataChannels) = 0;
virtual Type getType() const;
static bool getConstant(const char *in, Type &out);
+1 -1
View File
@@ -51,7 +51,7 @@ love::audio::Source *Audio::newSource(love::sound::SoundData *)
return new Source();
}
love::audio::Source *Audio::newSource(int sampleRate, int bitDepth, int channels)
love::audio::Source *Audio::newSource(int, int, int)
{
return new Source();
}
+1 -1
View File
@@ -222,7 +222,7 @@ int Source::getFreeBufferCount() const
return 0;
}
bool Source::queue(void *data, int length, int dataSampleRate, int dataBitDepth, int dataChannels)
bool Source::queue(void *, int, int, int, int)
{
return false;
}
+43 -43
View File
@@ -187,7 +187,7 @@ Source::Source(Pool *pool, love::sound::Decoder *decoder)
alGenBuffers(MAX_BUFFERS, streamBuffers);
for (unsigned int i = 0; i < MAX_BUFFERS; i++)
unusedBuffers[i] = streamBuffers[i];
float z[3] = {0, 0, 0};
setFloatv(position, z);
@@ -223,11 +223,11 @@ Source::Source(Pool *pool, int sampleRate, int bitDepth, int channels)
ALenum fmt = getFormat(channels, bitDepth);
if (fmt == 0)
throw InvalidFormatException(channels, bitDepth);
alGenBuffers(MAX_BUFFERS, streamBuffers);
for (unsigned int i = 0; i < MAX_BUFFERS; i++)
unusedBuffers[i] = streamBuffers[i];
float z[3] = {0, 0, 0};
setFloatv(position, z);
@@ -321,7 +321,7 @@ bool Source::isFinished() const
{
if (!valid)
return false;
if (type == TYPE_STREAM && (isLooping() || !decoder->isFinished()))
return false;
@@ -349,22 +349,22 @@ bool Source::update()
ALuint buffers[MAX_BUFFERS];
float curOffsetSamples, curOffsetSecs, newOffsetSamples, newOffsetSecs;
int freq = decoder->getSampleRate();
alGetSourcef(source, AL_SAMPLE_OFFSET, &curOffsetSamples);
curOffsetSecs = curOffsetSamples / freq;
alGetSourcei(source, AL_BUFFERS_PROCESSED, &processed);
alSourceUnqueueBuffers(source, processed, buffers);
alGetSourcef(source, AL_SAMPLE_OFFSET, &newOffsetSamples);
newOffsetSecs = newOffsetSamples / freq;
offsetSamples += (curOffsetSamples - newOffsetSamples);
offsetSeconds += (curOffsetSecs - newOffsetSecs);
for (unsigned int i = 0; i < (unsigned int)processed; i++)
unusedBufferPush(buffers[i]);
while (unusedBufferPeek() != AL_NONE)
{
if(streamAtomic(unusedBufferPeek(), decoder.get()) > 0)
@@ -372,7 +372,7 @@ bool Source::update()
else
break;
}
return true;
}
return false;
@@ -380,10 +380,10 @@ bool Source::update()
{
ALint processed;
ALuint buffers[MAX_BUFFERS];
alGetSourcei(source, AL_BUFFERS_PROCESSED, &processed);
alSourceUnqueueBuffers(source, processed, buffers);
for (unsigned int i = 0; i < (unsigned int)processed; i++)
{
ALint size;
@@ -445,7 +445,7 @@ float Source::getVolume() const
void Source::seekAtomic(float offset, void *unit)
{
float offsetSamples, offsetSeconds;
switch (*((Source::Unit *) unit))
{
case Source::UNIT_SAMPLES:
@@ -458,12 +458,12 @@ void Source::seekAtomic(float offset, void *unit)
offsetSamples = offset * sampleRate;
break;
}
switch (type)
{
case TYPE_STATIC:
alSourcef(source, AL_SAMPLE_OFFSET, offsetSamples);
this->offsetSamples = this->offsetSeconds = 0;
offsetSamples = offsetSeconds = 0;
break;
case TYPE_STREAM:
{
@@ -472,32 +472,30 @@ void Source::seekAtomic(float offset, void *unit)
// To drain all buffers
if (valid)
stopAtomic();
this->offsetSamples = offsetSamples;
this->offsetSeconds = offsetSeconds;
decoder->seek(offsetSeconds);
if (wasPlaying)
playAtomic(source);
break;
}
case TYPE_QUEUE:
if (valid)
{
alSourcef(source, AL_SAMPLE_OFFSET, offsetSamples);
this->offsetSamples = this->offsetSeconds = 0;
offsetSamples = offsetSeconds = 0;
}
else
{
ALint size;
ALuint buffer = unusedBufferPeek();
//emulate AL behavior, discarding buffer once playback head is past one
while (buffer != AL_NONE)
{
alGetBufferi(buffer, AL_SIZE, &size);
if (offsetSamples < size / (bitDepth / 8 * channels))
break;
@@ -509,13 +507,13 @@ void Source::seekAtomic(float offset, void *unit)
if (buffer == AL_NONE)
offsetSamples = 0;
offsetSeconds = offsetSamples / sampleRate;
this->offsetSamples = offsetSamples;
this->offsetSeconds = offsetSeconds;
}
break;
case TYPE_MAX_ENUM:
break;
}
this->offsetSamples = offsetSamples;
this->offsetSeconds = offsetSeconds;
}
void Source::seek(float offset, Source::Unit unit)
@@ -578,14 +576,16 @@ double Source::getDurationAtomic(void *vunit)
case TYPE_QUEUE:
{
ALsizei samples = (bufferedBytes / channels) / (bitDepth / 8);
if (unit == UNIT_SAMPLES)
return (double)samples;
else
return (double)samples / (double)sampleRate;
}
default: return 0.0;
case TYPE_MAX_ENUM:
return 0.0;
}
return 0.0;
}
double Source::getDuration(Unit unit)
@@ -709,7 +709,7 @@ void Source::setLooping(bool enable)
{
if (type == TYPE_QUEUE)
throw QueueLoopingException();
if (valid && type == TYPE_STATIC)
alSourcei(source, AL_LOOPING, enable ? AL_TRUE : AL_FALSE);
@@ -725,16 +725,16 @@ bool Source::queue(void *data, int length, int dataSampleRate, int dataBitDepth,
{
if (type != TYPE_QUEUE)
throw QueueTypeMismatchException();
if (dataSampleRate != sampleRate || dataBitDepth != bitDepth || dataChannels != channels )
throw QueueFormatMismatchException();
if (length % (bitDepth / 8 * channels) != 0)
throw QueueMalformedLengthException(bitDepth / 8 * channels);
if (length == 0)
return true;
return pool->queue(this, data, (ALsizei)length);
}
@@ -745,7 +745,7 @@ bool Source::queueAtomic(void *data, ALsizei length)
ALuint buffer = unusedBufferPeek();
if (buffer == AL_NONE)
return false;
alBufferData(buffer, getFormat(channels, bitDepth), data, length, sampleRate);
alSourceQueueBuffers(source, 1, &buffer);
unusedBufferPop();
@@ -755,7 +755,7 @@ bool Source::queueAtomic(void *data, ALsizei length)
ALuint buffer = unusedBufferPeekNext();
if (buffer == AL_NONE)
return false;
//stack acts as queue while stopped
alBufferData(buffer, getFormat(channels, bitDepth), data, length, sampleRate);
unusedBufferQueue(buffer);
@@ -787,7 +787,7 @@ void Source::prepareAtomic()
// the properties of another love Source. Let's reset it to the settings
// of the new one.
reset();
switch (type)
{
case TYPE_STATIC:
@@ -801,9 +801,9 @@ void Source::prepareAtomic()
{
if(streamAtomic(unusedBufferPeek(), decoder.get()) == 0)
break;
alSourceQueueBuffers(source, 1, unusedBufferPop());
if (decoder->isFinished())
break;
}
@@ -817,7 +817,7 @@ void Source::prepareAtomic()
//construct a stack of unused buffers (beyond the end of stack)
for (unsigned int i = top + 1; i < MAX_BUFFERS; i++)
unusedBufferPush(unusedBuffers[i]);
if (offsetSamples >= 0)
alSourcef(source, AL_SAMPLE_OFFSET, offsetSamples);
break;
@@ -838,18 +838,18 @@ void Source::teardownAtomic()
{
ALint queued;
ALuint buffer;
decoder->seek(0);
// drain buffers
//since we only unqueue 1 buffer, it's OK to use singular variable pointer instead of array
alGetSourcei(source, AL_BUFFERS_QUEUED, &queued);
for (unsigned int i = 0; i < (unsigned int)queued; i++)
alSourceUnqueueBuffers(source, 1, &buffer);
// generate unused buffers list
for (unsigned int i = 0; i < MAX_BUFFERS; i++)
unusedBuffers[i] = streamBuffers[i];
unusedBufferTop = MAX_BUFFERS - 1;
break;
}
@@ -857,15 +857,15 @@ void Source::teardownAtomic()
{
ALint queued;
ALuint buffer;
alGetSourcei(source, AL_BUFFERS_QUEUED, &queued);
for (unsigned int i = (unsigned int)queued; i > 0; i--)
alSourceUnqueueBuffers(source, 1, &buffer);
// generate unused buffers list
for (unsigned int i = 0; i < MAX_BUFFERS; i++)
unusedBuffers[i] = streamBuffers[i];
unusedBufferTop = -1;
break;
}
+1 -1
View File
@@ -177,7 +177,7 @@ private:
static const unsigned int MAX_BUFFERS = 8;
ALuint streamBuffers[MAX_BUFFERS];
ALuint unusedBuffers[MAX_BUFFERS];
StrongRef<StaticDataBuffer> staticBuffer;
float pitch;
+2 -2
View File
@@ -81,11 +81,11 @@ int w_newSource(lua_State *L)
int w_newQueueableSource(lua_State *L)
{
Source *t = nullptr;
luax_catchexcept(L, [&]() {
t = instance()->newSource((int)luaL_checknumber(L, 1), (int)luaL_checknumber(L, 2), (int)luaL_checknumber(L, 3));
});
if (t != nullptr)
{
luax_pushtype(L, AUDIO_SOURCE_ID, t);
+10 -10
View File
@@ -341,14 +341,14 @@ int w_Source_queue(lua_State *L)
{
Source *t = luax_checksource(L, 1);
bool success;
if (luax_istype(L, 2, SOUND_SOUND_DATA_ID))
{
love::sound::SoundData *s = luax_totype<love::sound::SoundData>(L, 2, SOUND_SOUND_DATA_ID);
int offset = 0;
int length = s->getSize();
if (lua_gettop(L) == 4)
{
offset = luaL_checknumber(L, 3);
@@ -356,10 +356,10 @@ int w_Source_queue(lua_State *L)
}
else if (lua_gettop(L) == 3)
length = luaL_checknumber(L, 3);
if (length > (int)s->getSize() - offset || offset < 0 || length < 0)
return luaL_error(L, "Data region out of bounds.");
luax_catchexcept(L, [&]() {
success = t->queue((void*)((uintptr_t)s->getData() + (uintptr_t)offset),
length, s->getSampleRate(), s->getBitDepth(), s->getChannels());
@@ -372,17 +372,17 @@ int w_Source_queue(lua_State *L)
int sampleRate = luaL_checknumber(L, 5);
int bitDepth = luaL_checknumber(L, 6);
int channels = luaL_checknumber(L, 7);
if (length < 0 || offset < 0)
return luaL_error(L, "Data region out of bounds.");
luax_catchexcept(L, [&]() {
success = t->queue((void*)((uintptr_t)lua_touserdata(L, 2) + (uintptr_t)offset), length, sampleRate, bitDepth, channels);
});
}
else
return luax_typerror(L, 1, "Sound Data or lightuserdata");
luax_pushboolean(L, success);
return 1;
}
@@ -439,10 +439,10 @@ static const luaL_Reg w_Source_functions[] =
{ "getRolloff", w_Source_getRolloff},
{ "getChannels", w_Source_getChannels },
{ "getFreeBufferCount", w_Source_getFreeBufferCount },
{ "queue", w_Source_queue },
{ "getType", w_Source_getType },
{ 0, 0 }