aboutsummaryrefslogtreecommitdiffstats
path: root/src/common/sender.c
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2016-05-06 07:00:27 +0200
committerAndreas Eversberg <jolly@eversberg.eu>2016-05-08 15:49:45 +0200
commitbae12156a23bc18561a9fd81a550edfd988ef437 (patch)
treed09c710de2692f17a5ec9e23e830be6e02e6fbf3 /src/common/sender.c
parentba91ee82a77f9357758e64953da57d2a148b30c8 (diff)
common code: Add input gain option
Diffstat (limited to 'src/common/sender.c')
-rw-r--r--src/common/sender.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/common/sender.c b/src/common/sender.c
index c8e9b60..1038c8b 100644
--- a/src/common/sender.c
+++ b/src/common/sender.c
@@ -33,7 +33,7 @@ static sender_t **sender_tailp = &sender_head;
int cant_recover = 0;
/* Init transceiver instance and link to list of transceivers. */
-int sender_create(sender_t *sender, int kanal, const char *sounddev, int samplerate, int cross_channels, int pre_emphasis, int de_emphasis, const char *write_wave, const char *read_wave, int loopback, double loss_volume, int use_pilot_signal)
+int sender_create(sender_t *sender, int kanal, const char *sounddev, int samplerate, int cross_channels, double rx_gain, int pre_emphasis, int de_emphasis, const char *write_wave, const char *read_wave, int loopback, double loss_volume, int use_pilot_signal)
{
sender_t *master;
int rc = 0;
@@ -91,6 +91,7 @@ int sender_create(sender_t *sender, int kanal, const char *sounddev, int sampler
sender->samplerate = samplerate;
sender->cross_channels = cross_channels;
+ sender->rx_gain = rx_gain;
sender->pre_emphasis = pre_emphasis;
sender->de_emphasis = de_emphasis;
sender->kanal = kanal;
@@ -189,6 +190,21 @@ static void gen_pilotton(sender_t *sender, int16_t *samples, int length)
sender->pilotton_phase = phase;
}
+static void gain_samples(int16_t *samples, int length, double gain)
+{
+ int i;
+ int32_t sample;
+
+ for (i = 0; i < length; i++) {
+ sample = (int32_t)((double)(*samples) * gain);
+ if (sample > 32767)
+ sample = 32767;
+ else if (sample < -32768)
+ sample = -32768;
+ *samples++ = sample;
+ }
+}
+
/* Handle audio streaming of one transceiver. */
static void process_sender_audio(sender_t *sender, int *quit, int latspl)
{
@@ -318,6 +334,9 @@ cant_recover:
return;
}
if (count) {
+ /* rx gain */
+ if (sender->rx_gain != 1.0)
+ gain_samples(samples, count, sender->rx_gain);
/* do de emphasis from radio (then write_wave/wave_read), receive audio, process echo test */
if (sender->de_emphasis)
de_emphasis(&sender->estate, samples, count);
@@ -332,6 +351,8 @@ cant_recover:
jitter_save(&sender->audio, samples, count);
/* do above for audio slave, if set */
if (slave) {
+ if (sender->rx_gain != 1.0)
+ gain_samples(slave_samples, count, slave->rx_gain);
if (slave->de_emphasis)
de_emphasis(&slave->estate, slave_samples, count);
if (slave->wave_play.fp)