mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-14 15:24:07 +00:00
UI: Add preload callbacks to frontend API
Allows loading data before actually loading any scene data.
This commit is contained in:
parent
260fb571b8
commit
5645c02c8f
|
@ -49,6 +49,7 @@ struct OBSStudioAPI : obs_frontend_callbacks {
|
||||||
OBSBasic *main;
|
OBSBasic *main;
|
||||||
vector<OBSStudioCallback<obs_frontend_event_cb>> callbacks;
|
vector<OBSStudioCallback<obs_frontend_event_cb>> callbacks;
|
||||||
vector<OBSStudioCallback<obs_frontend_save_cb>> saveCallbacks;
|
vector<OBSStudioCallback<obs_frontend_save_cb>> saveCallbacks;
|
||||||
|
vector<OBSStudioCallback<obs_frontend_save_cb>> preloadCallbacks;
|
||||||
|
|
||||||
inline OBSStudioAPI(OBSBasic *main_) : main(main_) {}
|
inline OBSStudioAPI(OBSBasic *main_) : main(main_) {}
|
||||||
|
|
||||||
|
@ -348,6 +349,26 @@ struct OBSStudioAPI : obs_frontend_callbacks {
|
||||||
saveCallbacks.erase(saveCallbacks.begin() + idx);
|
saveCallbacks.erase(saveCallbacks.begin() + idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void obs_frontend_add_preload_callback(obs_frontend_save_cb callback,
|
||||||
|
void *private_data) override
|
||||||
|
{
|
||||||
|
size_t idx = GetCallbackIdx(preloadCallbacks, callback,
|
||||||
|
private_data);
|
||||||
|
if (idx == (size_t)-1)
|
||||||
|
preloadCallbacks.emplace_back(callback, private_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void obs_frontend_remove_preload_callback(obs_frontend_save_cb callback,
|
||||||
|
void *private_data) override
|
||||||
|
{
|
||||||
|
size_t idx = GetCallbackIdx(preloadCallbacks, callback,
|
||||||
|
private_data);
|
||||||
|
if (idx == (size_t)-1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
preloadCallbacks.erase(preloadCallbacks.begin() + idx);
|
||||||
|
}
|
||||||
|
|
||||||
void obs_frontend_push_ui_translation(
|
void obs_frontend_push_ui_translation(
|
||||||
obs_frontend_translate_ui_cb translate) override
|
obs_frontend_translate_ui_cb translate) override
|
||||||
{
|
{
|
||||||
|
@ -409,6 +430,15 @@ struct OBSStudioAPI : obs_frontend_callbacks {
|
||||||
{
|
{
|
||||||
for (auto cb : saveCallbacks)
|
for (auto cb : saveCallbacks)
|
||||||
cb.callback(settings, false, cb.private_data);
|
cb.callback(settings, false, cb.private_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_preload(obs_data_t *settings) override
|
||||||
|
{
|
||||||
|
for (size_t i = preloadCallbacks.size(); i > 0; i--) {
|
||||||
|
auto cb = preloadCallbacks[i - 1];
|
||||||
|
cb.callback(settings, false, cb.private_data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_save(obs_data_t *settings) override
|
void on_save(obs_data_t *settings) override
|
||||||
|
|
|
@ -311,6 +311,20 @@ void obs_frontend_remove_save_callback(obs_frontend_save_cb callback,
|
||||||
c->obs_frontend_remove_save_callback(callback, private_data);
|
c->obs_frontend_remove_save_callback(callback, private_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void obs_frontend_add_preload_callback(obs_frontend_save_cb callback,
|
||||||
|
void *private_data)
|
||||||
|
{
|
||||||
|
if (callbacks_valid())
|
||||||
|
c->obs_frontend_add_preload_callback(callback, private_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void obs_frontend_remove_preload_callback(obs_frontend_save_cb callback,
|
||||||
|
void *private_data)
|
||||||
|
{
|
||||||
|
if (callbacks_valid())
|
||||||
|
c->obs_frontend_remove_preload_callback(callback, private_data);
|
||||||
|
}
|
||||||
|
|
||||||
void obs_frontend_push_ui_translation(obs_frontend_translate_ui_cb translate)
|
void obs_frontend_push_ui_translation(obs_frontend_translate_ui_cb translate)
|
||||||
{
|
{
|
||||||
if (callbacks_valid())
|
if (callbacks_valid())
|
||||||
|
|
|
@ -135,6 +135,11 @@ EXPORT obs_output_t *obs_frontend_get_replay_buffer_output(void);
|
||||||
EXPORT config_t *obs_frontend_get_profile_config(void);
|
EXPORT config_t *obs_frontend_get_profile_config(void);
|
||||||
EXPORT config_t *obs_frontend_get_global_config(void);
|
EXPORT config_t *obs_frontend_get_global_config(void);
|
||||||
|
|
||||||
|
EXPORT void obs_frontend_add_preload_callback(obs_frontend_save_cb callback,
|
||||||
|
void *private_data);
|
||||||
|
EXPORT void obs_frontend_remove_preload_callback(obs_frontend_save_cb callback,
|
||||||
|
void *private_data);
|
||||||
|
|
||||||
typedef bool (*obs_frontend_translate_ui_cb)(const char *text,
|
typedef bool (*obs_frontend_translate_ui_cb)(const char *text,
|
||||||
const char **out);
|
const char **out);
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,11 @@ struct obs_frontend_callbacks {
|
||||||
virtual void obs_frontend_remove_save_callback(
|
virtual void obs_frontend_remove_save_callback(
|
||||||
obs_frontend_save_cb callback, void *private_data)=0;
|
obs_frontend_save_cb callback, void *private_data)=0;
|
||||||
|
|
||||||
|
virtual void obs_frontend_add_preload_callback(
|
||||||
|
obs_frontend_save_cb callback, void *private_data)=0;
|
||||||
|
virtual void obs_frontend_remove_preload_callback(
|
||||||
|
obs_frontend_save_cb callback, void *private_data)=0;
|
||||||
|
|
||||||
virtual void obs_frontend_push_ui_translation(
|
virtual void obs_frontend_push_ui_translation(
|
||||||
obs_frontend_translate_ui_cb translate)=0;
|
obs_frontend_translate_ui_cb translate)=0;
|
||||||
virtual void obs_frontend_pop_ui_translation(void)=0;
|
virtual void obs_frontend_pop_ui_translation(void)=0;
|
||||||
|
@ -83,6 +88,7 @@ struct obs_frontend_callbacks {
|
||||||
virtual void obs_frontend_set_current_preview_scene(obs_source_t *scene)=0;
|
virtual void obs_frontend_set_current_preview_scene(obs_source_t *scene)=0;
|
||||||
|
|
||||||
virtual void on_load(obs_data_t *settings)=0;
|
virtual void on_load(obs_data_t *settings)=0;
|
||||||
|
virtual void on_preload(obs_data_t *settings)=0;
|
||||||
virtual void on_save(obs_data_t *settings)=0;
|
virtual void on_save(obs_data_t *settings)=0;
|
||||||
virtual void on_event(enum obs_frontend_event event)=0;
|
virtual void on_event(enum obs_frontend_event event)=0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -762,6 +762,10 @@ void OBSBasic::Load(const char *file)
|
||||||
ClearSceneData();
|
ClearSceneData();
|
||||||
InitDefaultTransitions();
|
InitDefaultTransitions();
|
||||||
|
|
||||||
|
obs_data_t *modulesObj = obs_data_get_obj(data, "modules");
|
||||||
|
if (api)
|
||||||
|
api->on_preload(modulesObj);
|
||||||
|
|
||||||
obs_data_array_t *sceneOrder = obs_data_get_array(data, "scene_order");
|
obs_data_array_t *sceneOrder = obs_data_get_array(data, "scene_order");
|
||||||
obs_data_array_t *sources = obs_data_get_array(data, "sources");
|
obs_data_array_t *sources = obs_data_get_array(data, "sources");
|
||||||
obs_data_array_t *transitions= obs_data_get_array(data, "transitions");
|
obs_data_array_t *transitions= obs_data_get_array(data, "transitions");
|
||||||
|
@ -925,12 +929,10 @@ retryScene:
|
||||||
|
|
||||||
/* ---------------------- */
|
/* ---------------------- */
|
||||||
|
|
||||||
if (api) {
|
if (api)
|
||||||
obs_data_t *modulesObj = obs_data_get_obj(data, "modules");
|
|
||||||
api->on_load(modulesObj);
|
api->on_load(modulesObj);
|
||||||
obs_data_release(modulesObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
obs_data_release(modulesObj);
|
||||||
obs_data_release(data);
|
obs_data_release(data);
|
||||||
|
|
||||||
if (!opt_starting_scene.empty())
|
if (!opt_starting_scene.empty())
|
||||||
|
|
Loading…
Reference in a new issue