diff --git a/src/libmobile/call.c b/src/libmobile/call.c index 15aa1df..853a628 100644 --- a/src/libmobile/call.c +++ b/src/libmobile/call.c @@ -97,6 +97,8 @@ static struct osmo_cc_helper_audio_codecs codecs[] = { { NULL, 0, 0, NULL, NULL}, }; +static int no_l16 = 0; + /* stream patterns/announcements */ int16_t *ringback_spl = NULL; int ringback_size = 0; @@ -421,7 +423,7 @@ static void indicate_setup(process_t *process, const char *callerid, const char /* bearer capability */ osmo_cc_add_ie_bearer(msg, OSMO_CC_CODING_ITU_T, OSMO_CC_CAPABILITY_AUDIO, OSMO_CC_MODE_CIRCUIT); /* sdp offer */ - process->session = osmo_cc_helper_audio_offer(&ep->session_config, process, codecs, down_audio, msg, 1); + process->session = osmo_cc_helper_audio_offer(&ep->session_config, process, codecs + no_l16, down_audio, msg, 1); PDEBUG(DCALL, DEBUG_INFO, "Indicate OSMO-CC setup towards fixed network\n"); osmo_cc_ll_msg(ep, process->callref, msg); @@ -708,7 +710,7 @@ void ll_msg_cb(osmo_cc_endpoint_t __attribute__((unused)) *ep, uint32_t callref, const char *sdp; /* sdp accept */ - sdp = osmo_cc_helper_audio_accept(&ep->session_config, process, codecs, down_audio, msg, &process->session, &process->codec, 0); + sdp = osmo_cc_helper_audio_accept(&ep->session_config, process, codecs + no_l16, down_audio, msg, &process->session, &process->codec, 0); if (!sdp) { disconnect_process(callref, 47); indicate_disconnect_release(callref, 47, OSMO_CC_MSG_REJ_IND); @@ -898,7 +900,7 @@ void ll_msg_cb(osmo_cc_endpoint_t __attribute__((unused)) *ep, uint32_t callref, osmo_cc_free_msg(msg); } -int call_init(const char *name, int _send_patterns, int _release_on_disconnect, int use_socket, int argc, const char *argv[]) +int call_init(const char *name, int _send_patterns, int _release_on_disconnect, int use_socket, int argc, const char *argv[], int _no_l16) { int rc; @@ -907,6 +909,7 @@ int call_init(const char *name, int _send_patterns, int _release_on_disconnect, g711_init(); + no_l16 = !!_no_l16; ep = &endpoint; rc = osmo_cc_new(ep, OSMO_CC_VERSION, name, OSMO_CC_LOCATION_PRIV_SERV_LOC_USER, ll_msg_cb, (use_socket) ? NULL : console_msg, NULL, argc, argv); if (rc > 0) diff --git a/src/libmobile/call.h b/src/libmobile/call.h index d38f8ab..fe26161 100644 --- a/src/libmobile/call.h +++ b/src/libmobile/call.h @@ -9,7 +9,7 @@ enum number_type { TYPE_INTERNATIONAL, }; -int call_init(const char *name, int _send_patterns, int _release_on_disconnect, int use_socket, int argc, const char *argv[]); +int call_init(const char *name, int _send_patterns, int _release_on_disconnect, int use_socket, int argc, const char *argv[], int no_l16); void call_exit(void); int call_handle(void); void call_media_handle(void); diff --git a/src/libmobile/main_mobile.c b/src/libmobile/main_mobile.c index 85eeace..a27acb8 100644 --- a/src/libmobile/main_mobile.c +++ b/src/libmobile/main_mobile.c @@ -72,6 +72,7 @@ static int use_osmocc_sock = 0; #define MAX_CC_ARGS 1024 static int cc_argc = 0; static const char *cc_argv[MAX_CC_ARGS]; +int no_l16 = 0; int send_patterns = 1; static int release_on_disconnect = 1; int loopback = 0; @@ -276,6 +277,8 @@ void main_mobile_print_help(const char *arg0, const char *ext_usage) printf(" Disable built-in call control and offer socket\n"); printf(" --cc \"\" [--cc ...]\n"); printf(" Pass arguments to Osmo-CC endpoint. Use '-cc help' for description.\n"); + printf(" --no-l16\n"); + printf(" Disable L16 (linear 16 bit) codec.\n"); printf(" -t --tones 0 | 1\n"); printf(" Connect call on setup/release to provide classic tones towards fixed\n"); printf(" network (default = '%d')\n", send_patterns); @@ -358,6 +361,7 @@ void main_mobile_print_hotkeys(void) #define OPT_CALL_SAMPLERATE 1008 #define OPT_CALL_BUFFER 1009 #define OPT_FAST_MATH 1010 +#define OPT_NO_L16 1011 #define OPT_LIMESDR 1100 #define OPT_LIMESDR_MINI 1101 @@ -379,6 +383,7 @@ void main_mobile_add_options(void) option_add('x', "osmocc-cross", 0); option_add('o', "osmocc-sock", 0); option_add(OPT_OSMO_CC, "cc", 1); + option_add(OPT_NO_L16, "no-l16", 0); option_add('c', "call-device", 1); option_add(OPT_CALL_SAMPLERATE, "call-samplerate", 1); option_add(OPT_CALL_BUFFER, "call-buffer", 1); @@ -480,6 +485,9 @@ int main_mobile_handle_options(int short_option, int argi, char **argv) } cc_argv[cc_argc++] = options_strdup(argv[argi]); break; + case OPT_NO_L16: + no_l16 = 1; + break; case 'c': call_device = options_strdup(argv[argi]); break; @@ -658,7 +666,7 @@ void main_mobile_loop(const char *name, int *quit, void (*myhandler)(void), cons console_init(call_device, call_samplerate, call_buffer, loopback, echo_test, number_digits, number_lengths, station_id); /* init call control instance */ - rc = call_init(name, (use_osmocc_sock) ? send_patterns : 0, release_on_disconnect, use_osmocc_sock, cc_argc, cc_argv); + rc = call_init(name, (use_osmocc_sock) ? send_patterns : 0, release_on_disconnect, use_osmocc_sock, cc_argc, cc_argv, no_l16); if (rc < 0) { fprintf(stderr, "Failed to create call control instance. Quitting!\n"); return; diff --git a/src/libosmocc/helper.c b/src/libosmocc/helper.c index c2e7bf3..468eca0 100644 --- a/src/libosmocc/helper.c +++ b/src/libosmocc/helper.c @@ -27,7 +27,9 @@ #include "../libtimer/timer.h" #include "../libselect/select.h" #include "../libdebug/debug.h" -#include "endpoint.h" +#include "session.h" +#include "message.h" +#include "rtp.h" #include "helper.h" osmo_cc_session_t *osmo_cc_helper_audio_offer(osmo_cc_session_config_t *conf, void *priv, struct osmo_cc_helper_audio_codecs *codecs, void (*receiver)(struct osmo_cc_session_codec *codec, uint8_t marker, uint16_t sequence_number, uint32_t timestamp, uint32_t ssrc, uint8_t *data, int len), osmo_cc_msg_t *msg, int debug) @@ -44,8 +46,9 @@ osmo_cc_session_t *osmo_cc_helper_audio_offer(osmo_cc_session_config_t *conf, vo media = osmo_cc_add_media(session, 0, 0, NULL, osmo_cc_session_media_type_audio, 0, osmo_cc_session_media_proto_rtp, 1, 1, receiver, debug); osmo_cc_rtp_open(media); - for (i = 0; codecs[i].payload_name; i++) + for (i = 0; codecs[i].payload_name; i++) { osmo_cc_add_codec(media, codecs[i].payload_name, codecs[i].payload_rate, codecs[i].payload_channels, codecs[i].encoder, codecs[i].decoder, debug); + } sdp = osmo_cc_session_send_offer(session); osmo_cc_add_ie_sdp(msg, sdp);