obs-ffmpeg: Add signal/proc to restart media playback

A convenient feature if the user wants to trigger the media to play back
on the fly for whatever reason.
This commit is contained in:
jp9000 2017-05-10 19:53:03 -07:00
parent 95ffca850d
commit 8962899b77
2 changed files with 31 additions and 1 deletions

View File

@ -33,7 +33,7 @@ ColorRange="YUV Color Range"
ColorRange.Auto="Auto"
ColorRange.Partial="Partial"
ColorRange.Full="Full"
RestartMedia="Restart Media"
MediaFileFilter.AllMediaFiles="All Media Files"
MediaFileFilter.VideoFiles="Video Files"

View File

@ -47,6 +47,7 @@ struct ffmpeg_source {
int sws_linesize;
enum video_range_type range;
obs_source_t *source;
obs_hotkey_id hotkey;
char *input;
char *input_format;
@ -314,6 +315,25 @@ static const char *ffmpeg_source_getname(void *unused)
return obs_module_text("FFMpegSource");
}
static bool restart_hotkey(void *data, obs_hotkey_id id,
obs_hotkey_t *hotkey, bool pressed)
{
UNUSED_PARAMETER(id);
UNUSED_PARAMETER(hotkey);
UNUSED_PARAMETER(pressed);
struct ffmpeg_source *s = data;
if (obs_source_active(s->source))
ffmpeg_source_start(s);
return true;
}
static void restart_proc(void *data, calldata_t *cd)
{
restart_hotkey(data, 0, NULL, true);
UNUSED_PARAMETER(cd);
}
static void *ffmpeg_source_create(obs_data_t *settings, obs_source_t *source)
{
UNUSED_PARAMETER(settings);
@ -321,6 +341,14 @@ static void *ffmpeg_source_create(obs_data_t *settings, obs_source_t *source)
struct ffmpeg_source *s = bzalloc(sizeof(struct ffmpeg_source));
s->source = source;
s->hotkey = obs_hotkey_register_source(source,
"MediaSource.Restart",
obs_module_text("RestartMedia"),
restart_hotkey, s);
proc_handler_t *ph = obs_source_get_proc_handler(source);
proc_handler_add(ph, "void restart()", restart_proc, s);
ffmpeg_source_update(s, settings);
return s;
}
@ -329,6 +357,8 @@ static void ffmpeg_source_destroy(void *data)
{
struct ffmpeg_source *s = data;
if (s->hotkey)
obs_hotkey_unregister(s->hotkey);
if (s->media_valid)
mp_media_free(&s->media);