mac-capture: Support P3 for HDR recordings

This commit is contained in:
jpark37
2022-09-29 17:55:21 -07:00
committed by Jim
parent e709797d80
commit d84a9dad8a
+29 -10
View File
@@ -462,8 +462,8 @@ static bool init_screen_stream(struct screen_capture *sc)
os_sem_post(sc->shareable_content_available);
[sc->stream_properties setQueueDepth:8];
[sc->stream_properties setShowsCursor:!sc->hide_cursor];
[sc->stream_properties setColorSpaceName:kCGColorSpaceSRGB];
[sc->stream_properties setPixelFormat:'BGRA'];
[sc->stream_properties setColorSpaceName:kCGColorSpaceDisplayP3];
[sc->stream_properties setPixelFormat:'l10r'];
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 130000
if (@available(macOS 13.0, *)) {
[sc->stream_properties setCapturesAudio:TRUE];
@@ -649,18 +649,13 @@ static void screen_capture_video_render(void *data, gs_effect_t *effect
if (!sc->tex)
return;
const bool linear_srgb = gs_get_linear_srgb();
const bool previous = gs_framebuffer_srgb_enabled();
gs_enable_framebuffer_srgb(linear_srgb);
gs_enable_framebuffer_srgb(true);
gs_eparam_t *param = gs_effect_get_param_by_name(sc->effect, "image");
if (linear_srgb)
gs_effect_set_texture_srgb(param, sc->tex);
else
gs_effect_set_texture(param, sc->tex);
gs_effect_set_texture(param, sc->tex);
while (gs_effect_loop(sc->effect, "Draw"))
while (gs_effect_loop(sc->effect, "DrawD65P3"))
gs_draw_sprite(sc->tex, 0, 0, 0);
gs_enable_framebuffer_srgb(previous);
@@ -1034,6 +1029,29 @@ static obs_properties_t *screen_capture_properties(void *data)
return props;
}
enum gs_color_space screen_capture_video_get_color_space(
void *data, size_t count, const enum gs_color_space *preferred_spaces)
{
UNUSED_PARAMETER(data);
for (size_t i = 0; i < count; ++i) {
if (preferred_spaces[i] == GS_CS_SRGB_16F)
return GS_CS_SRGB_16F;
}
for (size_t i = 0; i < count; ++i) {
if (preferred_spaces[i] == GS_CS_709_EXTENDED)
return GS_CS_709_EXTENDED;
}
for (size_t i = 0; i < count; ++i) {
if (preferred_spaces[i] == GS_CS_SRGB)
return GS_CS_SRGB;
}
return GS_CS_SRGB_16F;
}
struct obs_source_info screen_capture_info = {
.id = "screen_capture",
.type = OBS_SOURCE_TYPE_INPUT,
@@ -1055,6 +1073,7 @@ struct obs_source_info screen_capture_info = {
.get_properties = screen_capture_properties,
.update = screen_capture_update,
.icon_type = OBS_ICON_TYPE_DESKTOP_CAPTURE,
.video_get_color_space = screen_capture_video_get_color_space,
};
@implementation ScreenCaptureDelegate