Fixes null reference bug introduced by audio hook changes that affects various OS distributions. Thanks David.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@310547 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Jonathan Rose
2011-03-14 13:12:51 +00:00
parent 79fdf2945e
commit 16c5dda8ab

View File

@@ -311,25 +311,26 @@ static struct ast_frame *audiohook_read_frame_both(struct ast_audiohook *audioho
ast_debug(1, "Failed to get %d samples from write factory %p\n", (int)samples, &audiohook->write_factory);
/* Basically we figure out which buffer to use... and if mixing can be done here */
if (!read_buf && !write_buf)
return NULL;
if (read_buf) {
final_buf = buf1;
frame.data.ptr = final_buf;
if (read_buf && read_reference) {
frame.data.ptr = buf1;
*read_reference = ast_frdup(&frame);
}
if (write_buf) {
final_buf = buf2;
frame.data.ptr = final_buf;
if (write_buf && write_reference) {
frame.data.ptr = buf2;
*write_reference = ast_frdup(&frame);
}
if (read_buf && write_buf) {
for (i = 0, data1 = read_buf, data2 = write_buf; i < samples; i++, data1++, data2++)
for (i = 0, data1 = read_buf, data2 = write_buf; i < samples; i++, data1++, data2++) {
ast_slinear_saturated_add(data1, data2);
}
final_buf = buf1;
} else if (read_buf) {
final_buf = buf1;
} else if (write_buf) {
final_buf = buf2;
} else {
return NULL;
}
/* Make the final buffer part of the frame, so it gets duplicated fine */