GST_END_TEST GST_START_TEST (test_date_tags) { GstTagList *tag_list, *tag_list2; GDate *date, *date2; gchar *str; date = g_date_new_dmy (14, 10, 2005); tag_list = gst_tag_list_new_empty (); gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, GST_TAG_DATE, date, NULL); str = gst_tag_list_to_string (tag_list); fail_if (str == NULL); fail_if (strstr (str, "2005-10-14") == NULL); tag_list2 = gst_tag_list_new_from_string (str); fail_if (tag_list2 == NULL); fail_if (!gst_tag_list_get_date (tag_list2, GST_TAG_DATE, &date2)); fail_unless (gst_tag_list_is_equal (tag_list2, tag_list)); gst_tag_list_unref (tag_list2); g_free (str); fail_if (g_date_compare (date, date2) != 0); fail_if (g_date_get_day (date) != 14); fail_if (g_date_get_month (date) != 10); fail_if (g_date_get_year (date) != 2005); fail_if (g_date_get_day (date2) != 14); fail_if (g_date_get_month (date2) != 10); fail_if (g_date_get_year (date2) != 2005); g_date_free (date2); gst_tag_list_unref (tag_list); g_date_free (date); }
static void gst_wavparse_tags_foreach (const GstTagList * tags, const gchar * tag, gpointer data) { const struct { guint32 fcc; const gchar *tag; } rifftags[] = { { GST_RIFF_INFO_IARL, GST_TAG_LOCATION}, { GST_RIFF_INFO_IART, GST_TAG_ARTIST}, { GST_RIFF_INFO_ICMT, GST_TAG_COMMENT}, { GST_RIFF_INFO_ICOP, GST_TAG_COPYRIGHT}, { GST_RIFF_INFO_ICRD, GST_TAG_DATE}, { GST_RIFF_INFO_IGNR, GST_TAG_GENRE}, { GST_RIFF_INFO_IKEY, GST_TAG_KEYWORDS}, { GST_RIFF_INFO_INAM, GST_TAG_TITLE}, { GST_RIFF_INFO_IPRD, GST_TAG_ALBUM}, { GST_RIFF_INFO_ISBJ, GST_TAG_ALBUM_ARTIST}, { GST_RIFF_INFO_ISFT, GST_TAG_ENCODER}, { GST_RIFF_INFO_ISRC, GST_TAG_ISRC}, { 0, NULL} }; gint n; gchar *str = NULL; GstByteWriter *bw = data; for (n = 0; rifftags[n].fcc != 0; n++) { if (!strcmp (rifftags[n].tag, tag)) { if (rifftags[n].fcc == GST_RIFF_INFO_ICRD) { GDate *date; /* special case for the date tag */ if (gst_tag_list_get_date (tags, tag, &date)) { str = g_strdup_printf ("%04d:%02d:%02d", g_date_get_year (date), g_date_get_month (date), g_date_get_day (date)); g_date_free (date); } } else { gst_tag_list_get_string (tags, tag, &str); } if (str) { gst_byte_writer_put_uint32_le (bw, rifftags[n].fcc); gst_byte_writer_put_uint32_le (bw, GST_ROUND_UP_2 (strlen (str))); gst_byte_writer_put_string (bw, str); g_free (str); str = NULL; break; } } } }
static void test_taglib_id3mux_check_tags (GstTagList * tags, guint32 mask) { if (mask & (1 << 0)) { gchar *s = NULL; fail_unless (gst_tag_list_get_string (tags, GST_TAG_ARTIST, &s)); fail_unless (g_str_equal (s, TEST_ARTIST)); g_free (s); } if (mask & (1 << 1)) { gchar *s = NULL; fail_unless (gst_tag_list_get_string (tags, GST_TAG_TITLE, &s)); fail_unless (g_str_equal (s, TEST_TITLE)); g_free (s); } if (mask & (1 << 2)) { gchar *s = NULL; fail_unless (gst_tag_list_get_string (tags, GST_TAG_ALBUM, &s)); fail_unless (g_str_equal (s, TEST_ALBUM)); g_free (s); } if (mask & (1 << 3)) { GDate *shouldbe, *date = NULL; shouldbe = TEST_DATE; fail_unless (gst_tag_list_get_date (tags, GST_TAG_DATE, &date)); fail_unless (g_date_compare (shouldbe, date) == 0); g_date_free (shouldbe); g_date_free (date); } if (mask & (1 << 4)) { guint num; fail_unless (gst_tag_list_get_uint (tags, GST_TAG_TRACK_NUMBER, &num)); fail_unless (num == TEST_TRACK_NUMBER); } if (mask & (1 << 5)) { guint count; fail_unless (gst_tag_list_get_uint (tags, GST_TAG_TRACK_COUNT, &count)); fail_unless (count == TEST_TRACK_COUNT); } if (mask & (1 << 6)) { guint num; fail_unless (gst_tag_list_get_uint (tags, GST_TAG_ALBUM_VOLUME_NUMBER, &num)); fail_unless (num == TEST_VOLUME_NUMBER); } if (mask & (1 << 7)) { guint count; fail_unless (gst_tag_list_get_uint (tags, GST_TAG_ALBUM_VOLUME_COUNT, &count)); fail_unless (count == TEST_VOLUME_COUNT); } if (mask & (1 << 8)) { gdouble gain; fail_unless (gst_tag_list_get_double (tags, GST_TAG_TRACK_GAIN, &gain)); fail_unless_sorta_equals_float (gain, TEST_TRACK_GAIN); } if (mask & (1 << 9)) { gdouble gain; fail_unless (gst_tag_list_get_double (tags, GST_TAG_ALBUM_GAIN, &gain)); fail_unless_sorta_equals_float (gain, TEST_ALBUM_GAIN); } if (mask & (1 << 10)) { gdouble peak; fail_unless (gst_tag_list_get_double (tags, GST_TAG_TRACK_PEAK, &peak)); fail_unless_sorta_equals_float (peak, TEST_TRACK_PEAK); } if (mask & (1 << 11)) { gdouble peak; fail_unless (gst_tag_list_get_double (tags, GST_TAG_ALBUM_PEAK, &peak)); fail_unless_sorta_equals_float (peak, TEST_ALBUM_PEAK); } if (mask & (1 << 12)) { gdouble bpm; fail_unless (gst_tag_list_get_double (tags, GST_TAG_BEATS_PER_MINUTE, &bpm)); fail_unless_sorta_equals_float (bpm, TEST_BPM); } if (mask & (1 << 13)) { } }
static void add_metadata_from_tag (GFileInfo *info, const GstTagList *list, const char *tag, const char *tag_key) { GType tag_type; tag_type = gst_tag_get_type (tag); if (tag_type == G_TYPE_BOOLEAN) { gboolean ret; if (gst_tag_list_get_boolean (list, tag, &ret)) { if (ret) add_metadata (info, tag_key, g_strdup ("TRUE"), NULL); else add_metadata (info, tag_key, g_strdup ("FALSE"), NULL); } } if (tag_type == G_TYPE_STRING) { char *ret = NULL; if (gst_tag_list_get_string (list, tag, &ret)) add_metadata (info, tag_key, ret, NULL); } if (tag_type == G_TYPE_UCHAR) { guint ret = 0; if (gst_tag_list_get_uint (list, tag, &ret)) add_metadata (info, tag_key, g_strdup_printf ("%u", ret), NULL); } if (tag_type == G_TYPE_CHAR) { int ret = 0; if (gst_tag_list_get_int (list, tag, &ret)) add_metadata (info, tag_key, g_strdup_printf ("%d", ret), NULL); } if (tag_type == G_TYPE_UINT) { guint ret = 0; if (gst_tag_list_get_uint (list, tag, &ret)) add_metadata (info, tag_key, g_strdup_printf ("%u", ret), NULL); } if (tag_type == G_TYPE_INT) { gint ret = 0; if (gst_tag_list_get_int (list, tag, &ret)) add_metadata (info, tag_key, g_strdup_printf ("%d", ret), NULL); } if (tag_type == G_TYPE_ULONG) { guint64 ret = 0; if (gst_tag_list_get_uint64 (list, tag, &ret)) add_metadata (info, tag_key, g_strdup_printf ("%" G_GUINT64_FORMAT, ret), NULL); } if (tag_type == G_TYPE_LONG) { gint64 ret = 0; if (gst_tag_list_get_int64 (list, tag, &ret)) add_metadata (info, tag_key, g_strdup_printf ("%" G_GINT64_FORMAT, ret), NULL); } if (tag_type == G_TYPE_INT64) { gint64 ret = 0; if (gst_tag_list_get_int64 (list, tag, &ret)) add_metadata (info, tag_key, g_strdup_printf ("%" G_GINT64_FORMAT, ret), NULL); } if (tag_type == G_TYPE_UINT64) { guint64 ret = 0; if (gst_tag_list_get_uint64 (list, tag, &ret)) add_metadata (info, tag_key, g_strdup_printf ("%" G_GUINT64_FORMAT, ret), NULL); } if (tag_type == G_TYPE_DOUBLE) { gdouble ret = 0; if (gst_tag_list_get_double (list, tag, &ret)) add_metadata (info, tag_key, g_strdup_printf ("%f", ret), NULL); } if (tag_type == G_TYPE_FLOAT) { gfloat ret = 0; if (gst_tag_list_get_float (list, tag, &ret)) add_metadata (info, tag_key, g_strdup_printf ("%f", ret), NULL); } if (tag_type == G_TYPE_DATE) { GDate *ret = NULL; if (gst_tag_list_get_date (list, tag, &ret)) { if (ret != NULL) { char buf[128]; char *raw; char *formatted; g_date_strftime (buf, 10, "%F %T", ret); raw = g_strdup (buf); g_date_strftime (buf, 10, "%x %X", ret); formatted = g_strdup (buf); add_metadata (info, tag_key, raw, formatted); } g_free (ret); } } }
std::string eServiceMP3::getInfoString(int w) { if ( !m_stream_tags && w < sUser && w > 26 ) return ""; const gchar *tag = 0; switch (w) { case sTagTitle: tag = GST_TAG_TITLE; break; case sTagArtist: tag = GST_TAG_ARTIST; break; case sTagAlbum: tag = GST_TAG_ALBUM; break; case sTagTitleSortname: tag = GST_TAG_TITLE_SORTNAME; break; case sTagArtistSortname: tag = GST_TAG_ARTIST_SORTNAME; break; case sTagAlbumSortname: tag = GST_TAG_ALBUM_SORTNAME; break; case sTagDate: GDate *date; if (gst_tag_list_get_date(m_stream_tags, GST_TAG_DATE, &date)) { gchar res[5]; g_date_strftime (res, sizeof(res), "%Y-%M-%D", date); return (std::string)res; } break; case sTagComposer: tag = GST_TAG_COMPOSER; break; case sTagGenre: tag = GST_TAG_GENRE; break; case sTagComment: tag = GST_TAG_COMMENT; break; case sTagExtendedComment: tag = GST_TAG_EXTENDED_COMMENT; break; case sTagLocation: tag = GST_TAG_LOCATION; break; case sTagHomepage: tag = GST_TAG_HOMEPAGE; break; case sTagDescription: tag = GST_TAG_DESCRIPTION; break; case sTagVersion: tag = GST_TAG_VERSION; break; case sTagISRC: tag = GST_TAG_ISRC; break; case sTagOrganization: tag = GST_TAG_ORGANIZATION; break; case sTagCopyright: tag = GST_TAG_COPYRIGHT; break; case sTagCopyrightURI: tag = GST_TAG_COPYRIGHT_URI; break; case sTagContact: tag = GST_TAG_CONTACT; break; case sTagLicense: tag = GST_TAG_LICENSE; break; case sTagLicenseURI: tag = GST_TAG_LICENSE_URI; break; case sTagCodec: tag = GST_TAG_CODEC; break; case sTagAudioCodec: tag = GST_TAG_AUDIO_CODEC; break; case sTagVideoCodec: tag = GST_TAG_VIDEO_CODEC; break; case sTagEncoder: tag = GST_TAG_ENCODER; break; case sTagLanguageCode: tag = GST_TAG_LANGUAGE_CODE; break; case sTagKeywords: tag = GST_TAG_KEYWORDS; break; case sTagChannelMode: tag = "channel-mode"; break; case sUser+12: return m_errorInfo.error_message; default: return ""; } if ( !tag ) return ""; gchar *value; if (m_stream_tags && gst_tag_list_get_string(m_stream_tags, tag, &value)) { std::string res = value; g_free(value); return res; } return ""; }
static gboolean rc_plugin_tag_reader_bus_handler(GstBus *bus, GstMessage *msg, gboolean data) { GstTagList *tags = NULL; gchar *string = NULL; guint number = 0; gint integer = 0; GstState state; GstStructure *structure = NULL; GstCaps *caps; GstFormat fmt = GST_FORMAT_TIME; gint64 length = 0; gdouble replay_gain = 0.0; GDate *date = NULL; switch(GST_MESSAGE_TYPE(msg)) { case GST_MESSAGE_EOS: break; case GST_MESSAGE_ERROR: break; case GST_MESSAGE_STATE_CHANGED: if(gst_element_get_state(tag_reader_bin, &state, NULL, GST_CLOCK_TIME_NONE)==GST_STATE_CHANGE_SUCCESS) { if(state==GST_STATE_PAUSED && tag_reader_sink_pad!=NULL) { caps = gst_pad_get_negotiated_caps(tag_reader_sink_pad); if(caps!=NULL) { structure = gst_caps_get_structure(caps, 0); gst_structure_get_int(structure, "rate", &integer); string = g_strdup_printf("%d Hz", integer); gtk_label_set_text(GTK_LABEL(tag_ui.sr_entry), string); g_free(string); gst_structure_get_int(structure, "depth", &integer); string = g_strdup_printf("%d", integer); gtk_label_set_text(GTK_LABEL(tag_ui.bd_entry), string); g_free(string); gst_structure_get_int(structure, "channels", &integer); if(integer==2) string = g_strdup_printf(_("Stereo")); else if(integer==1) string = g_strdup_printf(_("Mono")); else string = g_strdup_printf("%d", integer); gtk_label_set_text(GTK_LABEL(tag_ui.channel_entry), string); g_free(string); gst_caps_unref(caps); } } if(state==GST_STATE_PAUSED) { gst_element_query_duration(tag_reader_bin, &fmt, &length); length = length / GST_MSECOND / 10; string = g_strdup_printf("%02d:%02d.%02d", (gint)(length/6000), (gint)(length%6000)/100, (gint)(length%100)); gtk_label_set_text(GTK_LABEL(tag_ui.length_entry), string); g_free(string); } } break; case GST_MESSAGE_TAG: gst_message_parse_tag(msg, &tags); if(gst_tag_list_get_string(tags, GST_TAG_TITLE, &string)) { if(string!=NULL) { if(tag_info.title!=NULL) g_free(tag_info.title); tag_info.title = g_strdup(string); gtk_entry_set_text(GTK_ENTRY(tag_ui.title_entry), string); g_free(string); } } if(gst_tag_list_get_string(tags, GST_TAG_ARTIST, &string)) { if(string!=NULL) { if(tag_info.artist!=NULL) g_free(tag_info.artist); tag_info.artist = g_strdup(string); gtk_entry_set_text(GTK_ENTRY(tag_ui.artist_entry), string); g_free(string); } } if(gst_tag_list_get_string(tags, GST_TAG_ALBUM, &string)) { if(string!=NULL) { if(tag_info.album!=NULL) g_free(tag_info.album); tag_info.album = g_strdup(string); gtk_entry_set_text(GTK_ENTRY(tag_ui.album_entry), string); g_free(string); } } if(gst_tag_list_get_uint(tags, GST_TAG_TRACK_NUMBER, &number)) { tag_info.track = number; string = g_strdup_printf("%d", number); gtk_entry_set_text(GTK_ENTRY(tag_ui.track_entry), string); g_free(string); } if(gst_tag_list_get_string(tags, GST_TAG_GENRE, &string)) { if(string!=NULL) { if(tag_info.genre!=NULL) g_free(tag_info.genre); tag_info.genre = g_strdup(string); gtk_entry_set_text(GTK_ENTRY(tag_ui.genre_entry), string); g_free(string); } } if(gst_tag_list_get_string(tags, GST_TAG_COMMENT, &string)) { if(string!=NULL) { if(tag_info.comment!=NULL) g_free(tag_info.comment); tag_info.comment = g_strdup(string); gtk_entry_set_text(GTK_ENTRY(tag_ui.comment_entry), string); g_free(string); } } if(gst_tag_list_get_uint(tags, GST_TAG_BITRATE, &number)) { string = g_strdup_printf("%d kbps", number/1000); gtk_label_set_text(GTK_LABEL(tag_ui.bitrate_entry), string); g_free(string); } if(gst_tag_list_get_string(tags, GST_TAG_AUDIO_CODEC, &string)) { if(string!=NULL) { gtk_label_set_text(GTK_LABEL(tag_ui.format_entry), string); g_free(string); } } if(gst_tag_list_get_double(tags, GST_TAG_TRACK_GAIN, &replay_gain)) { tag_info.rg = replay_gain; string = g_strdup_printf("%lf", replay_gain); gtk_entry_set_text(GTK_ENTRY(tag_ui.rg_entry), string); g_free(string); } if(gst_tag_list_get_date(tags, GST_TAG_DATE, &date)) { if(date!=NULL) { tag_info.year = g_date_get_year(date); string = g_strdup_printf("%u", g_date_get_year(date)); gtk_entry_set_text(GTK_ENTRY(tag_ui.year_entry), string); g_free(string); g_date_free(date); } } gst_tag_list_free(tags); break; case GST_MESSAGE_ELEMENT: break; default: break; } return TRUE; }
static void test_taglib_apev2mux_check_tags (GstTagList * tags, guint32 mask) { if (mask & (1 << 0)) { gchar *s = NULL; fail_unless (gst_tag_list_get_string (tags, GST_TAG_ARTIST, &s)); fail_unless (g_str_equal (s, TEST_ARTIST)); g_free (s); } if (mask & (1 << 1)) { gchar *s = NULL; fail_unless (gst_tag_list_get_string (tags, GST_TAG_TITLE, &s)); fail_unless (g_str_equal (s, TEST_TITLE)); g_free (s); } if (mask & (1 << 2)) { gchar *s = NULL; fail_unless (gst_tag_list_get_string (tags, GST_TAG_ALBUM, &s)); fail_unless (g_str_equal (s, TEST_ALBUM)); g_free (s); } if (mask & (1 << 3)) { GDate *shouldbe, *date = NULL; shouldbe = TEST_DATE; fail_unless (gst_tag_list_get_date (tags, GST_TAG_DATE, &date)); fail_unless (g_date_compare (shouldbe, date) == 0); g_date_free (shouldbe); g_date_free (date); } if (mask & (1 << 4)) { guint num; fail_unless (gst_tag_list_get_uint (tags, GST_TAG_TRACK_NUMBER, &num)); fail_unless (num == TEST_TRACK_NUMBER); } if (mask & (1 << 5)) { guint count; fail_unless (gst_tag_list_get_uint (tags, GST_TAG_TRACK_COUNT, &count)); fail_unless (count == TEST_TRACK_COUNT); } if (mask & (1 << 6)) { gdouble gain; fail_unless (gst_tag_list_get_double (tags, GST_TAG_TRACK_GAIN, &gain)); fail_unless (gain == TEST_TRACK_GAIN); } if (mask & (1 << 7)) { gdouble gain; fail_unless (gst_tag_list_get_double (tags, GST_TAG_ALBUM_GAIN, &gain)); fail_unless (gain == TEST_ALBUM_GAIN); } if (mask & (1 << 8)) { } if (mask & (1 << 9)) { } if (mask & (1 << 10)) { } if (mask & (1 << 11)) { } if (mask & (1 << 12)) { } if (mask & (1 << 13)) { } }