提交 17f8e3c5 编写于 作者: J John Bradley

obs-ffmpeg: Add frame drop controls to the ffmpeg source UI

上级 3628d340
......@@ -12,3 +12,11 @@ HardwareDecode="Use hardware decoding when available"
Advanced="Advanced"
AudioBufferSize="Audio Buffer Size (frames)"
VideoBufferSize="Video Buffer Size (frames)"
FrameDropping="Frame Dropping Level"
DiscardNone="None"
DiscardDefault="Default (Invalid Packets)"
DiscardNonRef="Non-Reference Frames"
DiscardBiDir="Bi-Directional Frames"
DiscardNonIntra="Non-Intra Frames"
DiscardNonKey="Non-Key Frames"
DiscardAll="All Frames (Careful!)"
......@@ -266,8 +266,10 @@ static bool is_advanced_modified(obs_properties_t *props,
bool enabled = obs_data_get_bool(settings, "advanced");
obs_property_t *abuf = obs_properties_get(props, "audio_buffer_size");
obs_property_t *vbuf = obs_properties_get(props, "video_buffer_size");
obs_property_t *frame_drop = obs_properties_get(props, "frame_drop");
obs_property_set_visible(abuf, enabled);
obs_property_set_visible(vbuf, enabled);
obs_property_set_visible(frame_drop, enabled);
return true;
}
......@@ -317,6 +319,27 @@ static obs_properties_t *ffmpeg_source_getproperties(void *data)
obs_property_set_visible(prop, false);
prop = obs_properties_add_list(props, "frame_drop",
obs_module_text("FrameDropping"), OBS_COMBO_TYPE_LIST,
OBS_COMBO_FORMAT_INT);
obs_property_list_add_int(prop, obs_module_text("DiscardNone"),
AVDISCARD_NONE);
obs_property_list_add_int(prop, obs_module_text("DiscardDefault"),
AVDISCARD_DEFAULT);
obs_property_list_add_int(prop, obs_module_text("DiscardNonRef"),
AVDISCARD_NONREF);
obs_property_list_add_int(prop, obs_module_text("DiscardBiDir"),
AVDISCARD_BIDIR);
obs_property_list_add_int(prop, obs_module_text("DiscardNonIntra"),
AVDISCARD_NONINTRA);
obs_property_list_add_int(prop, obs_module_text("DiscardNonKey"),
AVDISCARD_NONKEY);
obs_property_list_add_int(prop, obs_module_text("DiscardAll"),
AVDISCARD_ALL);
obs_property_set_visible(prop, false);
return props;
}
......@@ -357,6 +380,10 @@ static void ffmpeg_source_update(void *data, obs_data_t *settings)
"audio_buffer_size");
int video_buffer_size = (int)obs_data_get_int(settings,
"video_buffer_size");
enum AVDiscard frame_drop =
(enum AVDiscard)obs_data_get_int(settings,
"frame_drop");
if (audio_buffer_size < 1) {
audio_buffer_size = 1;
blog(LOG_WARNING, "invalid audio_buffer_size %d",
......@@ -369,6 +396,12 @@ static void ffmpeg_source_update(void *data, obs_data_t *settings)
}
s->demuxer->options.audio_frame_queue_size = audio_buffer_size;
s->demuxer->options.video_frame_queue_size = video_buffer_size;
if (frame_drop < AVDISCARD_NONE || frame_drop > AVDISCARD_ALL) {
frame_drop = AVDISCARD_NONE;
blog(LOG_WARNING, "invalid frame_drop %d", frame_drop);
}
s->demuxer->options.frame_drop = frame_drop;
}
ff_demuxer_set_callbacks(&s->demuxer->video_callbacks,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册