From 8c1b1d3a371bcf9e4566e4a87833bf4d8de013e7 Mon Sep 17 00:00:00 2001 From: Martin Piatka Date: Mon, 22 Jan 2024 14:52:10 +0100 Subject: [PATCH] control_socket: Make reported audio ch count configurable And raise the default to 16. Refers to GH-366 --- src/control_socket.cpp | 12 ++++++++++++ src/control_socket.h | 1 + src/rtp/audio_decoders.cpp | 3 ++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/control_socket.cpp b/src/control_socket.cpp index e6247cdf5..0336993f6 100644 --- a/src/control_socket.cpp +++ b/src/control_socket.cpp @@ -106,6 +106,7 @@ struct control_state { queue stat_event_queue; bool stats_on; + int audio_channel_report_count = 16; }; #define CONTROL_EXIT -1 @@ -152,6 +153,9 @@ static void new_message(struct module *m) { } } +ADD_TO_PARAM("control-report-audio-ch-count", "* control-report-audio-ch-count=\n" + " The number of channels reported over control port.\n"); + int control_init(int port, int connection_type, struct control_state **state, struct module *root_module, int force_ip_version) { control_state *s = new control_state(); @@ -274,6 +278,10 @@ int control_init(int port, int connection_type, struct control_state **state, st module_register(&s->mod, root_module); + if (const char *val = get_commandline_param("control-report-audio-ch-count")) { + s->audio_channel_report_count = strtoll(val, NULL, 0); + } + *state = s; return 0; @@ -1010,6 +1018,10 @@ bool control_stats_enabled(struct control_state *s) return s && s->stats_on; } +int control_audio_ch_report_count(struct control_state *state){ + return state ? state->audio_channel_report_count : 0; +} + static void print_control_help() { color_printf("Control internal commands:\n" TBOLD("\texit") "\n" diff --git a/src/control_socket.h b/src/control_socket.h index de54e0251..d02f2eab5 100644 --- a/src/control_socket.h +++ b/src/control_socket.h @@ -56,6 +56,7 @@ void control_done(struct control_state *s); void control_report_stats(struct control_state *state, const std::string & stat_line); void control_report_event(struct control_state *state, const std::string & event_line); bool control_stats_enabled(struct control_state *state); +int control_audio_ch_report_count(struct control_state *state); #endif // control_socket_h_ diff --git a/src/rtp/audio_decoders.cpp b/src/rtp/audio_decoders.cpp index f81e8cf56..499ad0299 100644 --- a/src/rtp/audio_decoders.cpp +++ b/src/rtp/audio_decoders.cpp @@ -850,7 +850,8 @@ int decode_audio_frame(struct coded_data *cdata, void *pbuf_data, struct pbuf_st if (control_stats_enabled(decoder->control)) { std::string report = "ARECV"; - for(int i = 0; i < decompressed.get_channel_count() && i <= 8; i++){ + int num_ch = std::min(decompressed.get_channel_count(), control_audio_ch_report_count(decoder->control)); + for(int i = 0; i < num_ch; i++){ double rms, peak; rms = calculate_rms(&decompressed, i, &peak); double rms_dbfs0 = 20 * log(rms) / log(10);