Fix ogg edge cases
This commit is contained in:
@ -36,23 +36,22 @@
|
||||
|
||||
int AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_frames) {
|
||||
ERR_FAIL_COND_V(!ready, 0);
|
||||
ERR_FAIL_COND_V(!active, 0);
|
||||
|
||||
if (!active) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int todo = p_frames;
|
||||
|
||||
int start_buffer = 0;
|
||||
|
||||
int frames_mixed_this_step = p_frames;
|
||||
|
||||
while (todo && active) {
|
||||
while (todo > 0 && active) {
|
||||
AudioFrame *buffer = p_buffer;
|
||||
if (start_buffer > 0) {
|
||||
buffer = buffer + start_buffer;
|
||||
}
|
||||
int mixed = _mix_frames_vorbis(buffer, todo);
|
||||
if (mixed < 0) {
|
||||
return 0;
|
||||
}
|
||||
ERR_FAIL_COND_V(mixed < 0, 0);
|
||||
todo -= mixed;
|
||||
frames_mixed += mixed;
|
||||
start_buffer += mixed;
|
||||
@ -67,16 +66,14 @@ int AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_fram
|
||||
// we still have buffer to fill, start from this element in the next iteration.
|
||||
start_buffer = p_frames - todo;
|
||||
} else {
|
||||
frames_mixed_this_step = p_frames - todo;
|
||||
for (int i = p_frames - todo; i < p_frames; i++) {
|
||||
p_buffer[i] = AudioFrame(0, 0);
|
||||
}
|
||||
active = false;
|
||||
todo = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return frames_mixed_this_step;
|
||||
return p_frames - todo;
|
||||
}
|
||||
|
||||
int AudioStreamPlaybackOGGVorbis::_mix_frames_vorbis(AudioFrame *p_buffer, int p_frames) {
|
||||
|
||||
Reference in New Issue
Block a user