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); }
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); }
void Discoverer::on_discovered(GstDiscoverer *discoverer, GstDiscovererInfo *info, GError *err, Gstreamer *gst) { Q_UNUSED(err); Q_UNUSED(discoverer); Metadata *meta = gst->getMetadata(); delete meta; GstDiscovererResult result; result = gst_discoverer_info_get_result(info); if (result != GST_DISCOVERER_OK) { gst->setMetadata(nullptr); return; } meta = new Metadata(); // is seekable meta->setSeekable(gst_discoverer_info_get_seekable(info)); // extract duration qint64 time = gst_discoverer_info_get_duration(info); meta->setDuration(UTime(time)); // extract filename QUrl uri(gst_discoverer_info_get_uri(info)); meta->setFilename(uri.toLocalFile()); // set filesize QFile file(uri.toLocalFile()); meta->setSize(file.size()); // extract tags const GstTagList *tags; tags = gst_discoverer_info_get_tags(info); if (tags) { gst_tag_list_foreach(tags, fillTags, meta); } GList *list, *iterator; // extract video streams iterator = list = gst_discoverer_info_get_video_streams(info); while (iterator) { Video video; GstDiscovererVideoInfo *vInfo = (GstDiscovererVideoInfo *)iterator->data; video.Width = gst_discoverer_video_info_get_width(vInfo); video.Height = gst_discoverer_video_info_get_height(vInfo); video.Framerate = double(gst_discoverer_video_info_get_framerate_num(vInfo)) / double(gst_discoverer_video_info_get_framerate_denom(vInfo)); meta->addVideo(video); iterator = iterator->next; } gst_discoverer_stream_info_list_free(list); // extract audio streams iterator = list = gst_discoverer_info_get_audio_streams(info); while (iterator) { Audio audio; GstDiscovererAudioInfo *aInfo = (GstDiscovererAudioInfo *)iterator->data; audio.Channels = gst_discoverer_audio_info_get_channels(aInfo); audio.SampleRate = gst_discoverer_audio_info_get_sample_rate(aInfo); audio.Language = gst_discoverer_audio_info_get_language(aInfo); meta->addAudio(audio); iterator = iterator->next; } gst_discoverer_stream_info_list_free(list); // extract subtitle streams iterator = list = gst_discoverer_info_get_subtitle_streams(info); while (iterator) { Subtitle subtitle; GstDiscovererSubtitleInfo *sInfo = (GstDiscovererSubtitleInfo *)iterator->data; gst_discoverer_subtitle_info_get_language(sInfo); subtitle.Language = gst_discoverer_subtitle_info_get_language(sInfo); meta->addSubtitles(subtitle); iterator = iterator->next; } gst_discoverer_stream_info_list_free(list); // fill metadata gst->setMetadata(meta); QObject::connect(gst->getMetadata(), SIGNAL(updated()), gst, SLOT(on_metadata_update())); }