static uint64_t tick_sources(uint64_t cur_time, uint64_t last_time) { struct obs_core_data *data = &obs->data; struct obs_source *source; uint64_t delta_time; float seconds; if (!last_time) last_time = cur_time - video_output_get_frame_time(obs->video.video); delta_time = cur_time - last_time; seconds = (float)((double)delta_time / 1000000000.0); 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); source = (struct obs_source*)source->context.next; } pthread_mutex_unlock(&data->sources_mutex); return cur_time; }
static void tick_sources(uint64_t cur_time, uint64_t *last_time) { size_t i; uint64_t delta_time; float seconds; if (!last_time) *last_time = cur_time - video_getframetime(obs->video.video); delta_time = cur_time - *last_time; seconds = (float)((double)delta_time / 1000000000.0); for (i = 0; i < obs->data.sources.num; i++) obs_source_video_tick(obs->data.sources.array[i], seconds); *last_time = cur_time; }
static uint64_t tick_sources(uint64_t cur_time, uint64_t last_time) { struct obs_core_data *data = &obs->data; struct obs_source *source; uint64_t delta_time; float seconds; if (!last_time) last_time = cur_time - video_output_get_frame_time(obs->video.video); 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); source = data->first_source; while (source) { struct obs_source *cur_source = obs_source_get_ref(source); source = (struct obs_source*)source->context.next; if (cur_source) { obs_source_video_tick(cur_source, seconds); obs_source_release(cur_source); } } pthread_mutex_unlock(&data->sources_mutex); return cur_time; }
static uint64_t tick_sources(uint64_t cur_time, uint64_t last_time) { struct obs_core_data *data = &obs->data; struct obs_view *view = &data->main_view; struct obs_source *source; uint64_t delta_time; float seconds; if (!last_time) last_time = cur_time - video_output_get_frame_time(obs->video.video); delta_time = cur_time - last_time; seconds = (float)((double)delta_time / 1000000000.0); obs_mark_output_sources(true); pthread_mutex_lock(&data->sources_mutex); /* call the tick function of each source */ source = data->first_source; while (source) { if (source->ref_by_output_flag) obs_source_video_tick(source, seconds); source = (struct obs_source*)source->context.next; } /* calculate source volumes */ pthread_mutex_lock(&view->channels_mutex); source = data->first_source; while (source) { calculate_base_volume(data, view, source); source = (struct obs_source*)source->context.next; } pthread_mutex_unlock(&view->channels_mutex); pthread_mutex_unlock(&data->sources_mutex); return cur_time; }