Sebastian Thorarensen
d6553fc6a7
ConfigData: Add support for signed integers
...
Now config_param::GetBlockValue() can be used to get signed integers
from the configuration.
2013-10-19 16:11:33 +02:00
Ben Boeckel
fc9014f7ec
PlayerThread: Only drop 0 length packets without tags
...
Fixes a regression from 752dfb3d95
which
caused the current chunk to be flushed as soon as new replaygain
information was found. If this occurs on a tag chunk, it has no data
(length 0) and is then skipped before pushing it to all of the outputs.
This change allows 0-length chunks through if they contain a tag and
they are now appearing in mplayer and mpv properly.
2013-10-19 15:45:11 +02:00
Max Kellermann
b39ab76118
Util/CharUtil: new library replacing g_ascii_isX()
2013-10-19 15:36:47 +02:00
Max Kellermann
90777f78c9
playlist/(Ext)M3u: use strchug_fast()
2013-10-19 15:36:47 +02:00
Max Kellermann
8e063829c4
encoder/{opus,vorbis}: new serial generator replacing g_random_int()
2013-10-19 14:43:24 +02:00
Max Kellermann
139c6be370
encoder/wave: include cleanup
2013-10-19 02:05:44 +02:00
Sebastian Thorarensen
b6ac249c3c
decoder/mikmod: Add loop configuration parameter
...
This patch allows the user to configure the mikmod decoder plugin to loop
modules. It adds a configuration parameter to the mikmod decoder called
"loop" which can be "no" (the old behaviour, default) or "yes" to allow
modules to use backward loops.
2013-10-18 14:23:24 +02:00
Max Kellermann
5e103b5fb7
filter/route: merge the two loops, one-pass parsing
2013-10-18 12:24:49 +02:00
Max Kellermann
de5be62da5
filter/route: allocate "sources" statically
...
Worst-case allocation using MAX_CHANNELS.
2013-10-18 12:24:47 +02:00
Max Kellermann
b5f608d026
filter/route: use int8_t instead of signed char
2013-10-18 12:24:47 +02:00
Max Kellermann
58fe352fda
util/StringUtil: rename strchug_fast_c() to strchug_fast()
...
Overload the name.
2013-10-18 12:24:47 +02:00
Max Kellermann
b105093dcd
ZeroconfAvahi: convert avahiRunning to a "bool"
2013-10-18 10:50:14 +02:00
Max Kellermann
d1c401fe7a
ZeroconfAvahi: integrate into the EventLoop
...
Finally fixes the regression by commit c1f4f1fd
.
2013-10-18 09:16:55 +02:00
Max Kellermann
43863a70c8
SignalMonitor: add SignalMonitorGetEventLoop()
...
Eliminate the global variable "shutdown_loop".
2013-10-18 08:44:40 +02:00
Max Kellermann
bd5a70c712
input/curl: use MultiSocketMonitor constants instead of GLib
2013-10-18 08:30:44 +02:00
Max Kellermann
bcfc62a3f2
PlaylistEdit, QueueSave: free the Song object after Append()
...
Fix for a major memory leak.
2013-10-18 01:12:47 +02:00
Max Kellermann
abfbd55305
fs/Path: rename to AllocatedPath
...
The new class Path only holds a string pointer without being
responsible for allocation/deallocation. The FileSystem.hxx library
accepts Path arguments instead of AllocatedPath, to avoid forcing
callers to allocate another string object.
2013-10-17 23:43:46 +02:00
Max Kellermann
b3611524f4
fs/Path: move definitions to struct PathTraits
2013-10-17 23:23:25 +02:00
Max Kellermann
a63613dba0
fs/Path: include clenaup
2013-10-17 23:20:26 +02:00
Max Kellermann
7fec2b02d4
fs/Charset: GetFSCharset() returns "utf-8" by default
...
If fs_charset is empty, i.e. we're using the default "utf-8",
GetFSCharset() should return exactly that instead of an empty
std::string.
2013-10-17 22:47:09 +02:00
Max Kellermann
608a98c873
fs/Charset: default filesystem charset is UTF-8
...
Implement a fast path for UTF-8 which leaves fs_charset empty, and
don't assign a value to fs_charset if there's no configuration.
2013-10-17 22:42:22 +02:00
Max Kellermann
f951e5356b
fs/Charset: don't allow nullptr arguments
2013-10-17 22:39:06 +02:00
Max Kellermann
080ee87e07
fs/Path: move configuration code to Config.cxx
2013-10-17 22:29:03 +02:00
Max Kellermann
fa60b9ae94
fs/Path: move path_domain to Domain.hxx
2013-10-17 22:20:53 +02:00
Max Kellermann
0d33ae52c6
fs/Path: make fs_charset static
2013-10-17 22:10:27 +02:00
Max Kellermann
77e4b28092
fs/Path: include cleanup
2013-10-17 22:08:57 +02:00
Max Kellermann
4817437d31
fs/Limits: convert macro to "constexpr"
2013-10-17 22:08:56 +02:00
Max Kellermann
354b5a9365
fs/Path: move MPD_PATH_MAX to Limits.hxx
2013-10-17 22:00:01 +02:00
Max Kellermann
58502b38d3
*: use std::numeric_limits
2013-10-17 21:53:19 +02:00
Max Kellermann
d44880dfa9
UpdateGlue: handle update id management
...
Add UpdateQueueItem::id to keep track of the id in every item.
Replaces thhe hack in update_queue_push().
2013-10-17 21:45:53 +02:00
Max Kellermann
0c63632cc2
UpdateGlue: pass UpdateQueueItem around
...
Fixes a few kludges and avoids GLib allocation.
2013-10-17 21:45:42 +02:00
Max Kellermann
b93523c0b1
UpdateGlue: never pass null to update_enqueue()
2013-10-17 21:45:41 +02:00
Max Kellermann
7ef40de98b
UpdateQueue: use std::string and std::queue
2013-10-17 21:13:40 +02:00
Max Kellermann
196ec25682
Mapper: use std::string
2013-10-17 19:54:58 +02:00
Max Kellermann
c85af12d45
StickerDatabase: return std::string
2013-10-17 19:39:23 +02:00
Max Kellermann
e452d1f5b4
StickerDatabase: add pure/const attributes
2013-10-17 19:39:22 +02:00
Max Kellermann
ffea268d2e
PlayerControl: GetError() returns an Error, not a char*
2013-10-17 19:34:59 +02:00
Max Kellermann
8e676db633
Thread/Thread: replacement library for GThread
2013-10-17 19:29:47 +02:00
Max Kellermann
f6d74012b7
util/Error: add method SetLastError()
2013-10-17 19:29:38 +02:00
Max Kellermann
32dfc11c23
Main: use ThreadId instead of GThread*
2013-10-17 19:28:34 +02:00
Max Kellermann
05de2e998c
InputStream: use int64_t instead of goffset
...
Decouple some more from GLib.
2013-10-17 10:45:10 +02:00
Max Kellermann
24780d99e6
input_plugin: rename struct to "InputPlugin"
2013-10-17 10:20:57 +02:00
Max Kellermann
7c1cf61728
thread/{Cond,Mutex}: use "class" instead of "typedef"
...
Allows forward-declaration.
2013-10-17 10:06:31 +02:00
Max Kellermann
eb10d08671
CueParser: use std::string
2013-10-17 01:34:10 +02:00
Max Kellermann
abb0549e4b
InotifyUpdate: use class Path
2013-10-17 01:16:46 +02:00
Max Kellermann
5327ea13ac
PlaylistSave: eliminate the last g_warning() call
2013-10-17 01:15:54 +02:00
Max Kellermann
be8ceae6e6
Song: GetURI() returns std::string
2013-10-17 01:01:15 +02:00
Max Kellermann
67ae033de7
ArchiveLookup: in-place editing, avoid string copy
2013-10-17 00:54:20 +02:00
Max Kellermann
161f7ced96
ArchiveLookup: declare local variables later
2013-10-17 00:48:58 +02:00
Max Kellermann
72bc11b180
ArchiveLookup: don't reset out arguments
...
If we return false, their values are undefined.
2013-10-17 00:46:26 +02:00
Max Kellermann
15c2538532
ArchiveLookup: move code to FindSlash()
2013-10-17 00:44:57 +02:00
Max Kellermann
fd9dd9343b
ArchiveLookup: move code to FindSuffix()
2013-10-17 00:38:26 +02:00
Max Kellermann
1b8a1d4140
ArchiveLookup: return const strings
2013-10-17 00:36:52 +02:00
Max Kellermann
e132d10aec
ArchiveLookup: move API documentation to header
2013-10-17 00:36:35 +02:00
Max Kellermann
d6967db761
decoder/wildmidi: remove suport for libwildmidi 0.2.2 or older
2013-10-16 23:57:26 +02:00
Max Kellermann
5e26e2ab1d
system/ByteOrder: new library for byte ordering / endianess
...
Replacing GLib macros.
2013-10-16 22:09:44 +02:00
Max Kellermann
08eca827b6
util/ByteReverse: use C99 "restrict"
...
Micro-optimization.
2013-10-16 22:07:59 +02:00
Max Kellermann
6b2b5af344
util/byte_reverse: convert to C++
2013-10-16 22:07:52 +02:00
Max Kellermann
f32fbd9ed1
pcm_pack: convert to C++
2013-10-16 22:07:43 +02:00
Max Kellermann
e3511d0ee0
encoder/wave: use delete to dispose the WaveEncoder object
2013-10-16 22:07:32 +02:00
Max Kellermann
fa13a6616f
Archive*: move archive_domain to ArchiveDomain.cxx
...
Merge duplicate symbol.
2013-10-15 23:24:54 +02:00
Max Kellermann
d4c2f91182
ConfigData: remove unused method DupBlockString()
2013-10-15 23:19:44 +02:00
Max Kellermann
084fd8df63
playlist/soundcloud: use std::string
2013-10-15 23:17:53 +02:00
Max Kellermann
328131b7aa
output/roar: use const_cast instead of g_strdup()
2013-10-15 23:14:34 +02:00
Max Kellermann
85003429af
output/roar: use std::string
2013-10-15 23:11:32 +02:00
Max Kellermann
6db77dcf75
output/roar: move code into the RoarOutput class
2013-10-15 22:58:38 +02:00
Max Kellermann
1cde86823d
output/pipe: use std::string
2013-10-15 22:52:04 +02:00
Max Kellermann
dbd88e6aef
Client, ...: remove unnecessary glib.h include
2013-10-15 22:51:09 +02:00
Max Kellermann
45418583e9
ApeTag: use std::string for temporary allocation
2013-10-15 22:50:02 +02:00
Max Kellermann
77a1133723
PlaylistRegistry: use std::string for temporary allocation
2013-10-15 22:49:51 +02:00
Max Kellermann
25c208d81d
input/*: don't allocate attribute "mime"
...
This was a memory leak, because "mime" was a std::string which created
another copy and discarded the allocated buffer.
2013-10-15 22:49:23 +02:00
Max Kellermann
67f87db511
UpdateArchive: use std::string for temporary string
2013-10-15 22:49:12 +02:00
Max Kellermann
7de96275dd
ConfigData: use std::string for config_param::value
2013-10-15 22:49:01 +02:00
Max Kellermann
e13d0bf656
Permission: use std::string for temporary password allocation
...
As a side effect, this fixes a memory leak.
2013-10-15 22:48:09 +02:00
Max Kellermann
8ed9f7effa
Mapper: remove obsolete variable music_dir_fs_length
2013-10-15 22:48:01 +02:00
Max Kellermann
12ab556477
event/BufferedSocket: pass writable pointer to OnSocketInput()
...
Remove the const_cast from HttpdClient.cxx, and avoid one allocation
in ClientRead.cxx.
2013-10-15 22:47:46 +02:00
Max Kellermann
509f8dab89
Util/Macros: replacement for GLib's G_N_ELEMENTS()
2013-10-15 22:47:39 +02:00
Max Kellermann
77429b6dd3
output/winmm: use delete instead of g_free()
2013-10-15 22:47:25 +02:00
Max Kellermann
84d20d9e43
util/FifoBuffer: C++ version of the fifo_buffer library
2013-10-15 10:28:52 +02:00
Max Kellermann
0c13703da3
system/clock: convert to C++
2013-10-15 09:38:12 +02:00
Max Kellermann
b97b7a7493
require GLib 2.28
...
The header glib_compat.h is now obsolete and can be removed.
2013-10-15 09:35:25 +02:00
Max Kellermann
be2951b45f
gcc.h: rename to Compiler.h
2013-10-15 09:21:59 +02:00
Max Kellermann
1dd1a705b5
gcc.h: major update
...
Copy the according file from another project (i.e. XCSoar). This will
allow copying more code more easily.
2013-10-15 09:13:22 +02:00
Max Kellermann
e4e80ff0cb
*: use WIN32 instead of G_OS_WIN32
2013-10-15 08:33:44 +02:00
Max Kellermann
9508ea982b
fs/Path: add method IsAbsolute()
2013-10-14 22:38:29 +02:00
Max Kellermann
47d655ea7f
fs/Path: add separator constants/functions
2013-10-14 22:26:23 +02:00
Max Kellermann
62271bf6ce
PlaylistFile: always check for absolute paths within music_directory
...
Try map_fs_to_utf8() first, and fall back to Path::ToUTF8() for
absolute paths.
2013-10-14 22:21:22 +02:00
Max Kellermann
0b27ac2f5c
fs/Path: add method RelativeFS()
...
Move code from map_fs_to_utf8().
2013-10-14 22:09:02 +02:00
Max Kellermann
6fd481df97
Mapper, ...: use memcmp() instead of strncmp() where appropriate
...
Micro-optimization.
2013-10-14 22:00:21 +02:00
Max Kellermann
b915e43391
fs/Path: add method data()
2013-10-14 21:57:43 +02:00
Max Kellermann
c96b295700
PlaylistFile: fix memory leak
...
Consistently use std::string in LoadPlaylistFile().
2013-10-14 21:53:08 +02:00
Max Kellermann
9067da2df8
Mapper: map_fs_to_utf8() returns std::string
...
Avoid the conversion to an allocated char*, let the caller decide.
2013-10-14 21:43:41 +02:00
Max Kellermann
8cf2f52f7a
Merge tag 'release-0.17.6'
2013-10-14 21:40:56 +02:00
Florian Schlichting
d9c662d51f
decoder/modplug: fix include directory
2013-10-14 21:12:47 +02:00
Max Kellermann
ad631d563b
stored_playlist: use fs_charset_to_utf8() for URLs
2013-10-14 21:11:20 +02:00
Max Kellermann
7cbaf11dda
load_file
2013-10-14 21:00:46 +02:00
Max Kellermann
3be63549c0
stored_playlist: add "file://" prefix to absolute paths
...
Prepare to fix loading arbitrary song files from stored playlists.
2013-10-14 20:52:49 +02:00
Max Kellermann
17c6db6c33
replay_gain_*.h: rename to *.hxx
2013-10-02 12:22:12 +02:00
Max Kellermann
86316b1828
output/httpd: don't include glib.h in header
2013-10-02 12:20:36 +02:00
Max Kellermann
efc3a69dbf
Stats: don't include glib.h in header
...
Use forward declaration instead.
2013-10-02 12:16:52 +02:00
Max Kellermann
ec883e1901
Stats: rename stats.h to Stats.hxx
2013-10-02 12:14:07 +02:00
Max Kellermann
060814daa8
Log: new logging library API
...
Prepare to migrate away from GLib. Currently, we're still using GLib
as a backend.
2013-10-02 08:57:55 +02:00
Max Kellermann
c53492a76a
TextFile: don't include glib.h in header
...
Un-inline the methods that use GLib.
2013-10-02 08:56:27 +02:00
Max Kellermann
43675717b8
filesystem/Path: use std::string
2013-10-02 08:56:27 +02:00
Max Kellermann
b21ed2fa36
PlaylistMapper: convert playlist name to filesystem charset
2013-10-02 08:56:27 +02:00
Max Kellermann
0214baad5a
Playlist*: use nullptr instead of NULL
2013-10-02 08:56:27 +02:00
Max Kellermann
c2d3ed2acc
Listen, ...: add missing includes
2013-10-02 08:56:27 +02:00
Max Kellermann
0339c8d025
ConfigData: handle default_value==nullptr
...
Return Path::Null() instead of dying from assertion failure.
2013-10-02 08:56:02 +02:00
Max Kellermann
0e0be0243b
Daemon, Mapper: move-assign the Path objects
2013-10-01 18:50:18 +02:00
Max Kellermann
a2ce2447a6
Merge branch 'v0.17.x'
2013-10-01 17:20:38 +02:00
Max Kellermann
9a1076256d
mixer/alsa: handle ENODEV
...
Fixes busy loop when USB sound device gets unplugged (Mantis bug
#3824 ).
2013-10-01 16:35:27 +02:00
Max Kellermann
72ef38d4a7
mixer/alsa: log snd_mixer_handle_events() errors
2013-10-01 16:30:20 +02:00
Max Kellermann
5e20b7976f
DecoderControl: lock the mutex in Seek()
...
Use LockSynchronousCommand() instead of SynchronousCommandLocked().
Fixes regression from commit ef663810
(dead lock due to cond_wait with
unlocked mutex).
2013-09-30 16:20:35 +02:00
Max Kellermann
36f712b949
tag/{riff,aiff}: convert to C++
2013-09-28 14:14:13 +02:00
Max Kellermann
a446775d80
playlist/lastfm: remove defunct Last.fm support
...
This plugin has been defunct ever since Last.fm changed their
protocol. Since there is no volunteer willing to fix the plugin, I'm
removing it now.
2013-09-28 14:01:51 +02:00
Max Kellermann
ccd7f0825a
DecoderControl: use GLib forward declarations
2013-09-27 23:00:23 +02:00
Max Kellermann
d0896ea7c4
PlayerThread: convert struct player to a class
2013-09-27 22:22:11 +02:00
Max Kellermann
a73d1e4b1c
PlayerThread: use strictly typed enum
2013-09-27 22:19:26 +02:00
Max Kellermann
d05bb2a0af
PlayerControl: use strictly typed enums
2013-09-27 22:07:20 +02:00
Max Kellermann
6765901687
DecoderControl: convert "enum decoder_state" to strictly-typed enum
2013-09-27 12:27:33 +02:00
Max Kellermann
c5d05ac0cf
DecoderCommand: convert to strictly-typed enum
2013-09-27 12:11:37 +02:00
Max Kellermann
939003c1f1
OutputAll: add pure/const attributes
2013-09-27 09:38:47 +02:00
Max Kellermann
a10f3a8aec
PlayerControl: convert functions to methods
2013-09-27 09:30:19 +02:00
Max Kellermann
ef663810a2
DecoderControl: convert functions to methods
2013-09-27 09:18:03 +02:00
Max Kellermann
ada67a6a4f
PlayerThread: move code to player_control::CommandFinished()
2013-09-27 07:58:48 +02:00
Max Kellermann
b6a5d1ad5a
PlayerThread: use nullptr instead of NULL
2013-09-27 00:03:22 +02:00
Max Kellermann
d8c5a63bc2
PlayerThread: unlock/lock in player_task()
2013-09-26 23:58:41 +02:00
Max Kellermann
bcb2db62c9
PlayerThread: move code into the player class
2013-09-26 23:57:31 +02:00
Max Kellermann
079ef93121
PlayerThread: use player references
2013-09-26 23:27:47 +02:00
Max Kellermann
b2789c598e
PlayerThread: use {decoder,player}_control references
2013-09-26 22:53:40 +02:00
Max Kellermann
92a93c1217
PlayerThread: allocate decoder_control on the stack
2013-09-26 22:48:55 +02:00
Max Kellermann
96b70835f9
PlayerThread: move global MusicBuffer variable into the player object
2013-09-26 22:45:49 +02:00
Max Kellermann
7fa3b7a267
PlayerThread: simplify "buffer empty" assertion
2013-09-26 22:41:07 +02:00
Max Kellermann
f3fc76e3c8
MusicChunk: remove obsolete prototypes
2013-09-26 22:34:43 +02:00
Max Kellermann
3216f4b257
MusicBuffer: expose the C++ API
2013-09-26 22:21:56 +02:00
Max Kellermann
ce1d897575
MusicPipe: expose the C++ API
2013-09-26 21:51:45 +02:00
Max Kellermann
17e108a10a
MusicChunk: use constexpr for CHUNK_SIZE
2013-09-26 21:49:26 +02:00
Max Kellermann
5bc4ab899f
*Plugin: remove redundant "line %i" from error messages
...
The MPD core will add this as a prefeix.
2013-09-26 20:59:40 +02:00
Max Kellermann
44faf1080c
SongFilter: search for album artist falls back to the artist tag
...
Implement Mantis ticket 0003646.
2013-09-26 19:25:13 +02:00
Max Kellermann
e354c5c2a8
IdTable, SongFilter: use std::fill_n() instead of std::fill()
2013-09-26 18:25:28 +02:00
Max Kellermann
04bc9005ae
TagType: reduce the enum size to 1 byte
...
Reduce the TagItem overhead.
2013-09-26 18:14:58 +02:00
Max Kellermann
3c92c69bc7
Tag: add "pure" attributes
2013-09-26 18:11:00 +02:00
Max Kellermann
52ee132d92
TagHandler: use a TagBuilder internally
...
Reduce heap allocator overhead.
2013-09-26 17:35:08 +02:00
Max Kellermann
7ca0aedcfc
Main: fix crash if no database was configured
...
Add nullptr check, and return early from glue_db_init_and_load().
2013-09-26 17:33:46 +02:00
Max Kellermann
a2c4037a24
Main: use nullptr instead of NULL
2013-09-26 17:31:50 +02:00
Max Kellermann
d7b0073ce1
decoder/modplug: fix include directory
...
Since Debian package 1:0.8.8.4-4, the pkg-config file does not contain
-I/usr/include/libmodplug anymore, and we need to add the
"libmodplug/" prefix to the #include line.
2013-09-26 17:27:35 +02:00
Artem Savkov
585b68d2ae
input/curl: fix EventLoop stall after curl_easy_pause
...
When playing finite http streams, e.g. something from soundcloud,
eventloop stalls after pausing writefunc. TimeoutMonitor is cancelled
by the time resume happens, so when enough data is consumed writefunc
is called only once. Calling InvalidateSockets() from
input_curl_resume() seems to fix the issue.
2013-09-26 17:27:35 +02:00
Max Kellermann
89d2d648cc
ConfigPath: return early on "~"
...
Previously, the pointer was moved to undefined memory.
2013-09-12 11:05:59 +02:00
Max Kellermann
7532f24d58
ConfigPath: skip the slash of "~/"
...
Increment the "path" earlier.
2013-09-12 11:05:41 +02:00
Max Kellermann
69a5df2f98
ConfigPath: remove the "~/" from the constructed path
...
This was building broken paths like "/home/foo/~/bar". Bug found by
Maarten de Vries.
2013-09-12 10:54:45 +02:00