From 1ee277ed338b84d044b052fdc02d1eb9ea104573 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Thu, 16 Apr 2015 23:10:56 -0700 Subject: [PATCH] libobs: Add preferred video format encoder funcs Allows the ability to hint at encoders what format should be used. This is particularly useful if libobs is currently operating in planar 4:4:4, but you want to force an encoder used for streaming to convert to NV12 to prevent streaming issues. --- libobs/obs-encoder.c | 18 ++++++++++++++++++ libobs/obs-internal.h | 1 + libobs/obs.h | 13 +++++++++++++ 3 files changed, 32 insertions(+) diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index c2cccb979..41873bd57 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -777,3 +777,21 @@ void obs_free_encoder_packet(struct encoder_packet *packet) bfree(packet->data); memset(packet, 0, sizeof(struct encoder_packet)); } + +void obs_encoder_set_preferred_video_format(obs_encoder_t *encoder, + enum video_format format) +{ + if (!encoder || encoder->info.type != OBS_ENCODER_VIDEO) + return; + + encoder->preferred_format = format; +} + +enum video_format obs_encoder_get_preferred_video_format( + const obs_encoder_t *encoder) +{ + if (!encoder || encoder->info.type != OBS_ENCODER_VIDEO) + return VIDEO_FORMAT_NONE; + + return encoder->preferred_format; +} diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index 1a9350fa7..4e949cf6d 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -472,6 +472,7 @@ struct obs_encoder { uint32_t scaled_width; uint32_t scaled_height; + enum video_format preferred_format; bool active; diff --git a/libobs/obs.h b/libobs/obs.h index f8efbb5cf..df7b91e41 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -1313,6 +1313,19 @@ EXPORT uint32_t obs_encoder_get_width(const obs_encoder_t *encoder); /** For video encoders, returns the height of the encoded image */ EXPORT uint32_t obs_encoder_get_height(const obs_encoder_t *encoder); +/** + * Sets the preferred video format for a video encoder. If the encoder can use + * the format specified, it will force a conversion to that format if the + * obs output format does not match the preferred format. + * + * If the format is set to VIDEO_FORMAT_NONE, will revert to the default + * functionality of converting only when absolutely necessary. + */ +EXPORT void obs_encoder_set_preferred_video_format(obs_encoder_t *encoder, + enum video_format format); +EXPORT enum video_format obs_encoder_get_preferred_video_format( + const obs_encoder_t *encoder); + /** Gets the default settings for an encoder type */ EXPORT obs_data_t *obs_encoder_defaults(const char *id); -- GitLab