diff --git a/tools/chatgui-android/jni_bridge/android_stream_jni.c b/tools/chatgui-android/jni_bridge/android_stream_jni.c index 551e03f1..2a1646d7 100644 --- a/tools/chatgui-android/jni_bridge/android_stream_jni.c +++ b/tools/chatgui-android/jni_bridge/android_stream_jni.c @@ -60,6 +60,12 @@ JNIEXPORT void JNICALL Java_com_utun_chat_data_NativeLib_nativeStreamStop(JNIEnv (void)env; (void)obj; android_stream_stop((uint64_t)id); } +JNIEXPORT jboolean JNICALL Java_com_utun_chat_data_NativeLib_nativeStreamSetAudioEnabled( + JNIEnv *env, jobject obj, jlong id, jboolean enabled) { + (void)env; (void)obj; + return android_stream_set_audio_enabled((uint64_t)id, enabled != JNI_FALSE) == 0; +} + JNIEXPORT jlongArray JNICALL Java_com_utun_chat_data_NativeLib_nativeStreamTxStats(JNIEnv *env, jobject obj, jlong id) { (void)obj; struct android_stream_tx_stats s; if (android_stream_tx_snapshot((uint64_t)id, &s) < 0) return NULL; diff --git a/tools/chatgui-android/libutun_lite/stream_bridge.c b/tools/chatgui-android/libutun_lite/stream_bridge.c index 4e28dbb7..b9d0440d 100644 --- a/tools/chatgui-android/libutun_lite/stream_bridge.c +++ b/tools/chatgui-android/libutun_lite/stream_bridge.c @@ -302,6 +302,12 @@ int android_stream_feed(uint64_t id, int video, uint64_t pts, int key, const uin pthread_mutex_unlock(&media_lock); return result; } +int android_stream_set_audio_enabled(uint64_t id, int enabled) { + pthread_mutex_lock(&media_lock); + int result = stream_publisher_set_audio_enabled(transmitter, id, enabled); + pthread_mutex_unlock(&media_lock); return result; +} + /* Stop идемпотентен; publisher дренирует принятую очередь, viewer закрывается сразу в actor. */ void android_stream_stop(uint64_t id) { pthread_mutex_lock(&media_lock); diff --git a/tools/chatgui-android/libutun_lite/stream_bridge.h b/tools/chatgui-android/libutun_lite/stream_bridge.h index dcf5a0c1..3b4e1e2d 100644 --- a/tools/chatgui-android/libutun_lite/stream_bridge.h +++ b/tools/chatgui-android/libutun_lite/stream_bridge.h @@ -29,6 +29,7 @@ int android_stream_open(uint64_t id, uint64_t group, uint64_t source, unsigned w unsigned rotation, int audio, uint64_t expected_epoch, unsigned codec); /* Наблюдение выбранного канала через CHAT_EVT_STREAM_SOURCES; group=0 снимает его. */ int android_stream_watch(uint64_t group); +int android_stream_set_audio_enabled(uint64_t id, int enabled); /* Видео содержит revision/размер/поворот; новая revision принимается атомарно с KEY. Для аудио format=NULL. */ int android_stream_feed(uint64_t id, int video, uint64_t pts, int key, const uint8_t *data, size_t length, const struct stream_media_format *format);