mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-10-29 06:34:19 +00:00
dramatic jitterbuffer changes
This commit is contained in:
1 parent
bbf1cd1f43
commit
d547096164
10 files changed
+285
-27
No files matched your search
+39
-4
@@ -235,7 +235,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
|
||||
|
||||
if (switch_test_flag(*frame, SFF_CNG)) {
|
||||
status = SWITCH_STATUS_SUCCESS;
|
||||
if (!session->bugs) {
|
||||
if (!session->bugs && !session->plc) {
|
||||
goto done;
|
||||
}
|
||||
is_cng = 1;
|
||||
@@ -303,7 +303,13 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
|
||||
session->raw_read_frame.datalen = session->raw_read_frame.buflen;
|
||||
|
||||
if (is_cng) {
|
||||
memset(session->raw_read_frame.data, 255, read_frame->codec->implementation->decoded_bytes_per_packet);
|
||||
if (session->plc) {
|
||||
plc_fillin(session->plc, session->raw_read_frame.data, read_frame->codec->implementation->decoded_bytes_per_packet / 2);
|
||||
is_cng = 0;
|
||||
flag &= !SFF_CNG;
|
||||
} else {
|
||||
memset(session->raw_read_frame.data, 255, read_frame->codec->implementation->decoded_bytes_per_packet);
|
||||
}
|
||||
session->raw_read_frame.datalen = read_frame->codec->implementation->decoded_bytes_per_packet;
|
||||
session->raw_read_frame.samples = session->raw_read_frame.datalen / sizeof(int16_t);
|
||||
read_frame = &session->raw_read_frame;
|
||||
@@ -326,6 +332,23 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
|
||||
session->read_impl.actual_samples_per_second,
|
||||
session->raw_read_frame.data, &session->raw_read_frame.datalen, &session->raw_read_frame.rate,
|
||||
&read_frame->flags);
|
||||
|
||||
if (status == SWITCH_STATUS_SUCCESS) {
|
||||
if (switch_channel_test_flag(session->channel, CF_JITTERBUFFER) && !session->plc) {
|
||||
session->plc = plc_init(NULL);
|
||||
}
|
||||
|
||||
if (session->plc) {
|
||||
if (switch_test_flag(read_frame, SFF_PLC)) {
|
||||
plc_fillin(session->plc, session->raw_read_frame.data, session->raw_read_frame.datalen / 2);
|
||||
switch_clear_flag(read_frame, SFF_PLC);
|
||||
} else {
|
||||
plc_rx(session->plc, session->raw_read_frame.data, session->raw_read_frame.datalen / 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (do_resample && ((status == SWITCH_STATUS_SUCCESS) || is_cng)) {
|
||||
@@ -361,6 +384,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
|
||||
session->raw_read_frame.seq = read_frame->seq;
|
||||
session->raw_read_frame.m = read_frame->m;
|
||||
session->raw_read_frame.payload = read_frame->payload;
|
||||
session->raw_read_frame.flags = 0;
|
||||
if (switch_test_flag(read_frame, SFF_PLC)) {
|
||||
session->raw_read_frame.flags |= SFF_PLC;
|
||||
}
|
||||
read_frame = &session->raw_read_frame;
|
||||
break;
|
||||
case SWITCH_STATUS_NOOP:
|
||||
@@ -383,6 +410,11 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
|
||||
session->raw_read_frame.seq = read_frame->seq;
|
||||
session->raw_read_frame.m = read_frame->m;
|
||||
session->raw_read_frame.payload = read_frame->payload;
|
||||
session->raw_read_frame.flags = 0;
|
||||
if (switch_test_flag(read_frame, SFF_PLC)) {
|
||||
session->raw_read_frame.flags |= SFF_PLC;
|
||||
}
|
||||
|
||||
read_frame = &session->raw_read_frame;
|
||||
status = SWITCH_STATUS_SUCCESS;
|
||||
break;
|
||||
@@ -462,7 +494,6 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
|
||||
read_frame->datalen = session->read_resampler->to_len * 2;
|
||||
read_frame->rate = session->read_resampler->to_rate;
|
||||
switch_mutex_unlock(session->resample_mutex);
|
||||
|
||||
}
|
||||
|
||||
if (read_frame->datalen == session->read_impl.decoded_bytes_per_packet) {
|
||||
@@ -481,7 +512,6 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (perfect || switch_buffer_inuse(session->raw_read_buffer) >= session->read_impl.decoded_bytes_per_packet) {
|
||||
if (perfect) {
|
||||
enc_frame = read_frame;
|
||||
@@ -810,6 +840,11 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess
|
||||
session->raw_write_frame.ssrc = frame->ssrc;
|
||||
session->raw_write_frame.seq = frame->seq;
|
||||
session->raw_write_frame.payload = frame->payload;
|
||||
session->raw_write_frame.flags = 0;
|
||||
if (switch_test_flag(frame, SFF_PLC)) {
|
||||
session->raw_write_frame.flags |= SFF_PLC;
|
||||
}
|
||||
|
||||
write_frame = &session->raw_write_frame;
|
||||
break;
|
||||
case SWITCH_STATUS_BREAK:
|
||||
|
||||
Reference in new issue
Block a user