diff mbox

[FFmpeg-devel] add show_demuxers and show_muxers

Message ID 20161104071723.13422-1-lq@chinaffmpeg.org
State Superseded
Headers show

Commit Message

Liu Steven Nov. 4, 2016, 7:17 a.m. UTC
add -muxers and -demuxers parameters to list the dexmuers and muxers

Signed-off-by: Steven Liu <lingjiujianke@gmail.com>
---
 cmdutils.c             | 60 +++++++++++++++++++++++++++++++-------------------
 cmdutils.h             | 14 ++++++++++++
 cmdutils_common_opts.h |  2 ++
 3 files changed, 53 insertions(+), 23 deletions(-)

Comments

Michael Niedermayer Nov. 4, 2016, 11:36 a.m. UTC | #1
On Fri, Nov 04, 2016 at 03:17:23PM +0800, Steven Liu wrote:
> add -muxers and -demuxers parameters to list the dexmuers and muxers
> 
> Signed-off-by: Steven Liu <lingjiujianke@gmail.com>
> ---
>  cmdutils.c             | 60 +++++++++++++++++++++++++++++++-------------------
>  cmdutils.h             | 14 ++++++++++++
>  cmdutils_common_opts.h |  2 ++
>  3 files changed, 53 insertions(+), 23 deletions(-)
> 
> diff --git a/cmdutils.c b/cmdutils.c
> index 469c2d5..63a46f3 100644
> --- a/cmdutils.c
> +++ b/cmdutils.c
> @@ -1251,7 +1251,7 @@ static int is_device(const AVClass *avclass)
>      return AV_IS_INPUT_DEVICE(avclass->category) || AV_IS_OUTPUT_DEVICE(avclass->category);
>  }
>  
> -static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only)
> +static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only, int muxdemuxers)
>  {
>      AVInputFormat *ifmt  = NULL;
>      AVOutputFormat *ofmt = NULL;
> @@ -1269,29 +1269,33 @@ static int show_formats_devices(void *optctx, const char *opt, const char *arg,
>          const char *name      = NULL;
>          const char *long_name = NULL;
>  
> -        while ((ofmt = av_oformat_next(ofmt))) {
> -            is_dev = is_device(ofmt->priv_class);
> -            if (!is_dev && device_only)
> -                continue;
> -            if ((!name || strcmp(ofmt->name, name) < 0) &&
> -                strcmp(ofmt->name, last_name) > 0) {
> -                name      = ofmt->name;
> -                long_name = ofmt->long_name;
> -                encode    = 1;
> +        if (muxdemuxers != 2) {
> +            while ((ofmt = av_oformat_next(ofmt))) {
> +                is_dev = is_device(ofmt->priv_class);
> +                if (!is_dev && device_only)
> +                    continue;
> +                if ((!name || strcmp(ofmt->name, name) < 0) &&
> +                    strcmp(ofmt->name, last_name) > 0) {
> +                    name      = ofmt->name;
> +                    long_name = ofmt->long_name;
> +                    encode    = 1;
> +                }
>              }
>          }
> -        while ((ifmt = av_iformat_next(ifmt))) {
> -            is_dev = is_device(ifmt->priv_class);
> -            if (!is_dev && device_only)
> -                continue;
> -            if ((!name || strcmp(ifmt->name, name) < 0) &&
> -                strcmp(ifmt->name, last_name) > 0) {
> -                name      = ifmt->name;
> -                long_name = ifmt->long_name;
> -                encode    = 0;
> +        if (muxdemuxers != 1) {
> +            while ((ifmt = av_iformat_next(ifmt))) {
> +                is_dev = is_device(ifmt->priv_class);
> +                if (!is_dev && device_only)
> +                    continue;
> +                if ((!name || strcmp(ifmt->name, name) < 0) &&
> +                    strcmp(ifmt->name, last_name) > 0) {
> +                    name      = ifmt->name;
> +                    long_name = ifmt->long_name;
> +                    encode    = 0;
> +                }
> +                if (name && strcmp(ifmt->name, name) == 0)
> +                    decode = 1;
>              }
> -            if (name && strcmp(ifmt->name, name) == 0)
> -                decode = 1;
>          }
>          if (!name)
>              break;
> @@ -1308,12 +1312,22 @@ static int show_formats_devices(void *optctx, const char *opt, const char *arg,
>  
>  int show_formats(void *optctx, const char *opt, const char *arg)
>  {
> -    return show_formats_devices(optctx, opt, arg, 0);
> +    return show_formats_devices(optctx, opt, arg, 0, 0);
> +}
> +
> +int show_muxers(void *optctx, const char *opt, const char *arg)
> +{
> +    return show_formats_devices(optctx, opt, arg, 0, 1);
> +}
> +
> +int show_demuxers(void *optctx, const char *opt, const char *arg)
> +{
> +    return show_formats_devices(optctx, opt, arg, 0, 2);
                                                        ^
please use named constants, #define or enum, not just litteral numbers
like 2

it may be confusing to some readers what they mean

[...]
Steven Liu Nov. 4, 2016, 11:56 a.m. UTC | #2
2016-11-04 19:36 GMT+08:00 Michael Niedermayer <michael@niedermayer.cc>:

> On Fri, Nov 04, 2016 at 03:17:23PM +0800, Steven Liu wrote:
> > add -muxers and -demuxers parameters to list the dexmuers and muxers
> >
> > Signed-off-by: Steven Liu <lingjiujianke@gmail.com>
> > ---
> >  cmdutils.c             | 60 ++++++++++++++++++++++++++++++
> +-------------------
> >  cmdutils.h             | 14 ++++++++++++
> >  cmdutils_common_opts.h |  2 ++
> >  3 files changed, 53 insertions(+), 23 deletions(-)
> >
> > diff --git a/cmdutils.c b/cmdutils.c
> > index 469c2d5..63a46f3 100644
> > --- a/cmdutils.c
> > +++ b/cmdutils.c
> > @@ -1251,7 +1251,7 @@ static int is_device(const AVClass *avclass)
> >      return AV_IS_INPUT_DEVICE(avclass->category) ||
> AV_IS_OUTPUT_DEVICE(avclass->category);
> >  }
> >
> > -static int show_formats_devices(void *optctx, const char *opt, const
> char *arg, int device_only)
> > +static int show_formats_devices(void *optctx, const char *opt, const
> char *arg, int device_only, int muxdemuxers)
> >  {
> >      AVInputFormat *ifmt  = NULL;
> >      AVOutputFormat *ofmt = NULL;
> > @@ -1269,29 +1269,33 @@ static int show_formats_devices(void *optctx,
> const char *opt, const char *arg,
> >          const char *name      = NULL;
> >          const char *long_name = NULL;
> >
> > -        while ((ofmt = av_oformat_next(ofmt))) {
> > -            is_dev = is_device(ofmt->priv_class);
> > -            if (!is_dev && device_only)
> > -                continue;
> > -            if ((!name || strcmp(ofmt->name, name) < 0) &&
> > -                strcmp(ofmt->name, last_name) > 0) {
> > -                name      = ofmt->name;
> > -                long_name = ofmt->long_name;
> > -                encode    = 1;
> > +        if (muxdemuxers != 2) {
> > +            while ((ofmt = av_oformat_next(ofmt))) {
> > +                is_dev = is_device(ofmt->priv_class);
> > +                if (!is_dev && device_only)
> > +                    continue;
> > +                if ((!name || strcmp(ofmt->name, name) < 0) &&
> > +                    strcmp(ofmt->name, last_name) > 0) {
> > +                    name      = ofmt->name;
> > +                    long_name = ofmt->long_name;
> > +                    encode    = 1;
> > +                }
> >              }
> >          }
> > -        while ((ifmt = av_iformat_next(ifmt))) {
> > -            is_dev = is_device(ifmt->priv_class);
> > -            if (!is_dev && device_only)
> > -                continue;
> > -            if ((!name || strcmp(ifmt->name, name) < 0) &&
> > -                strcmp(ifmt->name, last_name) > 0) {
> > -                name      = ifmt->name;
> > -                long_name = ifmt->long_name;
> > -                encode    = 0;
> > +        if (muxdemuxers != 1) {
> > +            while ((ifmt = av_iformat_next(ifmt))) {
> > +                is_dev = is_device(ifmt->priv_class);
> > +                if (!is_dev && device_only)
> > +                    continue;
> > +                if ((!name || strcmp(ifmt->name, name) < 0) &&
> > +                    strcmp(ifmt->name, last_name) > 0) {
> > +                    name      = ifmt->name;
> > +                    long_name = ifmt->long_name;
> > +                    encode    = 0;
> > +                }
> > +                if (name && strcmp(ifmt->name, name) == 0)
> > +                    decode = 1;
> >              }
> > -            if (name && strcmp(ifmt->name, name) == 0)
> > -                decode = 1;
> >          }
> >          if (!name)
> >              break;
> > @@ -1308,12 +1312,22 @@ static int show_formats_devices(void *optctx,
> const char *opt, const char *arg,
> >
> >  int show_formats(void *optctx, const char *opt, const char *arg)
> >  {
> > -    return show_formats_devices(optctx, opt, arg, 0);
> > +    return show_formats_devices(optctx, opt, arg, 0, 0);
> > +}
> > +
> > +int show_muxers(void *optctx, const char *opt, const char *arg)
> > +{
> > +    return show_formats_devices(optctx, opt, arg, 0, 1);
> > +}
> > +
> > +int show_demuxers(void *optctx, const char *opt, const char *arg)
> > +{
> > +    return show_formats_devices(optctx, opt, arg, 0, 2);
>                                                         ^
> please use named constants, #define or enum, not just litteral numbers
> like 2
>
> it may be confusing to some readers what they mean
>
ok, update at patch v1

>
> [...]
>
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Avoid a single point of failure, be that a person or equipment.
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>
diff mbox

Patch

diff --git a/cmdutils.c b/cmdutils.c
index 469c2d5..63a46f3 100644
--- a/cmdutils.c
+++ b/cmdutils.c
@@ -1251,7 +1251,7 @@  static int is_device(const AVClass *avclass)
     return AV_IS_INPUT_DEVICE(avclass->category) || AV_IS_OUTPUT_DEVICE(avclass->category);
 }
 
-static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only)
+static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only, int muxdemuxers)
 {
     AVInputFormat *ifmt  = NULL;
     AVOutputFormat *ofmt = NULL;
@@ -1269,29 +1269,33 @@  static int show_formats_devices(void *optctx, const char *opt, const char *arg,
         const char *name      = NULL;
         const char *long_name = NULL;
 
-        while ((ofmt = av_oformat_next(ofmt))) {
-            is_dev = is_device(ofmt->priv_class);
-            if (!is_dev && device_only)
-                continue;
-            if ((!name || strcmp(ofmt->name, name) < 0) &&
-                strcmp(ofmt->name, last_name) > 0) {
-                name      = ofmt->name;
-                long_name = ofmt->long_name;
-                encode    = 1;
+        if (muxdemuxers != 2) {
+            while ((ofmt = av_oformat_next(ofmt))) {
+                is_dev = is_device(ofmt->priv_class);
+                if (!is_dev && device_only)
+                    continue;
+                if ((!name || strcmp(ofmt->name, name) < 0) &&
+                    strcmp(ofmt->name, last_name) > 0) {
+                    name      = ofmt->name;
+                    long_name = ofmt->long_name;
+                    encode    = 1;
+                }
             }
         }
-        while ((ifmt = av_iformat_next(ifmt))) {
-            is_dev = is_device(ifmt->priv_class);
-            if (!is_dev && device_only)
-                continue;
-            if ((!name || strcmp(ifmt->name, name) < 0) &&
-                strcmp(ifmt->name, last_name) > 0) {
-                name      = ifmt->name;
-                long_name = ifmt->long_name;
-                encode    = 0;
+        if (muxdemuxers != 1) {
+            while ((ifmt = av_iformat_next(ifmt))) {
+                is_dev = is_device(ifmt->priv_class);
+                if (!is_dev && device_only)
+                    continue;
+                if ((!name || strcmp(ifmt->name, name) < 0) &&
+                    strcmp(ifmt->name, last_name) > 0) {
+                    name      = ifmt->name;
+                    long_name = ifmt->long_name;
+                    encode    = 0;
+                }
+                if (name && strcmp(ifmt->name, name) == 0)
+                    decode = 1;
             }
-            if (name && strcmp(ifmt->name, name) == 0)
-                decode = 1;
         }
         if (!name)
             break;
@@ -1308,12 +1312,22 @@  static int show_formats_devices(void *optctx, const char *opt, const char *arg,
 
 int show_formats(void *optctx, const char *opt, const char *arg)
 {
-    return show_formats_devices(optctx, opt, arg, 0);
+    return show_formats_devices(optctx, opt, arg, 0, 0);
+}
+
+int show_muxers(void *optctx, const char *opt, const char *arg)
+{
+    return show_formats_devices(optctx, opt, arg, 0, 1);
+}
+
+int show_demuxers(void *optctx, const char *opt, const char *arg)
+{
+    return show_formats_devices(optctx, opt, arg, 0, 2);
 }
 
 int show_devices(void *optctx, const char *opt, const char *arg)
 {
-    return show_formats_devices(optctx, opt, arg, 1);
+    return show_formats_devices(optctx, opt, arg, 1, 0);
 }
 
 #define PRINT_CODEC_SUPPORTED(codec, field, type, list_name, term, get_name) \
diff --git a/cmdutils.h b/cmdutils.h
index 1b96aa4..e75d8d3 100644
--- a/cmdutils.h
+++ b/cmdutils.h
@@ -442,6 +442,20 @@  int show_license(void *optctx, const char *opt, const char *arg);
 int show_formats(void *optctx, const char *opt, const char *arg);
 
 /**
+ * Print a listing containing all the muxers supported by the
+ * program (including devices).
+ * This option processing function does not utilize the arguments.
+ */
+int show_muxers(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the demuxer supported by the
+ * program (including devices).
+ * This option processing function does not utilize the arguments.
+ */
+int show_demuxers(void *optctx, const char *opt, const char *arg);
+
+/**
  * Print a listing containing all the devices supported by the
  * program.
  * This option processing function does not utilize the arguments.
diff --git a/cmdutils_common_opts.h b/cmdutils_common_opts.h
index 758dac1..f7c1ca4 100644
--- a/cmdutils_common_opts.h
+++ b/cmdutils_common_opts.h
@@ -6,6 +6,8 @@ 
     { "version"    , OPT_EXIT, {.func_arg = show_version},      "show version" },
     { "buildconf"  , OPT_EXIT, {.func_arg = show_buildconf},    "show build configuration" },
     { "formats"    , OPT_EXIT, {.func_arg = show_formats  },    "show available formats" },
+    { "muxers"     , OPT_EXIT, {.func_arg = show_muxers   },    "show available muxers" },
+    { "demuxers"   , OPT_EXIT, {.func_arg = show_demuxers },    "show available demuxers" },
     { "devices"    , OPT_EXIT, {.func_arg = show_devices  },    "show available devices" },
     { "codecs"     , OPT_EXIT, {.func_arg = show_codecs   },    "show available codecs" },
     { "decoders"   , OPT_EXIT, {.func_arg = show_decoders },    "show available decoders" },