Commit Graph

6418 Commits

Author SHA1 Message Date
Max Kellermann
8052c76489 Idle: fix typo in API documentation 2013-04-08 23:11:35 +02:00
Max Kellermann
3477acee48 decoder/ffmpeg: suppress warning about unused variable
Only relevant for old ffmpeg versions.
2013-04-08 22:12:49 +02:00
Max Kellermann
2c4b998170 Merge tag 'release-0.17.4' 2013-04-08 22:11:42 +02:00
Max Kellermann
cd71038655 command: don't check audio_format if not playing
Fixes valgrind warning.
2013-04-08 22:00:35 +02:00
Max Kellermann
436335e9a3 player_control: don't emit IDLE_PLAYER before audio format is known
Eliminates one IDLE_PLAYER call in playlist_control, and add two new
ones to player_thread.  Fixes Mantis bug 3636.
2013-04-08 21:31:03 +02:00
Max Kellermann
a30eb194d5 command: don't print undefined audio_format
Check audio_format_defined().
2013-04-08 21:31:03 +02:00
Anton Khirnov
8becbb8b08 ffmpeg decoder plugin: do not allocate an AVFrame on stack.
AVFrame must be allocated with avcodec_alloc_frame().
2013-04-05 23:34:10 +02:00
Anton Khirnov
e0c2c77c2a ffmpeg decoder plugin: do not allocate an AVFrame on stack.
AVFrame must be allocated with avcodec_alloc_frame().
2013-04-05 23:30:47 +02:00
Max Kellermann
6f2e1c2415 GlobalEvents: use g_idle_add() instead of WakeFD()
Use the GMainLoop specific function to wake up the main loop.  This is
simpler and comes with very little overhead.
2013-02-27 20:41:17 +01:00
Max Kellermann
fc0ad8674b GlobalEvents: wake up only if the flags were empty
Don't bother checking for the parameter mask.  This doesn't matter.
The only thing that matters is if a wake-up is already pending.
2013-02-27 20:40:46 +01:00
Max Kellermann
19c67ab724 Idle, GlobalEvents: use std::atomic::exchange()
Less overhead than fetch_and() for what we do.
2013-02-27 20:35:44 +01:00
Oddegamra
a046b6e105 IcyMetaDataServer: increment iterator
Fixes segmentation fault.
2013-02-27 20:01:58 +01:00
Max Kellermann
8017301de5 Merge branch 'v0.17.x' 2013-02-27 20:00:14 +01:00
Hagen Fritsch
6f4bb6cd2c Add some comments to keep track of timer units. 2013-02-27 19:47:28 +01:00
Hagen Fritsch
2cf31e905b clock: fix usec-to-usec factor 2013-02-27 19:45:31 +01:00
Hagen Fritsch
28a60db5aa clock: add missing include 2013-02-27 19:42:35 +01:00
Max Kellermann
496f70fc0d mixer_plugin: convert to C++ 2013-02-22 20:51:23 +01:00
Max Kellermann
9ede4c5f3c {output,mixer}/winmm: convert to C++ 2013-02-22 20:29:03 +01:00
Max Kellermann
214a526945 Merge branch 'v0.17.x' 2013-02-19 09:24:11 +01:00
Jörg Thalheim
d5b756413a command: allow to omit END in ranges (START:END)
If END is omitted, mpd should use the highest possible value instead of raising an error.
This partially reverts 52e9cab1c1
2013-02-19 09:23:18 +01:00
Max Kellermann
af99176581 output/alsa: workaround for noise after manual song change
Workaround for driver bug observed on the Raspberry Pi, see code
comment for details.
2013-02-04 15:51:32 +01:00
Max Kellermann
57e825dfe7 output/alsa: pre-allocate the silence buffer 2013-02-04 15:30:31 +01:00
Max Kellermann
e06dd129dd output/alsa: move code to alsa_write_silence() 2013-02-04 14:30:16 +01:00
Max Kellermann
00baddcd9e SocketUtil: add separators to g_prefix_error() call 2013-02-04 14:26:03 +01:00
Max Kellermann
7e92820c50 output/alsa: default "device" is an empty string
Fixes nullptr dereference in std::string::operator=().  Also fixes a
memory leak by using config_get_block_string() instead of
config_dup_block_string().
2013-02-04 11:46:49 +01:00
Max Kellermann
5692e20fd5 event/ServerSocket: close only sockets that have been opened
Fixes assertion failure.
2013-02-04 11:44:36 +01:00
Max Kellermann
3b3c9334c8 decoder/Opus: replace non-static data member initializers
Would require gcc 4.7, and MPD attempts to be compatible with gcc 4.6.
2013-02-04 11:08:32 +01:00
Max Kellermann
96dc0a318a player_thread: implement missing "idle" events on output errors
When all outputs fail, MPD automatically pauses playback, but did not
emit the IDLE_PLAYER event.  Thus, clients were not woken up.  (Mantis
3665)
2013-02-04 10:15:34 +01:00
Uli Schlachter
a4223aac38 ServerSocket: Initialize length variable 2013-02-04 09:30:21 +01:00
Denis Krjuchkov
2bb751d9fa StateFile: use file system API, log in UTF-8 2013-02-02 20:52:04 +06:00
Denis Krjuchkov
3b620112ca SimpleDatabasePlugin: use file system API, log in UTF-8 2013-02-02 20:52:03 +06:00
Denis Krjuchkov
99526219b7 UpdateIO.cxx: use file system API, log in UTF-8 2013-02-02 20:52:02 +06:00
Denis Krjuchkov
d818b618af UpdateWalk.cxx: use FileExists 2013-02-02 20:51:36 +06:00
Denis Krjuchkov
c64700e7ae TextFile.hxx: use file system API 2013-02-02 20:23:27 +06:00
Denis Krjuchkov
5bd1917705 SongUpdate.cxx: use StatFile 2013-02-02 20:22:32 +06:00
Denis Krjuchkov
178c6c20cd PlaylistSave.cxx: use FOpen 2013-02-02 20:21:46 +06:00
Denis Krjuchkov
92d71cc7fa PlaylistFile.cxx: use file system API 2013-02-02 20:21:10 +06:00
Denis Krjuchkov
227eca7d28 ExcludeList.cxx: use FOpen 2013-02-02 20:20:24 +06:00
Denis Krjuchkov
9399b0ea52 ConfigFile.cxx: use FOpenMode 2013-02-02 20:19:25 +06:00
Denis Krjuchkov
17dca254a3 Path.hxx: add GetDirectoryName() method 2013-02-02 19:28:02 +06:00
Denis Krjuchkov
f6b50d2387 FileSystem.hxx: add FOpen modes for appending files 2013-02-02 19:20:10 +06:00
Max Kellermann
a9ce0218c1 FilterInternal: convert struct filter to a OO interface 2013-02-02 09:34:07 +01:00
Max Kellermann
7bb5a960fd output/null: convert to C++ 2013-02-02 09:30:29 +01:00
Max Kellermann
e6b04d1b50 filter/*: don't use GLib macros 2013-02-02 08:31:17 +01:00
Max Kellermann
12613356fc filter/Chain: use std::forward_list instead of GSList 2013-02-01 18:14:06 +01:00
Max Kellermann
3894450b10 filter: convert to C++ 2013-02-01 17:47:09 +01:00
Max Kellermann
ec07f6ec83 PcmMix: merge duplicate code with templates 2013-02-01 17:45:17 +01:00
Max Kellermann
ef99d6ce3d PcmUtils: remove pcm_range(), use PcmClamp() instead 2013-02-01 14:10:27 +01:00
Max Kellermann
0ac06d77f1 PcmUtils: make PcmClamp() 64-bit-safe, add missing cast 2013-02-01 14:04:40 +01:00
Max Kellermann
469e233428 PcmUtils: remove unused clamp functions 2013-02-01 14:02:20 +01:00
Max Kellermann
86a0f9cf9b PcmFormat: merge duplicate code with a template 2013-02-01 13:47:29 +01:00
Max Kellermann
e6a91d291d PcmChannels: merge duplicate code with a template 2013-02-01 13:47:24 +01:00
Max Kellermann
bf35972714 ConfigTemplates: fix typo in id3v1_encoding 2013-02-01 13:47:12 +01:00
Max Kellermann
eab78ab99c PcmDither: use constexpr 2013-01-31 22:55:00 +01:00
Max Kellermann
f2491c88c8 PcmDither: convert struct to a class 2013-01-31 22:54:10 +01:00
Max Kellermann
1b175025fe pcm_*: convert to C++ 2013-01-31 21:11:06 +01:00
Max Kellermann
ccdf7184be gcc.h: add "restrict" macro for C++ 2013-01-31 21:11:06 +01:00
Max Kellermann
7764136211 mixer/software, filter/volume: convert to C++ 2013-01-31 21:11:06 +01:00
Max Kellermann
72cf8dd8a0 ZeroconfBonjour: fix OnSocketReady() return type 2013-01-31 21:11:06 +01:00
Max Kellermann
3c2b464dfa filter/convert: remove unused attribute 2013-01-31 00:31:24 +01:00
Max Kellermann
361404fd59 pcm_convert: convert to C++ 2013-01-31 00:26:55 +01:00
Max Kellermann
762c91b7f1 util/Manual: new template class 2013-01-30 23:48:34 +01:00
Max Kellermann
f2a8d4d289 filter/convert: convert to C++ 2013-01-30 23:28:13 +01:00
Max Kellermann
9ee52d85d7 filter/autoconvert: include cleanup 2013-01-30 23:19:11 +01:00
Max Kellermann
5ed9f02c4d TagPool, ...: include cleanup 2013-01-30 22:53:12 +01:00
Max Kellermann
378ebad1c8 ConfigData: use simple linked list instead of GSList 2013-01-30 22:39:24 +01:00
Max Kellermann
e44e0fab9f ConfigData: forbid copying a config_param object 2013-01-30 22:39:24 +01:00
Max Kellermann
c434077728 FilterConfig: add missing glib.h include 2013-01-30 22:39:24 +01:00
Max Kellermann
6e47e79790 ConfigData: move functions into the class 2013-01-30 22:25:17 +01:00
Max Kellermann
d9ea3082fb ConfigData: add constructors/destructors 2013-01-30 22:20:14 +01:00
Max Kellermann
2d63c26936 ConfigData: use std::string in block_param 2013-01-30 22:20:14 +01:00
Max Kellermann
3cdd01aa1b ConfigData: use std::vector for the block_param list 2013-01-30 22:20:13 +01:00
Max Kellermann
d25195447a ConfigData: use new/delete instead of GLib 2013-01-30 22:20:13 +01:00
Max Kellermann
d664baff26 audio_{parser,config}: convert to C++ 2013-01-30 21:47:12 +01:00
Max Kellermann
3275d4c6fa conf.h: move the GQuark to ConfigQuark.hxx 2013-01-30 21:43:16 +01:00
Max Kellermann
cd0d003197 filter/chain, encoder: GLib include cleanup 2013-01-30 21:42:50 +01:00
Max Kellermann
cfeeb7af2e test/run_encoder, ...: convert to C++ 2013-01-30 21:39:43 +01:00
Max Kellermann
ac887d3afb ConfigFile: simplify error cleanup 2013-01-30 21:39:43 +01:00
Max Kellermann
e294ccae24 ConfigFile: move code to ConfigGlobal.cxx 2013-01-30 21:39:43 +01:00
Max Kellermann
72070f292b ConfigFile: add struct ConfigData 2013-01-30 21:36:11 +01:00
Max Kellermann
823c618d24 {encoder,output}_api.h: allow compiling as C++ 2013-01-30 21:36:09 +01:00
Max Kellermann
51cb6a0a44 conf: move struct definitions to ConfigData.hxx 2013-01-30 21:36:07 +01:00
Max Kellermann
595b6a4f6c ConfigFile: add enum ConfigOption
Look up top-level config options by enum (= integer), not by name
string.
2013-01-30 21:36:04 +01:00
Max Kellermann
daa4647712 ConfigOption: rename to ConfigTemplate 2013-01-30 19:05:33 +01:00
Max Kellermann
9cfaa9c7b0 ConfigFile: move code to ConfigOptions.cxx 2013-01-30 17:45:19 +01:00
Max Kellermann
c5ea586882 ConfigFile: split config_entry
The new struct ConfigOption is the compile-time description, and the
global array "config_params" contains the actual values.
2013-01-30 17:35:33 +01:00
Max Kellermann
f2a3a37dff filter_config: convert to C++ 2013-01-30 17:22:44 +01:00
Max Kellermann
01dd540d7e decoder_list: convert to C++ 2013-01-30 17:18:48 +01:00
Max Kellermann
8142080633 InotifyUpdate: use std::list instead of GList
Let STL manage the WatchDirectory allocations.
2013-01-30 16:44:55 +01:00
Max Kellermann
9920a3e8fc InotifyUpdate: move code to destructor 2013-01-30 16:44:54 +01:00
Max Kellermann
f7d8e6c40c InotifyUpdate: allocate the root dynamically 2013-01-30 16:41:17 +01:00
Max Kellermann
4ecf09f9e6 InotifyUpdate: use new/delete instead of GLib slices 2013-01-30 16:37:49 +01:00
Max Kellermann
47a8369d79 InotifyUpdate: rename struct watch_directory 2013-01-30 16:36:58 +01:00
Max Kellermann
6805fa2fa0 InotifyUpdate: use std::map instead of GTree 2013-01-30 16:27:55 +01:00
Max Kellermann
4d6b9611ae UpdateContainer: remove duplicate unlock call 2013-01-30 16:27:38 +01:00
Max Kellermann
16afdfd874 ArchivePlugin: move instance methods to class ArchiveFile 2013-01-30 15:30:19 +01:00
Max Kellermann
701fff03d2 archive/bzip2: create file only after stream has been opened
Simplify error handling.
2013-01-30 15:27:23 +01:00
Max Kellermann
8e0575ca9b archive/zzip: fix memory leak 2013-01-30 15:25:29 +01:00
Max Kellermann
5e8f51a963 output/httpd: use the BufferedSocket class for HttpdClient 2013-01-30 15:08:09 +01:00
Max Kellermann
be3d2188d6 event/SocketMonitor: wake up the event loop after flag change 2013-01-30 15:08:09 +01:00
Max Kellermann
18e429a87e event/Loop: add method WakeUp() 2013-01-30 15:08:09 +01:00
Max Kellermann
3576a8fd9f Main: delete the EventLoop after everything else
Fixes crash when another object attempts to access the EventLoop
during destruction.
2013-01-30 15:08:09 +01:00
Max Kellermann
f260cd031c input/Rewind: remove bogus assertion 2013-01-30 15:05:54 +01:00
Max Kellermann
18c4b536f2 event/ServerSocket: add method GetEventLoop() 2013-01-30 14:23:01 +01:00
Max Kellermann
fa51db449f ServerSocket: replace callback with virtual method 2013-01-30 14:16:04 +01:00
Max Kellermann
cb9a05ac77 output/httpd: safer cast, consider offset 2013-01-30 14:14:42 +01:00
Max Kellermann
f1f22019f5 output/httpd: forward-declare class HttpdClient 2013-01-30 13:42:16 +01:00
Max Kellermann
6d79a1cdfc output/httpd: add constructor, destructor, Configure() 2013-01-30 13:41:27 +01:00
Max Kellermann
ad5eb2f8d6 ServerSocket: expose the class
Eliminate the C wrappers.
2013-01-30 13:40:56 +01:00
Max Kellermann
39d56d6b65 ServerSocket: move to libevent.a 2013-01-30 13:39:12 +01:00
Max Kellermann
a291415326 event/BufferedSocket: move output buffer to FullyBufferedSocket
BufferedSocket has just an input buffer, and FullyBufferedSocket adds
the output buffer.
2013-01-30 11:03:44 +01:00
Max Kellermann
4ad7456428 event/SocketMonitor: OnSocketReady() returns bool 2013-01-30 11:03:44 +01:00
Max Kellermann
73f36858bb event/SocketMonitor: add methods Read(), Write() 2013-01-30 10:39:17 +01:00
Max Kellermann
fe3f0332f7 page: convert to C++ 2013-01-30 09:18:52 +01:00
Max Kellermann
718fd97612 icy_server: convert to C++ 2013-01-30 09:17:03 +01:00
Max Kellermann
f8ff45b212 icy_server: pass pointer to _metadata_page()
Don't use va_list.
2013-01-30 09:13:46 +01:00
Max Kellermann
f5c0b0d316 ArchiveFile: convert to a class 2013-01-29 23:26:51 +01:00
Max Kellermann
ba51045d9e refcount: convert to C++ 2013-01-29 23:20:19 +01:00
Max Kellermann
9f0fb8f6a8 ArchivePlugin: replace scan_reset(), scan_next() with visit()
Add the interface ArchiveVisitor.
2013-01-29 21:21:07 +01:00
Max Kellermann
a42f9fd4e2 ArchivePlugin: scan_next() returns const string 2013-01-29 21:11:04 +01:00
Max Kellermann
e66005563e playlist/despotify: various code simplifications 2013-01-29 20:36:28 +01:00
Max Kellermann
8cad20585d playlist/memory: use std::forward_list instead of GSList 2013-01-29 20:32:54 +01:00
Max Kellermann
a8b75dc4df playlist/{asx,rss,soundcloud,xspf}: merge code to MemoryPlaylistProvider 2013-01-29 18:56:35 +01:00
Max Kellermann
e4455962c6 ClientSubscribe: remove obsolete typedef 2013-01-29 18:37:40 +01:00
Max Kellermann
20f85745e7 require GLib 2.24 2013-01-29 18:33:37 +01:00
Max Kellermann
feb8d5b82f ConfigFile, CommandLine: use the Path class 2013-01-29 18:09:39 +01:00
Max Kellermann
eb8922f346 test/{read_conf,run_filter}: convert to C++ 2013-01-29 17:23:58 +01:00
Max Kellermann
84eb95466b output/osx: convert to C++ 2013-01-29 16:59:21 +01:00
Max Kellermann
3dd8beb380 decoder/faad: use the newer NeAAC* API
Drop support for the old faacDec* API.
2013-01-29 16:17:15 +01:00
Max Kellermann
26a9ce7b29 output/{alsa,oss}: convert to C++ 2013-01-29 14:32:32 +01:00
Max Kellermann
76417d4446 InputStream: use std::string 2013-01-28 23:41:45 +01:00
Max Kellermann
cffc78ad6a InputStream: store references instead of pointers 2013-01-28 23:35:01 +01:00
Max Kellermann
dcf55c7e32 InputStream: add constructor/destructor
Eliminate input_stream_init() and input_stream_deinit().
2013-01-28 23:29:43 +01:00
Max Kellermann
e565cd4404 input/despotify: add constructor/destructor 2013-01-28 23:13:19 +01:00
Max Kellermann
5934ccbb74 input/despotify: rename class 2013-01-28 23:12:10 +01:00
Max Kellermann
e39969a0d0 input/iso9660: add constructor/destructor 2013-01-28 22:54:07 +01:00
Max Kellermann
d68185aa28 input/iso9660: rename the classes 2013-01-28 22:52:40 +01:00
Max Kellermann
4cab151ed2 input/zzip: add constructor/destructor 2013-01-28 22:48:04 +01:00
Max Kellermann
8ac9b77e5c input/zzip: rename the classes 2013-01-28 22:43:59 +01:00
Max Kellermann
1b9da5d978 input/bzip2: add constructor/destructor 2013-01-28 22:39:09 +01:00
Max Kellermann
ab2b7358cb archive/bzip2: rename the classes 2013-01-28 22:17:40 +01:00
Max Kellermann
8ceea85813 DatabaseLock, input/bzip2: remove obsolete Glib/gcc workaround 2013-01-28 22:17:40 +01:00
Max Kellermann
d0a812d2df input/Soup: move code into the class 2013-01-28 22:00:24 +01:00
Max Kellermann
3dad2e1c0f input/soup: rename the class 2013-01-28 21:59:40 +01:00
Max Kellermann
70e4399334 input/ffmpeg: add constructor/destructor 2013-01-28 21:46:38 +01:00
Max Kellermann
00f8c2d46f input/ffmpeg: rename the class 2013-01-28 21:45:44 +01:00
Max Kellermann
0dd4b52b63 decoder/ffmpeg: require ffmpeg/libav 0.7.6
This is the version present in Ubuntu Oneiric, the oldest distribution
with gcc 4.6.  Debian Squeeze is off target, because it has gcc 4.4,
which is unable to compile MPD anyway.

This commit drops all API compatibility hacks for older versions.
2013-01-28 21:32:14 +01:00
Max Kellermann
88c17926e4 decoder/mp4ff: delete obsolete plugin
The underlying library has been obsolete for many years.
2013-01-28 21:32:14 +01:00
Max Kellermann
541192c941 db/Proxy: explicitly request first element of array
Works around gcc 4.6 bug.
2013-01-28 21:32:14 +01:00
Max Kellermann
2e9f054ec0 audio_config: include cleanup 2013-01-28 20:30:47 +01:00
Max Kellermann
2aa34882b7 output/httpd: move functions into the HttpdOutput class 2013-01-27 23:23:46 +01:00
Max Kellermann
27f8ef2f33 output/httpd: rename struct httpd_output 2013-01-27 23:21:39 +01:00
Max Kellermann
2cbe21c791 ZeroconfAvahi: pass GMainContext to avahi_glib_poll_new() 2013-01-27 22:53:21 +01:00
Max Kellermann
0988056471 ZeroconfBonjour: use SocketMonitor instead of GIOChannel 2013-01-27 22:38:14 +01:00
Max Kellermann
95c3f57b30 zeroconf: convert to C++ 2013-01-27 22:38:14 +01:00
Max Kellermann
068f191c0d event/SocketMonitor: add method Steal() 2013-01-27 22:38:14 +01:00
Max Kellermann
a65afa8090 PlayerControl: work around std::nanf() not being available on MacPorts 2013-01-27 21:58:35 +01:00
Max Kellermann
8155784990 string_util: add fallback for strnlen()
Usually, when strndup() is not available, strndup() isn't either,
because both are POSIX 2008.
2013-01-27 21:43:27 +01:00
Denis Krjuchkov
e98e2a0b07 Path::FromUTF8() returns nulled instance on error, add error handling where required 2013-01-28 00:13:46 +06:00
Denis Krjuchkov
943064bb51 Path: convert remaining funcs to methods, keep fs_charset as std::string 2013-01-28 00:13:46 +06:00
Denis Krjuchkov
7149a8ae4f Path: merge utf8_to_fs_charset() into Path::FromUTF8() 2013-01-28 00:13:45 +06:00
Denis Krjuchkov
3c7cf94643 Path: convert fs_charset_to_utf8() to static method Path::ToUTF8() 2013-01-28 00:13:45 +06:00
Denis Krjuchkov
3bd35d1883 Path: introduce MPD_PATH_MAX_UTF8 2013-01-28 00:13:45 +06:00
Max Kellermann
6f3d70b5e2 DecoderControl, InputStream: use Mutex/Cond instead of GMutex/GCond 2013-01-27 18:39:32 +01:00
Max Kellermann
257a0dee75 playlist/*: convert to C++ 2013-01-27 17:38:09 +01:00
Denis Krjuchkov
e995cd928c Path: define MPD_PATH_MAX to 260 on Windows 2013-01-26 11:18:12 +06:00
Denis Krjuchkov
292d7c3fdf Path: ToUTF() returns std::string 2013-01-26 11:16:12 +06:00
Max Kellermann
0273cd44b0 input_stream: forward-declare the struct
Hide the definition from C code, to prepare the transition to C++.
2013-01-26 01:24:01 +01:00
Max Kellermann
3203a7dd8c tag_file: convert to C++ 2013-01-26 01:23:02 +01:00
Max Kellermann
86b0adc82c playlist/*: convert to C++ 2013-01-26 01:17:43 +01:00
Max Kellermann
ba49f20f68 decoder/ffmpeg: convert to C++ 2013-01-26 01:17:43 +01:00
Denis Krjuchkov
a3ee26da64 Mapper: improve usage of Path class 2013-01-26 01:14:13 +01:00
Max Kellermann
a9b62a2ece PlayerControl: add second Cond object
This fixes a deadlock bug introduced by 18076ac9.  After all, the
second Cond was necessary.

The problem: two threads can wait for a signal at the same time.  The
player thread waits for the output thread to finish playback.  The
main thread waits for the player thread to complete a command.  The
output thread finishes playback, and sends a signal, which
unfortunately does not wake up the player thread, but the main
thread.  The main thread sees that the command is still not finished,
and waits again.  The signal is lost forever, and MPD is deadlocked.
2013-01-25 23:53:43 +01:00
Max Kellermann
49567f1f3e input_{internal,plugin}: convert to C++ 2013-01-25 22:43:01 +01:00
Max Kellermann
94fffb332b archive/*: convert to C++ 2013-01-24 19:18:58 +01:00
Max Kellermann
dc2e64c92b DecoderControl: fix typo in assertion check 2013-01-23 18:02:40 +01:00
Denis Krjuchkov
ef93cdf4a8 Path: move to fs subdirectory 2013-01-22 01:24:53 +06:00
Denis Krjuchkov
4ad90e2d52 FileSystem: extract DirectoryReader, improve the rest
- DirectoryReader is extracted to separate header
- FileSystem.cxx/FileSystem.hxx/DirectoryReader.hxx moved to fs/ subdir
- Functions return true on success, instead of 0 (where applicable)
- ReadLink return result instead of out parameter
- UnlinkFile is renamed to RemoveFile
- CheckExists/CheckIsRegular/CheckIsDirectory are renamed
  to PathExists/FileExists/DirectoryExists
2013-01-22 01:05:30 +06:00
Max Kellermann
7c0e4dfb56 input/archive: fix memory leak in error handler 2013-01-21 19:08:35 +01:00
Max Kellermann
9ec069104f input,playlist/despotify: convert to C++ 2013-01-21 19:01:10 +01:00
Max Kellermann
7d21d60dba despotify_utils: fix indent 2013-01-21 19:00:50 +01:00
Max Kellermann
ed8562c300 despotify_utils: include cleanup 2013-01-21 19:00:01 +01:00
Max Kellermann
22ec1c3498 despotify_utils: add missing copyright header 2013-01-21 18:59:37 +01:00
Max Kellermann
9cc90b1fbe input/cdio_paranoia: convert to C++ 2013-01-21 17:58:30 +01:00
Max Kellermann
0c9f22507f input/ffmpeg: convert to C++ 2013-01-21 17:50:43 +01:00
Max Kellermann
9c870e4276 input/rewind: convert to C++ 2013-01-21 17:36:19 +01:00
Max Kellermann
5cffe693b0 input/file,mms: convert to C++ 2013-01-21 10:52:40 +01:00
Max Kellermann
e01615fd1e input_internal.h: add extern "C" 2013-01-21 10:52:19 +01:00
Max Kellermann
3928c4e9ae UpdateRemove: Mutex/Cond instead of GMutex/GCond 2013-01-21 10:42:47 +01:00
Max Kellermann
32799fef5c DecoderControl: move functions into the class 2013-01-21 10:13:29 +01:00
Max Kellermann
e1b03b4a71 PlayerControl: move functions into the class 2013-01-20 17:48:23 +01:00
Denis Krjuchkov
e6ed592b8a FileSystem: new library for Path-friendly file system routines 2013-01-20 19:08:36 +06:00
Denis Krjuchkov
6f4560184c dummy.cxx: remove unused file
This file was used previously to force C++ linkage.
It's no longer required because most of the code is C++ anyway.
2013-01-19 12:45:50 +06:00
Max Kellermann
e5039c478a Path: new class "Path" wraps filesystem path strings 2013-01-18 15:34:01 +01:00
Max Kellermann
8901514506 Playlist, Song: clarify parameter encoding 2013-01-18 15:34:01 +01:00
Max Kellermann
21fe376d1d path: convert to C++ 2013-01-17 00:43:27 +01:00
Max Kellermann
e22ef6c481 output/roar: convert to C++ 2013-01-16 23:29:56 +01:00
Max Kellermann
2bb01093c0 Idle: don't wake up event loop on duplicate event 2013-01-16 23:27:17 +01:00
Max Kellermann
36c814d26e Idle: use std::atomic instead of GMutex 2013-01-16 23:23:47 +01:00
Max Kellermann
d769b74d61 Main: fix comment typo 2013-01-16 23:23:47 +01:00
Max Kellermann
601495fa0f ClientList: convert to a class 2013-01-16 23:00:13 +01:00
Max Kellermann
1998633739 ClientGlobal: move client_close_all() to ClientList.cxx 2013-01-16 22:56:52 +01:00
Max Kellermann
0194217f9d Revert "ClientList: allow deleting clients in client_list_foreach() callback"
This reverts commit f56c6a18c1.  This
fix is not necessary anymore because clients are now being deleted by
the timer callback.
2013-01-16 22:49:51 +01:00
Max Kellermann
b0bbb8b693 Client: use TimeoutMonitor to track connection timeout
Don't use a global loop over the whole client list.
2013-01-16 21:51:08 +01:00
Max Kellermann
cab84af72e Client: move "idle" functions into the class 2013-01-16 21:46:13 +01:00
Max Kellermann
74500eacca Merge branch 'v0.17.x' 2013-01-16 20:05:26 +01:00
Brice Jaglin
1105e61f29 decoder/ffmpeg: support float planar audio 2013-01-16 19:54:54 +01:00
Max Kellermann
b7cf279d6d zeroconf-avahi: eliminate "goto" 2013-01-16 00:23:00 +01:00
Max Kellermann
452a30d7af input/Curl: break loop when remaining length becomes 0
Fixes assertion failure (regression).
2013-01-15 23:39:32 +01:00
Max Kellermann
49e79620fd PlayerControl: initialise attribute "border_pause" 2013-01-15 23:21:14 +01:00
Max Kellermann
ae5a721df9 Playlist: initialise attribute "playing" 2013-01-15 23:09:18 +01:00
Max Kellermann
0dd5f2915a ServerSocket: use the SocketMonitor class 2013-01-15 22:56:06 +01:00
Max Kellermann
a0ebd444ad event/SocketMonitor: add method Open()
Allow creating a closed SocketMonitor instance.
2013-01-15 22:56:06 +01:00
Max Kellermann
0c6072c4e4 ServerSocket: move more code to methods 2013-01-15 22:53:14 +01:00
Max Kellermann
8917264110 ServerSocket, SocketUtil: use the SocketError library
Use WinSock errors on Windows.
2013-01-15 22:42:15 +01:00
Max Kellermann
e90d606f0a socket_util: convert to C++ 2013-01-15 22:41:56 +01:00
Max Kellermann
5bb2d64ddb SocketError: merge duplicate FormatMessage() calls
Make a class that contains the formatting code and the buffer.
2013-01-15 22:41:56 +01:00
Max Kellermann
bc66dc45e6 server_socket: convert to C++ 2013-01-15 21:42:55 +01:00
Max Kellermann
7087935656 output/httpd: convert to C++ 2013-01-15 20:20:51 +01:00
Max Kellermann
5822daa63d output_internal, ...: add extern "C" 2013-01-15 20:20:51 +01:00
Max Kellermann
4808c7ef39 encoder/{Vorbis,Opus}: use new/delete 2013-01-15 20:20:51 +01:00
Max Kellermann
7071126770 InotifySource: use the SocketMonitor class 2013-01-15 18:18:34 +01:00
Max Kellermann
2101daef5a mixer/Alsa: use MultiSocketMonitor 2013-01-15 18:18:00 +01:00
Max Kellermann
083065f433 input/Curl: move code to class MultiSocketMonitor 2013-01-15 18:16:55 +01:00
Max Kellermann
4cfc4a5a94 input/Curl: simpler GPollFD initialisation
Using initializer list.
2013-01-15 18:16:38 +01:00
Max Kellermann
1c7ee737e6 input/Curl: don't remove/add modified GPollFD
Not necessary, GLib will pick up the updated GPollFD automatically.
2013-01-15 18:16:15 +01:00
Max Kellermann
39439b80f5 Client: rebase on the new BufferedSocket class 2013-01-15 12:15:33 +01:00
Max Kellermann
396480cf94 event/SocketMonitor: wrapper class for GSource + GPollFD 2013-01-15 11:00:48 +01:00
Max Kellermann
3e03527930 Client: move output buffer code to new class PeakBuffer 2013-01-15 10:59:28 +01:00
Max Kellermann
4fa724461e util/fifo_buffer: add method _init() 2013-01-15 10:59:28 +01:00
Max Kellermann
1e2018ce83 Client: move connection functions into the class 2013-01-15 10:59:28 +01:00
Max Kellermann
3fcf17cb79 SignalHandlers: emit GlobalEvents::SHUTDOWN
.. instead of calling g_main_loop_quit(), which may dead-lock.
2013-01-15 10:59:28 +01:00
Max Kellermann
f9fc3a42cc fifo_buffer: move to util/ 2013-01-15 01:02:13 +01:00
Max Kellermann
76bc28ab1e fifo_buffer: add extern "C" 2013-01-15 01:01:25 +01:00
Max Kellermann
f47f86ef02 socket_error: new library for errno / WSAGetLastError() 2013-01-15 00:53:12 +01:00
Max Kellermann
31268ffa24 io_error: add function new_error_errno() 2013-01-15 00:53:12 +01:00
Max Kellermann
0634be9724 Client*: include check.h / config.h 2013-01-14 23:50:01 +01:00
Dark Raven
f56c6a18c1 ClientList: allow deleting clients in client_list_foreach() callback 2013-01-14 11:24:54 +01:00
Max Kellermann
aa4c506fcd Revert "ClientList.cxx: copy client list before iterating"
This reverts commit f53dadcc6d, to
prepare for a better solution.
2013-01-14 11:24:29 +01:00
Max Kellermann
d3a479b7fa event/TimeoutMonitor: wrapper for g_timeout_source_new() 2013-01-14 11:12:28 +01:00
Max Kellermann
92fb0e829a StateFile: convert to a class 2013-01-14 11:00:22 +01:00
Max Kellermann
43a9928537 gcc.h: add C++11 "final" fallback macro 2013-01-14 10:56:42 +01:00
Max Kellermann
c8b408beae InotifyQueue: convert to a class 2013-01-14 10:13:28 +01:00
Max Kellermann
8e3982dd42 InotifySource: convert to a class 2013-01-14 10:08:26 +01:00
Max Kellermann
e83f805b8f Main, IOThread: move GMainLoop setup code to class EventLoop 2013-01-14 09:15:49 +01:00
Max Kellermann
be98afe34d IOThread: use gcc.h 2013-01-14 09:15:49 +01:00
Denis Krjuchkov
f53dadcc6d ClientList.cxx: copy client list before iterating
It seems that it is not safe to remove the item from std::list
while it's being iterated somewhere else.

This is a very simple quick fix to make things work
until some better solution is implemented.
2013-01-13 15:36:25 +06:00
Denis Krjuchkov
90ab65f8c7 WakeFD.cxx: use two sockets instead of pipe on Win32
Pipes aren't really pollable on Windows.
GLib emulates polling on pipes using separate reader/writer threads.
This adds significant overhead and keeps a strong dependency on GLib.

socketpair() function is absent on Windows as well.
We implement it here in a loose way.
2013-01-13 15:30:53 +06:00
Denis Krjuchkov
abb0fcb203 Win32Main.cxx: more clean shutdown
This change fixes two issues:

1) console_handler is called from a separate thread.
   Thread-safe primitive is required for correct operation.

2) If console_handler returns TRUE our process is immediately terminated.
   We use Sleep() to give main thread an opportunity to shutdown correctly.
2013-01-13 15:20:32 +06:00
Max Kellermann
0226440a2d thread/{Mutex,Cond}: new backend for WIN32
Use CRITICAL_SECTION and CONDITION_VARIABLE.  This requires Windows
Vista or newer.  It fixes problems with GLib threading objects that
were implicitly created by static constructors before g_thread_init().
2013-01-11 11:11:07 +01:00
Max Kellermann
9d770d6084 GlobalEvents: #undef DELETE on Windows
Work around a build failure due to windows.h macro.
2013-01-11 11:10:46 +01:00
Max Kellermann
49f3855407 configure.ac: enable WIN32_LEAN_AND_MEAN on Windows 2013-01-11 11:06:16 +01:00
Denis Krjuchkov
a98aa66620 string_util.c: provide fallback strndup() implementation
This patch also adds extern "C" { } wrapper around string_util.h
to allow its usage in C++ code
2013-01-11 13:51:39 +06:00
Max Kellermann
631a268996 input/curl: use std::list instead of GQueue 2013-01-10 23:00:23 +01:00
Max Kellermann
85074f5ac6 icy_metadata: convert to C++ 2013-01-10 22:33:16 +01:00
Max Kellermann
12a8ed39d4 input/Curl: add constructor to input_curl class 2013-01-10 22:25:57 +01:00
Max Kellermann
b9ac5e9e76 input/Curl: remove unused source/source_id attributes 2013-01-10 22:25:33 +01:00
Max Kellermann
2758a734a2 input/Curl: remove redundant attribute "url"
Use the "url" attribute from the base class instead.
2013-01-10 22:21:30 +01:00
Max Kellermann
01f3131c81 input/Curl: use std::forward_list instead of GSList 2013-01-10 20:52:58 +01:00
Max Kellermann
2ca9236864 input/Curl: remove unused attribute "fds" 2013-01-10 20:52:44 +01:00
Max Kellermann
3bb711837e input/Curl: require libcurl 7.18 2013-01-10 20:46:47 +01:00
Max Kellermann
ed8798e82f output/shout: refactor check_block_param() to a function
Don't use macro magic, don't dereference the block_param.
2013-01-10 18:46:33 +01:00
Max Kellermann
38474961fd Log, ...: include cleanup 2013-01-10 18:34:40 +01:00
Max Kellermann
3dd38e7b7f decoder/wavpack: convert to C++ 2013-01-10 18:18:14 +01:00
Max Kellermann
3711a97657 decoder/wavpack: include cleanup 2013-01-10 18:18:02 +01:00
Max Kellermann
911411e630 conf: convert to C++ 2013-01-10 18:18:02 +01:00
Max Kellermann
c02cc199bc path: move code to IsSupportedCharset() 2013-01-10 18:06:21 +01:00
Max Kellermann
dd6c21e092 path: make the "win_charset" buffer static
It is illegal to use it after going out of scope.
2013-01-10 17:54:11 +01:00
Max Kellermann
b8cda53bd3 notify: convert to C++ 2013-01-10 10:44:04 +01:00
Max Kellermann
e0a97a030f io_thread: convert to C++ 2013-01-10 10:33:20 +01:00
Max Kellermann
33ba288622 input/{curl,soup}: convert to C++ 2013-01-10 10:23:20 +01:00
Max Kellermann
d5516dee00 input_stream: convert to C++ (internally) 2013-01-10 10:15:09 +01:00
Max Kellermann
06e0741a52 PlayerControl: switch to the Mutex/Cond classes 2013-01-10 10:12:54 +01:00
Max Kellermann
0b93445380 thread/Cond: new wrapper for pthread_cond_t or GCond 2013-01-10 10:03:19 +01:00
Max Kellermann
483ba5ea1c thread/GLibMutex: new Mutex implementation
Switch WIN32 to this implementation to be able to use condition
variables, which is impossible with CriticalSection.
2013-01-10 10:03:18 +01:00
Max Kellermann
18076ac9b7 PlayerThread: use pc.cond instead of main_cond
The main_cond variable was completely unnecessary.  The pc.cond object
can be used for both main->pc and pc->main.
2013-01-10 10:01:24 +01:00
Max Kellermann
ad15ca7104 DecoderControl: take ownership of client_cond
Don't let the "client" pass its own GCond.  This was not used
consistently.
2013-01-10 10:01:18 +01:00
Max Kellermann
53117ac204 DecoderThread: signal the client after decoder finishes
Fixes potential dead lock bug.
2013-01-10 10:00:53 +01:00
Max Kellermann
51a8c109ab thread/PosixMutex: fix indent 2013-01-10 10:00:52 +01:00
Max Kellermann
5c3c506638 GlobalEvents: lock-less operation using std::atomic
Use a bit field instead of a mutex-protected bool array.
2013-01-10 00:57:18 +01:00
Max Kellermann
ecd5eb02c5 event/WakeFD: use eventfd() if available 2013-01-10 00:10:01 +01:00
Max Kellermann
3be57dc4a3 fd_util: support eventfd() 2013-01-10 00:10:01 +01:00
Max Kellermann
a93caf3cfe GlobalEvents: move code to class WakeFD 2013-01-09 23:47:38 +01:00
Max Kellermann
26ebfc04b0 EventPipe: rename to GlobalEvents 2013-01-09 23:31:43 +01:00
Max Kellermann
8782f6d232 EventPipe: use Mutex instead of GMutex 2013-01-09 23:30:07 +01:00
Max Kellermann
5faf443038 event_pipe.h: convert to C++ 2013-01-09 22:37:47 +01:00
Max Kellermann
8eacd13ce7 sig_handlers, log: convert to C++ 2013-01-09 22:33:06 +01:00
Max Kellermann
d3e1b72d38 mixer/{alsa,pulse}: convert to C++ 2013-01-09 22:25:24 +01:00
Max Kellermann
b5e1bd5705 Playlist.hxx: move prototype to PlaylistGlobal.hxx 2013-01-09 22:23:37 +01:00
Max Kellermann
4bef0a1e62 Playlist: move playlist_increment_version_all() into the class 2013-01-09 22:21:16 +01:00
Max Kellermann
3e5f09be0b event_pipe: convert to C++ 2013-01-09 13:02:13 +01:00
Max Kellermann
e86e77ad67 idle: convert to C++ 2013-01-09 13:01:38 +01:00
Max Kellermann
6b4374583a ReplayGainCoinfig: initialize replay_gain_limit with default value 2013-01-09 12:25:14 +01:00
Max Kellermann
f8a99a391e ReplayGainCoinfig: make DEFAULT_REPLAYGAIN_LIMIT static 2013-01-09 08:56:16 +01:00
Max Kellermann
2564f763d7 ClientList: don't use GLib
Use std::list instead of GList.
2013-01-09 08:12:44 +01:00
Max Kellermann
377a2b9e07 ClientList: add header ClientList.hxx 2013-01-09 08:08:36 +01:00
Max Kellermann
045993001c zeroconf-bonjour: include Listen.hxx instead of listen.h
Should fix the OS X build.
2013-01-09 08:07:26 +01:00
Max Kellermann
affc446690 Queue: use std::stable_sort() instead of g_qsort_with_data() 2013-01-08 16:51:21 +01:00
Max Kellermann
255ee646c2 song: don't use GLib 2013-01-08 16:47:12 +01:00
Max Kellermann
0308ec564e util/list: don't use GLib 2013-01-08 16:41:36 +01:00
Max Kellermann
6cafec8ae6 Queue: allocate memory with new/delete 2013-01-08 16:35:09 +01:00
Max Kellermann
8ef87be482 Queue: use signed integer instead of G_MAXUINT
The check for unsigned underflow is fragile and unreliable.
2013-01-08 16:33:33 +01:00
Max Kellermann
6c57047362 Queue: move code to new class IdTable 2013-01-08 16:11:25 +01:00
Max Kellermann
e29bc6912b Queue: rename internal types 2013-01-08 16:05:10 +01:00
Max Kellermann
ce57b8b6df Queue: move HASH_MULT and Item into the Queue class 2013-01-08 16:04:10 +01:00
Max Kellermann
d81a9029db Queue: move GenerateId() and others into the class 2013-01-08 15:38:10 +01:00
Max Kellermann
bf4311cd9b decoder/OggUtil,Opus: move code to new class OggSyncState 2013-01-08 11:04:14 +01:00
Max Kellermann
8f7adf79a3 decoder/Opus: read total time 2013-01-08 01:38:02 +01:00
Max Kellermann
97b164d03b decoder/OggUtil: add OggExpectPageSeek() 2013-01-08 01:30:44 +01:00
Max Kellermann
61e7e531c2 decoder/Opus: move page reader into the decoder class 2013-01-08 01:22:11 +01:00
Max Kellermann
ceb652915f decoder/Opus: move code to HandlePackets() 2013-01-08 01:20:03 +01:00
Max Kellermann
cdaf504ab8 decoder/Opus: make internal methods inline 2013-01-08 01:19:18 +01:00
Max Kellermann
9fb5aad157 decoder/OggUtil: add OggExpectFirstPage() and OggExpectPageIn() 2013-01-08 01:08:01 +01:00
Max Kellermann
a6301d45f4 decoder/Opus: use OggExpectPage() in main loop 2013-01-08 01:05:59 +01:00
Max Kellermann
b83d069266 decoder/OggUtil: add struct forward declarations 2013-01-08 01:02:06 +01:00
Max Kellermann
960b9a9664 input_stream: add method _cheap_seeking()
Move code from the Vorbis decoder plugin.
2013-01-07 23:25:08 +01:00
Max Kellermann
acb45caa42 decoder/ogg_codec: convert to C++ 2013-01-07 22:14:52 +01:00
Max Kellermann
39060b528a decoder/vorbis: convert to C++ 2013-01-07 22:04:58 +01:00
Max Kellermann
4a36323f1b Queue: don't include glib.h 2013-01-07 22:01:56 +01:00
Max Kellermann
c6281b2680 Queue: use C++ random instead of GLib's GRand 2013-01-07 22:00:57 +01:00
Max Kellermann
5b8b7d1412 util/LazyRandomEngine: lazy wrapper for std::mt19937 2013-01-07 21:27:51 +01:00
Max Kellermann
53e5139b99 Queue: move queue_shuffle_order_first() into the class 2013-01-07 21:26:22 +01:00
Max Kellermann
2b8ce83c9b Queue: move queue_shuffle_order_range() into the class 2013-01-07 21:17:01 +01:00
Max Kellermann
52638c68f5 Playlist: convert functions to methods 2013-01-07 11:35:35 +01:00
Max Kellermann
400ff1c812 DatabaseQueue: pass DatabaseSelection to Add...() 2013-01-07 11:33:00 +01:00
Max Kellermann
d360f17a59 Client: add Partition reference attribute
playlist and player_control are deprecated.
2013-01-07 10:59:56 +01:00
Max Kellermann
a6ee6be960 TagPool: use the Mutex class instead of GStaticMutex 2013-01-07 10:49:21 +01:00
Max Kellermann
47911f9544 tag: convert to C++ 2013-01-07 10:36:27 +01:00
Max Kellermann
48025c2279 DatabaseLock: use the Mutex class instead of GLib's GMutex 2013-01-07 10:34:55 +01:00
Max Kellermann
a68302e50b thread/Mutex: don't use std::mutex
Use a custom pthread_mutex_t wrapper because std::mutex adds overhead.
2013-01-07 10:33:37 +01:00
Max Kellermann
333a08ebf9 replay_gain_info, ...: use cmath instead of math.h in C++ mode
Fixes build problems with mingw32.
2013-01-07 10:19:02 +01:00
Max Kellermann
989c9a7317 filter/replay_gain: convert to C++ 2013-01-07 10:17:16 +01:00
Max Kellermann
975370c084 decoder_api.h, ...: add "extern C" 2013-01-07 10:07:40 +01:00
Max Kellermann
c3c776bc6a mixer_all: convert to C++ 2013-01-07 09:05:06 +01:00
Max Kellermann
9f4b906e6c volume: convert to C++ 2013-01-07 09:05:01 +01:00
Max Kellermann
804900df36 audio_config, volume, mixer_all: include cleanup 2013-01-07 08:54:01 +01:00
Max Kellermann
6936c0e2ab Queue: use std::swap 2013-01-06 23:48:34 +01:00
Max Kellermann
108242042e queue: convert all functions to methods 2013-01-06 21:33:58 +01:00
Max Kellermann
70652abf97 Queue: add constructor and destructor 2013-01-06 18:59:39 +01:00
Max Kellermann
e202b407ec Playlist: add constructor and destructor 2013-01-06 18:59:33 +01:00
Max Kellermann
2cc89e60cc DatabaseQueue: force passing playlist reference to std::bind()
Avoid implicit copy.
2013-01-06 18:59:01 +01:00
Max Kellermann
d536944beb Partition: new class, container for Playlist and PlayerControl
This is the beginning of multi-player support.  There will be support
for multiple Partition objects in one MPD process.
2013-01-05 02:43:00 +01:00
Max Kellermann
1a8ef3cdab filter/ReplayGain: add method _set_mode()
Push the new mode to the filter instead of accessing global variables
through replay_gain_get_real_mode().
2013-01-05 02:40:33 +01:00
Max Kellermann
7be33eba48 DecoderAPI: don't use replay_gain_get_real_mode()
replay_gain_get_real_mode() accesses dangerous globals.  Let's just
use the global variable replay_gain_mode, and assume "AUTO" means
"TRACK".  At this point, this is the best we can do, because neither
the decoder nor the player should know about the current replay gain
mode.  This is applied as a filter in the output thread.
2013-01-05 02:40:32 +01:00
Max Kellermann
46ed91b53d DecoderAPI: _replay_gain() returns void
Let the function decoder_replay_gain() update
decoder_control::replay_gain_db instead of letting each decoder plugin
take care for that.
2013-01-05 02:40:29 +01:00
Max Kellermann
44d260f911 replay_gain_*: convert to C++ 2013-01-04 23:50:58 +01:00
Max Kellermann
07249fc395 replay_gain_config: remove unused variable replay_gain_mode_names 2013-01-04 23:49:41 +01:00
Max Kellermann
bc1e8e01f3 DatabaseQueue: pass playlist object
Don't use the global variable "g_playlist".
2013-01-04 23:19:46 +01:00
Max Kellermann
fe8e77e556 Client: add "playlist" attribute
Reduce access to the global variable "g_playlist".
2013-01-04 23:07:11 +01:00
Max Kellermann
b0833084a6 PlayerControl: initialize all attributes 2013-01-04 23:04:42 +01:00
Max Kellermann
3cacaa5dad Client: initialize num_subscriptions 2013-01-04 23:02:35 +01:00
Max Kellermann
e89bd30db5 Playlist: pass max_length to playlist_init()
Move the configuration lookup to Main.cxx.
2013-01-04 22:55:11 +01:00
Max Kellermann
2a9d933a81 PlayerControl: add constructor and destructor 2013-01-04 22:45:14 +01:00
Max Kellermann
81f3d893d9 player_control.h: convert header to C++ 2013-01-04 22:31:53 +01:00
Max Kellermann
05c91082e3 playlist: convert to C++ 2013-01-04 22:12:33 +01:00
Max Kellermann
7267558ba1 DecoderThread: move code to destructor 2013-01-04 22:02:52 +01:00
Max Kellermann
ac6803e7b7 DecoderInternal: initialize replay_gain_serial 2013-01-04 22:01:13 +01:00
Max Kellermann
ffabf8b013 DecoderInternal: move initializers to constructor 2013-01-04 21:59:03 +01:00
Max Kellermann
e9b71a0d28 MusicChunk: move functions to methods 2013-01-04 21:38:46 +01:00
Max Kellermann
efbfe66f21 Mutex: new wrapper for std::mutex, replaces GMutex 2013-01-04 21:24:29 +01:00
Max Kellermann
6886063703 MusicPipe: allocate with new/delete 2013-01-04 21:22:07 +01:00
Max Kellermann
c04e1ad401 mpd_error.h: add missing glib.h include 2013-01-04 21:20:10 +01:00
Max Kellermann
223b90d0d4 MusicBuffer: return memory to kernel when stopping playback
Use the new HugeAllocator as backend for SliceBuffer and call
HugeDiscard() when the last chunk was returned.
2013-01-04 20:48:28 +01:00
Max Kellermann
692b2cfb79 HugeAllocator: new memory allocator 2013-01-04 20:38:06 +01:00
Max Kellermann
447a86c922 SliceBuffer: lazy initialization
Avoid page faults on MPD startup.  This saves a lot of memory for an
idle MPD.
2013-01-04 20:29:47 +01:00
Max Kellermann
e3a2bd3a1e MusicBuffer: move code to template class SliceBuffer 2013-01-04 17:12:21 +01:00
Max Kellermann
f0be6a4b9e MusicBuffer: allocate with new/delete 2013-01-04 17:03:50 +01:00
Max Kellermann
bdab5d5f6e MusicBuffer: disable memory poisoning
This is harmful for memory usage, because it forces the kernel to
allocate physical memory, even before playback has started.  No bug
has been found in a few years with this, so it's safe to assume that
this code is not necessary.
2013-01-04 15:42:15 +01:00
Max Kellermann
15a4246ead Client, Inotify: use std::list instead of std::deque
Random access is not necessary here.
2013-01-04 14:44:06 +01:00
Max Kellermann
9a71845700 crossfade: convert to C++ 2013-01-04 10:31:59 +01:00
Max Kellermann
22f0a1547c buffer, pipe: convert to C++ 2013-01-04 10:16:16 +01:00
Max Kellermann
de0ab43bc1 output_*: convert to C++ 2013-01-04 09:46:41 +01:00
Max Kellermann
e12cc01aa4 decoder_*: convert to C++ 2013-01-04 09:41:45 +01:00
Max Kellermann
71c697288b pcm_convert: make C++ safe 2013-01-04 08:49:15 +01:00
Max Kellermann
a7d1daee93 CommandListBuilder: use std::list instead of GSList 2013-01-04 01:17:25 +01:00
Max Kellermann
77a99cc61d CommandListBuilder: rename attributes 2013-01-04 01:16:22 +01:00
Max Kellermann
fb337418a5 Client: move code to class CommandListBuilder 2013-01-04 00:50:13 +01:00
Max Kellermann
9d312ab208 PlaylistFile: reuse classes PlaylistInfo and PlaylistVector
.. instead of rolling own classes.
2013-01-04 00:02:09 +01:00
Max Kellermann
06be0a1997 PlaylistInfo: remove the obsolete list_head attribute 2013-01-04 00:01:01 +01:00
Max Kellermann
9e4509b846 ClientNew: initialise the "idle" attributes
Make valgrind happy.
2013-01-03 23:59:45 +01:00
Max Kellermann
fc1f0eeda7 Client: add constructor and destructor
Move code from client_new() and client_close().
2013-01-03 23:59:45 +01:00
Max Kellermann
3d5c094804 PlaylistFile: fix memory leak 2013-01-03 23:59:45 +01:00
Max Kellermann
6837e5a6a0 Merge branch 'v0.17.x' 2013-01-03 22:53:53 +01:00
Max Kellermann
9761abf3b5 cue_parser: fix CUE files with only one track
Track whether _finish() has been called, and deliver all partial
results then.  Fixes Mantis ticket 0003621.
2013-01-03 21:58:20 +01:00
Max Kellermann
599a562170 cue_parser: add code comments 2013-01-03 21:38:38 +01:00
Max Kellermann
31da4bc566 cue_parser: fix memory leak 2013-01-03 21:02:59 +01:00
Denis Krjuchkov
01a45a53aa cmdline: bunch of fixes related to config file selection
- fix potential memory leak of system_path

  'Potential' because currently g_get_system_config_dirs()
  returns single entry on Windows, but that might change.

- remove incorrect g_free() call

  It's not required at all because
  g_get_system_config_dirs() returns GLib owned memory.

- remove extra semicolon
2013-01-03 19:45:51 +01:00
Max Kellermann
59400d38a9 Client: use std::deque for messages 2013-01-03 18:07:48 +01:00
Max Kellermann
5155b0f608 ClientMessage: turn into a class 2013-01-03 17:58:22 +01:00
Max Kellermann
d919f8d50a ClientInternal: use std::set for subscriptions 2013-01-03 17:49:47 +01:00
Max Kellermann
d67aa7c19d ClientNew: allocate/dispose client objects with new/delete
Prepare for adding non-trivial attributes.
2013-01-03 17:47:39 +01:00
Max Kellermann
7a982169c9 Client: rename the struct client to class Client 2013-01-03 17:36:28 +01:00
Max Kellermann
f2510d60fa ls.h: rename to ls.hxx 2013-01-03 17:34:51 +01:00
Max Kellermann
1e0ea57dc4 cmdline: convert to C++ 2013-01-03 17:31:38 +01:00
Max Kellermann
70b87f2eb6 client: convert to C++ 2013-01-03 11:16:18 +01:00
Max Kellermann
94b2ee627c decoder_print: convert to C++ 2013-01-03 11:14:36 +01:00
Max Kellermann
e30a2dd2d7 listen: convert to C++ 2013-01-03 11:05:44 +01:00
Max Kellermann
7e07daf8cb ls: convert to C++ 2013-01-03 11:01:02 +01:00
Max Kellermann
981906ecd1 output_print: convert to C++ 2013-01-03 10:58:39 +01:00
Max Kellermann
90fe4c5124 TextFile: convert to a class 2013-01-03 10:16:05 +01:00
Max Kellermann
2452447c81 text_file: convert to C++ 2013-01-03 10:12:41 +01:00
Max Kellermann
93f0bb8307 ExcludeList: convert to a class 2013-01-03 10:02:43 +01:00
Max Kellermann
47fc08bffe exclude: convert to C++ 2013-01-03 10:02:33 +01:00
Max Kellermann
c0f2024a2e exclude: make variables more local 2013-01-03 10:02:26 +01:00
Max Kellermann
28f3e190c8 InotifyQueue: use std::deque instead of GSList 2013-01-03 10:02:26 +01:00
Max Kellermann
c4090b670d Permission: use std::map instead of GHashTable 2013-01-03 03:11:39 +01:00
Max Kellermann
ddf112378b permission: convert to C++ 2013-01-03 03:09:50 +01:00
Max Kellermann
b25cce464a client_new: convert to C++ 2013-01-03 03:07:16 +01:00
Max Kellermann
a2297558ff MessageCommands: use std::set instead of GHashTable 2013-01-03 02:40:21 +01:00
Max Kellermann
84cdf0cacc StickerDatabase: use std::map instead of GHashTable 2013-01-03 02:39:08 +01:00
Max Kellermann
9e99e5bef9 strset: delete obsolete library 2013-01-03 02:31:47 +01:00
Max Kellermann
9023ba4a81 PlaylistVector: use std::list 2013-01-03 02:25:06 +01:00
Max Kellermann
83488848e1 Directory: initialise in default constructor 2013-01-03 02:12:34 +01:00
Max Kellermann
f5a92d6cc3 Directory: add constructor and destructor 2013-01-03 01:36:28 +01:00
Max Kellermann
3e8047e583 Directory: rename struct directory to Directory 2013-01-03 01:10:47 +01:00
Max Kellermann
440ac51cf0 database.h: rename to DatabaseSimple.hxx 2013-01-03 01:06:11 +01:00
Max Kellermann
d3293b889d database.h: move prototypes to DatabaseGlue.hxx 2013-01-03 01:04:18 +01:00
Max Kellermann
b4b0b34e5a database.h: eliminate db_*_song()
Use the C++ API.
2013-01-03 00:37:18 +01:00
Max Kellermann
fa3d1156a6 playlist_edit: convert to C++ 2013-01-03 00:35:05 +01:00
Max Kellermann
0eb05b827f Directory: turn functions to methods 2013-01-02 23:06:10 +01:00
Max Kellermann
0c245bc271 Directory: make the header C++ only 2013-01-02 22:52:08 +01:00
Max Kellermann
d65ad1bf15 mapper: convert to C++ 2013-01-02 22:43:56 +01:00
Max Kellermann
43cbbe111b song_update: convert to C++ 2013-01-02 22:42:12 +01:00
Max Kellermann
9ceb8a717a sticker: convert to C++ 2013-01-02 22:25:17 +01:00
Max Kellermann
8331de424a PlaylistInfo: rename class, use std::string 2013-01-02 22:16:05 +01:00
Max Kellermann
98dbdf72b3 PlaylistVector: move struct playlist_metadata to PlaylistInfo.hxx 2013-01-02 22:01:04 +01:00
Max Kellermann
51a2d09eb7 db_lock: convert to C++ 2013-01-02 20:56:21 +01:00
Max Kellermann
22f0ef6d6b don't include stdbool.h in C++ sources
The "bool" type is built-in.
2013-01-02 20:56:04 +01:00
Max Kellermann
975deca85b {decoder,player}_thread: convert to C++ 2013-01-02 20:36:28 +01:00
Max Kellermann
3bbb502387 *_print: convert to C++ 2013-01-02 20:29:24 +01:00
Max Kellermann
0023dffd0b playlist_vector: convert to C++ 2013-01-02 20:25:20 +01:00
Max Kellermann
b715e522cf db_save, state_file: convert to C++ 2013-01-02 20:22:59 +01:00
Max Kellermann
4b0b8315a9 string_util: use const_cast in C++ mode 2013-01-02 20:22:59 +01:00
Max Kellermann
a654f146d1 update: convert to C++ 2013-01-02 19:22:15 +01:00
Max Kellermann
67b46a151d playlist_{any,song,queue}: convert to C++ 2013-01-02 19:19:58 +01:00
Max Kellermann
83c7e1e129 configure.ac: disable C++ RTTI
RTTI adds overhead to the binary, and we don't need that.
2013-01-02 19:19:58 +01:00
Max Kellermann
a6371e2e66 configure.ac: disable C++ exceptions
We don't use exceptions currently.  Since allowing exceptions means a
lot of overhead, this commit disables the feature.
2013-01-02 19:12:27 +01:00
Jurgen Kramer
dc32d1f3f3 Add tag support for DSD (DSDIFF & DSF) decoders 2012-10-27 11:42:34 +02:00
Max Kellermann
cbdaa1369f Merge branch 'v0.17.x'
Conflicts:
	src/PlaylistSave.cxx
2012-10-05 17:12:44 +02:00
Max Kellermann
8fb20fcdf8 playlist_song: fix potential charset bug in apply_song_metadata()
The song's URI must be UTF-8, not filesystem character set.
2012-10-05 17:01:04 +02:00
Max Kellermann
72bf226608 playlist_save: use temp2 instead of temp
Fixes minor Windows compatibility problem.
2012-10-05 16:55:30 +02:00
Max Kellermann
d4b5699403 decoder/ffmpeg: support planar audio
Implements Mantis feature request 3582.
2012-10-05 16:40:25 +02:00
Max Kellermann
1dc27be015 decoder/ffmpeg: fix playback of planar PCM data
Interleaving was completely wrong.  This code was never used, so it
didn't have an effect.
2012-10-05 16:38:55 +02:00
Max Kellermann
230a3eb400 decoder/ffmpeg: move code to copy_interleave_frame2() 2012-10-05 16:37:07 +02:00
Max Kellermann
e39382dedd decoder/ffmpeg: ignore negative time stamps
Works around assertion failure in decoder_timestamp().
2012-10-05 16:37:07 +02:00
Max Kellermann
fd016f4507 decoder/ffmpeg: show unsupported sample format name
Use av_get_sample_fmt_string() to obtain a human-readable string.
2012-10-05 15:24:53 +02:00
Max Kellermann
9d728b365d decoder/ffmpeg: pass AVSampleFormat to ffmpeg_sample_format()
API simplification.
2012-10-05 15:14:57 +02:00
Max Kellermann
ddc0283339 decoder/ffmpeg: remove duplicate sample format error message 2012-10-05 14:52:30 +02:00
Max Kellermann
b8fdb452be decoder/flac: support FLAC files inside archives
Implement the "scan_stream" method that can read tags from any
input_stream object.  This requires a FLAC__IOCallbacks implementation
based on the input_stream API.
2012-10-04 10:37:09 +02:00
Max Kellermann
6b416ce6be decoder/flac: move flac_scan_file2() to main plugin file 2012-10-04 10:32:52 +02:00
Max Kellermann
ef0392e854 input/file: use errno_quark() 2012-10-04 10:32:04 +02:00
Max Kellermann
efbf184fe8 PlaylistFile, client_file, tag_id3: don't use g_file_error_quark()
g_file_error_quark() is meant to be used with the GFileError enum
which does not correspond with errno, but must be converted with
g_file_error_from_errno().

At the same time, this removes g_strerror() use for
g_file_error_quark().
2012-10-04 10:31:53 +02:00
Max Kellermann
ebd90dbb1a decoder/flac: move callbacks to class FLACInput 2012-10-02 19:59:49 +02:00
Max Kellermann
c9e700f079 decoder/flac: add ctor/dtor to struct flac_data 2012-10-02 19:47:31 +02:00
Max Kellermann
3c2d73d161 decoder/flac: add method FLACMetadataChain::Scan()
Merge common code.
2012-10-02 18:24:15 +02:00
Max Kellermann
343de8b8ab decoder/flac: don't use FLAC__Metadata_SimpleIterator
Use the new FLACMetadataIterator C++ class, which is more powerful.
2012-10-02 17:38:21 +02:00
Max Kellermann
c645b906f3 decoder/flac: add C++ libFLAC wrappers
Not using libFLAC++ because this library adds a lot of overhead due to
virtual method calls.  This new class library is zero-overhead.
2012-10-02 17:37:07 +02:00
Max Kellermann
9c1d1ef268 decoder/flac: eliminate the obsolete "track number" code
This has been deprecated by the "embcue" playlist plugin.
2012-10-02 17:36:54 +02:00
Max Kellermann
ade0483641 Merge branch 'v0.17.x' 2012-10-02 17:34:03 +02:00
Gregory Smith
03a401e477 OSX: Set mDataByteSize correctly on AudioBuffers during render. 2012-10-02 17:27:52 +02:00
Max Kellermann
e5fd1924db decoder/flac: remove unused function flac_tag_load() 2012-10-02 11:39:10 +02:00
Max Kellermann
cbdd042adc decoder/flac: use C++ compiler 2012-10-02 10:59:56 +02:00
Max Kellermann
ccd7104cdc {decoder,encoder}/flac: drop support for libFLAC 1.1 2012-10-02 10:04:44 +02:00
Max Kellermann
1cf4b5ce47 encoder/opus: implement lookahead
The "opusinfo" program complained about preskip value that was too
small.  This commit uses OPUS_GET_LOOKAHEAD to obtain the number of
frames that shall be silence at the beginning.
2012-10-02 09:42:03 +02:00
Max Kellermann
1badb3b5d5 encoder/opus: initialize the "granulepos" packet attribute 2012-10-02 09:16:44 +02:00
Max Kellermann
038d216f18 encoder/{vorbis,opus}: merge code to new class OggStream 2012-10-02 09:06:03 +02:00
Max Kellermann
9e3f843291 encoder/vorbis: accept floating point input samples
Improves quality by not squeezing 32 bit samples down to 16 bit, and
then back to 32 bit floating point.  Reduces CPU usage by skipping a
conversion step.
2012-10-02 08:39:39 +02:00
Max Kellermann
e166ddf46f pcm_channels: support floating point samples 2012-10-02 08:39:12 +02:00
Max Kellermann
31e1be7570 encoder/opus: call ogg_stream_flush() only in the last iteration
If there are multiple pages, the last partial page must be flushed.
2012-10-02 08:13:48 +02:00
Max Kellermann
d793b7c03f encoder/opus: new encoder plugin for the Opus codec 2012-10-02 00:45:24 +02:00
Max Kellermann
9a715267ad output/shout: move code to my_shout_configure()
Eliminate the evil goto.
2012-10-02 00:39:21 +02:00
Max Kellermann
eafa432cc6 encoder/vorbis: use C++ compiler 2012-10-02 00:37:19 +02:00
Max Kellermann
d95e538020 Merge branch 'v0.17.x' 2012-10-02 00:36:05 +02:00
Max Kellermann
adbe8c409a output/{recorder,shout}: call encoder_read() in a loop
This is necessary for Ogg packets that span more than one page.
2012-10-02 00:26:40 +02:00
Max Kellermann
58e600f408 output/recorder: move code to _write_to_file() 2012-10-02 00:26:40 +02:00
Max Kellermann
d34e55c370 output/recorder: fix write() error check
We can only check for negative values if the variable is signed.
2012-10-02 00:20:42 +02:00
Max Kellermann
fbcbcdc001 output/recorder: make variables more local 2012-10-02 00:20:32 +02:00
Max Kellermann
4227a325a5 output/httpd: make variables more local 2012-10-02 00:20:13 +02:00
Max Kellermann
d115507502 encoder/vorbis: make variables more local 2012-10-02 00:20:01 +02:00
Max Kellermann
43d8252050 output/recorder, test/*: invoke encoder_read() after _open()
Make sure the file header gets written at the beginning, before
_write() gets called.
2012-10-02 00:18:18 +02:00
Max Kellermann
674b4ab647 output/shout: eliminate struct shout_buffer
Move the raw buffer to struct shout_data.
2012-10-02 00:18:04 +02:00
Max Kellermann
fe8fc1081a output/shout: remove shout_buffer.len
Make it a local variable instead.
2012-10-02 00:17:53 +02:00
Max Kellermann
c7748fedab output/shout: fix memory leak in error handler 2012-10-02 00:17:27 +02:00
Max Kellermann
c392efb481 output/shout: make variables more local 2012-10-02 00:17:17 +02:00
Max Kellermann
d0c3fa0150 main: use C++ compiler 2012-09-28 00:40:00 +02:00
Max Kellermann
609f6ce66d PlaylistFile: use std::list instead of GPtrArray 2012-09-28 00:10:02 +02:00
Max Kellermann
7298b6c846 stored_playlist, playlist_save: use C++ compiler 2012-09-28 00:08:15 +02:00
Max Kellermann
acec9c4fd7 stored_playlist: make variables more local 2012-09-28 00:05:21 +02:00
Max Kellermann
9cdbde4f5e output: new option "tags" may be used to disable sending tags
Implements Mantis ticket 0003340.
2012-09-25 23:31:07 +02:00
Max Kellermann
33364edfb3 decoder/adplug: new decoder plugin 2012-09-25 22:03:44 +02:00
Simon Hosie
5e9ccdec63 decoder/vorbis: skip 16 bit quantisation, provide float samples
Internally the vorbis (non-Tremor) decoder is working in floating
point, and it's not really necessary to cut the output back to 16-bit
if the soundcard or OS supports higher resolution.

The decoder can be trivially modified to bypass its internal
quantisation and produce floating-point output, and a separate
quantisation can be used as appropriate to the platform.
2012-09-25 21:27:50 +02:00
Max Kellermann
071aca60be decoder/vorbis: rename local variables 2012-09-25 21:26:27 +02:00
Max Kellermann
133e4d5c51 decoder/vorbis: improved support for initial seek
Call decoder_get_command() before doing anything else.
2012-09-25 21:26:27 +02:00
Max Kellermann
fd56461d5f decoder/vorbis: make variables more local 2012-09-25 21:11:38 +02:00
Max Kellermann
a5d8b27671 command.h: move function prototypes to AllCommands.h 2012-09-25 12:20:36 +02:00
Max Kellermann
f3f25d5d40 command.h: remove obsolete command_success() prototype
This lives in protocol/result.h now.
2012-09-25 12:20:33 +02:00
Max Kellermann
f118812c34 playlist: include cleanup 2012-09-25 12:20:30 +02:00
Max Kellermann
98dbc95913 rename CommandError.h to CommandError.hxx 2012-09-25 12:20:15 +02:00
Max Kellermann
145c1d214c *Commands: remove extern"C" from C++ headers 2012-09-25 12:19:18 +02:00
Max Kellermann
b62a8e3e3e command: add COMMAND_RETURN_IDLE
Eliminate the hack in handle_idle().
2012-09-25 12:04:20 +02:00
Max Kellermann
e47240931a command: add documentation for "enum command_return" 2012-09-25 12:02:08 +02:00
Max Kellermann
a84874426d command: remove enum integer values
Just use the values assigned by the compiler.
2012-09-25 12:01:53 +02:00
Max Kellermann
f38dfd9231 command: rename to AllCommands.cxx 2012-09-25 11:56:37 +02:00
Max Kellermann
510c4a3ef1 command: move remaining handlers to OtherCommands.cxx 2012-09-25 11:44:49 +02:00
Max Kellermann
e7e52c24f5 gcc.h: require gcc 4.6
We use range-based for and nullptr, which was not implemented prior to
gcc 4.6.
2012-09-25 11:39:46 +02:00
Max Kellermann
e2a574e2a0 Merge branch 'v0.17.x'
Conflicts:
	src/locate.c
2012-09-25 11:39:01 +02:00
Max Kellermann
ba6ef53ef9 decoder_control: remove MixRamp debug messages
These are confusing, and since MixRamp development has ceased, not
useful to anybody.
2012-09-25 11:08:16 +02:00
Max Kellermann
7088a679a2 decoder/wavpack: support all APEv2 tags
WavPack tags are always APEv2, by definition.  Reuse the tag_table
from tag_ape.c, instead of rolling our own.
2012-09-25 09:37:16 +02:00
Max Kellermann
04c02a1eb8 locate: cast enum tag_type to int before comparing with integer
Avoids clang pickiness.  This code is not correct, but we'll fix that
another day.
2012-09-22 09:48:27 +02:00
Max Kellermann
1536b5a9d6 src/decoder/opus: new decoder plugin for the Opus codec
Using libopus and libogg.
2012-09-05 23:01:17 +02:00
Max Kellermann
bab756a5d0 decoder/{flac,vorbis}: move tag table to XiphTags.c
Merge duplicate data.
2012-09-05 22:56:57 +02:00
Max Kellermann
886255e38a db/SimpleDatabasePlugin: fix memory leak in Visit()
When visiting a song, GetSong() was called, but this object was never
returned by calling ReturnSong().  This patch locks the database only
once in Visit() and passes the original song object to the visitor,
avoiding the copy.
2012-09-05 20:56:20 +02:00
Max Kellermann
0240e75426 db_lock: add C++ helper class ScopeDatabaseLock 2012-09-05 20:52:02 +02:00
Max Kellermann
7102ed8026 decoder/ogg_codec: return UNKNOWN on error 2012-09-04 13:46:12 +02:00
Max Kellermann
ebf481e1a1 decoder/ogg_common: rename to ogg_codec.c 2012-09-04 13:05:12 +02:00
Max Kellermann
5a52e91350 decoder/ogg_common: pass decoder to _type_detect()
Allow the function to be cancelled.
2012-09-04 12:49:02 +02:00
Max Kellermann
18e458154a decoder/ogg_common: apply coding style 2012-09-04 11:52:18 +02:00
Max Kellermann
015e1ab183 decoder/_ogg_common: rename to ogg_common.c 2012-09-04 11:28:36 +02:00
Max Kellermann
2a4c799471 Merge branch 'v0.17.x' 2012-09-04 11:28:13 +02:00
Max Kellermann
41487426f5 decoder/_ogg_common: fix buffer size check
Fixes potential access to uninitialised memory.
2012-09-04 11:22:15 +02:00
Max Kellermann
0d24250aa7 decoder/_ogg_common: simplify the large "if" expression 2012-09-04 11:22:05 +02:00
Max Kellermann
013e8479af AudioCompress: abort on out-of-memory
This library crashes on out-of-memory (NULL pointer dereference).
There's not much useful MPD can do in such a situation, so let's
explicitly abort instead, just like GLib does.
2012-09-03 22:45:33 +02:00
Max Kellermann
27535a7f78 update_walk: fix unsafe readlink() usage 2012-09-03 22:41:04 +02:00
Max Kellermann
333d226ed0 SongFilter: convert to a C++ class 2012-08-29 20:19:02 +02:00
Max Kellermann
04a9dec952 playlist_print: rename to PlaylistPrint.cxx 2012-08-29 20:17:13 +02:00
Max Kellermann
6ee76b7154 DatabaseSelection: add method Match() 2012-08-29 20:03:37 +02:00
Max Kellermann
36b1c08ad7 locate: rename to SongFilter.cxx 2012-08-29 19:12:26 +02:00
Max Kellermann
7b35d5e9d4 queue_print: rename to QueuePrint.cxx 2012-08-29 19:07:30 +02:00
Max Kellermann
6d4ca071a5 dbUtils.h: eliminate this header 2012-08-29 18:55:49 +02:00
Max Kellermann
684a3d30a6 command: move code to *Commands.cxx 2012-08-29 17:42:06 +02:00
Max Kellermann
25740d27bf Stats: stats_print() returns void 2012-08-29 17:41:26 +02:00
Max Kellermann
fb0a52a34a decoder/mad, output_thread: add gcc_unlikely() 2012-08-29 17:41:22 +02:00
Max Kellermann
def21cc87e Merge branch 'v0.17.x'
Conflicts:
	src/queue_save.c
2012-08-25 10:28:33 +02:00
Max Kellermann
acaa725478 playlist/cue: map "PERFORMER" to "artist" or "album artist"
Implements Mantis ticket 0003549.
2012-08-25 09:56:14 +02:00
Max Kellermann
f351550534 player_thread: disable cross-fading in "single" mode
This commit reimplements the core of the "single" mode.  Instead of
doing the detection in the playlist code from the outside, it is moved
to the player thread, which gets a new option called "border_pause".
It will now pause playback exactly at the beginning of the new song,
making the feature more reliable.

Now that the player thread knows what will happen, it can suppress
cross-fading.

Fixes mantis tickets 0003055 and 0003166.
2012-08-25 09:38:41 +02:00
Max Kellermann
e8df7e8da5 Database*: fix nullptr dereference when no database is configured 2012-08-22 21:40:20 +02:00
Max Kellermann
af4252bc80 fd_util: make C++ safe 2012-08-22 15:51:56 +02:00
Max Kellermann
66ecf39efe command: make "single" a bool 2012-08-21 19:38:08 +02:00
Max Kellermann
5ad21d7e98 queue_save: save song priorities 2012-08-21 19:17:14 +02:00
Max Kellermann
7968fa3779 ProxyDatabase: implement GetSong() 2012-08-16 00:29:25 +02:00
Max Kellermann
31009bb1f6 ProxyDatabase: clear libmpdclient errors in CheckError()
Auto-recover from soft errors.
2012-08-16 00:29:25 +02:00
Max Kellermann
3b8532f3fb DatabasePlugin: add method ReturnSong()
Allow the plugin to allocate the GetSong() return value.
2012-08-16 00:04:14 +02:00
Max Kellermann
f45616e5f6 Merge branch 'v0.17.x' 2012-08-16 00:04:03 +02:00
Max Kellermann
ef5125f8f4 playlist_print: fix memory leak 2012-08-16 00:01:01 +02:00
Max Kellermann
bf2e07074b playlist_song: pass const song to _check_load_song() 2012-08-16 00:00:50 +02:00
Max Kellermann
20695ef369 playlist_song: fix user-after-free bug 2012-08-16 00:00:21 +02:00
Max Kellermann
e391f4b17b ProxyDatabase: pass "detached" objects to visitors
Fixes wrong object URIs with duplicate base names.
2012-08-15 23:10:59 +02:00
Max Kellermann
2bd344549b queue: duplicate all song objects
Make sure the queue "owns" all song objects, so nobody else can free
them.
2012-08-15 23:10:00 +02:00
Max Kellermann
e96779de48 player_control: duplicate the song object
Make sure the player "owns" the next_song object, so nobody else can
free it.
2012-08-15 23:09:22 +02:00
Max Kellermann
eb54337c40 decoder_control: duplicate the song object
Make sure the decoder "owns" the song object, so nobody else can free
it.
2012-08-15 23:08:39 +02:00