gst-libs/gst/tag/gstvorbistag.c: When writing out floating-point numbers to vorbis comment tags, always use the same ...

Original commit message from CVS:
Patch by: René Stadler  <mail at renestadler de>
* gst-libs/gst/tag/gstvorbistag.c: (gst_tag_to_vorbis_comments):
When writing out floating-point numbers to vorbis comment tags, always
use the same character as separator no matter what the current locale is
(fixes #423051).
* tests/check/libs/tag.c: (GST_START_TEST):
Add unit tests for replaygain tags in vorbis comments (closes #423055).
This commit is contained in:
René Stadler 2007-03-26 22:38:19 +00:00 committed by Tim-Philipp Müller
parent ecab77b7e4
commit 01a1e4bc81
3 changed files with 39 additions and 17 deletions

View file

@ -1,3 +1,15 @@
2007-03-26 Tim-Philipp Müller <tim at centricular dot net>
Patch by: René Stadler <mail at renestadler de>
* gst-libs/gst/tag/gstvorbistag.c: (gst_tag_to_vorbis_comments):
When writing out floating-point numbers to vorbis comment tags, always
use the same character as separator no matter what the current locale is
(fixes #423051).
* tests/check/libs/tag.c: (GST_START_TEST):
Add unit tests for replaygain tags in vorbis comments (closes #423055).
2007-03-26 Thomas Vander Stichele <thomas at apestaart dot org> 2007-03-26 Thomas Vander Stichele <thomas at apestaart dot org>
* ext/vorbis/vorbisdec.c (vorbis_dec_push_forward, * ext/vorbis/vorbisdec.c (vorbis_dec_push_forward,

View file

@ -433,11 +433,12 @@ gst_tag_to_vorbis_comments (const GstTagList * list, const gchar * tag)
} }
case G_TYPE_DOUBLE:{ case G_TYPE_DOUBLE:{
gdouble value; gdouble value;
gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
if (!gst_tag_list_get_double_index (list, tag, i, &value)) if (!gst_tag_list_get_double_index (list, tag, i, &value))
g_return_val_if_reached (NULL); g_return_val_if_reached (NULL);
/* FIXME: what about locale-specific floating point separators? */ g_ascii_formatd (buf, G_ASCII_DTOSTR_BUF_SIZE, "%f", value);
result = g_strdup_printf ("%s=%f", vorbis_tag, value); result = g_strconcat (vorbis_tag, "=", buf, NULL);
break; break;
} }
default:{ default:{

View file

@ -165,6 +165,18 @@ GST_END_TEST;
fail_unless_equals_int (___n, num); \ fail_unless_equals_int (___n, num); \
} }
#define MATCH_DOUBLE(p1, p2) ((p1 < p2 + 1e-6) && (p2 < p1 + 1e-6))
#define ASSERT_TAG_LIST_HAS_DOUBLE(list,field,d) \
{ \
gdouble ___d; \
\
fail_unless (gst_tag_list_get_tag_size (list,field) > 0); \
fail_unless (gst_tag_list_get_tag_size (list,field) == 1); \
fail_unless (gst_tag_list_get_double_index (list, field, 0, &___d)); \
fail_unless (MATCH_DOUBLE (d, ___d), \
"%f does not match expected %f", ___d, d); \
}
GST_START_TEST (test_muscibrainz_tag_registration) GST_START_TEST (test_muscibrainz_tag_registration)
{ {
GstTagList *list; GstTagList *list;
@ -298,20 +310,17 @@ GST_START_TEST (test_vorbis_tags)
ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_EXTENDED_COMMENT, ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_EXTENDED_COMMENT,
"RuBuWuHash=1337BA42F91"); "RuBuWuHash=1337BA42F91");
#if 0 gst_vorbis_tag_add (list, "REPLAYGAIN_TRACK_GAIN", "+12.36");
/* TODO: test these as well */ ASSERT_TAG_LIST_HAS_DOUBLE (list, GST_TAG_TRACK_GAIN, +12.36);
{ gst_vorbis_tag_add (list, "REPLAYGAIN_TRACK_PEAK", "0.96349");
GST_TAG_TRACK_GAIN, "REPLAYGAIN_TRACK_GAIN"} ASSERT_TAG_LIST_HAS_DOUBLE (list, GST_TAG_TRACK_PEAK, 0.96349);
, { gst_vorbis_tag_add (list, "REPLAYGAIN_ALBUM_GAIN", "+10.12");
GST_TAG_TRACK_PEAK, "REPLAYGAIN_TRACK_PEAK"} ASSERT_TAG_LIST_HAS_DOUBLE (list, GST_TAG_ALBUM_GAIN, +10.12);
, { gst_vorbis_tag_add (list, "REPLAYGAIN_ALBUM_PEAK", "0.98107");
GST_TAG_ALBUM_GAIN, "REPLAYGAIN_ALBUM_GAIN"} ASSERT_TAG_LIST_HAS_DOUBLE (list, GST_TAG_ALBUM_PEAK, 0.98107);
, { gst_vorbis_tag_add (list, "REPLAYGAIN_REFERENCE_LOUDNESS", "89.");
GST_TAG_ALBUM_PEAK, "REPLAYGAIN_ALBUM_PEAK"} ASSERT_TAG_LIST_HAS_DOUBLE (list, GST_TAG_REFERENCE_LEVEL, 89.);
, {
GST_TAG_LANGUAGE_CODE, "LANGUAGE"}
,
#endif
/* make sure we can convert back and forth without loss */ /* make sure we can convert back and forth without loss */
{ {
GstTagList *new_list, *even_newer_list; GstTagList *new_list, *even_newer_list;