libobs: Add function to allow custom output drawing

Optionally allows drawing directly to the primary output instead of
having to use a source to draw.
This commit is contained in:
jp9000
2017-04-24 03:22:19 -07:00
parent ffef736640
commit ad57aa1520
4 changed files with 55 additions and 0 deletions

View File

@@ -542,6 +542,7 @@ static bool obs_init_data(void)
assert(data != NULL);
pthread_mutex_init_value(&obs->data.displays_mutex);
pthread_mutex_init_value(&obs->data.draw_callbacks_mutex);
if (pthread_mutexattr_init(&attr) != 0)
return false;
@@ -559,6 +560,8 @@ static bool obs_init_data(void)
goto fail;
if (pthread_mutex_init(&data->services_mutex, &attr) != 0)
goto fail;
if (pthread_mutex_init(&obs->data.draw_callbacks_mutex, NULL) != 0)
goto fail;
if (!obs_view_init(&data->main_view))
goto fail;
@@ -614,6 +617,8 @@ static void obs_free_data(void)
pthread_mutex_destroy(&data->outputs_mutex);
pthread_mutex_destroy(&data->encoders_mutex);
pthread_mutex_destroy(&data->services_mutex);
pthread_mutex_destroy(&data->draw_callbacks_mutex);
da_free(data->draw_callbacks);
}
static const char *obs_signals[] = {
@@ -1919,3 +1924,31 @@ void obs_get_audio_monitoring_device(const char **name, const char **id)
if (id)
*id = obs->audio.monitoring_device_id;
}
void obs_add_main_render_callback(
void (*draw)(void *param, uint32_t cx, uint32_t cy),
void *param)
{
if (!obs)
return;
struct draw_callback data = {draw, param};
pthread_mutex_lock(&obs->data.draw_callbacks_mutex);
da_push_back(obs->data.draw_callbacks, &data);
pthread_mutex_unlock(&obs->data.draw_callbacks_mutex);
}
void obs_remove_main_render_callback(
void (*draw)(void *param, uint32_t cx, uint32_t cy),
void *param)
{
if (!obs)
return;
struct draw_callback data = {draw, param};
pthread_mutex_lock(&obs->data.draw_callbacks_mutex);
da_erase_item(obs->data.draw_callbacks, &data);
pthread_mutex_unlock(&obs->data.draw_callbacks_mutex);
}