Document camera preset restoration, orientation and manual bitrate bounds
This commit is contained in:
1 parent
97f1eaa048
commit
8e4d28c1fc
3 files changed
+16
-5
No files matched your search
@@ -1,6 +1,8 @@
|
||||
package com.utun.chat.data
|
||||
|
||||
/** Независимый выбор фото: пустая камера означает обычную заднюю, нулевые размеры — максимальное разрешение. */
|
||||
/** Независимый выбор фото: camera ищется по ID, затем MAIN/первая; width/height=0 выбирают максимальную площадь.
|
||||
* Размеры заданы парой 0/0 либо 1..16384, JPEG quality — один из QUALITIES.
|
||||
* resolve* возвращают null для пустого списка, неподдержанный размер заменяется максимальным. */
|
||||
data class PhotoCaptureSettings(val camera: String = "", val width: Int = 0, val height: Int = 0, val jpegQuality: Int = 85,
|
||||
val orientation: StreamOrientation = StreamOrientation.AUTO) {
|
||||
init {
|
||||
@@ -17,7 +19,9 @@ data class PhotoCaptureSettings(val camera: String = "", val width: Int = 0, val
|
||||
companion object { val QUALITIES = listOf(50, 75, 85, 95, 100) }
|
||||
}
|
||||
|
||||
/** Выбор записи видео хранится отдельно от фото, звонков и трансляций; height — метка 480p/720p/1080p. */
|
||||
/** Отдельный preset записи: camera по ID, затем SELFIE/первая; height — метка 480p/720p/1080p.
|
||||
* codec=1 AVC/2 HEVC, bitrate в бит/с из BITRATES; неверные значения отвергает конструктор.
|
||||
* Пустой список камер даёт null; разрешения/capabilities проверяет владелец CameraX. */
|
||||
data class VideoCaptureSettings(val camera: String = "", val height: Int = 720, val codec: Int = 1, val bitrate: Int = 2_000_000,
|
||||
val orientation: StreamOrientation = StreamOrientation.AUTO) {
|
||||
init { require(height in HEIGHTS); require(codec in 1..2); require(bitrate in BITRATES) }
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.utun.chat.data
|
||||
|
||||
/** AUTO следует датчику положения, остальные углы задаются вручную относительно обычного положения устройства. */
|
||||
/** AUTO следует датчику, остальные углы задаются относительно обычного положения устройства.
|
||||
* deviceDegrees/sensor — четверти оборота 0/90/180/270; targetDegrees даёт ориентацию Surface,
|
||||
* sensorRotation добавляет положение сенсора и направление front. На wire AUTO=-1 не передаётся. */
|
||||
enum class StreamOrientation(val degrees: Int) {
|
||||
// -1 хранится только в настройках; в видео передаётся вычисленный угол 0/90/180/270.
|
||||
AUTO(-1), UPRIGHT(0), RIGHT(90), UPSIDE_DOWN(180), LEFT(270);
|
||||
@@ -14,7 +16,9 @@ enum class StreamOrientation(val degrees: Int) {
|
||||
}
|
||||
}
|
||||
|
||||
/** Режим камеры и ориентация подтверждаются и восстанавливаются одним значением. */
|
||||
/** Подтверждаемый режим камеры/ориентации: videoBitrate=null использует автоматически рассчитанный mode.bitrate.
|
||||
* Битрейт в бит/с проверяется по аппаратному диапазону; withMode сохраняет ориентацию и ограничивает
|
||||
* ручной выбор новым manualBitrateRange (до 12 Мбит/с), либо снимает ручной выбор при пустом диапазоне. */
|
||||
data class StreamCaptureConfig(val mode: StreamCaptureMode, val orientation: StreamOrientation = StreamOrientation.AUTO,
|
||||
val videoBitrate: Int? = null) {
|
||||
val bitrate get() = videoBitrate ?: mode.bitrate
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package com.utun.chat.data
|
||||
|
||||
/** Последний выбор пользователя; возможности encoder заново берём у устройства. */
|
||||
/** Сохранённый выбор без аппаратных capabilities; resolve сопоставляет его с новым списком камер/modes.
|
||||
* Камера по ID, затем MAIN/первая; codec сохраняется, если доступен; размер/FPS — точный либо меньшая FPS.
|
||||
* Дальнейший fallback выбирает StreamCameraModes, неверная orientation становится AUTO, bitrate ограничивается.
|
||||
* Пустой набор камеры/modes возвращает null с WARN; фактическое восстановление логируется, audio хранится отдельно. */
|
||||
data class StreamCaptureSettings(val camera: String = "", val width: Int = 1280, val height: Int = 720, val fps: Int = 30,
|
||||
val codec: Int = StreamVideoCodec.H264.id, val rotation: Int = StreamOrientation.AUTO.degrees,
|
||||
val bitrate: Int? = null, val audio: Boolean = true) {
|
||||
|
||||
Reference in new issue
Block a user