diff mbox series

[FFmpeg-devel,v5,11/13] fftools: provide media type info for devices

Message ID 20211219192134.1296-12-dcnieho@gmail.com
State Superseded, archived
Headers show
Series dshow enhancements | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished

Commit Message

Diederick C. Niehorster Dec. 19, 2021, 7:21 p.m. UTC
fftools now print info about what media type(s), if any, are provided by
sink and source avdevices.

Signed-off-by: Diederick Niehorster <dcnieho@gmail.com>
---
 fftools/cmdutils.c | 34 ++++++++++++++++++++++++----------
 1 file changed, 24 insertions(+), 10 deletions(-)

Comments

Andreas Rheinhardt Dec. 20, 2021, 1:22 a.m. UTC | #1
Diederick Niehorster:
> fftools now print info about what media type(s), if any, are provided by
> sink and source avdevices.
> 
> Signed-off-by: Diederick Niehorster <dcnieho@gmail.com>
> ---
>  fftools/cmdutils.c | 34 ++++++++++++++++++++++++----------
>  1 file changed, 24 insertions(+), 10 deletions(-)
> 
> diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
> index 3c8e5a82cd..7d7dcce2f9 100644
> --- a/fftools/cmdutils.c
> +++ b/fftools/cmdutils.c
> @@ -2244,9 +2244,29 @@ double get_rotation(int32_t *displaymatrix)
>  }
>  
>  #if CONFIG_AVDEVICE
> +static void print_device_list(const AVDeviceInfoList *device_list)
> +{
> +    // print devices
> +    for (int i = 0; i < device_list->nb_devices; i++) {
> +        const AVDeviceInfo *device = device_list->devices[i];
> +        printf("%s %s [%s] (", device_list->default_device == i ? "*" : " ",

The first string can be written as char (as it is now).

> +            device->device_name, device->device_description);
> +        if (device->nb_media_types > 0 && device->media_types) {

You are checking for both the counter as well as the pointer. This is
unnecessary if libavdevice does its job properly and it could mask
situations in which it fails to do so.

> +            for (int j = 0; j < device->nb_media_types; ++j) {
> +                const char* media_type = av_get_media_type_string(device->media_types[j]);
> +                if (j > 0)
> +                    printf(", ");
> +                printf("%s", media_type ? media_type : "unknown");
> +            }
> +        } else {
> +            printf("none");
> +        }
> +        printf(")\n");
> +    }
> +}
>  static int print_device_sources(const AVInputFormat *fmt, AVDictionary *opts)
>  {
> -    int ret, i;
> +    int ret;
>      AVDeviceInfoList *device_list = NULL;
>  
>      if (!fmt || !fmt->priv_class  || !AV_IS_INPUT_DEVICE(fmt->priv_class->category))
> @@ -2258,10 +2278,7 @@ static int print_device_sources(const AVInputFormat *fmt, AVDictionary *opts)
>          goto fail;
>      }
>  
> -    for (i = 0; i < device_list->nb_devices; i++) {
> -        printf("%c %s [%s]\n", device_list->default_device == i ? '*' : ' ',
> -               device_list->devices[i]->device_name, device_list->devices[i]->device_description);
> -    }
> +    print_device_list(device_list);
>  
>    fail:
>      avdevice_free_list_devices(&device_list);
> @@ -2270,7 +2287,7 @@ static int print_device_sources(const AVInputFormat *fmt, AVDictionary *opts)
>  
>  static int print_device_sinks(const AVOutputFormat *fmt, AVDictionary *opts)
>  {
> -    int ret, i;
> +    int ret;
>      AVDeviceInfoList *device_list = NULL;
>  
>      if (!fmt || !fmt->priv_class  || !AV_IS_OUTPUT_DEVICE(fmt->priv_class->category))
> @@ -2282,10 +2299,7 @@ static int print_device_sinks(const AVOutputFormat *fmt, AVDictionary *opts)
>          goto fail;
>      }
>  
> -    for (i = 0; i < device_list->nb_devices; i++) {
> -        printf("%c %s [%s]\n", device_list->default_device == i ? '*' : ' ',
> -               device_list->devices[i]->device_name, device_list->devices[i]->device_description);
> -    }
> +    print_device_list(device_list);
>  
>    fail:
>      avdevice_free_list_devices(&device_list);
>
diff mbox series

Patch

diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
index 3c8e5a82cd..7d7dcce2f9 100644
--- a/fftools/cmdutils.c
+++ b/fftools/cmdutils.c
@@ -2244,9 +2244,29 @@  double get_rotation(int32_t *displaymatrix)
 }
 
 #if CONFIG_AVDEVICE
+static void print_device_list(const AVDeviceInfoList *device_list)
+{
+    // print devices
+    for (int i = 0; i < device_list->nb_devices; i++) {
+        const AVDeviceInfo *device = device_list->devices[i];
+        printf("%s %s [%s] (", device_list->default_device == i ? "*" : " ",
+            device->device_name, device->device_description);
+        if (device->nb_media_types > 0 && device->media_types) {
+            for (int j = 0; j < device->nb_media_types; ++j) {
+                const char* media_type = av_get_media_type_string(device->media_types[j]);
+                if (j > 0)
+                    printf(", ");
+                printf("%s", media_type ? media_type : "unknown");
+            }
+        } else {
+            printf("none");
+        }
+        printf(")\n");
+    }
+}
 static int print_device_sources(const AVInputFormat *fmt, AVDictionary *opts)
 {
-    int ret, i;
+    int ret;
     AVDeviceInfoList *device_list = NULL;
 
     if (!fmt || !fmt->priv_class  || !AV_IS_INPUT_DEVICE(fmt->priv_class->category))
@@ -2258,10 +2278,7 @@  static int print_device_sources(const AVInputFormat *fmt, AVDictionary *opts)
         goto fail;
     }
 
-    for (i = 0; i < device_list->nb_devices; i++) {
-        printf("%c %s [%s]\n", device_list->default_device == i ? '*' : ' ',
-               device_list->devices[i]->device_name, device_list->devices[i]->device_description);
-    }
+    print_device_list(device_list);
 
   fail:
     avdevice_free_list_devices(&device_list);
@@ -2270,7 +2287,7 @@  static int print_device_sources(const AVInputFormat *fmt, AVDictionary *opts)
 
 static int print_device_sinks(const AVOutputFormat *fmt, AVDictionary *opts)
 {
-    int ret, i;
+    int ret;
     AVDeviceInfoList *device_list = NULL;
 
     if (!fmt || !fmt->priv_class  || !AV_IS_OUTPUT_DEVICE(fmt->priv_class->category))
@@ -2282,10 +2299,7 @@  static int print_device_sinks(const AVOutputFormat *fmt, AVDictionary *opts)
         goto fail;
     }
 
-    for (i = 0; i < device_list->nb_devices; i++) {
-        printf("%c %s [%s]\n", device_list->default_device == i ? '*' : ' ',
-               device_list->devices[i]->device_name, device_list->devices[i]->device_description);
-    }
+    print_device_list(device_list);
 
   fail:
     avdevice_free_list_devices(&device_list);