diff options
author | Peter Wu <peter@lekensteyn.nl> | 2016-11-24 00:27:14 +0100 |
---|---|---|
committer | Peter Wu <peter@lekensteyn.nl> | 2016-12-06 17:51:47 +0000 |
commit | f5e22a14877922aa7b907d2e434958c86efd6875 (patch) | |
tree | 33439d1a8cd3322faa9ce8b0f6b12a08427d47fb /ui/gtk | |
parent | d8cdb550445a1bc86626bd9d45da1ce958d1592b (diff) |
codecs: Add support for G.722 and G.726
Integrate the Spandsp library for G.722 and G.726 support. Adds support
for G.722 and all eight variants of G.726.
Note: this also fixes a crash in Qt (buffer overrun, reading too much
data) caused by confusion of the larger output buffer (resample_buff)
with the smaller input buffer (decode_buff). It was not triggered before
because the sample rate was always 8k, but with the addition of the new
codecs, a different sample rate became possible (16k).
Fix also a crash which occurs when the RTP_STREAM_DEBUG macro is enabled
and the VOIP Calls dialog is opened (the begin frame, start_fd, is not
yet known and therfore a NULL dereference could occur).
Passes testing (plays normally without bad RTP timing errors) with
SampleCaptures files: sip-rtp-g722.pcap and sip-rtp-g726.pcap. Tested
with cmake (Qt), autotools (Qt and GTK+) with ASAN enabled.
Bug: 5619
Change-Id: I5661908d193927bba50901079119eeff0c04991f
Reviewed-on: https://code.wireshark.org/review/18939
Petri-Dish: Peter Wu <peter@lekensteyn.nl>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Diffstat (limited to 'ui/gtk')
-rw-r--r-- | ui/gtk/rtp_player.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/ui/gtk/rtp_player.c b/ui/gtk/rtp_player.c index 2fd1a5ef32..269db47179 100644 --- a/ui/gtk/rtp_player.c +++ b/ui/gtk/rtp_player.c @@ -599,7 +599,13 @@ decode_rtp_stream(rtp_stream_info_t *rsi, gpointer ptr) seq = rp->info->info_seq_num; } - rtp_time = (double)(rp->info->info_timestamp-start_timestamp)/sample_rate - start_rtp_time; + unsigned rtp_clock_rate = sample_rate; + if (rp->info->info_payload_type == PT_G722) { + // G.722 sample rate is 16kHz, but RTP clock rate is 8kHz for historic reasons. + rtp_clock_rate = 8000; + } + + rtp_time = (double)(rp->info->info_timestamp-start_timestamp)/rtp_clock_rate - start_rtp_time; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb_use_rtp_timestamp))) { arrive_time = rtp_time; |