mirror of
https://github.com/moonlight-stream/moonlight-ios.git
synced 2026-02-16 02:20:53 +00:00
Add many new preferences to settings DB. Default HEVC to off due to reference frame invalidation not working
This commit is contained in:
@@ -14,7 +14,7 @@
|
|||||||
@interface DataManager : NSObject
|
@interface DataManager : NSObject
|
||||||
|
|
||||||
- (void) saveSettingsWithBitrate:(NSInteger)bitrate framerate:(NSInteger)framerate height:(NSInteger)height width:(NSInteger)width onscreenControls:(NSInteger)onscreenControls remote:
|
- (void) saveSettingsWithBitrate:(NSInteger)bitrate framerate:(NSInteger)framerate height:(NSInteger)height width:(NSInteger)width onscreenControls:(NSInteger)onscreenControls remote:
|
||||||
(NSInteger)streamingRemotely;
|
(BOOL)streamingRemotely;
|
||||||
|
|
||||||
- (NSArray*) getHosts;
|
- (NSArray*) getHosts;
|
||||||
- (void) updateHost:(TemporaryHost*)host;
|
- (void) updateHost:(TemporaryHost*)host;
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void) saveSettingsWithBitrate:(NSInteger)bitrate framerate:(NSInteger)framerate height:(NSInteger)height width:(NSInteger)width onscreenControls:(NSInteger)onscreenControls remote:
|
- (void) saveSettingsWithBitrate:(NSInteger)bitrate framerate:(NSInteger)framerate height:(NSInteger)height width:(NSInteger)width onscreenControls:(NSInteger)onscreenControls remote:
|
||||||
(NSInteger) streamingRemotely {
|
(BOOL) streamingRemotely {
|
||||||
|
|
||||||
[_managedObjectContext performBlockAndWait:^{
|
[_managedObjectContext performBlockAndWait:^{
|
||||||
Settings* settingsToSave = [self retrieveSettings];
|
Settings* settingsToSave = [self retrieveSettings];
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
settingsToSave.height = [NSNumber numberWithInteger:height];
|
settingsToSave.height = [NSNumber numberWithInteger:height];
|
||||||
settingsToSave.width = [NSNumber numberWithInteger:width];
|
settingsToSave.width = [NSNumber numberWithInteger:width];
|
||||||
settingsToSave.onscreenControls = [NSNumber numberWithInteger:onscreenControls];
|
settingsToSave.onscreenControls = [NSNumber numberWithInteger:onscreenControls];
|
||||||
settingsToSave.streamingRemotely = [NSNumber numberWithInteger:streamingRemotely];
|
settingsToSave.streamingRemotely = streamingRemotely;
|
||||||
|
|
||||||
[self saveData];
|
[self saveData];
|
||||||
}];
|
}];
|
||||||
|
|||||||
@@ -18,7 +18,12 @@
|
|||||||
@property (nonatomic, retain) NSNumber * width;
|
@property (nonatomic, retain) NSNumber * width;
|
||||||
@property (nonatomic, retain) NSNumber * onscreenControls;
|
@property (nonatomic, retain) NSNumber * onscreenControls;
|
||||||
@property (nonatomic, retain) NSString * uniqueId;
|
@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;
|
- (id) initFromSettings:(Settings*)settings;
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,11 @@
|
|||||||
self.onscreenControls = settings.onscreenControls;
|
self.onscreenControls = settings.onscreenControls;
|
||||||
self.uniqueId = settings.uniqueId;
|
self.uniqueId = settings.uniqueId;
|
||||||
self.streamingRemotely = settings.streamingRemotely;
|
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;
|
return self;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,16 +20,21 @@
|
|||||||
</entity>
|
</entity>
|
||||||
<entity name="Settings" representedClassName="Settings" syncable="YES" codeGenerationType="class">
|
<entity name="Settings" representedClassName="Settings" syncable="YES" codeGenerationType="class">
|
||||||
<attribute name="bitrate" attributeType="Integer 32" defaultValueString="10000" usesScalarValueType="NO" syncable="YES"/>
|
<attribute name="bitrate" attributeType="Integer 32" defaultValueString="10000" usesScalarValueType="NO" syncable="YES"/>
|
||||||
|
<attribute name="enableHdr" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES" syncable="YES"/>
|
||||||
<attribute name="framerate" attributeType="Integer 32" defaultValueString="60" usesScalarValueType="NO" syncable="YES"/>
|
<attribute name="framerate" attributeType="Integer 32" defaultValueString="60" usesScalarValueType="NO" syncable="YES"/>
|
||||||
<attribute name="height" attributeType="Integer 32" defaultValueString="720" usesScalarValueType="NO" syncable="YES"/>
|
<attribute name="height" attributeType="Integer 32" defaultValueString="720" usesScalarValueType="NO" syncable="YES"/>
|
||||||
|
<attribute name="multiController" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES" syncable="YES"/>
|
||||||
<attribute name="onscreenControls" attributeType="Integer 32" defaultValueString="1" usesScalarValueType="NO" syncable="YES"/>
|
<attribute name="onscreenControls" attributeType="Integer 32" defaultValueString="1" usesScalarValueType="NO" syncable="YES"/>
|
||||||
<attribute name="streamingRemotely" attributeType="Integer 32" defaultValueString="0" usesScalarValueType="NO" syncable="YES"/>
|
<attribute name="optimizeGames" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES" syncable="YES"/>
|
||||||
|
<attribute name="playAudioOnPC" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES" syncable="YES"/>
|
||||||
|
<attribute name="streamingRemotely" attributeType="Boolean" defaultValueString="0" usesScalarValueType="YES" syncable="YES"/>
|
||||||
<attribute name="uniqueId" attributeType="String" syncable="YES"/>
|
<attribute name="uniqueId" attributeType="String" syncable="YES"/>
|
||||||
|
<attribute name="useHevc" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES" syncable="YES"/>
|
||||||
<attribute name="width" attributeType="Integer 32" defaultValueString="1280" usesScalarValueType="NO" syncable="YES"/>
|
<attribute name="width" attributeType="Integer 32" defaultValueString="1280" usesScalarValueType="NO" syncable="YES"/>
|
||||||
</entity>
|
</entity>
|
||||||
<elements>
|
<elements>
|
||||||
<element name="App" positionX="0" positionY="54" width="128" height="105"/>
|
<element name="App" positionX="0" positionY="54" width="128" height="105"/>
|
||||||
<element name="Host" positionX="0" positionY="0" width="128" height="165"/>
|
<element name="Host" positionX="0" positionY="0" width="128" height="165"/>
|
||||||
<element name="Settings" positionX="0" positionY="0" width="128" height="30"/>
|
<element name="Settings" positionX="0" positionY="0" width="128" height="225"/>
|
||||||
</elements>
|
</elements>
|
||||||
</model>
|
</model>
|
||||||
@@ -297,6 +297,11 @@ void ClLogMessage(const char* format, ...)
|
|||||||
Log(LOG_E, @"Unknown audio channel count: %d", config.audioChannelCount);
|
Log(LOG_E, @"Unknown audio channel count: %d", config.audioChannelCount);
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HDR implies HEVC allowed
|
||||||
|
if (config.enableHdr) {
|
||||||
|
config.allowHevc = YES;
|
||||||
|
}
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE
|
#if TARGET_OS_IPHONE
|
||||||
// On iOS 11, we can use HEVC if the server supports encoding it
|
// 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.
|
// 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.
|
// As a result, we will only use HEVC on iOS 11.3 or later.
|
||||||
if (@available(iOS 11.3, *)) {
|
if (@available(iOS 11.3, *)) {
|
||||||
_streamConfig.supportsHevc = VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC);
|
_streamConfig.supportsHevc = config.allowHevc && VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (@available(macOS 10.13, *)) {
|
if (@available(macOS 10.13, *)) {
|
||||||
// Streaming with limited bandwidth will result in better quality with HEVC
|
// Streaming with limited bandwidth will result in better quality with HEVC
|
||||||
if (VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC) || _streamConfig.streamingRemotely != 0)
|
if (VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC) || _streamConfig.streamingRemotely != 0)
|
||||||
_streamConfig.supportsHevc = true;
|
_streamConfig.supportsHevc = config.allowHevc;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
@property int frameRate;
|
@property int frameRate;
|
||||||
@property int bitRate;
|
@property int bitRate;
|
||||||
@property int riKeyId;
|
@property int riKeyId;
|
||||||
@property int streamingRemotely;
|
@property BOOL streamingRemotely;
|
||||||
@property NSData* riKey;
|
@property NSData* riKey;
|
||||||
@property int gamepadMask;
|
@property int gamepadMask;
|
||||||
@property BOOL optimizeGameSettings;
|
@property BOOL optimizeGameSettings;
|
||||||
@@ -27,5 +27,6 @@
|
|||||||
@property int audioChannelMask;
|
@property int audioChannelMask;
|
||||||
@property BOOL enableHdr;
|
@property BOOL enableHdr;
|
||||||
@property BOOL multiController;
|
@property BOOL multiController;
|
||||||
|
@property BOOL allowHevc;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -9,5 +9,5 @@
|
|||||||
#import "StreamConfiguration.h"
|
#import "StreamConfiguration.h"
|
||||||
|
|
||||||
@implementation StreamConfiguration
|
@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
|
@end
|
||||||
|
|||||||
@@ -431,12 +431,12 @@ static NSMutableSet* hostList;
|
|||||||
_streamConfig.bitRate = [streamSettings.bitrate intValue];
|
_streamConfig.bitRate = [streamSettings.bitrate intValue];
|
||||||
_streamConfig.height = [streamSettings.height intValue];
|
_streamConfig.height = [streamSettings.height intValue];
|
||||||
_streamConfig.width = [streamSettings.width intValue];
|
_streamConfig.width = [streamSettings.width intValue];
|
||||||
_streamConfig.streamingRemotely = [streamSettings.streamingRemotely intValue];
|
_streamConfig.streamingRemotely = streamSettings.streamingRemotely;
|
||||||
_streamConfig.optimizeGameSettings = YES;
|
_streamConfig.optimizeGameSettings = streamSettings.optimizeGames;
|
||||||
_streamConfig.playAudioOnPC = NO;
|
_streamConfig.playAudioOnPC = streamSettings.playAudioOnPC;
|
||||||
|
|
||||||
// multiController must be set before calling getConnectedGamepadMask
|
// multiController must be set before calling getConnectedGamepadMask
|
||||||
_streamConfig.multiController = YES;
|
_streamConfig.multiController = streamSettings.multiController;
|
||||||
_streamConfig.gamepadMask = [ControllerSupport getConnectedGamepadMask:_streamConfig];
|
_streamConfig.gamepadMask = [ControllerSupport getConnectedGamepadMask:_streamConfig];
|
||||||
|
|
||||||
// TODO: Detect attached surround sound system then address 5.1 TODOs
|
// 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.
|
// 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 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
|
// It should also be a user preference, since some games may require higher peak
|
||||||
// higher peak brightness than the iOS device can support to look correct in HDR mode.
|
// brightness than the iOS device can support to look correct in HDR mode.
|
||||||
if (@available(iOS 11.3, *)) {
|
if (@available(iOS 11.3, *)) {
|
||||||
_streamConfig.enableHdr =
|
_streamConfig.enableHdr =
|
||||||
app.hdrSupported && // App supported
|
app.hdrSupported && // App supported
|
||||||
(app.host.serverCodecModeSupport & 0x200) != 0 && // HEVC Main10 encoding on host PC GPU
|
(app.host.serverCodecModeSupport & 0x200) != 0 && // HEVC Main10 encoding on host PC GPU
|
||||||
VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC) && // Decoder supported
|
VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC) && // Decoder supported
|
||||||
(AVPlayer.availableHDRModes & AVPlayerHDRModeHDR10) != 0 && // Display supported
|
(AVPlayer.availableHDRModes & AVPlayerHDRModeHDR10) != 0 && // Display supported
|
||||||
NO; // TODO: User wants it enabled
|
streamSettings.enableHdr; // User wants it enabled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -84,8 +84,7 @@ static NSString* bitrateFormat = @"Bitrate: %.1f Mbps";
|
|||||||
}
|
}
|
||||||
|
|
||||||
NSInteger onscreenControls = [currentSettings.onscreenControls integerValue];
|
NSInteger onscreenControls = [currentSettings.onscreenControls integerValue];
|
||||||
NSInteger streamingRemotely = [currentSettings.streamingRemotely integerValue];
|
[self.remoteSelector setSelectedSegmentIndex:currentSettings.streamingRemotely ? 1 : 0];
|
||||||
[self.remoteSelector setSelectedSegmentIndex:streamingRemotely];
|
|
||||||
[self.resolutionSelector setSelectedSegmentIndex:resolution];
|
[self.resolutionSelector setSelectedSegmentIndex:resolution];
|
||||||
[self.resolutionSelector addTarget:self action:@selector(newResolutionFpsChosen) forControlEvents:UIControlEventValueChanged];
|
[self.resolutionSelector addTarget:self action:@selector(newResolutionFpsChosen) forControlEvents:UIControlEventValueChanged];
|
||||||
[self.framerateSelector setSelectedSegmentIndex:framerate];
|
[self.framerateSelector setSelectedSegmentIndex:framerate];
|
||||||
@@ -168,7 +167,7 @@ static NSString* bitrateFormat = @"Bitrate: %.1f Mbps";
|
|||||||
NSInteger height = [self getChosenStreamHeight];
|
NSInteger height = [self getChosenStreamHeight];
|
||||||
NSInteger width = [self getChosenStreamWidth];
|
NSInteger width = [self getChosenStreamWidth];
|
||||||
NSInteger onscreenControls = [self.onscreenControlSelector selectedSegmentIndex];
|
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
|
[dataMan saveSettingsWithBitrate:_bitrate framerate:framerate height:height width:width onscreenControls:onscreenControls
|
||||||
remote: streamingRemotely];
|
remote: streamingRemotely];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user