Commit Graph

6940 Commits

Author SHA1 Message Date
Max Kellermann
5d17731b73 UpdateGlue: let the update thread run at "idle" priority
The update thread should not affect the rest of the system, therefore
set "idle" priority, and let it only run when nobody else is using the
resources.
2014-01-14 09:09:52 +01:00
Max Kellermann
07a7fde825 Merge branch 'shine' of git://github.com/ekroth/mpd 2014-01-13 22:54:15 +01:00
Max Kellermann
049abef2d4 input/despotify: change name to "despotify"
The name "spt" didn't make much sense for this plugin.
2014-01-13 22:35:30 +01:00
Max Kellermann
7c60b50a39 CommandLine: print list of database plugins 2014-01-13 22:31:55 +01:00
Max Kellermann
4f83c60296 copyright year 2014 2014-01-13 22:31:55 +01:00
Andrée Ekroth
cd5817b67e encoder/shine: fix segfault workaround
Initializing and closing the Shine library without
writing any data results in a segmentation fault.
The current workaround writes zeroes if there was
no actual data.
2014-01-13 22:28:29 +01:00
Max Kellermann
a4d580a6f8 db/upnp: add fallback for emplace()
The method emplace() was added in gcc 4.8.  This commit restores
compatibility with gcc 4.7.
2014-01-13 22:24:48 +01:00
Max Kellermann
ca43e634b5 db/upnp: use std::function for the libupnp callback
Replaces the bloated std::map.
2014-01-13 22:24:02 +01:00
Max Kellermann
85324f80fe db/upnp: fix "upnp:class" parser
"upnp:class" is an element, not an attribute of element "item".  This
fixes a regression from commit 65ebfb16
2014-01-13 22:23:00 +01:00
Andrée Ekroth
56a7fcf189 encoder/shine: remove unnecessary buffer
Now writes to the de-interleaved buffers directly,
instead of writing to an intermediate fifo buffer.

Fix indentation and 80 char width lines.
2014-01-13 17:55:12 +01:00
Andrée Ekroth
ea771c17c5 Shine encoding plugin
This encoding plugin features a fixed-point mp3 encoder,
with faster encoding on architectures without a FPU.

Right now the encoder is limited to stereo and 16 bit depth.
The bitrate and sample rate can be modified in audio_output.

audio_output {
        type            "httpd"
        name            "My shine stream"
        encoder         "shine"
        port            "8000"
        format          "44100:16:2"
        bitrate         "320"  # default: 128
}
2014-01-13 11:14:19 +01:00
Max Kellermann
65ebfb16c9 db/upnp/Directory: parse item_class in StartElement
Don't add to the std::map.
2014-01-11 01:40:21 +01:00
Max Kellermann
44a65fc5de db/upnp/Object: add attribute "url"
Don't store in the std::map.
2014-01-11 01:36:08 +01:00
Max Kellermann
f031eb1ef2 db/upnp/Directory: parse duration
Don't put all <res/> attributes to the attributes map; parse the
"duration" attribute as soon as we receive it, and store it in an
integer attribute.  This reduces bloat.
2014-01-11 01:31:13 +01:00
Max Kellermann
b50d79542c db/upnp: move stringToTokens() to Util.cxx 2014-01-11 01:30:05 +01:00
Max Kellermann
8351543c0f db/upnp: move lazy Open() call to new class LazyDatabase
Generic approach for the workaround.
2014-01-11 01:25:22 +01:00
Max Kellermann
8add78ed5e db/upnp/discovery: convert std::strings to const char *
Reduce bloat.
2014-01-11 01:21:54 +01:00
Max Kellermann
4b3a3d6faa db/upnp: remove unnecessary Mutex 2014-01-11 01:16:35 +01:00
Max Kellermann
71d012fa61 db/proxy: forward "idle" events
Send "idle" to the other MPD whenever there's nothing else to do and
forward incoming "idle database" events to all our MPD clients.
2014-01-11 01:11:19 +01:00
Max Kellermann
114df1f137 DatabasePlugin: add interface DatabaseListener
Allow database plugins to announce that they have been modified.
2014-01-11 01:01:54 +01:00
Max Kellermann
00adf7ff17 db/proxy: move code to Disconnect() 2014-01-11 00:46:33 +01:00
Max Kellermann
3f0415fa24 UpdateGlue: move stats_invalidate() call to Instance::DatabaseModified() 2014-01-11 00:46:33 +01:00
Max Kellermann
348d0c944e Stats: lazy initialization
Ask the DatabasePlugin for stats when the first client requests them,
not at startup.
2014-01-10 23:42:46 +01:00
Max Kellermann
e9ba5fcaf3 db/upnp: remove unused method setMaxContentLength() 2014-01-10 23:04:50 +01:00
Max Kellermann
48097745f6 db/upnp: remove "upnplog" option
We have removed all libupnp logging calls, and we don't need to debug
libupnp.
2014-01-10 23:00:27 +01:00
Max Kellermann
1091ca969f db/upnp: remove unused macro PLOGINF() 2014-01-10 23:00:18 +01:00
Max Kellermann
09d62cc630 db/upnp: remove unused method errAsString() 2014-01-10 23:00:10 +01:00
Max Kellermann
a2ead993e6 db/upnp/Device: remove unused attribute "m_tabs" 2014-01-10 23:00:03 +01:00
Max Kellermann
b330aa8dd5 db/upnp: remove unnecessary empty string checks from CharacterData() 2014-01-10 22:59:46 +01:00
Max Kellermann
1b8053a618 db/upnp/Directory: simplify checkobjok() 2014-01-10 22:59:28 +01:00
Max Kellermann
70e5ab3fde db/upnp/Directory: don't log unknown items 2014-01-10 22:59:16 +01:00
Max Kellermann
f4490f6918 db/upnp/Directory: eliminate the "attributes" std::map
Look up attributes in the "atts" array.  Reduce bloat.
2014-01-10 22:59:01 +01:00
Max Kellermann
dadd987bf4 db/upnp/Directory: move "res" attributes to array
Reduce bloat.
2014-01-10 22:58:37 +01:00
Max Kellermann
a1ced29279 db/upnp: use nullptr-terminated array
Reduce bloat.
2014-01-10 22:58:23 +01:00
Max Kellermann
791d6c1336 db/upnp/Directory: eliminate struct StackEl, use std::string
Reduces bloat.
2014-01-10 22:57:57 +01:00
Max Kellermann
10abb07960 db/upnp/Directory: make "attributes" a local variable
We only need it inside StartElement().  Reduces bloat.
2014-01-10 22:57:46 +01:00
Max Kellermann
040a5ddad5 db/upnp/Directory: move "res" tag handler to StartElement()
No need to handle this in EndElement() - in StartElement(), we already
have all we need.
2014-01-10 22:57:22 +01:00
Max Kellermann
e7eb04954d db/upnp/Directory: don't use std::map to parse upnp:class
Reduce excessive bloat.
2014-01-10 22:57:16 +01:00
Max Kellermann
09b00fa4e3 db/upnp/Object: use strictly-typed enums
At the same time, rename the enum types and the class attributes, and
add an "UNKNOWN" type/class.  The latter avoids the "-1" hack.
2014-01-10 22:56:52 +01:00
Max Kellermann
74842fd6d4 db/upnp: getprop() returns const char *
Return the return value, instead returning it in a reference
parameter.  Reduces bloat by reducing unnecessary std::string usage.
2014-01-10 22:56:45 +01:00
Max Kellermann
f23b47ba17 Expat: attributes come in name/value pairs (bug fix)
I wrongfully assumed that each array element is a name and a value
concatenated.
2014-01-10 22:56:28 +01:00
Max Kellermann
15eedfbb12 db/upnp: don't set mtime, start_ms, end_ms
Not necessary or useful.
2014-01-10 09:01:28 +01:00
Max Kellermann
cfc25e08dc db/upnp: use TagTable in upnpItemToSong()
Reduces bloat by eliminating one std::map.
2014-01-10 08:57:31 +01:00
Jean-Francois Dockes
406452f019 UPnP database plugin
[mk: renamed source files, applied coding style, reduced bloat, using
MPD's threading library, using MPD's error reporting and logging
library and refactoring, fixed lots of bugs]
2014-01-09 20:56:00 +01:00
Max Kellermann
12b139beaf ExpatParser: add Parse() overload with buffer 2014-01-09 20:56:00 +01:00
Max Kellermann
2ed1c22227 ExpatParser: add helper class CommonExpatParser 2014-01-09 20:56:00 +01:00
Max Kellermann
eb23ef1747 event/Loop: allow AddTimer() after Run() has returned
Kludge for libavahi-client quirk.
2014-01-09 20:56:00 +01:00
Max Kellermann
970b10d01b tag/TagTable: add lookup TagType -> name 2014-01-09 19:01:03 +01:00
Max Kellermann
61b938d6fa event/Loop: allow scheduling events before Run()
Add the debug-only flag "virgin" which gets checked by assert()
calls.  Fixes assertion failures when using zeroconf/avahi.
2014-01-09 17:52:55 +01:00
Max Kellermann
0c34555b02 Directory: remove method Free() 2014-01-09 13:21:56 +01:00
Max Kellermann
83a988e2e4 db/proxy: allocate Directory instance on the stack 2014-01-09 13:21:09 +01:00
Max Kellermann
91efe1cb5a Directory: convert to fixed-size struct
Using a variable-size struct with embedded string is not worth the
trouble here.  There are not so many Directory objects.
2014-01-09 13:14:14 +01:00
Max Kellermann
735241f049 Timer: remove unused method Synchronize() 2014-01-09 12:56:57 +01:00
Max Kellermann
dd82370a80 playlist/{asx,rss,xspf}: use Expat instead of GLib to parse XML 2014-01-09 12:19:52 +01:00
Max Kellermann
dab052e53d playlist/asx: make variables more local 2014-01-09 12:18:13 +01:00
Max Kellermann
322b061632 DetachedSong: fork of struct Song
From now on, struct Song will be used by the database only, and
DetachedSong will be used by everybody else.  DetachedSong is easier
to use, but Song has lower overhead.
2014-01-09 09:05:58 +01:00
Max Kellermann
8f9ba96c59 SongUpdate: move code to handle_lsinfo()
Don't create a temporary Song object in handle_lsinfo().  Instead,
print all tags while parsing the remote file.
2014-01-08 23:35:37 +01:00
Max Kellermann
10406c73b3 SongSave: make variables more local 2014-01-08 23:10:24 +01:00
Max Kellermann
139122c57f Merge branch 'v0.18.x' 2014-01-08 22:14:12 +01:00
Max Kellermann
fdd76b3461 decoder/faad: fix memory leak 2014-01-08 22:11:00 +01:00
Max Kellermann
e490e5d0ab playlist/pls: don't free stack buffer 2014-01-08 19:50:44 +01:00
Max Kellermann
3b568b0943 playlist/pls: make variables more local 2014-01-08 19:50:10 +01:00
Max Kellermann
b2e1b38864 playlist/pls: convert "while" loop to "for" loop 2014-01-08 19:50:05 +01:00
Max Kellermann
5c6fe97b35 playlist/pls: simplify error handler
Don't pass a GError** to g_key_file_get_X().  We don't need to dispose
something we didn't request in the first place.
2014-01-08 19:49:34 +01:00
Max Kellermann
2071070f39 DespotifyUtils: return Tag, not pointer 2014-01-08 19:49:27 +01:00
Max Kellermann
89a78a5f3c DespotifyUtils: pass const ds_track reference 2014-01-08 19:49:21 +01:00
Max Kellermann
bc23a6bb05 tag/TagBuilder: overload Commit() returning a Tag object 2014-01-08 19:49:08 +01:00
Max Kellermann
ac1983eae3 tag/TagBuilder: rename Commit() to CommitNew() 2014-01-08 19:48:55 +01:00
Steven O'Brien
33c5fc95b4 input/AlsaInputPlugin: remove unnecessary alsa s/w param setting to fix high CPU load issue 2014-01-08 14:00:42 +01:00
Max Kellermann
6a953394f4 SongSticker: use Song references 2014-01-08 00:41:08 +01:00
Max Kellermann
c152a88ff6 PlayerThread: use Song references 2014-01-08 00:36:59 +01:00
Max Kellermann
cbf57e7421 DecoderThread: use Song references 2014-01-08 00:35:28 +01:00
Max Kellermann
27ca0db7a6 util/Alloc: new library replacing GLib's g_malloc() 2014-01-07 23:35:18 +01:00
Max Kellermann
49f34fbf68 DecoderBuffer: use NewVarSize() 2014-01-07 23:31:26 +01:00
Max Kellermann
fe6094a822 tag/TagPool: use NewVarSize() to allocate TagPoolSlot 2014-01-07 23:24:59 +01:00
Max Kellermann
8a30c7992d tag/TagPool: rename struct slot to TagPoolSlot 2014-01-07 23:12:24 +01:00
Max Kellermann
70eb9335bd tag/TagPool: use gcc_packed instead of mpd_packed
By accident, this declared a global variable instead of adding the
"packed" attribute.
2014-01-07 23:11:00 +01:00
Max Kellermann
da80f91e1c Directory: make some code generic, move to VarSize.hxx 2014-01-07 23:10:56 +01:00
Max Kellermann
cc60d193ce Directory: use g_malloc() instead of g_malloc0()
Explicit attribute initialization.
2014-01-07 23:10:56 +01:00
Max Kellermann
0f99410ba1 playlist/soundcloud: parse URI without copying it 2014-01-07 10:21:42 +01:00
Max Kellermann
442dadd6fe playlist/soundcloud: change scheme check to assertion
The MPD core takes care for checking the scheme.
2014-01-07 09:40:31 +01:00
Max Kellermann
da9dd58f34 playlist/soundcloud: eliminate nullptr checks before g_free() 2014-01-07 09:27:50 +01:00
Max Kellermann
bd01d80ffc pcm/Utils: remove unused function pcm_end_pointer() 2014-01-07 00:46:47 +01:00
Max Kellermann
7eda72d440 pcm/Volume: use number of samples instead of end pointer 2014-01-07 00:42:02 +01:00
Max Kellermann
c75339edcc pcm/Format: change parameters/return values to ConstBuffer 2014-01-06 23:08:49 +01:00
Max Kellermann
b0b7244b3a pcm/Format: use number of samples instead of end pointer 2014-01-06 22:42:33 +01:00
Max Kellermann
a9e849ff4f DecoderBuffer: _read() returns ConstBuffer object 2014-01-06 22:17:30 +01:00
Max Kellermann
4c95a4d7c6 DecoderBuffer: add "pure" attributes 2014-01-06 22:16:56 +01:00
Max Kellermann
eac9fabd48 DecoderBuffer: add method _clear() 2014-01-06 21:59:43 +01:00
Max Kellermann
e2a08fa824 decoder/faad: make variables more local 2014-01-06 21:57:40 +01:00
Max Kellermann
d403749d09 decoder/faad: eliminate local variable "ret" 2014-01-06 21:57:40 +01:00
Max Kellermann
582c2105a9 event/Loop: cancel the WakeFD monitor in destructor 2014-01-06 21:57:40 +01:00
Steven O'Brien
f39a34ccfa input/AlsaInputPlugin.cxx: use I/O thread to poll for available data
[mk: modified to use MultiSocketMonitor instead of SocketMonitor]
2014-01-06 18:27:44 +01:00
Max Kellermann
08f5b9f1f9 event/MultiSocketMonitor: add method ClearSocketList() 2014-01-06 18:27:26 +01:00
Max Kellermann
793962c5b8 event/SocketMonitor: don't close the socket automatically
Users now have to call Close() explicitly.  This simplifies using the
class, as most users have automatic socket management already, and
Steal() had to be used often.
2014-01-06 18:26:55 +01:00
Max Kellermann
0d20130d07 util/Cast: new utility library 2014-01-06 18:21:45 +01:00
Max Kellermann
617090cfda event/IdleMonitor: cancel in destructor only if active
Debug-mode workaround for bogus assertion failure.
2014-01-06 18:21:45 +01:00
Max Kellermann
a9e604d51d event/MultiSocketMonitor: API documentation 2014-01-06 08:59:27 +01:00
Max Kellermann
e599b86424 event/Loop: try to avoid the WakeFD when adding DeferredMonitor
Add a flag that indicates whether the EventLoop is currently "busy".
As long as that flag is set, it does not need to be woken up - we can
simply add the DeferredMonitor to the list, and it will be caught by
EventLoop very soon.  This eliminates nearly all of the
DeferredMonitor overhead when compared to IdleMonitor, rendering
IdleMonitor mostly obsolete.
2014-01-05 02:15:34 +01:00
Max Kellermann
da9e584921 event/Loop: combine multiple WakeFD::Write() calls
Reduce DeferredMonitor overhead.
2014-01-05 02:15:10 +01:00