コード例 #1
0
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);
}
コード例 #2
0
ファイル: gstwavenc.c プロジェクト: collects/gst-plugins-good
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;
      }
    }
  }

}
コード例 #3
0
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)) {
    }
}
コード例 #4
0
ファイル: gstreamer-utils.c プロジェクト: KapTmaN/gthumb
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);
		}
        }
}
コード例 #5
0
ファイル: servicemp3.cpp プロジェクト: ambrosa/test
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 "";
}
コード例 #6
0
ファイル: tageditor.c プロジェクト: MrsZTP/rhythmcat
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;
}
コード例 #7
0
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)) {
  }
}