@@ -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
7282static 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