libobs: Add video tick callback functions

Allows the ability to have a callback invoked every time video ticks.
Particularly useful for scripting.
This commit is contained in:
jp9000
2017-12-06 23:13:56 -08:00
parent 9e8a2e333b
commit 0ffc9bbf05
4 changed files with 62 additions and 5 deletions

View File

@@ -38,9 +38,24 @@ static uint64_t tick_sources(uint64_t cur_time, uint64_t last_time)
delta_time = cur_time - last_time;
seconds = (float)((double)delta_time / 1000000000.0);
/* ------------------------------------- */
/* call tick callbacks */
pthread_mutex_lock(&obs->data.draw_callbacks_mutex);
for (size_t i = obs->data.tick_callbacks.num; i > 0; i--) {
struct tick_callback *callback;
callback = obs->data.tick_callbacks.array + (i - 1);
callback->tick(callback->param, seconds);
}
pthread_mutex_unlock(&obs->data.draw_callbacks_mutex);
/* ------------------------------------- */
/* call the tick function of each source */
pthread_mutex_lock(&data->sources_mutex);
/* call the tick function of each source */
source = data->first_source;
while (source) {
obs_source_video_tick(source, seconds);
@@ -111,9 +126,9 @@ static inline void render_main_texture(struct obs_core_video *video,
pthread_mutex_lock(&obs->data.draw_callbacks_mutex);
for (size_t i = 0; i < obs->data.draw_callbacks.num; i++) {
for (size_t i = obs->data.draw_callbacks.num; i > 0; i--) {
struct draw_callback *callback;
callback = obs->data.draw_callbacks.array+i;
callback = obs->data.draw_callbacks.array + (i - 1);
callback->draw(callback->param,
video->base_width, video->base_height);