feat: add toggle for full range and disable toggles for unsupported codecs

This commit is contained in:
Acaki
2025-12-02 21:26:09 +08:00
parent 85611bcab5
commit 3823c95582
18 changed files with 166 additions and 16 deletions
@@ -431,15 +431,18 @@ BOOL isCustomResolution(int resolutionSelected) {
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:NO];
settingsViewJustExpanded = true;
// Ensure codec-dependent switches are in correct state when view appears
[self updateCodecDependentSwitches];
/*
[self checkAndRequestMicPermission];
self.micHandler = [MicHandler new];
[self.micHandler startTapping];
*/
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(deviceOrientationDidChange:) // handle orientation change since i made portrait mode available
name:UIDeviceOrientationDidChangeNotification
@@ -753,6 +756,7 @@ BOOL isCustomResolution(int resolutionSelected) {
[self addSetting:self.hdrStack ofId:@"hdrStack" withInfoTag:![self hdrSupported] withDynamicLabel:NO to:videoSection];
[self addSetting:self.yuv444Stack ofId:@"yuv444Stack" withInfoTag:YES withDynamicLabel:NO to:videoSection];
[self addSetting:self.pipStack ofId:@"pipStack" withInfoTag:YES withDynamicLabel:NO to:videoSection];
[self addSetting:self.fullRangeStack ofId:@"fullRangeStack" withInfoTag:YES withDynamicLabel:NO to:videoSection];
[self addSetting:self.framePacingStack ofId:@"framePacingStack" withInfoTag:YES withDynamicLabel:NO to:videoSection];
[self addSetting:self.frameQueueSizeStack ofId:@"frameQueueSizeStack" withInfoTag:NO withDynamicLabel:YES to:videoSection];
@@ -1539,6 +1543,7 @@ BOOL isCustomResolution(int resolutionSelected) {
[_parentStack removeFromSuperview];
[self initParentStack];
[self layoutSections];
[self updateCodecDependentSwitches]; // Ensure switches are in correct state after layout
[self updateTheme];
//[self doneRemoveSettingItem];
Settings *currentSettings = [dataMan retrieveSettings];
@@ -1663,7 +1668,7 @@ BOOL isCustomResolution(int resolutionSelected) {
[self.rememberFoldStateSwitch setOn:self->tempSettings.rememberFoldState];// Load old setting
MenuSectionView.overridePersistedFoldState = !self->tempSettings.rememberFoldState;
[self.rememberFoldStateSwitch addTarget:self action:@selector(rememberFoldStateSwitchFlipped:) forControlEvents:UIControlEventValueChanged];
[self layoutSections];
@@ -1784,14 +1789,19 @@ BOOL isCustomResolution(int resolutionSelected) {
[self.hdrSwitch setOn:self->tempSettings.enableHdr];
}
[self.yuv444Switch setOn:self->tempSettings.enableYUV444];
[self.pipSwitch setOn:self->tempSettings.enablePIP];
if(@available(iOS 15.0, *)) [self.pipSwitch setEnabled:true];
else{
if(@available(iOS 15.0, *)) {
[self.pipSwitch setEnabled:true];
} else{
[self.pipSwitch setOn:false];
[self.pipSwitch setEnabled:false];
}
// Initialize codec-dependent switches together
[self.yuv444Switch setOn:self->tempSettings.enableYUV444];
[self.fullRangeSwitch setOn:self->tempSettings.fullRange];
[self.codecSelector addTarget:self action:@selector(codecSelectorChanged:) forControlEvents:UIControlEventValueChanged];
[self updateCodecDependentSwitches];
[self.statsOverlaySelector setSelectedSegmentIndex:self->tempSettings.statsOverlayLevel.intValue];
@@ -3305,6 +3315,7 @@ BOOL isCustomResolution(int resolutionSelected) {
uint32_t preferredCodec = [self getChosenCodecPreference];
BOOL enableYUV444 = self.yuv444Switch.isOn;
BOOL enablePIP = self.pipSwitch.isOn;
BOOL fullRange = self.fullRangeSwitch.isOn;
BOOL btMouseSupport = self.citrixX1MouseSwitch.isOn;
NSInteger touchMode = [self isNotNativeTouchOnly] ? self.touchModeSelector1.selectedSegmentIndex : NativeTouchOnly;
NSInteger statsOverlayLevel = [self.statsOverlaySelector selectedSegmentIndex];
@@ -3376,6 +3387,7 @@ BOOL isCustomResolution(int resolutionSelected) {
preferredCodec:preferredCodec
enableYUV444:enableYUV444
enablePIP:enablePIP
fullRange:fullRange
enableHdr:enableHdr
btMouseSupport:btMouseSupport
touchMode:touchMode
@@ -3425,4 +3437,45 @@ BOOL isCustomResolution(int resolutionSelected) {
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
}
- (void)codecSelectorChanged:(UISegmentedControl *)sender {
[self updateCodecDependentSwitches];
}
- (void)updateCodecDependentSwitches {
uint32_t codec = [self getChosenCodecPreference];
BOOL isAV1 = (codec == CODEC_PREF_AV1);
BOOL isH264 = (codec == CODEC_PREF_H264);
if (isAV1) {
// AV1 must use limited range, so disable fullRange and turn it off
[self.fullRangeSwitch setOn:NO animated:NO];
[self.fullRangeSwitch setEnabled:NO];
[self.fullRangeSwitch setUserInteractionEnabled:NO];
// AV1 doesn't support YUV444, so disable it and turn it off
[self.yuv444Switch setOn:NO animated:NO];
[self.yuv444Switch setEnabled:NO];
[self.yuv444Switch setUserInteractionEnabled:NO];
} else {
[self.fullRangeSwitch setEnabled:YES];
[self.fullRangeSwitch setUserInteractionEnabled:YES];
[self.yuv444Switch setEnabled:YES];
[self.yuv444Switch setUserInteractionEnabled:YES];
}
// H264 doesn't support HDR, so disable it and turn it off
if (isH264) {
[self.hdrSwitch setOn:NO animated:NO];
[self.hdrSwitch setEnabled:NO];
[self.hdrSwitch setUserInteractionEnabled:NO];
} else {
// Only enable HDR if the device supports it
if ([self hdrSupported]) {
[self.hdrSwitch setEnabled:YES];
[self.hdrSwitch setUserInteractionEnabled:YES];
}
}
}
@end