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

Tao Zhang nowerzt at gmail.com
Thu Apr 30 06:48:35 EEST 2020


Nicolas George <george at nsup.org> 于2020年4月29日周三 下午9:31写道:
>
> leozhang (12020-04-29):
> > 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.
>
> This is not accurate enough. This will block every output packet for the
> extra specified duration.
>
> Not sure if it is very useful, compared with the other patch.
In live streaming applications, if user wouldn't want broadcast what's
coming next immediately, can set wanted output delay.
>
> > +
> >  @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},
>
> AV_OPT_TYPE_DURATION and adapt the description and documentation.
Will fix it in v2 version. Thanks.
>
> > +
> >          {NULL},
> >  };
> >
>
> Regards,
>
> --
>   Nicolas George
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list