fix: skip applying EDR metadata when HDR is disabled in client or host settings

This commit is contained in:
Acaki
2025-08-24 17:01:23 +08:00
parent 6f381362dd
commit e9e6f1deb9
3 changed files with 7 additions and 4 deletions
+2 -1
View File
@@ -21,8 +21,9 @@
@property (nonatomic) CFTimeInterval lastPresented;
@property (nonatomic) id<CAMetalDrawable> _Nullable nextDrawable;
@property (atomic) BOOL isStopping;
@property (nonatomic) BOOL hdrEnabled;
- (nonnull instancetype)initWithMetalDevice:(nonnull id<MTLDevice>)device drawablePixelFormat:(MTLPixelFormat)drawablePixelFormat framerate:(float)framerate;
- (nonnull instancetype)initWithMetalDevice:(nonnull id<MTLDevice>)device drawablePixelFormat:(MTLPixelFormat)drawablePixelFormat framerate:(float)framerate hdrEnabled:(BOOL)hdrEnabled;
- (void)renderFrame:(nonnull Frame *)frame toLayer:(nonnull CAMetalLayer *)layer API_AVAILABLE(ios(13.0));
- (void)waitToRenderTo:(nonnull CAMetalLayer *)layer API_AVAILABLE(ios(13.0));
- (void)drawableResize:(CGSize)drawableSize;
+3 -2
View File
@@ -135,7 +135,7 @@ CFStringRef __currentColorSpace;
dispatch_semaphore_t _inFlightSemaphore;
}
- (instancetype)initWithMetalDevice:(id<MTLDevice>)device drawablePixelFormat:(MTLPixelFormat)drawablePixelFormat framerate:(float)framerate {
- (instancetype)initWithMetalDevice:(id<MTLDevice>)device drawablePixelFormat:(MTLPixelFormat)drawablePixelFormat framerate:(float)framerate hdrEnabled:(BOOL)hdrEnabled {
self = [super init];
if (self) {
_sq = dispatch_queue_create("com.moonlight.MetalVideoRenderer",
@@ -144,6 +144,7 @@ CFStringRef __currentColorSpace;
_device = device;
_colorPixelFormat = MTLPixelFormatBGR10A2Unorm;
_framerate = framerate;
_hdrEnabled = hdrEnabled;
_commandQueue = [_device newCommandQueue];
_currentEDRHeadroom = 1.0f;
_lastColorSpace = -1;
@@ -416,7 +417,7 @@ CFStringRef __currentColorSpace;
#else
BOOL canUseEDR = NO;
if (@available(iOS 16.0, tvOS 16.0, *)) {
canUseEDR = useEDR && [CAEDRMetadata isAvailable];
canUseEDR = useEDR && [CAEDRMetadata isAvailable] && _hdrEnabled && isHDR;
}
if (canUseEDR) {
[self applyEDRFromFrame:frame withColorspace:colorspace toLayer:layer];
+2 -1
View File
@@ -62,7 +62,8 @@
// Initialize the renderer.
MetalVideoRenderer *renderer = [[MetalVideoRenderer alloc] initWithMetalDevice:device
drawablePixelFormat:MTLPixelFormatBGR10A2Unorm
framerate:self->_framerate];
framerate:self->_framerate
hdrEnabled:self->_enableHdr];
if (!renderer) {
Log(LOG_E, @"The renderer couldn't be initialized.");
return;