From f34ed15ac2f60af8ed30fa61da5f69681415be1b Mon Sep 17 00:00:00 2001 From: Brian West Date: Wed, 6 Sep 2006 23:58:14 +0000 Subject: [PATCH] adding a check for frame sizes so VBR codecs work correctly.. Should this be moved to the core instead? git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@2538 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/codecs/mod_l16/mod_l16.c | 11 +++++------ src/mod/endpoints/mod_sofia/mod_sofia.c | 17 +++++++++++++---- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/mod/codecs/mod_l16/mod_l16.c b/src/mod/codecs/mod_l16/mod_l16.c index a52d557096..6bc4eea398 100644 --- a/src/mod/codecs/mod_l16/mod_l16.c +++ b/src/mod/codecs/mod_l16/mod_l16.c @@ -195,11 +195,11 @@ static const switch_codec_implementation_t raw_8k_60ms_implementation = { /*.ianacode */ 10, /*.iananame */ "L16", /*.samples_per_second */ 8000, - /*.bits_per_second */ 256000, - /*.microseconds_per_frame */ 60000, - /*.samples_per_frame */ 480, - /*.bytes_per_frame */ 960, - /*.encoded_bytes_per_frame */ 960, + /*.bits_per_second */ 128000, + /*.microseconds_per_frame */ 22500, + /*.samples_per_frame */ 180, + /*.bytes_per_frame */ 360, + /*.encoded_bytes_per_frame */ 360, /*.number_of_channels */ 1, /*.pref_frames_per_packet */ 1, /*.max_frames_per_packet */ 1, @@ -230,7 +230,6 @@ static const switch_codec_implementation_t raw_8k_120ms_implementation = { /*.next */ &raw_8k_60ms_implementation }; - static const switch_codec_interface_t raw_codec_interface = { /*.interface_name */ "raw signed linear (16 bit)", /*.implementations */ &raw_8k_120ms_implementation diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 2ec6182b7d..5cdc74cfa2 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -833,8 +833,13 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f if (tech_pvt->read_frame.datalen > 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); + + 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; @@ -884,8 +889,12 @@ static switch_status_t sofia_write_frame(switch_core_session_t *session, switch_ switch_set_flag_locked(tech_pvt, TFLAG_WRITING); - bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame; - frames = ((int) frame->datalen / bytes); + if (tech_pvt->read_codec.implementation->encoded_bytes_per_frame) { + bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame; + frames = ((int) frame->datalen / bytes); + } else + frames = 1; + samples = frames * tech_pvt->read_codec.implementation->samples_per_frame; #if 0