Răsfoiți Sursa

Merge pull request #1672 from derrod/captions-no-throttling

libobs: Add minimum display duration to caption data
Jim 6 ani în urmă
părinte
comite
827f45acfd
3 a modificat fișierele cu 21 adăugiri și 6 ștergeri
  1. 1 0
      libobs/obs-internal.h
  2. 18 6
      libobs/obs-output.c
  3. 2 0
      libobs/obs.h

+ 1 - 0
libobs/obs-internal.h

@@ -840,6 +840,7 @@ struct obs_weak_output {
 #define CAPTION_LINE_BYTES (4*CAPTION_LINE_CHARS)
 struct caption_text {
 	char text[CAPTION_LINE_BYTES+1];
+	double display_duration;
 	struct caption_text *next;
 };
 

+ 18 - 6
libobs/obs-output.c

@@ -1074,17 +1074,18 @@ static inline void send_interleaved(struct obs_output *output)
 		double frame_timestamp = (out.pts * out.timebase_num) /
 			(double)out.timebase_den;
 
-		/* TODO if output->caption_timestamp is more than 5 seconds
-		 * old, send empty frame */
 		if (output->caption_head &&
 		    output->caption_timestamp <= frame_timestamp) {
-			blog(LOG_INFO,"Sending caption: %f \"%s\"",
+			blog(LOG_DEBUG,"Sending caption: %f \"%s\"",
 					frame_timestamp,
 					&output->caption_head->text[0]);
 
+			double display_duration =
+				output->caption_head->display_duration;
+
 			if (add_caption(output, &out)) {
 				output->caption_timestamp =
-					frame_timestamp + 2.0;
+					frame_timestamp + display_duration;
 			}
 		}
 
@@ -2135,11 +2136,13 @@ const char *obs_output_get_id(const obs_output_t *output)
 
 #if BUILD_CAPTIONS
 static struct caption_text *caption_text_new(const char *text, size_t bytes,
-		struct caption_text *tail, struct caption_text **head)
+		struct caption_text *tail, struct caption_text **head,
+		double display_duration)
 {
 	struct caption_text *next = bzalloc(sizeof(struct caption_text));
 	snprintf(&next->text[0], CAPTION_LINE_BYTES + 1, "%.*s",
 			(int)bytes, text);
+	next->display_duration = display_duration;
 
 	if (!*head) {
 		*head = next;
@@ -2154,6 +2157,14 @@ void obs_output_output_caption_text1(obs_output_t *output, const char *text)
 {
 	if (!obs_output_valid(output, "obs_output_output_caption_text1"))
 		return;
+	obs_output_output_caption_text2(output, text, 2.0f);
+}
+
+void obs_output_output_caption_text2(obs_output_t *output, const char *text,
+		double display_duration)
+{
+	if (!obs_output_valid(output, "obs_output_output_caption_text2"))
+		return;
 	if (!active(output))
 		return;
 
@@ -2166,7 +2177,8 @@ void obs_output_output_caption_text1(obs_output_t *output, const char *text)
 	output->caption_tail = caption_text_new(
 			text, size,
 			output->caption_tail,
-			&output->caption_head);
+			&output->caption_head,
+			display_duration);
 
 	pthread_mutex_unlock(&output->caption_mutex);
 }

+ 2 - 0
libobs/obs.h

@@ -1717,6 +1717,8 @@ EXPORT const char *obs_output_get_id(const obs_output_t *output);
 #if BUILD_CAPTIONS
 EXPORT void obs_output_output_caption_text1(obs_output_t *output,
 		const char *text);
+EXPORT void obs_output_output_caption_text2(obs_output_t *output,
+		const char *text, double display_duration);
 #endif
 
 EXPORT float obs_output_get_congestion(obs_output_t *output);