diff mbox series

[FFmpeg-devel] fftools/ffmpeg: add new abort_on flag which aborts if there is a stream which received no packets

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
Related show

Checks

Context Check Description
andriy/default pending
andriy/make success Make finished
andriy/make_fate success Make fate finished

Commit Message

Marton Balint May 16, 2020, 6:52 p.m. UTC
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(-)

Comments

Marton Balint May 22, 2020, 9:17 p.m. UTC | #1
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".
Marton Balint May 26, 2020, 8:02 p.m. UTC | #2
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 mbox series

Patch

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 = {