Skip to content

Commit 4b08c7e

Browse files
committed
mac-multitrack: disable encoder gpu scale
* disable gpu_scale_type for mac so that scene items are not skipped * revert preferred colorspace to VIDEO_CS_709
1 parent 90f44a4 commit 4b08c7e

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

obs-studio-server/source/osn-multitrack-video-output.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,20 @@ static void adjust_video_encoder_scaling(const obs_video_info &ovi, obs_encoder_
6363
}
6464

6565
obs_encoder_set_scaled_size(video_encoder, requested_width, requested_height);
66-
obs_encoder_set_gpu_scale_type(video_encoder, encoder_config.gpu_scale_type.value_or(OBS_SCALE_BICUBIC));
66+
#ifdef __APPLE__
67+
// On Mac, only set GPU scale type to OBS_SCALE_DISABLE. Defaulting to BICUBIC, etc would
68+
// trigger maybe_set_up_gpu_rescale to create an encoder_only_mix with a new owi pointer
69+
// that doesn't match item->canvas, causing scene items to be skipped and black frames.
70+
// Instead, leave gpu_scale_type at OBS_SCALE_DISABLE so the encoder connects directly to
71+
// the canvas video mix and software (swscale) handles resolution downscaling.
72+
obs_encoder_set_gpu_scale_type(video_encoder, OBS_SCALE_DISABLE);
73+
#else
74+
obs_encoder_set_gpu_scale_type(video_encoder, encoder_config.gpu_scale_type.value_or(OBS_SCALE_BICUBIC));
75+
#endif
6776
obs_encoder_set_preferred_video_format(video_encoder, encoder_config.format.value_or(VIDEO_FORMAT_NV12));
68-
obs_encoder_set_preferred_color_space(video_encoder, encoder_config.colorspace.value_or(VIDEO_CS_DEFAULT));
77+
obs_encoder_set_preferred_color_space(video_encoder, encoder_config.colorspace.value_or(VIDEO_CS_709));
6978
obs_encoder_set_preferred_range(video_encoder, encoder_config.range.value_or(VIDEO_RANGE_PARTIAL));
79+
7080
}
7181

7282
static uint32_t closest_divisor(const obs_video_info &ovi, const media_frames_per_second &target_fps)
@@ -209,8 +219,6 @@ static bool create_video_encoders(const Config &go_live_config, std::shared_ptr<
209219

210220
if (obs_get_multiple_rendering()) {
211221
obs_encoder_set_video_mix(encoder, obs_video_mix_get(ovi, OBS_STREAMING_VIDEO_RENDERING));
212-
} else {
213-
obs_encoder_set_video_mix(encoder, obs_video_mix_get(ovi, OBS_MAIN_VIDEO_RENDERING));
214222
}
215223

216224
if (!obs_encoder_set_group(encoder, encoder_group.get())) {

0 commit comments

Comments
 (0)