diff --git a/plugins/obs-outputs/rtmp-stream.c b/plugins/obs-outputs/rtmp-stream.c index 1425668768eef0..5679a595f69804 100644 --- a/plugins/obs-outputs/rtmp-stream.c +++ b/plugins/obs-outputs/rtmp-stream.c @@ -961,12 +961,14 @@ static bool rtmp_stream_start(void *data) stream->initial_bitrate = bitrate; stream->dynamic_bitrate = bitrate; stream->switch_variable_bitrate = obs_data_get_bool(params, "dynamic_variable_bitrate"); + stream->disable_frame_drops = obs_data_get_bool(params, "disable_frame_drops"); obs_data_release(params); } else { stream->initial_bitrate = 2500; stream->dynamic_bitrate = 2500; stream->switch_variable_bitrate = false; + stream->disable_frame_drops = false; } stream->last_adjustment_time = os_gettime_ns() / 1000000; stream->last_congestion = 0; @@ -1091,7 +1093,8 @@ static void check_to_drop_frames(struct rtmp_stream *stream, bool pframes) if (buffer_duration_usec > drop_threshold) { debug("buffer_duration_usec: %" PRId64, buffer_duration_usec); - drop_frames(stream, name, priority, pframes); + if (!stream->disable_frame_drops) + drop_frames(stream, name, priority, pframes); } } diff --git a/plugins/obs-outputs/rtmp-stream.h b/plugins/obs-outputs/rtmp-stream.h index 80a2d0a3db3bd0..e336c6f2cb01b2 100644 --- a/plugins/obs-outputs/rtmp-stream.h +++ b/plugins/obs-outputs/rtmp-stream.h @@ -98,6 +98,7 @@ struct rtmp_stream { float mean_congestion; float congestion_array[CONGESTION_ARRAY_SIZE]; size_t congestion_counter; + bool disable_frame_drops; RTMP rtmp; diff --git a/plugins/obs-x264/obs-x264.c b/plugins/obs-x264/obs-x264.c index 3fa3694540e146..483e7c161a4bfc 100644 --- a/plugins/obs-x264/obs-x264.c +++ b/plugins/obs-x264/obs-x264.c @@ -108,6 +108,7 @@ static void obs_x264_defaults(obs_data_t *settings) obs_data_set_default_string(settings, "tune", ""); obs_data_set_default_string(settings, "x264opts", ""); obs_data_set_default_bool (settings, "dynamic_variable_bitrate", false); + obs_data_set_default_bool (settings, "disable_frame_drops", false); obs_data_set_default_int (settings, "i_nal_hrd", X264_NAL_HRD_NONE); } @@ -132,6 +133,7 @@ static inline void add_strings(obs_property_t *list, const char *const *strings) #define TEXT_NONE obs_module_text("None") #define TEXT_X264_OPTS obs_module_text("EncoderOptions") #define TEXT_DYN_BITRATE obs_module_text("Dynamic Variable Bitrate") +#define TEXT_DIS_DROP obs_module_text("Disable Frame Drops") static bool use_bufsize_modified(obs_properties_t *ppts, obs_property_t *p, obs_data_t *settings) @@ -209,6 +211,7 @@ static obs_properties_t *obs_x264_props(void *unused) obs_property_list_add_string(list, TEXT_NONE, ""); add_strings(list, x264_tune_names); obs_properties_add_bool(props, "dynamic_variable_bitrate", TEXT_DYN_BITRATE); + obs_properties_add_bool(props, "disable_frame_drops", TEXT_DIS_DROP); #ifdef ENABLE_VFR obs_properties_add_bool(props, "vfr", TEXT_VFR);