mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
id3v2mux: write beats-per-minute tag using TBPM frame
https://bugzilla.gnome.org/show_bug.cgi?id=621520
This commit is contained in:
parent
fc00857c82
commit
debe2d5634
2 changed files with 30 additions and 1 deletions
|
@ -626,6 +626,26 @@ add_relative_volume_tag (ID3v2::Tag * id3v2tag, const GstTagList * list,
|
||||||
id3v2tag->addFrame (frame);
|
id3v2tag->addFrame (frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_bpm_tag (ID3v2::Tag * id3v2tag, const GstTagList * list,
|
||||||
|
const gchar * tag, guint num_tags, const gchar * frame_id)
|
||||||
|
{
|
||||||
|
gdouble bpm;
|
||||||
|
|
||||||
|
if (gst_tag_list_get_double_index (list, tag, 0, &bpm)) {
|
||||||
|
ID3v2::TextIdentificationFrame * frame;
|
||||||
|
gchar *tag_str;
|
||||||
|
|
||||||
|
tag_str = g_strdup_printf ("%u", (guint)bpm);
|
||||||
|
|
||||||
|
GST_DEBUG ("Setting %s to %s", tag, tag_str);
|
||||||
|
frame = new ID3v2::TextIdentificationFrame ("TBPM", String::UTF8);
|
||||||
|
id3v2tag->addFrame (frame);
|
||||||
|
frame->setText (tag_str);
|
||||||
|
g_free (tag_str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* id3demux produces these for frames it cannot parse */
|
/* id3demux produces these for frames it cannot parse */
|
||||||
#define GST_ID3_DEMUX_TAG_ID3V2_FRAME "private-id3v2-frame"
|
#define GST_ID3_DEMUX_TAG_ID3V2_FRAME "private-id3v2-frame"
|
||||||
|
|
||||||
|
@ -669,7 +689,8 @@ static const struct
|
||||||
GST_TAG_TRACK_PEAK, add_relative_volume_tag, ""}, {
|
GST_TAG_TRACK_PEAK, add_relative_volume_tag, ""}, {
|
||||||
GST_TAG_TRACK_GAIN, add_relative_volume_tag, ""}, {
|
GST_TAG_TRACK_GAIN, add_relative_volume_tag, ""}, {
|
||||||
GST_TAG_ALBUM_PEAK, add_relative_volume_tag, ""}, {
|
GST_TAG_ALBUM_PEAK, add_relative_volume_tag, ""}, {
|
||||||
GST_TAG_ALBUM_GAIN, add_relative_volume_tag, ""}
|
GST_TAG_ALBUM_GAIN, add_relative_volume_tag, ""}, {
|
||||||
|
GST_TAG_BEATS_PER_MINUTE, add_bpm_tag, ""}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#define TEST_ALBUM_GAIN 0.78
|
#define TEST_ALBUM_GAIN 0.78
|
||||||
#define TEST_TRACK_PEAK 0.83
|
#define TEST_TRACK_PEAK 0.83
|
||||||
#define TEST_ALBUM_PEAK 0.18
|
#define TEST_ALBUM_PEAK 0.18
|
||||||
|
#define TEST_BPM 113.0
|
||||||
|
|
||||||
/* for dummy mp3 frame sized MP3_FRAME_SIZE bytes,
|
/* for dummy mp3 frame sized MP3_FRAME_SIZE bytes,
|
||||||
* start: ff fb b0 44 00 00 08 00 00 4b 00 00 00 00 00 00 */
|
* start: ff fb b0 44 00 00 08 00 00 4b 00 00 00 00 00 00 */
|
||||||
|
@ -117,6 +118,8 @@ test_taglib_id3mux_create_tags (guint32 mask)
|
||||||
GST_TAG_ALBUM_PEAK, TEST_ALBUM_PEAK, NULL);
|
GST_TAG_ALBUM_PEAK, TEST_ALBUM_PEAK, NULL);
|
||||||
}
|
}
|
||||||
if (mask & (1 << 12)) {
|
if (mask & (1 << 12)) {
|
||||||
|
gst_tag_list_add (tags, GST_TAG_MERGE_KEEP,
|
||||||
|
GST_TAG_BEATS_PER_MINUTE, TEST_BPM, NULL);
|
||||||
}
|
}
|
||||||
if (mask & (1 << 13)) {
|
if (mask & (1 << 13)) {
|
||||||
}
|
}
|
||||||
|
@ -239,6 +242,11 @@ test_taglib_id3mux_check_tags (GstTagList * tags, guint32 mask)
|
||||||
fail_unless_sorta_equals_float (peak, TEST_ALBUM_PEAK);
|
fail_unless_sorta_equals_float (peak, TEST_ALBUM_PEAK);
|
||||||
}
|
}
|
||||||
if (mask & (1 << 12)) {
|
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)) {
|
if (mask & (1 << 13)) {
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue