diff --git a/VoidLink/Metal/MetalVideoRenderer.h b/VoidLink/Metal/MetalVideoRenderer.h index 1c35c786..954374bc 100644 --- a/VoidLink/Metal/MetalVideoRenderer.h +++ b/VoidLink/Metal/MetalVideoRenderer.h @@ -21,8 +21,9 @@ @property (nonatomic) CFTimeInterval lastPresented; @property (nonatomic) id _Nullable nextDrawable; @property (atomic) BOOL isStopping; +@property (nonatomic) BOOL hdrEnabled; -- (nonnull instancetype)initWithMetalDevice:(nonnull id)device drawablePixelFormat:(MTLPixelFormat)drawablePixelFormat framerate:(float)framerate; +- (nonnull instancetype)initWithMetalDevice:(nonnull id)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; diff --git a/VoidLink/Metal/MetalVideoRenderer.m b/VoidLink/Metal/MetalVideoRenderer.m index 760de828..2375ff4f 100644 --- a/VoidLink/Metal/MetalVideoRenderer.m +++ b/VoidLink/Metal/MetalVideoRenderer.m @@ -135,7 +135,7 @@ CFStringRef __currentColorSpace; dispatch_semaphore_t _inFlightSemaphore; } -- (instancetype)initWithMetalDevice:(id)device drawablePixelFormat:(MTLPixelFormat)drawablePixelFormat framerate:(float)framerate { +- (instancetype)initWithMetalDevice:(id)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]; diff --git a/VoidLink/Metal/MetalViewController.m b/VoidLink/Metal/MetalViewController.m index 549285f4..729100a2 100644 --- a/VoidLink/Metal/MetalViewController.m +++ b/VoidLink/Metal/MetalViewController.m @@ -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;