feat: adaptive quality engine + codec indicator UI
Wire AdaptiveQualityController into Android engine for auto codec switching based on network quality reports. Add color-coded TX/RX codec badges to the in-call screen showing active codecs and Auto mode. - Recv task: ingest QualityReports, feed to controller, signal profile changes via AtomicU8 to send task - Send task: check for pending profile switch at frame boundaries, update encoder/FEC/frame size - Track peer codec from incoming packet headers - Kotlin UI: codec badges (blue=studio, green=good, amber=degraded, red=catastrophic) with Auto tag - Add .taskmaster to .gitignore Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -33,6 +33,12 @@ data class CallStats(
|
||||
val fecRecovered: Long = 0,
|
||||
/** Current mic audio level (RMS, 0-32767). */
|
||||
val audioLevel: Int = 0,
|
||||
/** Our current outgoing codec (e.g. "Opus24k"). */
|
||||
val currentCodec: String = "",
|
||||
/** Last seen incoming codec from peers. */
|
||||
val peerCodec: String = "",
|
||||
/** Whether auto quality mode is active. */
|
||||
val autoMode: Boolean = false,
|
||||
/** Number of participants in the room. */
|
||||
val roomParticipantCount: Int = 0,
|
||||
/** Participants in the room (fingerprint + optional alias). */
|
||||
@@ -76,6 +82,9 @@ data class CallStats(
|
||||
underruns = obj.optLong("underruns", 0),
|
||||
fecRecovered = obj.optLong("fec_recovered", 0),
|
||||
audioLevel = obj.optInt("audio_level", 0),
|
||||
currentCodec = obj.optString("current_codec", ""),
|
||||
peerCodec = obj.optString("peer_codec", ""),
|
||||
autoMode = obj.optBoolean("auto_mode", false),
|
||||
roomParticipantCount = obj.optInt("room_participant_count", 0),
|
||||
roomParticipants = parseParticipants(obj.optJSONArray("room_participants"))
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user