mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 04:42:18 +02:00
libobs: Add callback for main texture rendered
Useful for redirecting main texture to DeckLink output for example.
This commit is contained in:
parent
feae65c472
commit
e32c2c1427
@ -574,6 +574,14 @@ Video, Audio, and Graphics
|
||||
|
||||
---------------------
|
||||
|
||||
.. function:: void obs_add_main_rendered_callback(void (*rendered)(void *param), void *param)
|
||||
void obs_remove_main_rendered_callback(void (*rendered)(void *param), void *param)
|
||||
|
||||
Adds/removes a main rendered callback. Allows using the result of
|
||||
the main stream/recording output.
|
||||
|
||||
---------------------
|
||||
|
||||
.. function:: void obs_add_raw_video_callback(const struct video_scale_info *conversion, void (*callback)(void *param, struct video_data *frame), void *param)
|
||||
void obs_remove_raw_video_callback(void (*callback)(void *param, struct video_data *frame), void *param)
|
||||
|
||||
|
@ -67,6 +67,11 @@ struct draw_callback {
|
||||
void *param;
|
||||
};
|
||||
|
||||
struct rendered_callback {
|
||||
void (*rendered)(void *param);
|
||||
void *param;
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* validity checks */
|
||||
|
||||
@ -401,6 +406,7 @@ struct obs_core_data {
|
||||
pthread_mutex_t audio_sources_mutex;
|
||||
pthread_mutex_t draw_callbacks_mutex;
|
||||
DARRAY(struct draw_callback) draw_callbacks;
|
||||
DARRAY(struct rendered_callback) rendered_callbacks;
|
||||
DARRAY(struct tick_callback) tick_callbacks;
|
||||
|
||||
struct obs_view main_view;
|
||||
|
@ -144,9 +144,8 @@ static inline void render_main_texture(struct obs_core_video_mix *video)
|
||||
pthread_mutex_lock(&obs->data.draw_callbacks_mutex);
|
||||
|
||||
for (size_t i = obs->data.draw_callbacks.num; i > 0; i--) {
|
||||
struct draw_callback *callback;
|
||||
callback = obs->data.draw_callbacks.array + (i - 1);
|
||||
|
||||
struct draw_callback *const callback =
|
||||
obs->data.draw_callbacks.array + (i - 1);
|
||||
callback->draw(callback->param, base_width, base_height);
|
||||
}
|
||||
|
||||
@ -156,6 +155,16 @@ static inline void render_main_texture(struct obs_core_video_mix *video)
|
||||
|
||||
video->texture_rendered = true;
|
||||
|
||||
pthread_mutex_lock(&obs->data.draw_callbacks_mutex);
|
||||
|
||||
for (size_t i = 0; i < obs->data.rendered_callbacks.num; ++i) {
|
||||
struct rendered_callback *const callback =
|
||||
&obs->data.rendered_callbacks.array[i];
|
||||
callback->rendered(callback->param);
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&obs->data.draw_callbacks_mutex);
|
||||
|
||||
GS_DEBUG_MARKER_END();
|
||||
profile_end(render_main_texture_name);
|
||||
}
|
||||
|
20
libobs/obs.c
20
libobs/obs.c
@ -1076,6 +1076,7 @@ static void obs_free_data(void)
|
||||
pthread_mutex_destroy(&data->services_mutex);
|
||||
pthread_mutex_destroy(&data->draw_callbacks_mutex);
|
||||
da_free(data->draw_callbacks);
|
||||
da_free(data->rendered_callbacks);
|
||||
da_free(data->tick_callbacks);
|
||||
obs_data_release(data->private_data);
|
||||
|
||||
@ -3069,6 +3070,25 @@ void obs_remove_main_render_callback(void (*draw)(void *param, uint32_t cx,
|
||||
pthread_mutex_unlock(&obs->data.draw_callbacks_mutex);
|
||||
}
|
||||
|
||||
void obs_add_main_rendered_callback(void (*rendered)(void *param), void *param)
|
||||
{
|
||||
struct rendered_callback data = {rendered, param};
|
||||
|
||||
pthread_mutex_lock(&obs->data.draw_callbacks_mutex);
|
||||
da_insert(obs->data.rendered_callbacks, 0, &data);
|
||||
pthread_mutex_unlock(&obs->data.draw_callbacks_mutex);
|
||||
}
|
||||
|
||||
void obs_remove_main_rendered_callback(void (*rendered)(void *param),
|
||||
void *param)
|
||||
{
|
||||
struct rendered_callback data = {rendered, param};
|
||||
|
||||
pthread_mutex_lock(&obs->data.draw_callbacks_mutex);
|
||||
da_erase_item(obs->data.rendered_callbacks, &data);
|
||||
pthread_mutex_unlock(&obs->data.draw_callbacks_mutex);
|
||||
}
|
||||
|
||||
uint32_t obs_get_total_frames(void)
|
||||
{
|
||||
return obs->video.total_frames;
|
||||
|
@ -841,6 +841,11 @@ EXPORT void obs_add_main_render_callback(void (*draw)(void *param, uint32_t cx,
|
||||
EXPORT void obs_remove_main_render_callback(
|
||||
void (*draw)(void *param, uint32_t cx, uint32_t cy), void *param);
|
||||
|
||||
EXPORT void obs_add_main_rendered_callback(void (*rendered)(void *param),
|
||||
void *param);
|
||||
EXPORT void obs_remove_main_rendered_callback(void (*rendered)(void *param),
|
||||
void *param);
|
||||
|
||||
EXPORT void obs_add_raw_video_callback(
|
||||
const struct video_scale_info *conversion,
|
||||
void (*callback)(void *param, struct video_data *frame), void *param);
|
||||
|
Loading…
Reference in New Issue
Block a user