diff --git a/libobs/obs-source.c b/libobs/obs-source.c index f59c44816e8a9e6b151f42ad2b0c299f079758c5..cd8dc2a1ada69dd45768102a6e8a593d6dc1ac32 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -82,6 +82,7 @@ static const char *source_signals[] = { "void volume(ptr source, in out float volume)", "void update_properties(ptr source)", "void update_flags(ptr source, int flags)", + "void audio_sync(ptr source, int out int offset)", "void audio_data(ptr source, ptr data)", NULL }; @@ -1881,8 +1882,18 @@ float obs_source_get_present_volume(const obs_source_t *source) void obs_source_set_sync_offset(obs_source_t *source, int64_t offset) { - if (source) - source->sync_offset = offset; + if (source) { + struct calldata data = {0}; + + calldata_set_ptr(&data, "source", source); + calldata_set_int(&data, "offset", offset); + + signal_handler_signal(source->context.signals, "audio_sync", + &data); + + source->sync_offset = calldata_int(&data, "offset"); + calldata_free(&data); + } } int64_t obs_source_get_sync_offset(const obs_source_t *source)