From 4eacb5f3e9d4ebfff33162b2b46d353d978e53bf Mon Sep 17 00:00:00 2001 From: jp9000 Date: Tue, 10 Feb 2015 19:23:36 -0800 Subject: [PATCH] libobs: Add API to apply service encoder settings Instead of having services automatically apply encoder settings on initialization (whether the output wants to or not), instead make it something that must be explicitly called by the developer. There are cases where the developer may not wish to apply the service-specific settings, or may wish to override them for whatever reason. --- libobs/obs-service.c | 16 ++++++++++++++++ libobs/obs-service.h | 4 ++++ libobs/obs.h | 9 +++++++++ 3 files changed, 29 insertions(+) diff --git a/libobs/obs-service.c b/libobs/obs-service.c index 3feb85475..e27bef6c5 100644 --- a/libobs/obs-service.c +++ b/libobs/obs-service.c @@ -235,3 +235,19 @@ bool obs_service_initialize(struct obs_service *service, return service->info.initialize(service->context.data, output); return true; } + +void obs_service_apply_encoder_settings(obs_service_t *service, + obs_encoder_t *video_encoder, obs_encoder_t *audio_encoder) +{ + if (!service || !service->info.apply_encoder_settings) + return; + + if (video_encoder && video_encoder->info.type != OBS_ENCODER_VIDEO) + video_encoder = NULL; + if (audio_encoder && audio_encoder->info.type != OBS_ENCODER_AUDIO) + audio_encoder = NULL; + + if (video_encoder || audio_encoder) + service->info.apply_encoder_settings(service->context.data, + video_encoder, audio_encoder); +} diff --git a/libobs/obs-service.h b/libobs/obs-service.h index 976575f79..e220cdc4a 100644 --- a/libobs/obs-service.h +++ b/libobs/obs-service.h @@ -64,6 +64,10 @@ struct obs_service_info { const char *(*get_password)(void *data); bool (*supports_multitrack)(void *data); + + void (*apply_encoder_settings)(void *data, obs_encoder_t *video_encoder, + obs_encoder_t *audio_encoder); + /* TODO: more stuff later */ }; diff --git a/libobs/obs.h b/libobs/obs.h index 7e698aca3..e89af11c0 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -1315,6 +1315,15 @@ EXPORT const char *obs_service_get_username(const obs_service_t *service); /** Returns the password (if any) for this service context */ EXPORT const char *obs_service_get_password(const obs_service_t *service); +/** + * Applies service-specific video encoder settings. + * + * @param video_encoder Video encoder to apply settings to. Optional. + * @param audio_encoder Audio encoder to apply settings to. Optional. + */ +EXPORT void obs_service_apply_encoder_settings(obs_service_t *service, + obs_encoder_t *video_encoder, obs_encoder_t *audio_encoder); + /* ------------------------------------------------------------------------- */ /* Source frame allocation functions */