diff --git a/src/mod/endpoints/mod_dingaling/mod_dingaling.c b/src/mod/endpoints/mod_dingaling/mod_dingaling.c index a7476bb3fa..344828e2df 100644 --- a/src/mod/endpoints/mod_dingaling/mod_dingaling.c +++ b/src/mod/endpoints/mod_dingaling/mod_dingaling.c @@ -1280,17 +1280,19 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch } if (tech_pvt->read_frame.datalen > 0) { - if (tech_pvt->read_codec.implementation->encoded_bytes_per_frame) { - bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame; - frames = (tech_pvt->read_frame.datalen / bytes); - } else { - frames = 1; - } - samples = frames * tech_pvt->read_codec.implementation->samples_per_frame; - ms = frames * tech_pvt->read_codec.implementation->microseconds_per_frame; - tech_pvt->timestamp_recv += (int32_t) samples; - tech_pvt->read_frame.samples = (int) samples; - tech_pvt->last_read = tech_pvt->read_frame.datalen; + if (!switch_test_flag((&tech_pvt->read_frame), SFF_CNG)) { + if (tech_pvt->read_codec.implementation->encoded_bytes_per_frame && bytes) { + bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame; + frames = (tech_pvt->read_frame.datalen / bytes); + } else { + frames = 1; + } + samples = frames * tech_pvt->read_codec.implementation->samples_per_frame; + ms = frames * tech_pvt->read_codec.implementation->microseconds_per_frame; + tech_pvt->timestamp_recv += (int32_t) samples; + tech_pvt->read_frame.samples = (int) samples; + tech_pvt->last_read = tech_pvt->read_frame.datalen; + } break; } diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 9cba1aea55..d1176a85d6 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -1614,9 +1614,12 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f size_t bytes = 0; int frames = 0; //tech_pvt->last_read = switch_time_now(); - bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame; - frames = (tech_pvt->read_frame.datalen / bytes); - tech_pvt->read_frame.samples = (int) (frames * tech_pvt->read_codec.implementation->samples_per_frame); + if (!switch_test_flag((&tech_pvt->read_frame), SFF_CNG)) { + if ((bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame)) { + frames = (tech_pvt->read_frame.datalen / bytes); + tech_pvt->read_frame.samples = (int) (frames * tech_pvt->read_codec.implementation->samples_per_frame); + } + } break; } } diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 706da89204..120c7d507a 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -782,7 +782,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ *flags |= SFF_CNG; /* Return a CNG frame */ *payload_type = SWITCH_RTP_CNG_PAYLOAD; - return SWITCH_RTP_CNG_PAYLOAD; + return SWITCH_RTP_CNG_PAYLOAD + rtp_header_len; } if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_IO)) { @@ -857,7 +857,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ *flags |= SFF_CNG; /* Return a CNG frame */ *payload_type = SWITCH_RTP_CNG_PAYLOAD; - return SWITCH_RTP_CNG_PAYLOAD; + return SWITCH_RTP_CNG_PAYLOAD + rtp_header_len; } }