Quellcode durchsuchen

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.
jp9000 vor 11 Jahren
Ursprung
Commit
1ee277ed33
3 geänderte Dateien mit 32 neuen und 0 gelöschten Zeilen
  1. 18 0
      libobs/obs-encoder.c
  2. 1 0
      libobs/obs-internal.h
  3. 13 0
      libobs/obs.h

+ 18 - 0
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;
+}

+ 1 - 0
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;
 

+ 13 - 0
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);