[FFmpeg-devel] [PATCH 1/3] avformat/fifo: add option to delay output

leozhang leozhang at qiyi.com
Wed Apr 29 16:25:00 EEST 2020


Signed-off-by: leozhang <leozhang at qiyi.com>
---
 doc/muxers.texi    | 3 +++
 libavformat/fifo.c | 7 +++++++
 2 files changed, 10 insertions(+)

diff --git a/doc/muxers.texi b/doc/muxers.texi
index cb2bb42..a74cbc4 100644
--- a/doc/muxers.texi
+++ b/doc/muxers.texi
@@ -2271,6 +2271,9 @@ certain (usually permanent) errors the recovery is not attempted even when
 Specify whether to wait for the keyframe after recovering from
 queue overflow or failure. This option is set to 0 (false) by default.
 
+ at item output_delay
+Time to delay output, in microseconds. Default value is 0.
+
 @end table
 
 @subsection Examples
diff --git a/libavformat/fifo.c b/libavformat/fifo.c
index d11dc66..bdecf2d 100644
--- a/libavformat/fifo.c
+++ b/libavformat/fifo.c
@@ -77,6 +77,8 @@ typedef struct FifoContext {
     /* Value > 0 signals queue overflow */
     volatile uint8_t overflow_flag;
 
+    /* Time to delay output, in microseconds */
+    uint64_t output_delay;
 } FifoContext;
 
 typedef struct FifoThreadContext {
@@ -397,6 +399,8 @@ static void *fifo_consumer_thread(void *data)
     memset(&fifo_thread_ctx, 0, sizeof(FifoThreadContext));
     fifo_thread_ctx.avf = avf;
 
+    av_usleep(fifo->output_delay);
+
     while (1) {
         uint8_t just_flushed = 0;
 
@@ -630,6 +634,9 @@ static const AVOption options[] = {
         {"recover_any_error", "Attempt recovery regardless of type of the error", OFFSET(recover_any_error),
          AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, AV_OPT_FLAG_ENCODING_PARAM},
 
+        {"output_delay", "Time to delay output, in microseconds", OFFSET(output_delay),
+         AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
+
         {NULL},
 };
 
-- 
1.8.3.1



More information about the ffmpeg-devel mailing list