Skip to content

Commit 8fd928e

Browse files
committed
Centralize H.265 settings-string comparisons on VideoDecoder.CodecType
settings.videoCodec comparisons against the literal "H.265" were duplicated across AapVideo.kt, AapControl.kt, ServiceDiscoveryResponse.kt, and HeadUnitScreenConfig.kt. Added CodecType.settingsValue as the single source of truth for the settings-string form ("H.264"/"H.265"), distinct from the existing mimeType ("video/avc"/"video/hevc") and displayName ("H.264/AVC"/"H.265/HEVC") fields, and switched all four call sites to reference it instead of a bare string literal. The Auto/H.265 `when` branch in ServiceDiscoveryResponse.kt and the SettingsFragment.kt codec picker array are left as-is, since "Auto" has no CodecType counterpart to centralize against.
1 parent 4a29af9 commit 8fd928e

5 files changed

Lines changed: 11 additions & 9 deletions

File tree

app/src/main/java/com/andrerinas/openheadunit/aap/AapControl.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.andrerinas.openheadunit.aap.protocol.proto.Input
1414
import com.andrerinas.openheadunit.aap.protocol.proto.Media
1515
import com.andrerinas.openheadunit.aap.protocol.proto.Sensors
1616
import com.andrerinas.openheadunit.decoder.MicRecorder
17+
import com.andrerinas.openheadunit.decoder.VideoDecoder
1718
import com.andrerinas.openheadunit.utils.AppLog
1819
import com.andrerinas.openheadunit.utils.Settings
1920

@@ -109,7 +110,7 @@ internal class AapControlMedia(
109110
private fun maxUnackedFor(channel: Int): Int {
110111
if (channel == Channel.ID_VID) {
111112
val softwareHevc =
112-
aapTransport.settings.videoCodec == "H.265" &&
113+
aapTransport.settings.videoCodec == VideoDecoder.CodecType.H265.settingsValue &&
113114
aapTransport.settings.forceSoftwareDecoding &&
114115
aapTransport.settings.softwareVideoDecoder == Settings.SoftwareVideoDecoder.BUNDLED_FFMPEG
115116
if (softwareHevc) {

app/src/main/java/com/andrerinas/openheadunit/aap/AapVideo.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import java.nio.ByteBuffer
99
internal class AapVideo(private val videoDecoder: VideoDecoder, private val settings: Settings, private val onFrameCorrupted: () -> Unit) {
1010

1111
private val messageBuffer = ByteBuffer.allocate(
12-
if (settings.videoCodec == "H.265") {
12+
if (settings.videoCodec == VideoDecoder.CodecType.H265.settingsValue) {
1313
Messages.DEF_BUFFER_LENGTH * 64 // ~8MB for H.265 support
1414
} else {
1515
Messages.DEF_BUFFER_LENGTH * 16 // ~2MB for H.264 legacy support
@@ -59,14 +59,14 @@ internal class AapVideo(private val videoDecoder: VideoDecoder, private val sett
5959
if (scLen <= 0 || scOffset + scLen >= len)
6060
return true
6161

62-
val nalType = if (settings.videoCodec == "H.265") {
62+
val nalType = if (settings.videoCodec == VideoDecoder.CodecType.H265.settingsValue) {
6363
(buf[scOffset + scLen].toInt() and 0x7E) shr 1 // H.265 NAL
6464
} else {
6565
buf[scOffset + scLen].toInt() and 0x1F // H.264 NAL
6666
}
6767

6868
// Check if it's an I-Frame or VPS/SPS/PPS (types that can start a clean stream)
69-
val isKeyframe = if (settings.videoCodec == "H.265") {
69+
val isKeyframe = if (settings.videoCodec == VideoDecoder.CodecType.H265.settingsValue) {
7070
nalType in 16..21 || nalType in 32..34
7171
} else {
7272
nalType == 5 || nalType == 7 || nalType == 8

app/src/main/java/com/andrerinas/openheadunit/aap/protocol/messages/ServiceDiscoveryResponse.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.andrerinas.openheadunit.aap.protocol.Channel
1010
import com.andrerinas.openheadunit.aap.protocol.proto.Control
1111
import com.andrerinas.openheadunit.aap.protocol.proto.Media
1212
import com.andrerinas.openheadunit.aap.protocol.proto.Sensors
13+
import com.andrerinas.openheadunit.decoder.VideoDecoder
1314
import com.andrerinas.openheadunit.utils.AppLog
1415
import com.andrerinas.openheadunit.utils.HeadUnitScreenConfig
1516
import com.google.protobuf.Message
@@ -46,7 +47,7 @@ class ServiceDiscoveryResponse(private val context: Context)
4647
service.id = Channel.ID_VID
4748
service.mediaSinkService = Control.Service.MediaSinkService.newBuilder().also { mediaSinkServiceBuilder ->
4849
val explicitSoftwareHevc =
49-
settings.videoCodec == "H.265" &&
50+
settings.videoCodec == VideoDecoder.CodecType.H265.settingsValue &&
5051
settings.forceSoftwareDecoding &&
5152
when (settings.softwareVideoDecoder) {
5253
com.andrerinas.openheadunit.utils.Settings.SoftwareVideoDecoder.BUNDLED_FFMPEG ->

app/src/main/java/com/andrerinas/openheadunit/decoder/VideoDecoder.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,9 @@ class VideoDecoder(private val settings: Settings) {
159159
val videoWidth: Int get() = mWidth
160160
val videoHeight: Int get() = mHeight
161161

162-
enum class CodecType(val mimeType: String, val displayName: String) {
163-
H264("video/avc", "H.264/AVC"),
164-
H265("video/hevc", "H.265/HEVC")
162+
enum class CodecType(val mimeType: String, val displayName: String, val settingsValue: String) {
163+
H264("video/avc", "H.264/AVC", "H.264"),
164+
H265("video/hevc", "H.265/HEVC", "H.265")
165165
}
166166

167167
/**

app/src/main/java/com/andrerinas/openheadunit/utils/HeadUnitScreenConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ object HeadUnitScreenConfig {
351351

352352
private fun canNegotiateHevcHighResolution(): Boolean {
353353
if (VideoDecoder.isHevcSupported()) return true
354-
if (currentSettings.videoCodec != "H.265" || !currentSettings.forceSoftwareDecoding) return false
354+
if (currentSettings.videoCodec != VideoDecoder.CodecType.H265.settingsValue || !currentSettings.forceSoftwareDecoding) return false
355355
return when (currentSettings.softwareVideoDecoder) {
356356
Settings.SoftwareVideoDecoder.BUNDLED_FFMPEG -> VideoDecoder.isBundledHevcDecoderAvailable()
357357
Settings.SoftwareVideoDecoder.DEVICE_MEDIACODEC -> VideoDecoder.isHevcDecoderAvailable(includeSoftware = true)

0 commit comments

Comments
 (0)