diff --git a/VoidLink/Base.lproj/iPad.storyboard b/VoidLink/Base.lproj/iPad.storyboard
index 241fcc79..1a20d237 100644
--- a/VoidLink/Base.lproj/iPad.storyboard
+++ b/VoidLink/Base.lproj/iPad.storyboard
@@ -584,10 +584,10 @@
-
+
-
-
+
-
+
@@ -2798,6 +2798,8 @@
+
+
@@ -2846,8 +2848,6 @@
-
-
diff --git a/VoidLink/Database/DataManager.m b/VoidLink/Database/DataManager.m
index 8b85d32b..1e506b34 100644
--- a/VoidLink/Database/DataManager.m
+++ b/VoidLink/Database/DataManager.m
@@ -162,7 +162,7 @@
settingsToSave.preferredCodec = preferredCodec;
settingsToSave.enableYUV444 = enableYUV444;
settingsToSave.enablePIP = enablePIP;
- settingsToSave.fullRange = fullRange;
+ settingsToSave.fullColorRange = fullRange;
settingsToSave.enableHdr = enableHdr;
settingsToSave.btMouseSupport = btMouseSupport;
// settingsToSave.absoluteTouchMode = absoluteTouchMode;
diff --git a/VoidLink/Database/TemporarySettings.h b/VoidLink/Database/TemporarySettings.h
index 992c1d21..a820c014 100644
--- a/VoidLink/Database/TemporarySettings.h
+++ b/VoidLink/Database/TemporarySettings.h
@@ -54,7 +54,7 @@
} preferredCodec;
@property (nonatomic) BOOL enableYUV444;
@property (nonatomic) BOOL enablePIP;
-@property (nonatomic) BOOL fullRange;
+@property (nonatomic) BOOL fullColorRange;
@property (nonatomic) BOOL reverseMouseWheelDirection;
@property (nonatomic, retain) NSNumber * asyncNativeTouchPriority;
@property (nonatomic) BOOL multiController;
diff --git a/VoidLink/Database/TemporarySettings.m b/VoidLink/Database/TemporarySettings.m
index 5827b165..31f39ebc 100644
--- a/VoidLink/Database/TemporarySettings.m
+++ b/VoidLink/Database/TemporarySettings.m
@@ -89,7 +89,7 @@
self.preferredCodec = settings.preferredCodec;
self.enableYUV444 = settings.enableYUV444;
self.enablePIP = settings.enablePIP;
- self.fullRange = settings.fullRange;
+ self.fullColorRange = settings.fullColorRange;
self.frameQueueSize = settings.frameQueueSize;
self.playAudioOnPC = settings.playAudioOnPC;
self.redirectMic = settings.redirectMic;
diff --git a/VoidLink/Limelight.xcdatamodeld/VoidLink v1.0.xcdatamodel/contents b/VoidLink/Limelight.xcdatamodeld/VoidLink v1.0.xcdatamodel/contents
index d4bf1f36..4fb95d3b 100644
--- a/VoidLink/Limelight.xcdatamodeld/VoidLink v1.0.xcdatamodel/contents
+++ b/VoidLink/Limelight.xcdatamodeld/VoidLink v1.0.xcdatamodel/contents
@@ -46,11 +46,11 @@
-
+
diff --git a/VoidLink/Stream/Connection.m b/VoidLink/Stream/Connection.m
index d3f41f55..ad2e2626 100644
--- a/VoidLink/Stream/Connection.m
+++ b/VoidLink/Stream/Connection.m
@@ -57,7 +57,7 @@ static AVAudioPCMBuffer *pcmBuffer;
static AVAudioFormat *audioFormat;
static bool muteInBackground;
-static bool fullRange;
+static bool fullColorRange;
static VideoDecoderRenderer* renderer;
@@ -65,7 +65,7 @@ static BandwidthTracker *bwTracker;
int DrDecoderSetup(int videoFormat, int width, int height, int redrawRate, void* context, int drFlags)
{
- [renderer setupWithVideoFormat:videoFormat width:width height:height frameRate:redrawRate fullRange:fullRange];
+ [renderer setupWithVideoFormat:videoFormat width:width height:height frameRate:redrawRate fullRange:fullColorRange];
lastFrameNumber = 0;
activeVideoFormat = videoFormat;
Log(LOG_I, @"Active video format: 0x%x", activeVideoFormat);
@@ -592,8 +592,8 @@ void ClSetControllerLED(uint16_t controllerNumber, uint8_t r, uint8_t g, uint8_t
_callbacks = callbacks;
LiInitializeStreamConfiguration(&_streamConfig);
- _streamConfig.colorRange = config.fullRange ? 1 : 0;
- fullRange = config.fullRange;
+ _streamConfig.colorRange = config.fullColorRange ? 1 : 0;
+ fullColorRange = config.fullColorRange;
_streamConfig.width = config.width;
_streamConfig.height = config.height;
_streamConfig.fps = config.frameRate;
diff --git a/VoidLink/Stream/StreamConfiguration.h b/VoidLink/Stream/StreamConfiguration.h
index d6b36952..1d3befe4 100644
--- a/VoidLink/Stream/StreamConfiguration.h
+++ b/VoidLink/Stream/StreamConfiguration.h
@@ -21,7 +21,7 @@
@property int serverCodecModeSupport;
@property BOOL enableYUV444;
@property BOOL enablePIP;
-@property BOOL fullRange;
+@property BOOL fullColorRange;
@property int width;
@property int height;
@property int frameRate;
diff --git a/VoidLink/Stream/StreamConfiguration.m b/VoidLink/Stream/StreamConfiguration.m
index 3b8e2d67..4812301f 100644
--- a/VoidLink/Stream/StreamConfiguration.m
+++ b/VoidLink/Stream/StreamConfiguration.m
@@ -9,5 +9,5 @@
#import "StreamConfiguration.h"
@implementation StreamConfiguration
-@synthesize host, httpsPort, appID, width, height, frameRate, bitRate, riKeyId, riKey, gamepadMask, appName, optimizeGameSettings, playAudioOnPC, swapABXYButtons, buttonVisualFeedback, gyroMode, emulatedControllerType, audioConfiguration, supportedVideoFormats, multiController, serverCert, rtspSessionUrl, serverCodecModeSupport, enableYUV444, enablePIP, fullRange, localVolume;
+@synthesize host, httpsPort, appID, width, height, frameRate, bitRate, riKeyId, riKey, gamepadMask, appName, optimizeGameSettings, playAudioOnPC, swapABXYButtons, buttonVisualFeedback, gyroMode, emulatedControllerType, audioConfiguration, supportedVideoFormats, multiController, serverCert, rtspSessionUrl, serverCodecModeSupport, enableYUV444, enablePIP, fullColorRange, localVolume;
@end
diff --git a/VoidLink/Stream/StreamManager.m b/VoidLink/Stream/StreamManager.m
index 6cc48ded..18ef2e07 100644
--- a/VoidLink/Stream/StreamManager.m
+++ b/VoidLink/Stream/StreamManager.m
@@ -205,7 +205,7 @@
double avgVideoMbps = [_connection getBwTracker].averageMbps;
double peakVideoMbps = [_connection getBwTracker].peakMbps;
- NSString* colorRange = _config.fullRange ? @"Full" : @"Limited";
+ NSString* colorRange = _config.fullColorRange ? @"Full" : @"Limited";
if(overlayLevel == 1) return [LocalizationHelper localizedStringForKey:@"simplifiedOsdText",
fps,
diff --git a/VoidLink/ViewControllers/MainFrameViewController.m b/VoidLink/ViewControllers/MainFrameViewController.m
index c173f43f..963c7dc7 100644
--- a/VoidLink/ViewControllers/MainFrameViewController.m
+++ b/VoidLink/ViewControllers/MainFrameViewController.m
@@ -830,7 +830,7 @@ static NSMutableSet* hostList;
_streamConfig.buttonVisualFeedback = streamSettings.buttonVisualFeedback;
_streamConfig.enableYUV444 = streamSettings.enableYUV444;
_streamConfig.enablePIP = streamSettings.enablePIP;
- _streamConfig.fullRange = streamSettings.fullRange;
+ _streamConfig.fullColorRange = streamSettings.fullColorRange;
_streamConfig.asyncNativeTouchPriority = streamSettings.asyncNativeTouchPriority; // new streamConfig segment
_streamConfig.gyroMode = [streamSettings.gyroMode intValue];
_streamConfig.emulatedControllerType = streamSettings.emulatedControllerType.intValue;
@@ -1178,10 +1178,15 @@ static NSMutableSet* hostList;
[settingsViewController setHidden:_settingsExpandedInStreamView forStack:settingsViewController.audioOnPcStack];
[settingsViewController.touchModeSelector1 setEnabled:!_settingsExpandedInStreamView || !(settingsViewController.touchModeSelector1.selectedSegmentIndex == AbsoluteTouch && !settingsViewController.passthroughGesturesSwitch.isOn)];
[settingsViewController.touchModeSelector2 setEnabled:settingsViewController.touchModeSelector1.enabled];
+
[settingsViewController.codecSelector setEnabled:!_settingsExpandedInStreamView];
- [settingsViewController.yuv444Switch setEnabled:!_settingsExpandedInStreamView];
- [settingsViewController.fullRangeSwitch setEnabled:!_settingsExpandedInStreamView];
- [settingsViewController.hdrSwitch setEnabled:!_settingsExpandedInStreamView && [settingsViewController hdrSupported]];
+ if(_settingsExpandedInStreamView){
+ [settingsViewController.yuv444Switch setEnabled:NO];
+ [settingsViewController.fullColorRangeSwitch setEnabled:NO];
+ [settingsViewController.hdrSwitch setEnabled:NO];
+ }
+ else [settingsViewController updateCodecDependentSwitches];
+
[settingsViewController.gyroModeSelector setEnabled:!_settingsExpandedInStreamView || ![streamFrameViewController shallDisableGyroHotSwitch]];
[settingsViewController.emulatedControllerTypeSelector setEnabled:!_settingsExpandedInStreamView];
[settingsViewController setHidden:_settingsExpandedInStreamView forStack:settingsViewController.citrixX1MouseStack];
diff --git a/VoidLink/ViewControllers/SettingsViewController.h b/VoidLink/ViewControllers/SettingsViewController.h
index 998ff0d4..7468ec74 100644
--- a/VoidLink/ViewControllers/SettingsViewController.h
+++ b/VoidLink/ViewControllers/SettingsViewController.h
@@ -49,7 +49,7 @@
@property (strong, nonatomic) IBOutlet UIStackView *codecStack;
@property (strong, nonatomic) IBOutlet UIStackView *yuv444Stack;
@property (strong, nonatomic) IBOutlet UIStackView *pipStack;
-@property (strong, nonatomic) IBOutlet UIStackView *fullRangeStack;
+@property (strong, nonatomic) IBOutlet UIStackView *fullColorRangeStack;
@property (strong, nonatomic) IBOutlet UIStackView *hdrStack;
@property (strong, nonatomic) IBOutlet UIStackView *reverseMouseWheelDirectionStack;
@property (strong, nonatomic) IBOutlet UIStackView *citrixX1MouseStack;
@@ -79,7 +79,7 @@
@property (strong, nonatomic) IBOutlet UISwitch *hdrSwitch;
@property (strong, nonatomic) IBOutlet UISwitch *yuv444Switch;
@property (strong, nonatomic) IBOutlet UISwitch *pipSwitch;
-@property (strong, nonatomic) IBOutlet UISwitch *fullRangeSwitch;
+@property (strong, nonatomic) IBOutlet UISwitch *fullColorRangeSwitch;
@property (strong, nonatomic) IBOutlet UISegmentedControl *reverseMouseWheelDirectionSelector;
@property (strong, nonatomic) IBOutlet UISegmentedControl *statsOverlaySelector;
@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
@@ -261,5 +261,6 @@
- (void)updateTheme;
- (void)hideDynamicLabelsWhenOverlapped:(UIView* )view;
- (void)setHidden:(BOOL)hidden forStack:(UIStackView* )stack;
+- (void)updateCodecDependentSwitches;
@end
diff --git a/VoidLink/ViewControllers/SettingsViewController.m b/VoidLink/ViewControllers/SettingsViewController.m
index d6fd2460..25264f74 100644
--- a/VoidLink/ViewControllers/SettingsViewController.m
+++ b/VoidLink/ViewControllers/SettingsViewController.m
@@ -435,7 +435,7 @@ BOOL isCustomResolution(int resolutionSelected) {
settingsViewJustExpanded = true;
// Ensure codec-dependent switches are in correct state when view appears
- [self updateCodecDependentSwitches];
+ // [self updateCodecDependentSwitches];
/*
[self checkAndRequestMicPermission];
@@ -755,8 +755,8 @@ BOOL isCustomResolution(int resolutionSelected) {
[self addSetting:self.codecStack ofId:@"codecStack" withInfoTag:NO withDynamicLabel:NO to:videoSection];
[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.fullColorRangeStack ofId:@"fullRangeStack" withInfoTag:NO 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];
@@ -1543,7 +1543,7 @@ BOOL isCustomResolution(int resolutionSelected) {
[_parentStack removeFromSuperview];
[self initParentStack];
[self layoutSections];
- [self updateCodecDependentSwitches]; // Ensure switches are in correct state after layout
+ // [self updateCodecDependentSwitches]; // Ensure switches are in correct state after layout
[self updateTheme];
//[self doneRemoveSettingItem];
Settings *currentSettings = [dataMan retrieveSettings];
@@ -1788,6 +1788,12 @@ BOOL isCustomResolution(int resolutionSelected) {
else {
[self.hdrSwitch setOn:self->tempSettings.enableHdr];
}
+
+ // Initialize codec-dependent switches together
+ [self.yuv444Switch setOn:self->tempSettings.enableYUV444];
+ [self.fullColorRangeSwitch setOn:self->tempSettings.fullColorRange];
+ [self.codecSelector addTarget:self action:@selector(codecSelectorChanged:) forControlEvents:UIControlEventValueChanged];
+ [self codecSelectorChanged:self.codecSelector];
[self.pipSwitch setOn:self->tempSettings.enablePIP];
if(@available(iOS 15.0, *)) {
@@ -1796,12 +1802,6 @@ BOOL isCustomResolution(int resolutionSelected) {
[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];
@@ -2693,6 +2693,7 @@ BOOL isCustomResolution(int resolutionSelected) {
return 0;
}
+// a setEnabled method for low iOS version UISlider
- (void) widget:(UIView*)widget setEnabled:(bool)enabled{
if([widget isKindOfClass:[UISlider class]]){
UISlider* widgetPtr = (UISlider* )widget;
@@ -3315,7 +3316,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 fullRange = self.fullColorRangeSwitch.isOn;
BOOL btMouseSupport = self.citrixX1MouseSwitch.isOn;
NSInteger touchMode = [self isNotNativeTouchOnly] ? self.touchModeSelector1.selectedSegmentIndex : NativeTouchOnly;
NSInteger statsOverlayLevel = [self.statsOverlaySelector selectedSegmentIndex];
@@ -3445,37 +3446,32 @@ BOOL isCustomResolution(int resolutionSelected) {
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];
+ [self.fullColorRangeSwitch setOn:NO animated:NO];
+ [self.fullColorRangeSwitch setEnabled: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.fullColorRangeSwitch setEnabled: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];
}
}
+
+ if(![self hdrSupported]) [self.hdrSwitch setOn:NO animated:NO];
}
@end
diff --git a/VoidLink/mul.lproj/iPad.xcstrings b/VoidLink/mul.lproj/iPad.xcstrings
index 432633da..8f4899e7 100644
--- a/VoidLink/mul.lproj/iPad.xcstrings
+++ b/VoidLink/mul.lproj/iPad.xcstrings
@@ -2954,13 +2954,31 @@
}
},
"iPd-Ra-Lbl.text" : {
- "comment" : "Class = \"UILabel\"; text = \"Full Range\"; ObjectID = \"iPd-Ra-Lbl\";",
+ "comment" : "Class = \"UILabel\"; text = \"Full Color Range\"; ObjectID = \"iPd-Ra-Lbl\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
- "value" : "Full Range"
+ "value" : "Full Color Range"
+ }
+ },
+ "zh-Hans" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "全色彩范围"
+ }
+ },
+ "zh-Hant" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "全色彩範圍"
+ }
+ },
+ "zh-HK" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "全色彩範圍"
}
}
}
diff --git a/VoidLink/mul.lproj/iPhone.xcstrings b/VoidLink/mul.lproj/iPhone.xcstrings
index aa776820..9fa0a3d3 100644
--- a/VoidLink/mul.lproj/iPhone.xcstrings
+++ b/VoidLink/mul.lproj/iPhone.xcstrings
@@ -2198,13 +2198,31 @@
}
},
"fRl-Ra-Lbl.text" : {
- "comment" : "Class = \"UILabel\"; text = \"Full Range\"; ObjectID = \"fRl-Ra-Lbl\";",
+ "comment" : "Class = \"UILabel\"; text = \"Full Color Range\"; ObjectID = \"fRl-Ra-Lbl\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
- "value" : "Full Range"
+ "value" : "Full Color Range"
+ }
+ },
+ "zh-Hans" : {
+ "stringUnit" : {
+ "state" : "needs_review",
+ "value" : "全色彩范围"
+ }
+ },
+ "zh-Hant" : {
+ "stringUnit" : {
+ "state" : "needs_review",
+ "value" : "全色彩範圍"
+ }
+ },
+ "zh-HK" : {
+ "stringUnit" : {
+ "state" : "needs_review",
+ "value" : "全色彩範圍"
}
}
}