Max Kellermann
e569f82dd3
db/upnp: merge duplicate nullptr check
2014-01-18 14:44:06 +01:00
Max Kellermann
1a4940bbda
db/upnp: free IXML_Document *request manually
2014-01-18 14:38:52 +01:00
Max Kellermann
22dd3c8048
db/upnp/Device: move code to method Parse()
...
Forward the Error to the caller.
2014-01-18 14:29:31 +01:00
Max Kellermann
04b7648e00
db/upnp/Device: use ContentDirectoryDescriptor's move operator
...
Reduce bloat.
2014-01-18 14:26:24 +01:00
Max Kellermann
be0759d465
db/upnp/Discovery: don't copy XML to std::string
...
Pass "const char *" to Expat.
2014-01-18 14:24:38 +01:00
Max Kellermann
339d939873
db/upnp/Discovery: fix memory leak
2014-01-18 14:03:18 +01:00
Max Kellermann
c1950e40e6
db/upnp: remove unused typedef DevServIt
2014-01-18 13:42:54 +01:00
Max Kellermann
ad76bad8fd
db/upnp: use move operator to assign XML CDATA
...
Reduce runtime bloat.
2014-01-18 13:39:31 +01:00
Max Kellermann
55737e4ff6
db/upnp/Util: trimstring() constructs string from buffer
...
Reduce overhead by omitting the part of the buffer that consists only
of whitespace.
2014-01-18 13:36:50 +01:00
Max Kellermann
f3b4ddee6c
db/upnp/Discovery: free the response body
...
Memory leak.
2014-01-18 13:08:48 +01:00
Max Kellermann
758b504cf3
db/upnp/Discovery: don't copy the response body
...
Bloat.
2014-01-18 13:07:42 +01:00
Max Kellermann
416f7c2600
db/upnp: don't hold mutex while downloading device description
...
Must not perform blocking I/O while holding a mutex.
2014-01-18 13:04:01 +01:00
Max Kellermann
b9f02f22c4
db/upnp: don't use WorkQueue for _ADVERTISEMENT_BYEBYE
...
Remove the ContentDirectoryDescriptor right away. Reduces bloat.
2014-01-18 12:56:35 +01:00
Max Kellermann
b635610409
db/upnp: include cleanup
2014-01-18 12:51:25 +01:00
Max Kellermann
d4d4d6217f
db/upnp: don't use LazyDatabase
...
Now that MPD forks early, this workaround is obsolete.
2014-01-18 12:48:28 +01:00
Max Kellermann
be47320a05
Daemon: fork as early as possible
...
Keep the parent process around until MPD has finished initializing.
This is important for libraries that are allergic to fork(), such as
libupnp.
2014-01-18 12:42:30 +01:00
Max Kellermann
9f3ce7551a
PidFile: open in write-only mode
2014-01-18 12:42:12 +01:00
Max Kellermann
5f3b79e21d
Daemon: move code to class PidFile
2014-01-18 12:10:20 +01:00
Max Kellermann
56c12bd1ea
Daemon: don't use daemon(), always require fork()
...
Prepare for more advanced daemonization code, which will not work with
daemon(). Let's just require fork(). Everybody who supports daemon()
also supports fork().
2014-01-18 11:46:28 +01:00
Max Kellermann
3a6da7c594
Main: make variables more local
2014-01-18 11:34:13 +01:00
Max Kellermann
9909a80d6a
Main: eliminate variable "success"
2014-01-18 11:20:20 +01:00
Max Kellermann
a52cae1dba
pcm/Volume: make DSD a no-op
...
Kludge to work around DSD playback failure because the
ReplayGainFilterPlugin is always in the filter chain.
2014-01-17 23:57:30 +01:00
Max Kellermann
61b01f82ef
Mapper: add function map_song_detach()
...
Make the DetachedSong(Song) conversion constructor private. Everybody
should use map_song_detach() which will take over more
responsibilities soon.
2014-01-17 23:51:14 +01:00
Max Kellermann
75b847132a
QueueSave: use DatabaseDetachSong()
2014-01-17 23:49:53 +01:00
Max Kellermann
32ec672311
DatabaseSong: new library merging duplicate code
2014-01-17 22:58:27 +01:00
Max Kellermann
e2812f722d
db/upnp/Discovery: move callbacks and data structures into class
...
Eliminate global variables.
2014-01-17 10:13:04 +01:00
Max Kellermann
aa64a5328e
db/upnp: split cluCallback()
2014-01-17 09:46:51 +01:00
Max Kellermann
59510f509a
db/upnp: add local reference variables
...
Prepare to refactor some code.
2014-01-17 00:17:20 +01:00
Max Kellermann
a35c7bc81a
db/upnp: move the LibUPnP instance to class UpnpDatabase
...
Delete the object when closing the database.
2014-01-16 09:30:24 +01:00
Max Kellermann
02769929b3
db/upnp: remove useless static Mutex
2014-01-16 09:29:11 +01:00
Max Kellermann
1a09003a6e
db/upnp: move the UPnPDeviceDirectory instance to class UpnpDatabase
...
Delete the object when closing the database.
2014-01-16 09:08:04 +01:00
Max Kellermann
a827714823
db/upnp: don't initialize attributes to nullptr
...
Not necessary, these are not used.
2014-01-16 09:07:52 +01:00
Max Kellermann
8f9e76ca42
db/upnp: remove redundant m_root nullptr checks
2014-01-16 08:51:39 +01:00
Max Kellermann
478ace984a
db/upnp/WorkQueue: use emplace() and std::move()
2014-01-16 08:46:41 +01:00
Max Kellermann
028fd268b8
db/upnp/WorkQueue: simplify start()
2014-01-16 08:43:57 +01:00
Max Kellermann
876a095166
Directory: initialize "mtime" and "have_stat"
2014-01-15 18:53:53 +01:00
Max Kellermann
14c3ff58a4
db/upnp/WorkQueue: fix pthread_t[] allocation size
...
Was using the wrong variable.
2014-01-15 18:51:10 +01:00
Max Kellermann
2819b302c3
db/upnp/Object: remove obsolete attribute "m_title"
2014-01-15 18:36:01 +01:00
Max Kellermann
9fb82f9687
DetachedSong: add method Update()
...
Don't create an intermediate Song instance when all we want is a
DetachedSong.
2014-01-15 12:05:44 +01:00
Max Kellermann
df80deb070
DetachedSong: remove misplaced std::move()
2014-01-15 11:52:17 +01:00
Max Kellermann
5fb72d7c8f
Merge branch 'v0.18.x'
2014-01-15 11:47:49 +01:00
Max Kellermann
313d1d5d83
decoder/ffmpeg: support libav v10_alpha1
2014-01-15 11:33:18 +01:00
Max Kellermann
b7d6133593
decoder/ffmpeg: include cleanup
2014-01-15 11:31:51 +01:00
Max Kellermann
5b6bb114ad
decoder/ffmpeg: check for av_samples_get_buffer_size() errors
...
Fixes potential nullptr dereference.
2014-01-15 11:25:58 +01:00
Max Kellermann
56f082c9d4
util/PeakBuffer: fix nullptr dereference when peak_size==0
2014-01-15 11:24:29 +01:00
Max Kellermann
a1b798e555
SongFilter, TagConfig: cast TAG_NUM_OF_ITEM_TYPES to integer
...
Fixes clang warning.
2014-01-15 11:23:41 +01:00
Max Kellermann
c91e08fbfd
OutputAPI: fix typo in include guard
2014-01-15 11:22:59 +01:00
Max Kellermann
f1ca17f6a1
decoder/ffmpeg: check for av_samples_get_buffer_size() errors
...
Fixes potential nullptr dereference.
2014-01-14 23:16:07 +01:00
Max Kellermann
fe7cda57e4
util/PeakBuffer: fix nullptr dereference when peak_size==0
2014-01-14 23:07:04 +01:00
Max Kellermann
a3f9abcbd1
SongFilter, TagConfig: cast TAG_NUM_OF_ITEM_TYPES to integer
...
Fixes clang warning.
2014-01-14 22:40:07 +01:00
Max Kellermann
77041e2cd2
input/alsa: fix memory leak
...
Don't duplicate the MIME type when it gets passed to a std::string.
2014-01-14 22:38:30 +01:00
Max Kellermann
14235f171b
decoder/sidplay: use free() instead of g_free()
...
This pointer was allocated by libc, not by GLib.
2014-01-14 22:35:07 +01:00
Max Kellermann
1f90e3ce7f
playlist/extm3u: allocate Tag instance on the stack
...
Automate the life cycle, making the code safer.
2014-01-14 22:33:31 +01:00
Max Kellermann
676d8bb624
db/upnp/Object: add attribute "tag"
...
Replaces "m_title" and "m_props". More bloat removed.
2014-01-14 22:33:18 +01:00
Max Kellermann
4bcaf5d306
db/upnp: move upnp_tags to Tags.cxx
2014-01-14 22:33:18 +01:00
Max Kellermann
70d3ad3ca1
OutputAPI: fix typo in include guard
2014-01-14 22:33:18 +01:00
Max Kellermann
46debfb8b5
db/upnp/Object: disallow copying, always move
...
Reduce bloat.
2014-01-14 14:11:07 +01:00
Max Kellermann
9a4b572d34
db/upnp: getTagValue() returns string pointer
...
Reduce bloat.
2014-01-14 13:42:08 +01:00
Max Kellermann
ddc75cc46b
db/upnp/Directory: merge m_containers and m_items
...
There is no use in duplicating these containers. It only means that
we have to search both, duplicating the code.
2014-01-14 13:37:21 +01:00
Max Kellermann
dafd0bc49a
db/upnp: pass const reference to getTagValue()
2014-01-14 13:37:05 +01:00
Max Kellermann
2cb912e4f4
db/upnp: Namei() returns error when no object was found
...
Don't fail silently.
2014-01-14 12:34:49 +01:00
Max Kellermann
91a513e87d
db/upnp/Directory: eliminate one std::string copy with std::move()
2014-01-14 12:27:21 +01:00
Max Kellermann
efdb41f2a6
db/upnp/Object: add attribute "name"
...
Call titleToPathElt() only once for each object.
2014-01-14 12:22:37 +01:00
Max Kellermann
26b850c15c
db/upnp: use std::replace() in titleToPath()
2014-01-14 12:15:21 +01:00
Max Kellermann
9941735ae7
db/upnp: pass std::string to titleToPathElt()
2014-01-14 12:03:36 +01:00
Max Kellermann
29e5dc4413
db/upnp: don't sanitize the title tag
...
We need this only for path names.
2014-01-14 12:00:58 +01:00
Max Kellermann
3a660c5527
db/upnp/WorkQueue: remove unused attributes "high", "low"
2014-01-14 11:49:42 +01:00
Max Kellermann
738991494a
db/upnp/WorkQueue: initialize "ok" to false, eliminate redundant checks
2014-01-14 11:48:19 +01:00
Max Kellermann
ee4c3ff1b8
db/upnp/WorkQueue: remove IsOK() check from put()
...
Not necessary, not worth the check.
2014-01-14 11:46:18 +01:00
Max Kellermann
60486bcc46
db/upnp/WorkQueue: remove redundant n_workers_exited check from IsOK()
2014-01-14 11:43:18 +01:00
Max Kellermann
79eed5182e
db/upnp/WorkQueue: include cleanup
2014-01-14 11:41:28 +01:00
Max Kellermann
5de0f3f36a
db/upnp/WorkQueue: remove unnecessary "waiting" attributes
2014-01-14 11:38:48 +01:00
Max Kellermann
9f316e11bd
db/upnp/WorkQueue: remove unused method waitIdle()
...
Contrary to setTerminateAndWait()'s documentation, the method does
wait for worker threads to exit via pthread_join().
2014-01-14 11:31:49 +01:00
Max Kellermann
c6d8f6da70
db/upnp/WorkQueue: use array instead of std::list
...
Reduce bloat further.
2014-01-14 11:23:13 +01:00
Max Kellermann
73fd98b82e
db/upnp/WorkQueue: use std::list instead of std::unordered_map
...
Reduce bloat.
2014-01-14 11:11:08 +01:00
Max Kellermann
6cb725391d
db/upnp/WorkQueue: rename attributes
2014-01-14 11:07:06 +01:00
Max Kellermann
c13facdaca
db/upnp/WorkQueue: pass reference to take()
2014-01-14 11:07:00 +01:00
Max Kellermann
e259474362
db/upnp/WorkQueue: remove unused method qsize()
2014-01-14 11:06:55 +01:00
Max Kellermann
7740855a78
db/upnp/WorkQueue: remove unused "szp" parameter from take()
2014-01-14 11:06:43 +01:00
Max Kellermann
d605170f9f
db/upnp/WorkQueue: remove unused statistics
2014-01-14 10:51:33 +01:00
Max Kellermann
4734af747b
OutputThread: use real-time priority
2014-01-14 09:59:04 +01:00
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