void media_reinit_worker(struct k_work *work)
{
pj_status_t status;
pjsua_call_info call_info;
printf("[WORKER] Safe async media sub-system swap to %u Hz started...\n", target_codec_rate);
zephyr_i2s_stop(1);
zephyr_i2s_stop(0);
k_msleep(10);
printf("Destroying pjsua media bridge...\n");
pjsua_media_subsys_destroy(0);
printf("Reconfiguring MCUX SAI and Audio Codec hardware clocks...\n");
int ret = zephyr_i2s_set_rate(target_codec_rate);
if (ret < 0) {
printf("CRITICAL ERROR: Hardware failed to transition to %u Hz! Retrying init at old rate...\n", target_codec_rate);
zephyr_i2s_set_rate(current_bridge_rate);
} else {
current_bridge_rate = target_codec_rate;
}
printf("Re-initializing pjsua media with native clock_rate=%u\n", current_bridge_rate);
pjsua_media_config media_cfg;
pjsua_media_config_default(&media_cfg);
media_cfg.clock_rate = current_bridge_rate;
media_cfg.snd_clock_rate = current_bridge_rate;
status = pjsua_media_subsys_init(&media_cfg);
if (status != PJ_SUCCESS) {
printf("[MEDIA] CRITICAL: Subsys init failed: %d\n", status);
return;
}
status = pjsua_media_subsys_start();
if (status != PJ_SUCCESS) {
printf("[MEDIA] CRITICAL: Subsys start failed: %d\n", status);
return;
}
if (status != PJ_SUCCESS) {
printf("CRITICAL ERROR: pjsua_media_init failed: %d\n", status);
return;
}
pjsua_call_get_info(media_call_id, &call_info);
pjsua_conf_connect(call_info.conf_slot, 0);
pjsua_conf_connect(0, call_info.conf_slot);
printf("SUCCESS: Call media bridged natively at %u Hz without any software resampling!\n\n", current_bridge_rate);
}
Pressed: *
create_conf_port(491) high_quality=1 large_filter=1 Rate_in:8000 Rate_out:16000 samples_per_frame=160
============ MEDIA CHANNELS ACTIVE ============
Negotiated Codec Sample Rate: 8000 Hz
Current Active Bridge Rate : 16000 Hz
===============================================
[MEDIA] Scheduling async rate switch to 8000 kHz
[WORKER] Safe async media sub-system swap to 8000 Hz started...
zephyr_i2s_stop(274) start_stream=0
zephyr_i2s_stop(274) start_stream=0
[CONNECTING]
[CONDestroying pjsua media bridge...
FIRMED]
create_conf_port(491) high_quality=1 large_filter=1 Rate_in:8000 Rate_out:16000 samples_per_frame=160
============ MEDIA CHANNELS ACTIVE ============
Negotiated Codec Sample Rate: 8000 Hz
Current Active Bridge Rate : 16000 Hz
===============================================
[MEDIA] Scheduling async rate switch to 8000 kHz
Acquiring transport type=UDP, sel=ip_ver[0], reuse=1 remote=192.168.0.76:5060
(192.168.0.76)Acquiring transport got the lock
Search transport by remote address
Search loop & datagram transports with address zero
Search loop & datagram transports found one
Transport udp0x800895b0 acquired
Reconfiguring MCUX SAI and Audio Codec hardware clocks...
Re-initializing pjsua media with native clock_rate=8000
mode=0 col=0 row=1 text=CONNECStart add zephyr audio IN
Start add zephyr audio OUT
pj_thread_create(821) Set media thread stacksize=4096 current=0x8000c458
Created pthread 0x8000ac30 stack_size=4096 stack=0x8002e380
pj_thread_create(821) Set ev_thread thread stacksize=1024 current=0x8000c458
Created pthread 0x8000ad90 stack_size=1024 stack=0x8003c380
Зависает