Skip to content

Commit

Permalink
Merge pull request #23457 from marcelofg55/crashfix_vp
Browse files Browse the repository at this point in the history
Fix possible crash with VideoPlayer _mix_audio function
  • Loading branch information
akien-mga authored Nov 2, 2018
2 parents 414097e + ea43218 commit f84893f
Showing 1 changed file with 18 additions and 39 deletions.
57 changes: 18 additions & 39 deletions scene/gui/video_player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,53 +90,32 @@ void VideoPlayer::_mix_audio() {

AudioFrame vol = AudioFrame(volume, volume);

// Copy to server's audio buffer
switch (AudioServer::get_singleton()->get_speaker_mode()) {
int cc = AudioServer::get_singleton()->get_channel_count();

case AudioServer::SPEAKER_MODE_STEREO: {
AudioFrame *target = AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 0);
if (cc == 1) {
AudioFrame *target = AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 0);
ERR_FAIL_COND(!target);

for (int j = 0; j < buffer_size; j++) {
for (int j = 0; j < buffer_size; j++) {

target[j] += buffer[j] * vol;
}

} break;
case AudioServer::SPEAKER_SURROUND_31: {

// FIXME: Implement
} break;
case AudioServer::SPEAKER_SURROUND_51: {

AudioFrame *targets[2] = {
AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 1),
AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 2),
};

for (int j = 0; j < buffer_size; j++) {
target[j] += buffer[j] * vol;
}

AudioFrame frame = buffer[j] * vol;
targets[0][j] = frame;
targets[1][j] = frame;
}
} break;
case AudioServer::SPEAKER_SURROUND_71: {
} else {
AudioFrame *targets[4];

AudioFrame *targets[3] = {
AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 1),
AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 2),
AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, 3)
};
for (int k = 0; k < cc; k++) {
targets[k] = AudioServer::get_singleton()->thread_get_channel_mix_buffer(bus_index, k);
ERR_FAIL_COND(!targets[k]);
}

for (int j = 0; j < buffer_size; j++) {
for (int j = 0; j < buffer_size; j++) {

AudioFrame frame = buffer[j] * vol;
targets[0][j] += frame;
targets[1][j] += frame;
targets[2][j] += frame;
AudioFrame frame = buffer[j] * vol;
for (int k = 0; k < cc; k++) {
targets[k][j] += frame;
}

} break;
}
}
}

Expand Down

0 comments on commit f84893f

Please sign in to comment.