mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-07-15 19:40:06 +00:00
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
This commit is contained in:
parent
4f0aae4dba
commit
f34ed15ac2
@ -195,11 +195,11 @@ static const switch_codec_implementation_t raw_8k_60ms_implementation = {
|
|||||||
/*.ianacode */ 10,
|
/*.ianacode */ 10,
|
||||||
/*.iananame */ "L16",
|
/*.iananame */ "L16",
|
||||||
/*.samples_per_second */ 8000,
|
/*.samples_per_second */ 8000,
|
||||||
/*.bits_per_second */ 256000,
|
/*.bits_per_second */ 128000,
|
||||||
/*.microseconds_per_frame */ 60000,
|
/*.microseconds_per_frame */ 22500,
|
||||||
/*.samples_per_frame */ 480,
|
/*.samples_per_frame */ 180,
|
||||||
/*.bytes_per_frame */ 960,
|
/*.bytes_per_frame */ 360,
|
||||||
/*.encoded_bytes_per_frame */ 960,
|
/*.encoded_bytes_per_frame */ 360,
|
||||||
/*.number_of_channels */ 1,
|
/*.number_of_channels */ 1,
|
||||||
/*.pref_frames_per_packet */ 1,
|
/*.pref_frames_per_packet */ 1,
|
||||||
/*.max_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
|
/*.next */ &raw_8k_60ms_implementation
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static const switch_codec_interface_t raw_codec_interface = {
|
static const switch_codec_interface_t raw_codec_interface = {
|
||||||
/*.interface_name */ "raw signed linear (16 bit)",
|
/*.interface_name */ "raw signed linear (16 bit)",
|
||||||
/*.implementations */ &raw_8k_120ms_implementation
|
/*.implementations */ &raw_8k_120ms_implementation
|
||||||
|
@ -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) {
|
if (tech_pvt->read_frame.datalen > 0) {
|
||||||
tech_pvt->last_read = switch_time_now();
|
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;
|
samples = frames * tech_pvt->read_codec.implementation->samples_per_frame;
|
||||||
ms = frames * tech_pvt->read_codec.implementation->microseconds_per_frame;
|
ms = frames * tech_pvt->read_codec.implementation->microseconds_per_frame;
|
||||||
tech_pvt->timestamp_recv += (int32_t) samples;
|
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);
|
switch_set_flag_locked(tech_pvt, TFLAG_WRITING);
|
||||||
|
|
||||||
|
|
||||||
bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame;
|
if (tech_pvt->read_codec.implementation->encoded_bytes_per_frame) {
|
||||||
frames = ((int) frame->datalen / bytes);
|
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;
|
samples = frames * tech_pvt->read_codec.implementation->samples_per_frame;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user