Compare commits

...

8 Commits

Author SHA1 Message Date
Max Kellermann
79f2f8cddc release v0.19.13 2016-02-23 22:06:13 +01:00
Max Kellermann
39fa949345 queue/Playlist: move only the tag items in TagModified()
Fixes disappearing duration of remote songs during playback.

See http://bugs.musicpd.org/view.php?id=4492
2016-02-23 21:01:55 +01:00
Max Kellermann
e1d7a5cbf5 DetachedSong: add method MoveTagItemsFrom() 2016-02-23 20:59:44 +01:00
Max Kellermann
f3cefaf043 tag/Tag: move code to MoveItemsFrom() 2016-02-23 20:57:56 +01:00
Max Kellermann
b3460f3f54 configure.ac, unix/Daemon: check for initgroups() at configure time
The initgroups() manpage says we need to check for _BSD_SOURCE.  The
thing is that glibc deprecated this macro, and doesn't define it
anymore, effectively breaking all MPD supplementary groups.

The real fix is to check for initgroups() availability at configure
time, instead of relying on the deprecated _BSD_SOURCE macro.
2016-02-23 20:13:34 +01:00
Chris Spiegel
1e0ad1f6bf Add TAK as a supported FFmpeg format. 2016-02-19 17:32:48 +01:00
Max Kellermann
4abcb08cc9 tag/{aiff,riff}: fix ID3 chunk padding
Apply padding only to the fseek(), not to the chunk size.  This fixes
bogus "failed to read riff chunk" messages when the last chunk has an
odd size.

See http://bugs.musicpd.org/view.php?id=4486
2016-02-19 17:31:20 +01:00
Max Kellermann
81e7833711 configure.ac: prepare for 0.19.13 2016-02-19 17:30:01 +01:00
9 changed files with 39 additions and 14 deletions

8
NEWS
View File

@@ -1,3 +1,11 @@
ver 0.19.13 (2016/02/23)
* tags
- aiff, riff: fix ID3 chunk padding
* decoder
- ffmpeg: support the TAK codec
* fix disappearing duration of remote songs during playback
* initialize supplementary groups with glibc 2.19+
ver 0.19.12 (2015/12/15)
* fix assertion failure on malformed UTF-8 tag
* fix build failure on non-Linux systems

View File

@@ -1,10 +1,10 @@
AC_PREREQ(2.60)
AC_INIT(mpd, 0.19.12, musicpd-dev-team@lists.sourceforge.net)
AC_INIT(mpd, 0.19.13, musicpd-dev-team@lists.sourceforge.net)
VERSION_MAJOR=0
VERSION_MINOR=19
VERSION_REVISION=12
VERSION_REVISION=13
VERSION_EXTRA=0
AC_CONFIG_SRCDIR([src/Main.cxx])
@@ -206,6 +206,7 @@ if test x$host_is_linux = xyes; then
fi
AC_CHECK_FUNCS(getpwnam_r getpwuid_r)
AC_CHECK_FUNCS(initgroups)
AC_CHECK_FUNCS(strndup)
if test x$host_is_linux = xyes; then

View File

@@ -188,6 +188,14 @@ public:
tag = std::move(other.tag);
}
/**
* Similar to the MoveTagFrom(), but move only the #TagItem
* array.
*/
void MoveTagItemsFrom(DetachedSong &&other) {
tag.MoveItemsFrom(std::move(other.tag));
}
time_t GetLastModified() const {
return mtime;
}

View File

@@ -738,7 +738,7 @@ static const char *const ffmpeg_suffixes[] = {
"mve", "mvi", "mxf", "nc", "nsv", "nut", "nuv", "oga", "ogm", "ogv",
"ogx", "oma", "ogg", "omg", "opus", "psp", "pva", "qcp", "qt", "r3d", "ra",
"ram", "rl2", "rm", "rmvb", "roq", "rpl", "rvc", "shn", "smk", "snd",
"sol", "son", "spx", "str", "swf", "tgi", "tgq", "tgv", "thp", "ts",
"sol", "son", "spx", "str", "swf", "tak", "tgi", "tgq", "tgv", "thp", "ts",
"tsp", "tta", "xa", "xvid", "uv", "uv2", "vb", "vid", "vob", "voc",
"vp6", "vmd", "wav", "webm", "wma", "wmv", "wsaud", "wsvga", "wv",
"wve",

View File

@@ -37,7 +37,7 @@ playlist::TagModified(DetachedSong &&song)
DetachedSong &current_song = queue.GetOrder(current);
if (song.IsSame(current_song))
current_song.MoveTagFrom(std::move(song));
current_song.MoveTagItemsFrom(std::move(song));
queue.ModifyAtOrder(current);
queue.IncrementVersion();

View File

@@ -84,14 +84,14 @@ aiff_seek_id3(FILE *file)
underflow when casting to off_t */
return 0;
if (size % 2 != 0)
/* pad byte */
++size;
if (memcmp(chunk.id, "ID3 ", 4) == 0)
/* found it! */
return size;
if (size % 2 != 0)
/* pad byte */
++size;
if (fseek(file, size, SEEK_CUR) != 0)
return 0;
}

View File

@@ -82,15 +82,15 @@ riff_seek_id3(FILE *file)
underflow when casting to off_t */
return 0;
if (size % 2 != 0)
/* pad byte */
++size;
if (memcmp(chunk.id, "id3 ", 4) == 0 ||
memcmp(chunk.id, "ID3 ", 4) == 0)
/* found it! */
return size;
if (size % 2 != 0)
/* pad byte */
++size;
if (fseek(file, size, SEEK_CUR) != 0)
return 0;
}

View File

@@ -80,9 +80,17 @@ struct Tag {
Tag &operator=(Tag &&other) {
duration = other.duration;
has_playlist = other.has_playlist;
MoveItemsFrom(std::move(other));
return *this;
}
/**
* Similar to the move operator, but move only the #TagItem
* array.
*/
void MoveItemsFrom(Tag &&other) {
std::swap(items, other.items);
std::swap(num_items, other.num_items);
return *this;
}
/**

View File

@@ -110,7 +110,7 @@ daemonize_set_user(void)
(int)user_gid);
}
#ifdef _BSD_SOURCE
#ifdef HAVE_INITGROUPS
/* init supplementary groups
* (must be done before we change our uid)
*/