frame assembler sink-only mode

This commit is contained in:
Max 2017-04-29 12:32:47 -04:00
parent 59a78e3671
commit e6deba2cd5
3 changed files with 14 additions and 17 deletions

View File

@ -76,7 +76,9 @@ class p25_decoder_sink_b(gr.hier_block2):
self.debug = debug
self.dest = dest
do_output = True
do_output = False
if dest == 'wav':
do_output = True
do_audio_output = True
if msgq is None:
@ -94,8 +96,6 @@ class p25_decoder_sink_b(gr.hier_block2):
self.p25_decoders.append(op25_repeater.p25_frame_assembler(wireshark_host, udp_port, debug, do_imbe, do_output, do_msgq, msgq, do_audio_output, True))
self.p25_decoders[slot].set_slotid(slot)
self.audio_s2f.append(blocks.short_to_float()) # another ridiculous conversion
self.scaler.append(blocks.multiply_const_ff(1 / 32768.0))
self.xorhash.append('')
if dest == 'wav':
@ -103,11 +103,12 @@ class p25_decoder_sink_b(gr.hier_block2):
n_channels = 1
sample_rate = 8000
bits_per_sample = 16
self.audio_s2f.append(blocks.short_to_float()) # another ridiculous conversion
self.scaler.append(blocks.multiply_const_ff(1 / 32768.0))
self.audio_sink.append(blocks.wavfile_sink(filename, n_channels, sample_rate, bits_per_sample))
self.connect(self, self.p25_decoders[slot], self.audio_s2f[slot], self.scaler[slot], self.audio_sink[slot])
elif dest == 'audio':
self.audio_sink.append(audio.sink(_def_audio_rate, audio_output, True))
self.connect(self, self.p25_decoders[slot], self.audio_s2f[slot], self.scaler[slot], self.audio_sink[slot])
self.connect(self, self.p25_decoders[slot])
def close_file(self, index=0):
if self.dest != 'wav':

View File

@ -83,7 +83,7 @@ static const int MAX_IN = 1; // maximum number of input streams
p25_frame_assembler_impl::p25_frame_assembler_impl(const char* udp_host, int port, int debug, bool do_imbe, bool do_output, bool do_msgq, gr::msg_queue::sptr queue, bool do_audio_output, bool do_phase2_tdma)
: gr::block("p25_frame_assembler",
gr::io_signature::make (MIN_IN, MAX_IN, sizeof (char)),
gr::io_signature::make ((do_output || do_audio_output) ? 1 : 0, (do_output || do_audio_output) ? 1 : 0, (do_audio_output) ? sizeof(int16_t) : ((do_output) ? sizeof(char) : 0 ))),
gr::io_signature::make ((do_output) ? 1 : 0, (do_output) ? 1 : 0, (do_audio_output && do_output) ? sizeof(int16_t) : ((do_output) ? sizeof(char) : 0 ))),
d_do_imbe(do_imbe),
d_do_output(do_output),
output_queue(),
@ -94,8 +94,6 @@ static const int MAX_IN = 1; // maximum number of input streams
d_do_msgq(do_msgq),
d_msg_queue(queue)
{
if (d_do_audio_output && !d_do_output)
fprintf(stderr, "p25_frame_assembler: error: do_output must be enabled if do_audio_output is enabled\n");
if (d_do_audio_output && !d_do_imbe)
fprintf(stderr, "p25_frame_assembler: error: do_imbe must be enabled if do_audio_output is enabled\n");
if (d_do_phase2_tdma && !d_do_audio_output)

View File

@ -314,16 +314,14 @@ p25p1_fdma::rx_sym (const uint8_t *syms, int nsyms)
// output one 32-byte msg per 0.020 sec.
// also, 32*9 = 288 byte pkts (for use via UDP)
sprintf(s, "%03x %03x %03x %03x %03x %03x %03x %03x\n", u[0], u[1], u[2], u[3], u[4], u[5], u[6], u[7]);
if (d_do_output) {
if (d_do_audio_output) {
p1voice_decode.rxframe(u);
} else {
for (size_t j=0; j < strlen(s); j++) {
output_queue.push_back(s[j]);
}
if (d_do_audio_output)
p1voice_decode.rxframe(u);
if (d_do_output && !d_do_audio_output) {
for (size_t j=0; j < strlen(s); j++) {
output_queue.push_back(s[j]);
}
}
if (write_sock > 0) {
if (d_do_output && write_sock > 0) {
memcpy(&write_buf[write_bufp], s, strlen(s));
write_bufp += strlen(s);
if (write_bufp >= 288) { // 9 * 32 = 288