From 6cdc2ce4dc99e21cd5c4e3974413c90bd08d648b Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 16 Oct 2026 01:56:43 +0200 Subject: [PATCH] Allow Android audio toggles during capture startup and test native control --- tests/test_android_stream.c | 10 ++++++++++ .../java/com/utun/chat/data/StreamCaptureEngine.kt | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/test_android_stream.c b/tests/test_android_stream.c index fa276adf..aa3221de 100644 --- a/tests/test_android_stream.c +++ b/tests/test_android_stream.c @@ -80,6 +80,14 @@ int main(void) { CHECK(source_events == 2 && strstr(source_snapshot, "epoch")); struct stream_member_state member; CHECK(stream_member_load(inst, group, inst->node_id, &member, NULL) == STREAM_OK && member.published); + CHECK(member.audio_enabled); + CHECK(android_stream_set_audio_enabled(1, 0) == 0); test_clock_poll(ua, 100); + struct stream_member_state muted; + CHECK(stream_member_load(inst, group, inst->node_id, &muted, NULL) == STREAM_OK && !muted.audio_enabled); + CHECK(muted.source.source_epoch == member.source.source_epoch); + CHECK(android_stream_set_audio_enabled(2, 1) < 0); + CHECK(android_stream_set_audio_enabled(1, 1) == 0); test_clock_poll(ua, 100); + CHECK(stream_member_load(inst, group, inst->node_id, &muted, NULL) == STREAM_OK && muted.audio_enabled); CHECK(android_stream_open(5, group, inst->node_id, 0, 0, 0, 1, member.source.source_epoch ^ 1, STREAM_MEDIA_H264) == 0); uint8_t *error = wait_event(5, 6, &size); CHECK(error[1] == STREAM_CLOSE_SOURCE_CHANGED); u_free(error); CHECK(android_stream_open(2, group, inst->node_id, 0, 0, 0, 1, member.source.source_epoch, STREAM_MEDIA_H264) == 0); @@ -170,6 +178,7 @@ int main(void) { CHECK(!strcmp(source_snapshot, "[]")); current_format.rotation = 0; current_format.audio_codec = 0; CHECK(android_stream_open(3, group, 0, 1280, 720, 0, 0, 0, STREAM_MEDIA_H264) == 0); u_free(wait_event(3, 4, &size)); + CHECK(android_stream_set_audio_enabled(3, 1) < 0); uint8_t *large = u_malloc(500000); CHECK(large); memset(large, 1, 500000); CHECK(feed(3, 1, 500000, 1, large, 500000) == 1); u_free(large); test_clock_run_for(ua, 1000); @@ -181,6 +190,7 @@ int main(void) { android_stream_detach(inst); __atomic_store_n(&producer_stop, 1, __ATOMIC_RELEASE); CHECK(pthread_join(thread, NULL) == 0); CHECK(feed(3, 1, 900000, 1, video, sizeof(video)) == -1); + CHECK(android_stream_set_audio_enabled(3, 0) < 0); while ((output = android_stream_pull(3, &size))) u_free(output); android_stream_attach(inst); CHECK(android_stream_open(4, group, 0, 1280, 720, 0, 0, 0, STREAM_MEDIA_H264) == 0); android_stream_stop(4); diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureEngine.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureEngine.kt index b68ad3d2..556f36d9 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureEngine.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamCaptureEngine.kt @@ -437,7 +437,7 @@ class StreamCaptureEngine( } /** Меняем только свою копию PCM; общий микрофон и рация продолжают работать. */ fun setAudioEnabled(enabled: Boolean): Boolean { - if (!microphone || !audioRunning) { + if (!microphone || stopped) { LogManager.addLog("WARN", "stream", "audio change without capture id=$id enabled=$enabled"); return false } val previous = audioMuted