FS-4115 --resolve this should fix it in all circumstances

This commit is contained in:
Anthony Minessale 2012-04-23 13:25:21 -05:00
parent d642c2c1a6
commit d5766ceaa0
2 changed files with 30 additions and 12 deletions

View File

@ -129,7 +129,6 @@ SWITCH_DECLARE(void) switch_core_media_bug_flush(switch_media_bug_t *bug)
bug->record_frame_size = 0;
bug->record_pre_buffer_count = 0;
}
SWITCH_DECLARE(void) switch_core_media_bug_inuse(switch_media_bug_t *bug, switch_size_t *readp, switch_size_t *writep)
@ -207,7 +206,31 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_bug_read(switch_media_bug_t *b
bug->record_pre_buffer_count++;
return SWITCH_STATUS_FALSE;
}
if (!bug->record_frame_size) {
if (do_read && do_write) {
switch_size_t frame_size;
switch_codec_implementation_t read_impl = { 0 };
switch_codec_implementation_t other_read_impl = { 0 };
switch_core_session_t *other_session;
switch_core_session_get_read_impl(bug->session, &read_impl);
frame_size = read_impl.decoded_bytes_per_packet;
if (switch_core_session_get_partner(bug->session, &other_session) == SWITCH_STATUS_SUCCESS) {
switch_core_session_get_read_impl(other_session, &other_read_impl);
switch_core_session_rwunlock(other_session);
if (read_impl.decoded_bytes_per_packet < other_read_impl.decoded_bytes_per_packet) {
frame_size = other_read_impl.decoded_bytes_per_packet;
}
}
bug->record_frame_size = frame_size;
}
}
if (bug->record_frame_size) {
if ((do_read && do_read < bug->record_frame_size) || (do_write && do_write < bug->record_frame_size)) {
return SWITCH_STATUS_FALSE;
@ -220,16 +243,6 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_bug_read(switch_media_bug_t *b
if (do_write && do_write > bug->record_frame_size) {
do_write = bug->record_frame_size;
}
} else {
if (do_read && do_write) {
if (do_read > do_write) {
do_read = do_write;
} else if (do_write > do_read) {
do_write = do_read;
}
bug->record_frame_size = do_read;
}
}
fill_read = !do_read;

View File

@ -724,11 +724,16 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_perform_receive_message(swit
}
}
message->_file = NULL;
message->_func = NULL;
message->_line = 0;
if (switch_channel_up_nosig(session->channel)) {
if (message->message_id == SWITCH_MESSAGE_INDICATE_BRIDGE || message->message_id == SWITCH_MESSAGE_INDICATE_UNBRIDGE) {
switch_core_media_bug_flush_all(session);
}
switch (message->message_id) {
case SWITCH_MESSAGE_REDIRECT_AUDIO:
case SWITCH_MESSAGE_INDICATE_ANSWER: