diff --git a/src_assets/common/assets/web/configs/tabs/Advanced.vue b/src_assets/common/assets/web/configs/tabs/Advanced.vue index cc8540c85f3..b8dd9079cf3 100644 --- a/src_assets/common/assets/web/configs/tabs/Advanced.vue +++ b/src_assets/common/assets/web/configs/tabs/Advanced.vue @@ -111,6 +111,57 @@ watch(isWGCSelected, (newValue) => { checkSunshineMode() } }) + +// === 编解码器策略(HEVC + AV1 整合 UI) === +// 底层仍写入 hevc_mode / av1_mode(保持 sunshine.conf 兼容),UI 层用一个策略 + +// 一个 HDR 复选框推算两者的值。 +const showCodecAdvanced = ref(false) + +// 把 config.value.hevc_mode / av1_mode 转成 number,便于比较(旧值可能是 string) +const hevcModeNum = computed(() => Number(config.value.hevc_mode ?? 0)) +const av1ModeNum = computed(() => Number(config.value.av1_mode ?? 0)) + +const codecStrategy = computed({ + get() { + const h = hevcModeNum.value + const a = av1ModeNum.value + if (h === 0 && a === 0) return 'auto' + if (h === 1 && a === 1) return 'h264_only' + // modern: 都通告(值为 2 或 3 都算 modern;HDR 由 enableHdr 单独决定) + if ((h === 2 || h === 3) && (a === 2 || a === 3)) return 'modern' + return 'custom' + }, + set(v) { + if (v === 'auto') { + config.value.hevc_mode = 0 + config.value.av1_mode = 0 + } else if (v === 'h264_only') { + config.value.hevc_mode = 1 + config.value.av1_mode = 1 + } else if (v === 'modern') { + const hdr = enableHdr.value + config.value.hevc_mode = hdr ? 3 : 2 + config.value.av1_mode = hdr ? 3 : 2 + } + // 'custom' → 不修改值,由用户在展开区编辑 + }, +}) + +// 当任意 codec 选择 mode 3(含 10-bit/HDR),即视为开启 HDR 通告 +const enableHdr = computed({ + get() { + return hevcModeNum.value === 3 || av1ModeNum.value === 3 + }, + set(v) { + // 仅在"现代编码器"策略下生效 + if (codecStrategy.value !== 'modern') return + config.value.hevc_mode = v ? 3 : 2 + config.value.av1_mode = v ? 3 : 2 + }, +}) + +// HDR 复选框是否可用(只有 modern 策略下才有意义) +const hdrToggleDisabled = computed(() => codecStrategy.value !== 'modern')