aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libjin/audio/sdl/audio.cpp4
-rw-r--r--src/libjin/audio/sdl/audio.h2
-rw-r--r--src/libjin/audio/sdl/source.cpp20
3 files changed, 16 insertions, 10 deletions
diff --git a/src/libjin/audio/sdl/audio.cpp b/src/libjin/audio/sdl/audio.cpp
index d753587..5277a3d 100644
--- a/src/libjin/audio/sdl/audio.cpp
+++ b/src/libjin/audio/sdl/audio.cpp
@@ -6,11 +6,13 @@ namespace jin
namespace audio
{
- static void defaultCallback(void *userdata, Uint8 *stream, int size)
+ void SDLAudio::defaultCallback(void *userdata, Uint8 *stream, int size)
{
SDLAudio* audio = (SDLAudio*)userdata;
+ SDL_LockAudioDevice(audio->audioDevice);
audio->processCommands();
audio->processSources(stream, size);
+ SDL_UnlockAudioDevice(audio->audioDevice);
}
onlyonce bool SDLAudio::_init(const SettingBase* s)
diff --git a/src/libjin/audio/sdl/audio.h b/src/libjin/audio/sdl/audio.h
index 53d0d76..28b73f0 100644
--- a/src/libjin/audio/sdl/audio.h
+++ b/src/libjin/audio/sdl/audio.h
@@ -46,6 +46,8 @@ namespace audio
void processCommands();
void processSources(Uint8* buffer, int len);
+ static void defaultCallback(void *userdata, Uint8 *stream, int size);
+
private:
SDLAudio() {}
diff --git a/src/libjin/audio/sdl/source.cpp b/src/libjin/audio/sdl/source.cpp
index 7d71ce7..fc0a2fe 100644
--- a/src/libjin/audio/sdl/source.cpp
+++ b/src/libjin/audio/sdl/source.cpp
@@ -259,27 +259,29 @@ Manager::get()->pushCommand(cmd); \
int16_t* src16 = (int16_t*)((char*)source->raw.data + source->pos);
int remainsample = (source->raw.length - source->pos) >> 1;
int bound = min(samples, remainsample);
- for (int i = 0; i < bound; ++i)
+ for (int i = 0; i < samples; ++i)
{
buf16[i] += src16[i]; // mix sources
}
- source->pos += (bound << 1);
- if (source->pos == 0)
+ source->pos += (samples << 1);
+ if (remainsample < samples)
{
if (source->loop)
{
- int j = 0;
- for (int i = bound; i < samples; ++i, ++j)
+ /* int j = 0;
+ for (int i = bound; i < samples; ++i)
{
int val = data16[j];
buf16[i] += val;
- }
- source->pos = (j << 1);
- continue;
+ ++j;
+ }*/
+ //sources.erase(it);
+ //source->pos = (j << 1);
+ source->pos = 0;
+ break;
}
else
{
- sources.erase(it);
}
}