From da99638660f2d2ff050d918bf5cf0d2677cfcb29 Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Tue, 10 Jan 2017 11:00:32 +0100 Subject: [PATCH] Audio decoder: copy network address to pbuf struct --- src/audio/audio.cpp | 1 + src/rtp/audio_decoders.cpp | 9 +++++++-- src/rtp/pbuf.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/audio/audio.cpp b/src/audio/audio.cpp index ee0e7e2b9..b225509bc 100644 --- a/src/audio/audio.cpp +++ b/src/audio/audio.cpp @@ -509,6 +509,7 @@ static struct rtp *initialize_audio_network(struct audio_network_parameters *par pdb_add(params->participants, rtp_my_ssrc(r)); rtp_set_option(r, RTP_OPT_WEAK_VALIDATION, TRUE); rtp_set_option(r, RTP_OPT_PROMISC, TRUE); + rtp_set_option(r, RTP_OPT_RECORD_SOURCE, TRUE); rtp_set_sdes(r, rtp_my_ssrc(r), RTCP_SDES_TOOL, PACKAGE_STRING, strlen(PACKAGE_VERSION)); rtp_set_recv_buf(r, 256*1024); diff --git a/src/rtp/audio_decoders.cpp b/src/rtp/audio_decoders.cpp index 743f0aad4..88fa8cdef 100644 --- a/src/rtp/audio_decoders.cpp +++ b/src/rtp/audio_decoders.cpp @@ -374,14 +374,15 @@ static void *adec_compute_and_print_stats(void *arg) { } -int decode_audio_frame(struct coded_data *cdata, void *data, struct pbuf_stats *) +int decode_audio_frame(struct coded_data *cdata, void *pbuf_data, struct pbuf_stats *) { - struct pbuf_audio_data *s = (struct pbuf_audio_data *) data; + struct pbuf_audio_data *s = (struct pbuf_audio_data *) pbuf_data; struct state_audio_decoder *decoder = s->decoder; int input_channels = 0; int output_channels = 0; int bps, sample_rate, channel; + bool first = true; if(!cdata) { return FALSE; @@ -522,6 +523,10 @@ int decode_audio_frame(struct coded_data *cdata, void *data, struct pbuf_stats * unsigned int buffer_len = ntohl(audio_hdr[2]); //fprintf(stderr, "%d-%d-%d ", length, bufnum, channel); + if (first) { + memcpy(&s->source, ((char *) cdata->data) + RTP_MAX_PACKET_LEN, sizeof(struct sockaddr_storage)); + first = false; + } received_frame.replace(channel, offset, data, length); diff --git a/src/rtp/pbuf.h b/src/rtp/pbuf.h index 7c0f085c8..cc826c16d 100644 --- a/src/rtp/pbuf.h +++ b/src/rtp/pbuf.h @@ -102,6 +102,7 @@ struct vcodec_state { struct pbuf_audio_data { audio_frame buffer; + struct sockaddr_storage source; // network source address struct state_audio_decoder *decoder; bool reconfigured;