aboutsummaryrefslogtreecommitdiffstats
path: root/op25/gr-op25_repeater/lib/p25p1_voice_encode.cc
diff options
context:
space:
mode:
Diffstat (limited to 'op25/gr-op25_repeater/lib/p25p1_voice_encode.cc')
-rw-r--r--op25/gr-op25_repeater/lib/p25p1_voice_encode.cc40
1 files changed, 7 insertions, 33 deletions
diff --git a/op25/gr-op25_repeater/lib/p25p1_voice_encode.cc b/op25/gr-op25_repeater/lib/p25p1_voice_encode.cc
index f2ca445..d2fda13 100644
--- a/op25/gr-op25_repeater/lib/p25p1_voice_encode.cc
+++ b/op25/gr-op25_repeater/lib/p25p1_voice_encode.cc
@@ -33,9 +33,6 @@
#include <stdio.h>
#include <string.h>
#include <errno.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
#include "imbe_vocoder/imbe_vocoder.h"
#include "p25_frame.h"
@@ -153,9 +150,9 @@ static void clear_bits(bit_vector& v) {
}
}
-p25p1_voice_encode::p25p1_voice_encode(bool verbose_flag, int stretch_amt, char* udp_host, int udp_port, bool raw_vectors_flag, std::deque<uint8_t> &_output_queue) :
+p25p1_voice_encode::p25p1_voice_encode(bool verbose_flag, int stretch_amt, const op25_audio& udp, bool raw_vectors_flag, std::deque<uint8_t> &_output_queue) :
+ op25audio(udp),
frame_cnt(0),
- write_sock(0),
write_bufp(0),
peak_amplitude(0),
peak(0),
@@ -166,8 +163,7 @@ p25p1_voice_encode::p25p1_voice_encode(bool verbose_flag, int stretch_amt, char*
output_queue(_output_queue),
f_body(P25_VOICE_FRAME_SIZE),
opt_dump_raw_vectors(raw_vectors_flag),
- opt_verbose(verbose_flag),
- opt_udp_port(udp_port)
+ opt_verbose(verbose_flag)
{
opt_stretch_amt = 0;
if (stretch_amt < 0) {
@@ -178,10 +174,6 @@ p25p1_voice_encode::p25p1_voice_encode(bool verbose_flag, int stretch_amt, char*
opt_stretch_amt = stretch_amt;
}
- if (opt_udp_port != 0)
- // remote UDP output
- init_sock(udp_host, opt_udp_port);
-
clear_bits(f_body);
}
@@ -216,7 +208,7 @@ void p25p1_voice_encode::append_imbe_codeword(bit_vector& frame_body, int16_t fr
frame_body[i] = frame_body[i] | ldu_preset[i];
}
// finally, output the frame
- if (opt_udp_port > 0) {
+ if (op25audio.enabled()) {
// pack the bits into bytes, MSB first
size_t obuf_ct = 0;
for (uint32_t i = 0; i < P25_VOICE_FRAME_SIZE; i += 8) {
@@ -231,7 +223,7 @@ void p25p1_voice_encode::append_imbe_codeword(bit_vector& frame_body, int16_t fr
(frame_body[i+7] );
obuf[obuf_ct++] = b;
}
- sendto(write_sock, obuf, obuf_ct, 0, (struct sockaddr*)&write_sock_addr, sizeof(write_sock_addr));
+ op25audio.send_to(obuf, obuf_ct);
} else {
for (uint32_t i = 0; i < P25_VOICE_FRAME_SIZE; i += 2) {
uint8_t dibit =
@@ -274,7 +266,7 @@ void p25p1_voice_encode::compress_frame(int16_t snd[])
memcpy(&write_buf[write_bufp], s, strlen(s));
write_bufp += strlen(s);
if (write_bufp >= 288) {
- sendto(write_sock, write_buf, 288, 0, (struct sockaddr*)&write_sock_addr, sizeof(write_sock_addr));
+ op25audio.send_to(write_buf, 288);
write_bufp = 0;
}
return;
@@ -324,28 +316,10 @@ void p25p1_voice_encode::compress_samp(const int16_t * samp, int len)
}
}
-void p25p1_voice_encode::init_sock(char* udp_host, int udp_port)
-{
- memset (&write_sock_addr, 0, sizeof(write_sock_addr));
- write_sock = socket(PF_INET, SOCK_DGRAM, 17); // UDP socket
- if (write_sock < 0) {
- fprintf(stderr, "vocoder: socket: %d\n", errno);
- write_sock = 0;
- return;
- }
- if (!inet_aton(udp_host, &write_sock_addr.sin_addr)) {
- fprintf(stderr, "vocoder: bad IP address\n");
- close(write_sock);
- write_sock = 0;
- return;
- }
- write_sock_addr.sin_family = AF_INET;
- write_sock_addr.sin_port = htons(udp_port);
-}
-
void
p25p1_voice_encode::set_gain_adjust(float gain_adjust) {
vocoder.set_gain_adjust(gain_adjust);
}
+
} /* namespace op25_repeater */
} /* namespace gr */