diff options
author | Thibault Saunier <tsaunier@igalia.com> | 2020-04-03 10:36:02 -0300 |
---|---|---|
committer | Thibault Saunier <tsaunier@igalia.com> | 2020-04-06 10:01:32 -0400 |
commit | 545a993316299c048fa72f35341ac57f969ce666 (patch) | |
tree | dd5da8b94caf26990a669b6f2df196be2939ee3e /tools | |
parent | 6ea225ccb44434a45f7a1bfaf9a96fff1c55437d (diff) | |
download | gstreamer-plugins-base-545a993316299c048fa72f35341ac57f969ce666.tar.gz |
discoverer: Enhance printed information when not verbose
Basically print information about media tracks making without tags
nor buffers in caps making still quite small but containing all
information infos.
Stop making 'Topology' section and just print the info
before:
```
Topology:
container: MPEG-2 Transport Stream
audio: AC-3 (ATSC A/52)
video: H.264 (High Profile)
Properties:
Duration: 0:00:05.512394259
Seekable: yes
Live: no
Tags:
audio codec: AC-3 (ATSC A/52)
bitrate: 192000
video codec: H.264 (High Profile)
minimum bitrate: 12947
maximum bitrate: 12947
```
After:
```
Properties:
Duration: 0:00:05.512394259
Seekable: yes
Live: no
container: MPEG-2 Transport Stream
audio: AC-3 (ATSC A/52)
Stream ID: b076403d73e0c5fc13985832e8d585945603993437ba14b0799f422f9495e8ef:1/00001100
Language: <unknown>
Channels: 2 (front-left, front-right)
Sample rate: 48000
Depth: 32
Bitrate: 192000
Max bitrate: 0
video: H.264 (High Profile)
Stream ID: b076403d73e0c5fc13985832e8d585945603993437ba14b0799f422f9495e8ef:1/00001011
Width: 1920
Height: 1080
Depth: 24
Frame rate: 30000/1001
Pixel aspect ratio: 1/1
Interlaced: true
Bitrate: 10363396
Max bitrate: 12947
```
Diffstat (limited to 'tools')
-rw-r--r-- | tools/gst-discoverer.c | 140 |
1 files changed, 95 insertions, 45 deletions
diff --git a/tools/gst-discoverer.c b/tools/gst-discoverer.c index c063c49e5..24de51fef 100644 --- a/tools/gst-discoverer.c +++ b/tools/gst-discoverer.c @@ -46,6 +46,37 @@ typedef struct char **argv; } PrivStruct; +static gboolean +structure_remove_buffers_ip (GQuark field_id, GValue * value, + gpointer user_data) +{ + if (G_VALUE_HOLDS (value, GST_TYPE_BUFFER)) + return FALSE; + + if (GST_VALUE_HOLDS_ARRAY (value)) { + gint i; + + for (i = 0; i < gst_value_array_get_size (value); i++) { + if (structure_remove_buffers_ip (0, + (GValue *) gst_value_array_get_value (value, i), user_data)) + return TRUE; + } + + return FALSE; + } + return TRUE; +} + +static gboolean +caps_remove_buffers_ip (GstCapsFeatures * features, GstStructure * structure, + gpointer user_data) +{ + gst_structure_filter_and_map_in_place (structure, + structure_remove_buffers_ip, NULL); + + return TRUE; +} + static void my_g_string_append_printf (GString * str, int depth, const gchar * format, ...) { @@ -60,6 +91,26 @@ my_g_string_append_printf (GString * str, int depth, const gchar * format, ...) va_end (args); } +static gchar * +caps_to_string (GstCaps * caps) +{ + gchar *res = NULL; + + if (verbose) { + res = gst_caps_to_string (caps); + goto done; + } + + caps = gst_caps_make_writable (caps); + + gst_caps_map_in_place (caps, caps_remove_buffers_ip, NULL); + res = gst_caps_to_string (caps); + +done: + gst_caps_unref (caps); + return res; +} + static void gst_stream_information_to_string (GstDiscovererStreamInfo * info, GString * s, guint depth) @@ -70,21 +121,22 @@ gst_stream_information_to_string (GstDiscovererStreamInfo * info, GString * s, const GstStructure *misc; #endif - my_g_string_append_printf (s, depth, "Codec:\n"); - caps = gst_discoverer_stream_info_get_caps (info); - tmp = gst_caps_to_string (caps); - gst_caps_unref (caps); - my_g_string_append_printf (s, depth, " %s\n", tmp); - g_free (tmp); - -#ifndef GST_DISABLE_DEPRECATED - my_g_string_append_printf (s, depth, "Additional info:\n"); - if ((misc = gst_discoverer_stream_info_get_misc (info))) { - tmp = gst_structure_to_string (misc); + if (verbose) { + my_g_string_append_printf (s, depth, "Codec:\n"); + caps = gst_discoverer_stream_info_get_caps (info); + tmp = caps_to_string (caps); my_g_string_append_printf (s, depth, " %s\n", tmp); g_free (tmp); - } else { - my_g_string_append_printf (s, depth, " None\n"); + } +#ifndef GST_DISABLE_DEPRECATED + if (verbose) { + misc = gst_discoverer_stream_info_get_misc (info); + if (misc) { + my_g_string_append_printf (s, depth, "Additional info:\n"); + tmp = gst_structure_to_string (misc); + my_g_string_append_printf (s, depth, " %s\n", tmp); + g_free (tmp); + } } #endif @@ -114,7 +166,7 @@ print_tag_foreach (const GstTagList * tags, const gchar * tag, if (caps) { gchar *caps_str; - caps_str = gst_caps_to_string (caps); + caps_str = caps_to_string (gst_caps_ref (caps)); str = g_strdup_printf ("buffer of %" G_GSIZE_FORMAT " bytes, " "type: %s", gst_buffer_get_size (img), caps_str); g_free (caps_str); @@ -138,6 +190,9 @@ print_tag_foreach (const GstTagList * tags, const gchar * tag, static void print_tags_topology (guint depth, const GstTagList * tags) { + if (!verbose) + return; + g_print ("%*sTags:\n", 2 * depth, " "); if (tags) { gst_tag_list_foreach (tags, print_tag_foreach, @@ -145,8 +200,7 @@ print_tags_topology (guint depth, const GstTagList * tags) } else { g_print ("%*sNone\n", 2 * (depth + 1), " "); } - if (verbose) - g_print ("%*s\n", 2 * depth, " "); + g_print ("%*s\n", 2 * depth, " "); } static gchar * @@ -309,7 +363,7 @@ print_stream_info (GstDiscovererStreamInfo * info, void *depth) if (gst_caps_is_fixed (caps) && !verbose) desc = gst_pb_utils_get_codec_description (caps); else - desc = gst_caps_to_string (caps); + desc = caps_to_string (gst_caps_ref (caps)); gst_caps_unref (caps); } @@ -322,23 +376,21 @@ print_stream_info (GstDiscovererStreamInfo * info, void *depth) desc = NULL; } - if (verbose) { - if (GST_IS_DISCOVERER_AUDIO_INFO (info)) - desc = - gst_stream_audio_information_to_string (info, - GPOINTER_TO_INT (depth) + 1); - else if (GST_IS_DISCOVERER_VIDEO_INFO (info)) - desc = - gst_stream_video_information_to_string (info, - GPOINTER_TO_INT (depth) + 1); - else if (GST_IS_DISCOVERER_SUBTITLE_INFO (info)) - desc = - gst_stream_subtitle_information_to_string (info, - GPOINTER_TO_INT (depth) + 1); - if (desc) { - g_print ("%s", desc); - g_free (desc); - } + if (GST_IS_DISCOVERER_AUDIO_INFO (info)) + desc = + gst_stream_audio_information_to_string (info, + GPOINTER_TO_INT (depth) + 1); + else if (GST_IS_DISCOVERER_VIDEO_INFO (info)) + desc = + gst_stream_video_information_to_string (info, + GPOINTER_TO_INT (depth) + 1); + else if (GST_IS_DISCOVERER_SUBTITLE_INFO (info)) + desc = + gst_stream_subtitle_information_to_string (info, + GPOINTER_TO_INT (depth) + 1); + if (desc) { + g_print ("%s", desc); + g_free (desc); } } @@ -411,7 +463,7 @@ print_properties (GstDiscovererInfo * info, gint tab) (gst_discoverer_info_get_seekable (info) ? "yes" : "no")); g_print ("%*sLive: %s\n", tab + 1, " ", (gst_discoverer_info_get_live (info) ? "yes" : "no")); - if ((tags = gst_discoverer_info_get_tags (info))) { + if (verbose && (tags = gst_discoverer_info_get_tags (info))) { g_print ("%*sTags: \n", tab + 1, " "); gst_tag_list_foreach (tags, print_tag_foreach, GUINT_TO_POINTER (tab + 2)); } @@ -466,27 +518,25 @@ print_info (GstDiscovererInfo * info, GError * err) } case GST_DISCOVERER_MISSING_PLUGINS: { + gint i = 0; + const gchar **installer_details = + gst_discoverer_info_get_missing_elements_installer_details (info); + g_print ("Missing plugins\n"); - if (verbose) { - gint i = 0; - const gchar **installer_details = - gst_discoverer_info_get_missing_elements_installer_details (info); - while (installer_details[i]) { - g_print (" (%s)\n", installer_details[i]); + while (installer_details[i]) { + g_print (" (%s)\n", installer_details[i]); - i++; - } + i++; } break; } } if ((sinfo = gst_discoverer_info_get_stream_info (info))) { - g_print ("\nTopology:\n"); - print_topology (sinfo, 1); g_print ("\nProperties:\n"); print_properties (info, 1); + print_topology (sinfo, 1); gst_discoverer_stream_info_unref (sinfo); } |