static gchar * gst_stream_subtitle_information_to_string (GstDiscovererStreamInfo * info, guint depth) { GstDiscovererSubtitleInfo *subtitle_info; GString *s; const gchar *ctmp; int len = 400; const GstTagList *tags; g_return_val_if_fail (info != NULL, NULL); s = g_string_sized_new (len); gst_stream_information_to_string (info, s, depth); subtitle_info = (GstDiscovererSubtitleInfo *) info; ctmp = gst_discoverer_subtitle_info_get_language (subtitle_info); my_g_string_append_printf (s, depth, "Language: %s\n", ctmp ? ctmp : "<unknown>"); tags = gst_discoverer_stream_info_get_tags (info); print_tags_topology (depth, tags); return g_string_free (s, FALSE); }
/* Print information regarding a stream */ void print_stream_info (GstDiscovererStreamInfo *info, gint depth) { gchar *desc = NULL; GstCaps *caps; const GstTagList *tags; caps = gst_discoverer_stream_info_get_caps (info); if (caps) { if (gst_caps_is_fixed (caps)) desc = gst_pb_utils_get_codec_description (caps); else desc = gst_caps_to_string (caps); gst_caps_unref (caps); } g_print ("%*s%s: %s\n", 2 * depth, " ", gst_discoverer_stream_info_get_stream_type_nick (info), (desc ? desc : "")); if (desc) { g_free (desc); desc = NULL; } tags = gst_discoverer_stream_info_get_tags (info); if (tags) { g_print ("%*sTags:\n", 2 * (depth + 1), " "); gst_tag_list_foreach (tags, print_tag_foreach, GINT_TO_POINTER (depth + 2)); } }
static gchar * gst_stream_video_information_to_string (GstDiscovererStreamInfo * info, gint depth) { GstDiscovererVideoInfo *video_info; GString *s; gchar *tmp; int len = 500; const GstTagList *tags; g_return_val_if_fail (info != NULL, NULL); s = g_string_sized_new (len); gst_stream_information_to_string (info, s, depth); video_info = (GstDiscovererVideoInfo *) info; my_g_string_append_printf (s, depth, "Width: %u\n", gst_discoverer_video_info_get_width (video_info)); my_g_string_append_printf (s, depth, "Height: %u\n", gst_discoverer_video_info_get_height (video_info)); my_g_string_append_printf (s, depth, "Depth: %u\n", gst_discoverer_video_info_get_depth (video_info)); my_g_string_append_printf (s, depth, "Frame rate: %u/%u\n", gst_discoverer_video_info_get_framerate_num (video_info), gst_discoverer_video_info_get_framerate_denom (video_info)); my_g_string_append_printf (s, depth, "Pixel aspect ratio: %u/%u\n", gst_discoverer_video_info_get_par_num (video_info), gst_discoverer_video_info_get_par_denom (video_info)); my_g_string_append_printf (s, depth, "Interlaced: %s\n", gst_discoverer_video_info_is_interlaced (video_info) ? "true" : "false"); my_g_string_append_printf (s, depth, "Bitrate: %u\n", gst_discoverer_video_info_get_bitrate (video_info)); my_g_string_append_printf (s, depth, "Max bitrate: %u\n", gst_discoverer_video_info_get_max_bitrate (video_info)); my_g_string_append_printf (s, depth, "Tags:\n"); tags = gst_discoverer_stream_info_get_tags (info); if (tags) { tmp = gst_tag_list_to_string (tags); my_g_string_append_printf (s, depth, " %s\n", tmp); g_free (tmp); } else { my_g_string_append_printf (s, depth, " None\n"); } if (verbose) my_g_string_append_printf (s, depth, "\n"); return g_string_free (s, FALSE); }
static gchar * gst_stream_subtitle_information_to_string (GstDiscovererStreamInfo * info, gint depth) { GstDiscovererSubtitleInfo *subtitle_info; GString *s; gchar *tmp; const gchar *ctmp; int len = 400; const GstTagList *tags; GstCaps *caps; g_return_val_if_fail (info != NULL, NULL); s = g_string_sized_new (len); 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); my_g_string_append_printf (s, depth, "Additional info:\n"); if (gst_discoverer_stream_info_get_misc (info)) { tmp = gst_structure_to_string (gst_discoverer_stream_info_get_misc (info)); my_g_string_append_printf (s, depth, " %s\n", tmp); g_free (tmp); } else { my_g_string_append_printf (s, depth, " None\n"); } subtitle_info = (GstDiscovererSubtitleInfo *) info; ctmp = gst_discoverer_subtitle_info_get_language (subtitle_info); my_g_string_append_printf (s, depth, "Language: %s\n", ctmp ? ctmp : "<unknown>"); my_g_string_append_printf (s, depth, "Tags:\n"); tags = gst_discoverer_stream_info_get_tags (info); if (tags) { tmp = gst_structure_to_string ((GstStructure *) tags); my_g_string_append_printf (s, depth, " %s\n", tmp); g_free (tmp); } else { my_g_string_append_printf (s, depth, " None\n"); } if (verbose) my_g_string_append_printf (s, depth, "\n"); return g_string_free (s, FALSE); }
GUPnPDLNAFractionValue gupnp_dlna_gst_get_fraction_value (GstCaps* caps, GstDiscovererStreamInfo *stream, GstDiscovererInfo *info, const gchar *name) { GUPnPDLNAFractionValue value = GUPNP_DLNA_FRACTION_VALUE_UNSET; if (caps != NULL) { guint caps_size = gst_caps_get_size (caps); guint iter; for (iter = 0; iter < caps_size; ++iter) { const GstStructure *st = gst_caps_get_structure (caps, iter); value = get_fraction_value_from_structure (st, name); if (value.state == GUPNP_DLNA_VALUE_STATE_SET) return value; } } if (stream != NULL) { const GstStructure *st = gst_discoverer_stream_info_get_misc (stream); value = get_fraction_value_from_structure (st, name); if (value.state == GUPNP_DLNA_VALUE_STATE_SET) return value; } if (info != NULL) { const GstStructure *st = gst_discoverer_info_get_misc (info); value = get_fraction_value_from_structure (st, name); if (value.state == GUPNP_DLNA_VALUE_STATE_SET) return value; } if (stream != NULL) { const GstTagList *tags = gst_discoverer_stream_info_get_tags (stream); value = get_fraction_value_from_tag_list (tags, name); if (value.state == GUPNP_DLNA_VALUE_STATE_SET) return value; } return value; }
static gchar * gst_stream_audio_information_to_string (GstDiscovererStreamInfo * info, gint depth) { GstDiscovererAudioInfo *audio_info; GString *s; gchar *tmp; const gchar *ctmp; int len = 400; const GstTagList *tags; g_return_val_if_fail (info != NULL, NULL); s = g_string_sized_new (len); gst_stream_information_to_string (info, s, depth); audio_info = (GstDiscovererAudioInfo *) info; ctmp = gst_discoverer_audio_info_get_language (audio_info); my_g_string_append_printf (s, depth, "Language: %s\n", ctmp ? ctmp : "<unknown>"); my_g_string_append_printf (s, depth, "Channels: %u\n", gst_discoverer_audio_info_get_channels (audio_info)); my_g_string_append_printf (s, depth, "Sample rate: %u\n", gst_discoverer_audio_info_get_sample_rate (audio_info)); my_g_string_append_printf (s, depth, "Depth: %u\n", gst_discoverer_audio_info_get_depth (audio_info)); my_g_string_append_printf (s, depth, "Bitrate: %u\n", gst_discoverer_audio_info_get_bitrate (audio_info)); my_g_string_append_printf (s, depth, "Max bitrate: %u\n", gst_discoverer_audio_info_get_max_bitrate (audio_info)); my_g_string_append_printf (s, depth, "Tags:\n"); tags = gst_discoverer_stream_info_get_tags (info); if (tags) { tmp = gst_tag_list_to_string (tags); my_g_string_append_printf (s, depth, " %s\n", tmp); g_free (tmp); } else { my_g_string_append_printf (s, depth, " None\n"); } if (verbose) my_g_string_append_printf (s, depth, "\n"); return g_string_free (s, FALSE); }
static gchar * gst_stream_audio_information_to_string (GstDiscovererStreamInfo * info, guint depth) { GstDiscovererAudioInfo *audio_info; GString *s; const gchar *ctmp; int len = 400; const GstTagList *tags; gchar *channel_positions; g_return_val_if_fail (info != NULL, NULL); s = g_string_sized_new (len); gst_stream_information_to_string (info, s, depth); audio_info = (GstDiscovererAudioInfo *) info; ctmp = gst_discoverer_audio_info_get_language (audio_info); my_g_string_append_printf (s, depth, "Language: %s\n", ctmp ? ctmp : "<unknown>"); channel_positions = format_channel_mask (audio_info); my_g_string_append_printf (s, depth, "Channels: %u (%s)\n", gst_discoverer_audio_info_get_channels (audio_info), channel_positions); g_free (channel_positions); my_g_string_append_printf (s, depth, "Sample rate: %u\n", gst_discoverer_audio_info_get_sample_rate (audio_info)); my_g_string_append_printf (s, depth, "Depth: %u\n", gst_discoverer_audio_info_get_depth (audio_info)); my_g_string_append_printf (s, depth, "Bitrate: %u\n", gst_discoverer_audio_info_get_bitrate (audio_info)); my_g_string_append_printf (s, depth, "Max bitrate: %u\n", gst_discoverer_audio_info_get_max_bitrate (audio_info)); tags = gst_discoverer_stream_info_get_tags (info); print_tags_topology (depth, tags); return g_string_free (s, FALSE); }
static GstCaps * caps_from_video_stream_info (GstDiscovererStreamInfo *info) { GstCaps *temp = gst_discoverer_stream_info_get_caps (info); GstCaps *caps = gst_caps_copy (temp); const GstDiscovererVideoInfo *video_info = GST_DISCOVERER_VIDEO_INFO (info); const GstTagList *stream_tag_list; guint n, d, data; gboolean value; gst_caps_unref (temp); data = gst_discoverer_video_info_get_height (video_info); if (data) gst_caps_set_simple (caps, "height", G_TYPE_INT, data, NULL); data = gst_discoverer_video_info_get_width (video_info); if (data) gst_caps_set_simple (caps, "width", G_TYPE_INT, data, NULL); data = gst_discoverer_video_info_get_depth (video_info); if (data) gst_caps_set_simple (caps, "depth", G_TYPE_INT, data, NULL); n = gst_discoverer_video_info_get_framerate_num (video_info); d = gst_discoverer_video_info_get_framerate_denom (video_info); if (n && d) gst_caps_set_simple (caps, "framerate", GST_TYPE_FRACTION, n, d, NULL); n = gst_discoverer_video_info_get_par_num (video_info); d = gst_discoverer_video_info_get_par_denom (video_info); if (n && d) gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION, n, d, NULL); value = gst_discoverer_video_info_is_interlaced (video_info); if (value) gst_caps_set_simple (caps, "interlaced", G_TYPE_BOOLEAN, value, NULL); stream_tag_list = gst_discoverer_stream_info_get_tags (info); if (stream_tag_list) { guint bitrate; if (gst_tag_list_get_uint (stream_tag_list, "bitrate", &bitrate)) gst_caps_set_simple (caps, "bitrate", G_TYPE_INT, (int) bitrate, NULL); if (gst_tag_list_get_uint (stream_tag_list, "maximum-bitrate", &bitrate)) gst_caps_set_simple (caps, "maximum-bitrate", G_TYPE_INT, (int) bitrate, NULL); } return caps; }