diff --git a/Limelight/Database/DataManager.h b/Limelight/Database/DataManager.h
index 327c58e7..8c7c7ed6 100644
--- a/Limelight/Database/DataManager.h
+++ b/Limelight/Database/DataManager.h
@@ -14,7 +14,7 @@
@interface DataManager : NSObject
- (void) saveSettingsWithBitrate:(NSInteger)bitrate framerate:(NSInteger)framerate height:(NSInteger)height width:(NSInteger)width onscreenControls:(NSInteger)onscreenControls remote:
- (NSInteger)streamingRemotely;
+ (BOOL)streamingRemotely;
- (NSArray*) getHosts;
- (void) updateHost:(TemporaryHost*)host;
diff --git a/Limelight/Database/DataManager.m b/Limelight/Database/DataManager.m
index 3bc742b7..3adfc7f1 100644
--- a/Limelight/Database/DataManager.m
+++ b/Limelight/Database/DataManager.m
@@ -54,7 +54,7 @@
}
- (void) saveSettingsWithBitrate:(NSInteger)bitrate framerate:(NSInteger)framerate height:(NSInteger)height width:(NSInteger)width onscreenControls:(NSInteger)onscreenControls remote:
- (NSInteger) streamingRemotely {
+ (BOOL) streamingRemotely {
[_managedObjectContext performBlockAndWait:^{
Settings* settingsToSave = [self retrieveSettings];
@@ -64,7 +64,7 @@
settingsToSave.height = [NSNumber numberWithInteger:height];
settingsToSave.width = [NSNumber numberWithInteger:width];
settingsToSave.onscreenControls = [NSNumber numberWithInteger:onscreenControls];
- settingsToSave.streamingRemotely = [NSNumber numberWithInteger:streamingRemotely];
+ settingsToSave.streamingRemotely = streamingRemotely;
[self saveData];
}];
diff --git a/Limelight/Database/TemporarySettings.h b/Limelight/Database/TemporarySettings.h
index a2e34af2..28caa35e 100644
--- a/Limelight/Database/TemporarySettings.h
+++ b/Limelight/Database/TemporarySettings.h
@@ -18,7 +18,12 @@
@property (nonatomic, retain) NSNumber * width;
@property (nonatomic, retain) NSNumber * onscreenControls;
@property (nonatomic, retain) NSString * uniqueId;
-@property (nonatomic, retain) NSNumber * streamingRemotely;
+@property (nonatomic) BOOL streamingRemotely;
+@property (nonatomic) BOOL useHevc;
+@property (nonatomic) BOOL multiController;
+@property (nonatomic) BOOL playAudioOnPC;
+@property (nonatomic) BOOL optimizeGames;
+@property (nonatomic) BOOL enableHdr;
- (id) initFromSettings:(Settings*)settings;
diff --git a/Limelight/Database/TemporarySettings.m b/Limelight/Database/TemporarySettings.m
index 9e17eccf..dcef089f 100644
--- a/Limelight/Database/TemporarySettings.m
+++ b/Limelight/Database/TemporarySettings.m
@@ -22,6 +22,11 @@
self.onscreenControls = settings.onscreenControls;
self.uniqueId = settings.uniqueId;
self.streamingRemotely = settings.streamingRemotely;
+ self.useHevc = settings.useHevc;
+ self.multiController = settings.multiController;
+ self.playAudioOnPC = settings.playAudioOnPC;
+ self.enableHdr = settings.enableHdr;
+ self.optimizeGames = settings.optimizeGames;
return self;
}
diff --git a/Limelight/Limelight.xcdatamodeld/Moonlight v1.1.xcdatamodel/contents b/Limelight/Limelight.xcdatamodeld/Moonlight v1.1.xcdatamodel/contents
index 853831b7..090bd637 100644
--- a/Limelight/Limelight.xcdatamodeld/Moonlight v1.1.xcdatamodel/contents
+++ b/Limelight/Limelight.xcdatamodeld/Moonlight v1.1.xcdatamodel/contents
@@ -20,16 +20,21 @@
+
+
-
+
+
+
+
-
+
\ No newline at end of file
diff --git a/Limelight/Stream/Connection.m b/Limelight/Stream/Connection.m
index d9504625..8bcd89a2 100644
--- a/Limelight/Stream/Connection.m
+++ b/Limelight/Stream/Connection.m
@@ -297,6 +297,11 @@ void ClLogMessage(const char* format, ...)
Log(LOG_E, @"Unknown audio channel count: %d", config.audioChannelCount);
abort();
}
+
+ // HDR implies HEVC allowed
+ if (config.enableHdr) {
+ config.allowHevc = YES;
+ }
#if TARGET_OS_IPHONE
// On iOS 11, we can use HEVC if the server supports encoding it
@@ -305,13 +310,13 @@ void ClLogMessage(const char* format, ...)
// to freeze after a few minutes with HEVC prior to iOS 11.3.
// As a result, we will only use HEVC on iOS 11.3 or later.
if (@available(iOS 11.3, *)) {
- _streamConfig.supportsHevc = VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC);
+ _streamConfig.supportsHevc = config.allowHevc && VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC);
}
#else
if (@available(macOS 10.13, *)) {
// Streaming with limited bandwidth will result in better quality with HEVC
if (VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC) || _streamConfig.streamingRemotely != 0)
- _streamConfig.supportsHevc = true;
+ _streamConfig.supportsHevc = config.allowHevc;
}
#endif
diff --git a/Limelight/Stream/StreamConfiguration.h b/Limelight/Stream/StreamConfiguration.h
index 110ceed1..8bf8ee8c 100644
--- a/Limelight/Stream/StreamConfiguration.h
+++ b/Limelight/Stream/StreamConfiguration.h
@@ -18,7 +18,7 @@
@property int frameRate;
@property int bitRate;
@property int riKeyId;
-@property int streamingRemotely;
+@property BOOL streamingRemotely;
@property NSData* riKey;
@property int gamepadMask;
@property BOOL optimizeGameSettings;
@@ -27,5 +27,6 @@
@property int audioChannelMask;
@property BOOL enableHdr;
@property BOOL multiController;
+@property BOOL allowHevc;
@end
diff --git a/Limelight/Stream/StreamConfiguration.m b/Limelight/Stream/StreamConfiguration.m
index f9625bb5..3efa33a6 100644
--- a/Limelight/Stream/StreamConfiguration.m
+++ b/Limelight/Stream/StreamConfiguration.m
@@ -9,5 +9,5 @@
#import "StreamConfiguration.h"
@implementation StreamConfiguration
-@synthesize host, appID, width, height, frameRate, bitRate, riKeyId, riKey, gamepadMask, streamingRemotely, appName, optimizeGameSettings, playAudioOnPC, audioChannelMask, audioChannelCount, enableHdr, multiController;
+@synthesize host, appID, width, height, frameRate, bitRate, riKeyId, riKey, gamepadMask, streamingRemotely, appName, optimizeGameSettings, playAudioOnPC, audioChannelMask, audioChannelCount, enableHdr, multiController, allowHevc;
@end
diff --git a/Limelight/ViewControllers/MainFrameViewController.m b/Limelight/ViewControllers/MainFrameViewController.m
index 25b10ed2..ef908a26 100644
--- a/Limelight/ViewControllers/MainFrameViewController.m
+++ b/Limelight/ViewControllers/MainFrameViewController.m
@@ -431,12 +431,12 @@ static NSMutableSet* hostList;
_streamConfig.bitRate = [streamSettings.bitrate intValue];
_streamConfig.height = [streamSettings.height intValue];
_streamConfig.width = [streamSettings.width intValue];
- _streamConfig.streamingRemotely = [streamSettings.streamingRemotely intValue];
- _streamConfig.optimizeGameSettings = YES;
- _streamConfig.playAudioOnPC = NO;
+ _streamConfig.streamingRemotely = streamSettings.streamingRemotely;
+ _streamConfig.optimizeGameSettings = streamSettings.optimizeGames;
+ _streamConfig.playAudioOnPC = streamSettings.playAudioOnPC;
// multiController must be set before calling getConnectedGamepadMask
- _streamConfig.multiController = YES;
+ _streamConfig.multiController = streamSettings.multiController;
_streamConfig.gamepadMask = [ControllerSupport getConnectedGamepadMask:_streamConfig];
// TODO: Detect attached surround sound system then address 5.1 TODOs
@@ -447,15 +447,15 @@ static NSMutableSet* hostList;
// HDR requires HDR10 game, HDR10 display, and HEVC Main10 decoder on the client.
// It additionally requires an HEVC Main10 encoder on the server (GTX 1000+).
//
- // It should also be a user preference when supported, since some games may require
- // higher peak brightness than the iOS device can support to look correct in HDR mode.
+ // It should also be a user preference, since some games may require higher peak
+ // brightness than the iOS device can support to look correct in HDR mode.
if (@available(iOS 11.3, *)) {
_streamConfig.enableHdr =
app.hdrSupported && // App supported
(app.host.serverCodecModeSupport & 0x200) != 0 && // HEVC Main10 encoding on host PC GPU
VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC) && // Decoder supported
(AVPlayer.availableHDRModes & AVPlayerHDRModeHDR10) != 0 && // Display supported
- NO; // TODO: User wants it enabled
+ streamSettings.enableHdr; // User wants it enabled
}
}
diff --git a/Limelight/ViewControllers/SettingsViewController.m b/Limelight/ViewControllers/SettingsViewController.m
index 65d51bf1..63e90cbe 100644
--- a/Limelight/ViewControllers/SettingsViewController.m
+++ b/Limelight/ViewControllers/SettingsViewController.m
@@ -84,8 +84,7 @@ static NSString* bitrateFormat = @"Bitrate: %.1f Mbps";
}
NSInteger onscreenControls = [currentSettings.onscreenControls integerValue];
- NSInteger streamingRemotely = [currentSettings.streamingRemotely integerValue];
- [self.remoteSelector setSelectedSegmentIndex:streamingRemotely];
+ [self.remoteSelector setSelectedSegmentIndex:currentSettings.streamingRemotely ? 1 : 0];
[self.resolutionSelector setSelectedSegmentIndex:resolution];
[self.resolutionSelector addTarget:self action:@selector(newResolutionFpsChosen) forControlEvents:UIControlEventValueChanged];
[self.framerateSelector setSelectedSegmentIndex:framerate];
@@ -168,7 +167,7 @@ static NSString* bitrateFormat = @"Bitrate: %.1f Mbps";
NSInteger height = [self getChosenStreamHeight];
NSInteger width = [self getChosenStreamWidth];
NSInteger onscreenControls = [self.onscreenControlSelector selectedSegmentIndex];
- NSInteger streamingRemotely = [self.remoteSelector selectedSegmentIndex];
+ BOOL streamingRemotely = [self.remoteSelector selectedSegmentIndex] == 1 ? YES : NO;
[dataMan saveSettingsWithBitrate:_bitrate framerate:framerate height:height width:width onscreenControls:onscreenControls
remote: streamingRemotely];
}