fix(vlc): add audio transcoding mode to fix 7.1 TrueHD playback

This commit is contained in:
Fredrik Burmester
2026-01-08 20:38:35 +01:00
parent 0a0da687d5
commit 51ecde1565
7 changed files with 253 additions and 15 deletions

View File

@@ -3,7 +3,7 @@ import { useMemo } from "react";
import { useTranslation } from "react-i18next";
import { Platform, View, type ViewProps } from "react-native";
import { Switch } from "react-native-gesture-handler";
import { useSettings } from "@/utils/atoms/settings";
import { AudioTranscodeMode, useSettings } from "@/utils/atoms/settings";
import { Text } from "../common/Text";
import { ListGroup } from "../list/ListGroup";
import { ListItem } from "../list/ListItem";
@@ -54,6 +54,70 @@ export const AudioToggles: React.FC<Props> = ({ ...props }) => {
];
}, [cultures, settings?.defaultAudioLanguage, t, updateSettings]);
const audioTranscodeModeLabels: Record<AudioTranscodeMode, string> = {
[AudioTranscodeMode.Auto]: t("home.settings.audio.transcode_mode.auto"),
[AudioTranscodeMode.ForceStereo]: t(
"home.settings.audio.transcode_mode.stereo",
),
[AudioTranscodeMode.Allow51]: t("home.settings.audio.transcode_mode.5_1"),
[AudioTranscodeMode.AllowAll]: t(
"home.settings.audio.transcode_mode.passthrough",
),
};
const audioTranscodeModeOptions = useMemo(
() => [
{
options: [
{
type: "radio" as const,
label: t("home.settings.audio.transcode_mode.auto"),
value: AudioTranscodeMode.Auto,
selected:
settings?.audioTranscodeMode === AudioTranscodeMode.Auto ||
!settings?.audioTranscodeMode,
onPress: () =>
updateSettings({ audioTranscodeMode: AudioTranscodeMode.Auto }),
},
{
type: "radio" as const,
label: t("home.settings.audio.transcode_mode.stereo"),
value: AudioTranscodeMode.ForceStereo,
selected:
settings?.audioTranscodeMode === AudioTranscodeMode.ForceStereo,
onPress: () =>
updateSettings({
audioTranscodeMode: AudioTranscodeMode.ForceStereo,
}),
},
{
type: "radio" as const,
label: t("home.settings.audio.transcode_mode.5_1"),
value: AudioTranscodeMode.Allow51,
selected:
settings?.audioTranscodeMode === AudioTranscodeMode.Allow51,
onPress: () =>
updateSettings({
audioTranscodeMode: AudioTranscodeMode.Allow51,
}),
},
{
type: "radio" as const,
label: t("home.settings.audio.transcode_mode.passthrough"),
value: AudioTranscodeMode.AllowAll,
selected:
settings?.audioTranscodeMode === AudioTranscodeMode.AllowAll,
onPress: () =>
updateSettings({
audioTranscodeMode: AudioTranscodeMode.AllowAll,
}),
},
],
},
],
[settings?.audioTranscodeMode, t, updateSettings],
);
if (isTv) return null;
if (!settings) return null;
@@ -98,6 +162,31 @@ export const AudioToggles: React.FC<Props> = ({ ...props }) => {
title={t("home.settings.audio.language")}
/>
</ListItem>
<ListItem
title={t("home.settings.audio.transcode_mode.title")}
subtitle={t("home.settings.audio.transcode_mode.description")}
>
<PlatformDropdown
groups={audioTranscodeModeOptions}
trigger={
<View className='flex flex-row items-center justify-between py-1.5 pl-3'>
<Text className='mr-1 text-[#8E8D91]'>
{
audioTranscodeModeLabels[
settings?.audioTranscodeMode || AudioTranscodeMode.Auto
]
}
</Text>
<Ionicons
name='chevron-expand-sharp'
size={18}
color='#5A5960'
/>
</View>
}
title={t("home.settings.audio.transcode_mode.title")}
/>
</ListItem>
</ListGroup>
</View>
);