int main(int argc, char *argv[]) { int rc, rdnum; printf("APRSDUMP V1.0, Stefan Koch <*****@*****.**>\n"); if (2 != argc) { printf("need sound device\n"); return EXIT_FAILURE; } audio_dev = strdup(argv[1]); //audio_dev = strdup("plughw:0,0"); printf("- init audio capture\n"); printf(" + audio device = %s\n", audio_dev); rc = audio_capture_init(audio_dev); if (0 == rc) { printf(" + init sucess\n"); } else { printf(" + init failed (%d)\n", rc); return EXIT_FAILURE; } /* register sigint handler */ printf("- register sigint handler\n"); signal(SIGINT, sig_int_handler); /* start decoder loop */ while (1 == run) { rdnum = audio_capture_read(&aubuf); if (-1 == rdnum) break; // cdump(aubuf, rdnum); cbar(audiometer(aubuf, rdnum)); } printf("- shutdown audio capture\n"); audio_capture_close(); return 0; }
int main(int argc, char *argv[]) { /* setup termination signals handler */ signal(SIGINT, sig_handler); signal(SIGHUP, sig_handler); signal(SIGKILL, sig_handler); audio_capture_init(samplerate); atexit(audio_capture_terminate); audio_encoder_init(samplerate, opus_complexity, opus_bitrate); atexit(audio_encoder_terminate); udp_bcast_init(bcast_addr, port); atexit(udp_bcast_terminate); size_t element_size = (samplerate / 1000 * frame_length) * 2; queue_init(queue_elements_num, element_size); atexit(queue_terminate); pthread_t capt_th, enc_send_th; if (pthread_create(&enc_send_th, NULL, enc_send_thread, NULL)) { fprintf(stderr, "ERROR: unable to spawn encoding and sending thread\n"); exit(EXIT_FAILURE); } if (pthread_create(&capt_th, NULL, capture_thread, NULL)) { fprintf(stderr, "ERROR: unable to spawn capturing thread\n"); terminate_threads = true; pthread_join(enc_send_th, NULL); exit(EXIT_FAILURE); } printf("Capturing, encoding and sending Ctrl+C to terminate...\n"); struct timeval start_ts, cur_ts; gettimeofday(&start_ts, NULL); while (!app_terminate) { sleep(1); gettimeofday(&cur_ts, NULL); uint32_t time_delta_ms = (cur_ts.tv_sec - start_ts.tv_sec) * 1000 + (cur_ts.tv_usec - start_ts.tv_usec) / 1000; printf("%u.%03u capt:%"PRIu64" drop:%"PRIu64" enc: %"PRIu64"\n", time_delta_ms/1000, time_delta_ms % 1000, capt_buffers, capt_buffers_dropped, enc_buffers); } terminate_threads = true; pthread_join(capt_th, NULL); pthread_join(enc_send_th, NULL); printf("\n"); printf("Captured packets: %"PRIu64" Packets dropped at " "capture: %" PRIu64"\n", capt_buffers, capt_buffers_dropped); printf("Capture time (min/avg/max): %u/%u/%u microseconds\n", capt_min_time, (uint32_t)(capt_time/capt_buffers), capt_max_time); printf("Encoded packets: %"PRIu64"\n", enc_buffers); printf("Encoding time (min/avg/max): %u/%u/%u microseconds\n", enc_min_time, (uint32_t)(enc_time/enc_buffers), enc_max_time); /* OK */ exit(EXIT_SUCCESS); }