Browse Source

Explain unavailable video decoders and restored capture settings

master
evgeny 6 days ago
parent
commit
39297d1a07
  1. 8
      tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamPlayerEngine.kt
  2. 3
      tools/chatgui-android/app/src/main/res/values-ru/strings.xml
  3. 3
      tools/chatgui-android/app/src/main/res/values/strings.xml

8
tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamPlayerEngine.kt

@ -22,6 +22,7 @@ import kotlin.concurrent.withLock
class StreamPlayerEngine(private val group: Long, private val source: Long, private val epoch: Long, class StreamPlayerEngine(private val group: Long, private val source: Long, private val epoch: Long,
private val localPreview: StreamPreview? = null, private val displayDegrees: Int = 0) { private val localPreview: StreamPreview? = null, private val displayDegrees: Int = 0) {
companion object { private val viewerLock = ReentrantLock() } companion object { private val viewerLock = ReentrantLock() }
private class UnsupportedCodec(message: String) : IllegalStateException(message)
private data class Frame(val pts: Long, val key: Boolean, val width: Int, val height: Int, private data class Frame(val pts: Long, val key: Boolean, val width: Int, val height: Int,
val rotation: Int, val top: Int?, val revision: Long, val codec: StreamVideoCodec, val rotation: Int, val top: Int?, val revision: Long, val codec: StreamVideoCodec,
val config: ByteArray, val data: ByteArray) val config: ByteArray, val data: ByteArray)
@ -230,7 +231,7 @@ class StreamPlayerEngine(private val group: Long, private val source: Long, priv
check(frame.key) check(frame.key)
val format = frame.codec.decoderFormat(frame.width, frame.height, frame.rotation, frame.config) val format = frame.codec.decoderFormat(frame.width, frame.height, frame.rotation, frame.config)
val name = android.media.MediaCodecList(android.media.MediaCodecList.REGULAR_CODECS).findDecoderForFormat(format) val name = android.media.MediaCodecList(android.media.MediaCodecList.REGULAR_CODECS).findDecoderForFormat(format)
?: error("Unsupported decoder ${frame.codec.label} ${frame.width}x${frame.height}") ?: throw UnsupportedCodec("Unsupported decoder ${frame.codec.label} ${frame.width}x${frame.height}")
decoder = MediaCodec.createByCodecName(name) decoder = MediaCodec.createByCodecName(name)
LogManager.addLog("INFO", "video", "viewer codec id=$id type=${frame.codec.label} decoder=$name config=${frame.config.size}") LogManager.addLog("INFO", "video", "viewer codec id=$id type=${frame.codec.label} decoder=$name config=${frame.config.size}")
decoder!!.configure(format, surface, null, 0); decoder!!.start() decoder!!.configure(format, surface, null, 0); decoder!!.start()
@ -282,7 +283,10 @@ class StreamPlayerEngine(private val group: Long, private val source: Long, priv
Thread.sleep(5) Thread.sleep(5)
} }
} catch (e: Exception) { } catch (e: Exception) {
if (running) { mutableStatus.value = R.string.stream_failed; LogManager.addLog("ERROR", "stream", "viewer failed id=$id: ${e.message}") } if (running) {
mutableStatus.value = if (e is UnsupportedCodec) R.string.stream_decoder_unsupported else R.string.stream_failed
LogManager.addLog("ERROR", "stream", "viewer failed id=$id: ${e.message}")
}
} finally { } finally {
NativeLib.streamStop(id) NativeLib.streamStop(id)
try { decoder?.stop(); decoder?.release() } try { decoder?.stop(); decoder?.release() }

3
tools/chatgui-android/app/src/main/res/values-ru/strings.xml

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="stream_video_codec">Кодек: %1$s</string> <string name="stream_video_codec">Кодек: %1$s</string>
<string name="stream_decoder_unsupported">Устройство не может воспроизвести выбранный видеокодек.</string>
<string name="stream_bitrate_auto">Битрейт видео: Авто</string> <string name="stream_bitrate_auto">Битрейт видео: Авто</string>
<string name="stream_bitrate_value">%1$.2f Мбит/с</string> <string name="stream_bitrate_value">%1$.2f Мбит/с</string>
<string name="stream_tx_queues">Очередь видео: %1$.1f КиБ · Неподтверждено: %2$.1f КиБ</string> <string name="stream_tx_queues">Очередь видео: %1$.1f КиБ · Неподтверждено: %2$.1f КиБ</string>
@ -457,7 +458,7 @@
<string name="radio_auto_disabled">"Автопередача выключена"</string> <string name="radio_auto_disabled">"Автопередача выключена"</string>
<string name="radio_level_hint">"В обоих режимах передаётся до 0,6 с звука перед срабатыванием. Уровень измеряется до компрессора рации. Для включения нужны 40 мс на пороге включения или выше. Передача заканчивается после заданной паузы ниже порога отключения. Измеритель работает и без автопередачи, пока открыта эта вкладка."</string> <string name="radio_level_hint">"В обоих режимах передаётся до 0,6 с звука перед срабатыванием. Уровень измеряется до компрессора рации. Для включения нужны 40 мс на пороге включения или выше. Передача заканчивается после заданной паузы ниже порога отключения. Измеритель работает и без автопередачи, пока открыта эта вкладка."</string>
<string name="radio_auto_quick_settings">"Удерживайте для настройки режима и порогов"</string> <string name="radio_auto_quick_settings">"Удерживайте для настройки режима и порогов"</string>
<string name="stream_mode_restored">Не удалось переключить захват. Восстановлены прежняя камера, режим и ориентация.</string> <string name="stream_mode_restored">Не удалось применить параметры видео. Восстановлены предыдущие настройки.</string>
<string name="stream_switching">Переключение камеры, режима или ориентации…</string> <string name="stream_switching">Переключение камеры, режима или ориентации…</string>
<string name="stream_no_modes">Нет совместимой камеры или видеокодировщика</string> <string name="stream_no_modes">Нет совместимой камеры или видеокодировщика</string>
<string name="stream_orientation">Поворот: %1$d°</string> <string name="stream_orientation">Поворот: %1$d°</string>

3
tools/chatgui-android/app/src/main/res/values/strings.xml

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="stream_video_codec">Codec: %1$s</string> <string name="stream_video_codec">Codec: %1$s</string>
<string name="stream_decoder_unsupported">This device cannot play the selected video codec.</string>
<string name="stream_bitrate_auto">Video bitrate: Auto</string> <string name="stream_bitrate_auto">Video bitrate: Auto</string>
<string name="stream_bitrate_value">%1$.2f Mbps</string> <string name="stream_bitrate_value">%1$.2f Mbps</string>
<string name="stream_tx_queues">Video queue: %1$.1f KiB · Unacknowledged: %2$.1f KiB</string> <string name="stream_tx_queues">Video queue: %1$.1f KiB · Unacknowledged: %2$.1f KiB</string>
@ -456,7 +457,7 @@
<string name="radio_auto_disabled">"Automatic transmission disabled"</string> <string name="radio_auto_disabled">"Automatic transmission disabled"</string>
<string name="radio_level_hint">"Both modes include 0.6 s of prebuffer. Level is measured before the radio compressor. Start requires 40 ms at or above the start threshold. Transmission ends after the configured silence below the stop threshold. The meter also works with automatic transmission disabled while this tab is visible."</string> <string name="radio_level_hint">"Both modes include 0.6 s of prebuffer. Level is measured before the radio compressor. Start requires 40 ms at or above the start threshold. Transmission ends after the configured silence below the stop threshold. The meter also works with automatic transmission disabled while this tab is visible."</string>
<string name="radio_auto_quick_settings">"Hold to adjust activation mode and thresholds"</string> <string name="radio_auto_quick_settings">"Hold to adjust activation mode and thresholds"</string>
<string name="stream_mode_restored">Could not switch capture. The previous camera, mode and orientation have been restored.</string> <string name="stream_mode_restored">Could not apply video settings. The previous settings have been restored.</string>
<string name="stream_switching">Switching camera, video mode or orientation…</string> <string name="stream_switching">Switching camera, video mode or orientation…</string>
<string name="stream_no_modes">No compatible camera or video encoder found</string> <string name="stream_no_modes">No compatible camera or video encoder found</string>
<string name="stream_orientation">Rotation: %1$d°</string> <string name="stream_orientation">Rotation: %1$d°</string>

Loading…
Cancel
Save