UI: Add chapter frontend API and hotkey

This commit is contained in:
derrod 2024-05-02 07:04:49 +02:00
parent 4503f0a056
commit 8ac8118b7f
7 changed files with 46 additions and 1 deletions

View file

@ -337,6 +337,23 @@ struct OBSStudioAPI : obs_frontend_callbacks {
}
}
bool obs_frontend_recording_add_chapter(const char *name) override
{
if (!os_atomic_load_bool(&recording_active) ||
os_atomic_load_bool(&recording_paused))
return false;
proc_handler_t *ph = obs_output_get_proc_handler(
main->outputHandler->fileOutput);
calldata cd;
calldata_init(&cd);
calldata_set_string(&cd, "chapter_name", name);
bool result = proc_handler_call(ph, "add_chapter", &cd);
calldata_free(&cd);
return result;
}
void obs_frontend_replay_buffer_start(void) override
{
QMetaObject::invokeMethod(main, "StartReplayBuffer");

View file

@ -732,6 +732,7 @@ Basic.Main.StopRecording="Stop Recording"
Basic.Main.PauseRecording="Pause Recording"
Basic.Main.UnpauseRecording="Unpause Recording"
Basic.Main.SplitFile="Split Recording File"
Basic.Main.AddChapterMarker="Add Chapter Marker"
Basic.Main.StoppingRecording="Stopping Recording..."
Basic.Main.StopReplayBuffer="Stop Replay Buffer"
Basic.Main.StoppingReplayBuffer="Stopping Replay Buffer..."

View file

@ -285,6 +285,12 @@ bool obs_frontend_recording_split_file(void)
: false;
}
bool obs_frontend_recording_add_chapter(const char *name)
{
return !!callbacks_valid() ? c->obs_frontend_recording_add_chapter(name)
: false;
}
void obs_frontend_replay_buffer_start(void)
{
if (callbacks_valid())

View file

@ -190,6 +190,7 @@ EXPORT bool obs_frontend_recording_active(void);
EXPORT void obs_frontend_recording_pause(bool pause);
EXPORT bool obs_frontend_recording_paused(void);
EXPORT bool obs_frontend_recording_split_file(void);
EXPORT bool obs_frontend_recording_add_chapter(const char *name);
EXPORT void obs_frontend_replay_buffer_start(void);
EXPORT void obs_frontend_replay_buffer_save(void);

View file

@ -53,6 +53,7 @@ struct obs_frontend_callbacks {
virtual void obs_frontend_recording_pause(bool pause) = 0;
virtual bool obs_frontend_recording_paused(void) = 0;
virtual bool obs_frontend_recording_split_file(void) = 0;
virtual bool obs_frontend_recording_add_chapter(const char *name) = 0;
virtual void obs_frontend_replay_buffer_start(void) = 0;
virtual void obs_frontend_replay_buffer_save(void) = 0;

View file

@ -2808,6 +2808,23 @@ void OBSBasic::CreateHotkeys()
this);
LoadHotkey(splitFileHotkey, "OBSBasic.SplitFile");
/* Adding chapters is only supported by the native MP4 output */
const string_view output_id =
obs_output_get_id(outputHandler->fileOutput);
if (output_id == "mp4_output") {
addChapterHotkey = obs_hotkey_register_frontend(
"OBSBasic.AddChapterMarker",
Str("Basic.Main.AddChapterMarker"),
[](void *, obs_hotkey_id, obs_hotkey_t *,
bool pressed) {
if (pressed)
obs_frontend_recording_add_chapter(
nullptr);
},
this);
LoadHotkey(addChapterHotkey, "OBSBasic.AddChapterMarker");
}
replayBufHotkeys = obs_hotkey_pair_register_frontend(
"OBSBasic.StartReplayBuffer",
Str("Basic.Main.StartReplayBuffer"),
@ -2936,6 +2953,7 @@ void OBSBasic::ClearHotkeys()
obs_hotkey_pair_unregister(recordingHotkeys);
obs_hotkey_pair_unregister(pauseHotkeys);
obs_hotkey_unregister(splitFileHotkey);
obs_hotkey_unregister(addChapterHotkey);
obs_hotkey_pair_unregister(replayBufHotkeys);
obs_hotkey_pair_unregister(vcamHotkeys);
obs_hotkey_pair_unregister(togglePreviewHotkeys);

View file

@ -460,7 +460,8 @@ private:
obs_hotkey_pair_id streamingHotkeys, recordingHotkeys, pauseHotkeys,
replayBufHotkeys, vcamHotkeys, togglePreviewHotkeys,
contextBarHotkeys;
obs_hotkey_id forceStreamingStopHotkey, splitFileHotkey;
obs_hotkey_id forceStreamingStopHotkey, splitFileHotkey,
addChapterHotkey;
void InitDefaultTransitions();
void InitTransition(obs_source_t *transition);