Message ID | 20200516185224.22066-1-cus@passwd.hu |
---|---|
State | Accepted |
Commit | efe7a593649877e4fa185e01479cee3e1280ec70 |
Headers | show |
Series | [FFmpeg-devel] fftools/ffmpeg: add new abort_on flag which aborts if there is a stream which received no packets | expand |
Context | Check | Description |
---|---|---|
andriy/default | pending | |
andriy/make | success | Make finished |
andriy/make_fate | success | Make fate finished |
On Sat, 16 May 2020, Marton Balint wrote: > Signed-off-by: Marton Balint <cus@passwd.hu> > --- > doc/ffmpeg.texi | 2 ++ > fftools/ffmpeg.c | 4 ++++ > fftools/ffmpeg.h | 3 ++- > fftools/ffmpeg_opt.c | 5 +++-- > 4 files changed, 11 insertions(+), 3 deletions(-) Ping, will apply soon. Thanks, Marton > > diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi > index ed437bb16f..76fafdcf7e 100644 > --- a/doc/ffmpeg.texi > +++ b/doc/ffmpeg.texi > @@ -1721,6 +1721,8 @@ Stop and abort on various conditions. The following flags are available: > @table @option > @item empty_output > No packets were passed to the muxer, the output is empty. > +@item empty_output_stream > +No packets were passed to the muxer in some of the output streams. > @end table > > @item -xerror (@emph{global}) > diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c > index f697460a30..cccf12e376 100644 > --- a/fftools/ffmpeg.c > +++ b/fftools/ffmpeg.c > @@ -4713,6 +4713,10 @@ static int transcode(void) > av_freep(&ost->enc_ctx->stats_in); > } > total_packets_written += ost->packets_written; > + if (!ost->packets_written && (abort_on_flags & ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM)) { > + av_log(NULL, AV_LOG_FATAL, "Empty output on stream %d.\n", i); > + exit_program(1); > + } > } > > if (!total_packets_written && (abort_on_flags & ABORT_ON_FLAG_EMPTY_OUTPUT)) { > diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h > index 38205a1a13..828cb2a4ff 100644 > --- a/fftools/ffmpeg.h > +++ b/fftools/ffmpeg.h > @@ -430,7 +430,8 @@ enum forced_keyframes_const { > FKF_NB > }; > > -#define ABORT_ON_FLAG_EMPTY_OUTPUT (1 << 0) > +#define ABORT_ON_FLAG_EMPTY_OUTPUT (1 << 0) > +#define ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM (1 << 1) > > extern const char *const forced_keyframes_const_names[]; > > diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c > index 60bb437ea7..2eb4e1c973 100644 > --- a/fftools/ffmpeg_opt.c > +++ b/fftools/ffmpeg_opt.c > @@ -262,8 +262,9 @@ static AVDictionary *strip_specifiers(AVDictionary *dict) > static int opt_abort_on(void *optctx, const char *opt, const char *arg) > { > static const AVOption opts[] = { > - { "abort_on" , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = "flags" }, > - { "empty_output" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = ABORT_ON_FLAG_EMPTY_OUTPUT }, .unit = "flags" }, > + { "abort_on" , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = "flags" }, > + { "empty_output" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = ABORT_ON_FLAG_EMPTY_OUTPUT }, .unit = "flags" }, > + { "empty_output_stream", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM }, .unit = "flags" }, > { NULL }, > }; > static const AVClass class = { > -- > 2.16.4 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
On Fri, 22 May 2020, Marton Balint wrote: > > > On Sat, 16 May 2020, Marton Balint wrote: > >> Signed-off-by: Marton Balint <cus@passwd.hu> >> --- >> doc/ffmpeg.texi | 2 ++ >> fftools/ffmpeg.c | 4 ++++ >> fftools/ffmpeg.h | 3 ++- >> fftools/ffmpeg_opt.c | 5 +++-- >> 4 files changed, 11 insertions(+), 3 deletions(-) > > Ping, will apply soon. Applied. Regards, Marton
diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi index ed437bb16f..76fafdcf7e 100644 --- a/doc/ffmpeg.texi +++ b/doc/ffmpeg.texi @@ -1721,6 +1721,8 @@ Stop and abort on various conditions. The following flags are available: @table @option @item empty_output No packets were passed to the muxer, the output is empty. +@item empty_output_stream +No packets were passed to the muxer in some of the output streams. @end table @item -xerror (@emph{global}) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index f697460a30..cccf12e376 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -4713,6 +4713,10 @@ static int transcode(void) av_freep(&ost->enc_ctx->stats_in); } total_packets_written += ost->packets_written; + if (!ost->packets_written && (abort_on_flags & ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM)) { + av_log(NULL, AV_LOG_FATAL, "Empty output on stream %d.\n", i); + exit_program(1); + } } if (!total_packets_written && (abort_on_flags & ABORT_ON_FLAG_EMPTY_OUTPUT)) { diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 38205a1a13..828cb2a4ff 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -430,7 +430,8 @@ enum forced_keyframes_const { FKF_NB }; -#define ABORT_ON_FLAG_EMPTY_OUTPUT (1 << 0) +#define ABORT_ON_FLAG_EMPTY_OUTPUT (1 << 0) +#define ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM (1 << 1) extern const char *const forced_keyframes_const_names[]; diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 60bb437ea7..2eb4e1c973 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -262,8 +262,9 @@ static AVDictionary *strip_specifiers(AVDictionary *dict) static int opt_abort_on(void *optctx, const char *opt, const char *arg) { static const AVOption opts[] = { - { "abort_on" , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = "flags" }, - { "empty_output" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = ABORT_ON_FLAG_EMPTY_OUTPUT }, .unit = "flags" }, + { "abort_on" , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = "flags" }, + { "empty_output" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = ABORT_ON_FLAG_EMPTY_OUTPUT }, .unit = "flags" }, + { "empty_output_stream", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM }, .unit = "flags" }, { NULL }, }; static const AVClass class = {
Signed-off-by: Marton Balint <cus@passwd.hu> --- doc/ffmpeg.texi | 2 ++ fftools/ffmpeg.c | 4 ++++ fftools/ffmpeg.h | 3 ++- fftools/ffmpeg_opt.c | 5 +++-- 4 files changed, 11 insertions(+), 3 deletions(-)