diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index c2cccb979b0d7a5d2bfa68722013f411a0d191f0..41873bd57769d2bd47c4a125f836eff5f7d5f9f2 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 1a9350fa776ea21a0cc9020eaf2ca0ba9792ac13..4e949cf6dd2aad9426d88de38a90a5dd06be3ceb 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 f8efbb5cfc93157421d49fa28d3360bf60cedb11..df7b91e41a129079a52f05f69e3070d71b437682 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);