- 08 Oct, 2008 7 commits
-
-
Max Kellermann authored
Again, a data type which can be forward-declared.
-
Max Kellermann authored
The struct can be forward-declared by other headers, which relaxes the header dependencies.
-
Max Kellermann authored
exploreDirectory() duplicates some code in updateDirectory(). Merge both functions, and use directory_is_empty() to determine whether update or explore mode should be used.
-
Max Kellermann authored
directory_is_empty() is a tiny inline function which determine if a directory has any child objects (sub directories or songs).
-
Max Kellermann authored
The source directory.c mixes several libraries: directory object management, database management and database update, resulting in a 1000+ line monster. Move the whole database update code to update.c.
-
Max Kellermann authored
Having all functions as static (non-inline) functions generates GCC warnings, and duplicates binary code across several object files. Most of dirvec's methods are too complex for becoming inline functions. Move them all to dirvec.c and publish the prototypes in dirvec.h.
-
Max Kellermann authored
pthread_cond_wait() may wake up spuriously. To prevent superfluous state checks, loop until the "pending" flag becomes true. Removed the dangerous assertion.
-
- 07 Oct, 2008 11 commits
-
-
Max Kellermann authored
Somehow I must have missed this in commit 22e40b61.
-
Eric Wong authored
oops :x
-
Eric Wong authored
This makes the update code thread-safe and doesn't penalize the playlist code by complicating it with complicated and error-prone locks (and the associated overhead, not everybody has a thread-implementation as good as NPTL). The update task blocks during the delete; but the update task is a slow task anyways so we can block w/o people caring too much. This was also our only freeSong call site, so remove that function. Note that deleting entire directories is not fully thread-safe, yet; as their traversals are not yet locked.
-
Eric Wong authored
Get rid of songvec_write so we can enforce proper locking
-
Max Kellermann authored
songvec_for_each() has locking, use it instead of manually iterating over the songvec items.
-
Max Kellermann authored
Pass const songvec pointers to songvec_find() and songvec_for_each().
-
Eric Wong authored
Being consistent with most UNIX functions...
-
Eric Wong authored
Only one lock is used for all songvec traversals since they're rarely changed. Also, minimize lock time and release it before calling iterator functions since they may block (updateSongInfo => stat/open/seek/read). This lock only protects songvecs (and all of them) during traversals; not the individual song structures themselves.
-
Eric Wong authored
This is so we can more consistently deal with locking needed for thread-safety in iterator functions.
-
Eric Wong authored
This make argument order more consistent for iterators. Additionally, these now return ssize_t results for error checking.
-
Eric Wong authored
song objects cannot exist without a path or URL
-
- 06 Oct, 2008 15 commits
-
-
Eric Wong authored
* Add missing headers in Makefile.am * remove mp4ff.dsp (Win32 crap) * Add scripts, m4, bs, autogen.sh to allow for hotfixes by the SCM-challenged. (downloading the source via git is NOT a lightweight operation for everybody).
-
Eric Wong authored
This is needed for people that don't use any of the following: JACK, ALSA, libmikmod, Shout.
-
Eric Wong authored
These patterns have been sitting in my private .git/info/exclude files since 2005 because we used to use SVN.
-
Eric Wong authored
We already know if a song is a URL or not based on whether it has parentDir defined or not. Hopefully one day in the future we can drop HTTP support from MPD entirely when an HTTP filesystem comes along and we can access streams via open(2).
-
Max Kellermann authored
The "packed" attribute may have negative side effects on performance. Remove the "packed" attribute, and increase the size of "song.url" to a multiple of the machine word size.
-
Eric Wong authored
Reduce the number of allocations we make, so there's less pressure on the allocator and less overhead to keep track of the allocations in.
-
Eric Wong authored
It didn't save us any lines of code nor did it do anything useful since we would overwrite everything anyways.
-
Eric Wong authored
There's no reason to scan the playlist for a song we just allocated.
-
Eric Wong authored
This got broken when listHandlerFunc was removed. Since we no longer need it and it's confusing, remove processCommandInternal and just use process_command.
-
Eric Wong authored
Instead of allocating a new one, just reuse an existing one if one is found when rereading the DB. This is a small makes the previous commit work on subdirectories of the root music directory. [1] "song: better handling of existing songs when rereading DB"
-
Eric Wong authored
avoid some redundant clearing logic as well, since the tag is getting freed.
-
Eric Wong authored
commands should really not behave differently if they're issued inside a command list or not; so stop having special handler functions to deal with them. "update" was the only command that used this functionality and I changed that in the last commit to serialize access.
-
Eric Wong authored
Now the "update" command can be issued multiple times regardless of whether the client is in list mode or not. We serialize the update tasks to prevent updates from trampling over each other and will spawn another update task once the current one is finished updating and reaped. Right now we cap the queue size to 32 which is probably enough (I bet most people usually run update with no argument anyways); but we can make it grow/shrink dynamically if needed. There'll still be a hard-coded limit to prevent DoS attacks, though.
-
Eric Wong authored
It'll be easier to keep track of what code runs in what task/thread this way.
-
Eric Wong authored
Instead of relying on the shortname, just pass the song pointer to prevent redundant lookups during deletes.
-
- 29 Sep, 2008 7 commits
-
-
Max Kellermann authored
Add support for 24 bit PCM samples to all functions. Note that pcm_convertAudioFormat() converts 24 bit samples to 16 bit; to preserve full quality, support for "real" 24 bit conversion should be added.
-
Max Kellermann authored
Moved code into separate bit specific functions: - pcm_volumeChange() -> pcm_volume_change_X() - pcm_add() -> pcm_add_X() - pcm_convertTo16bit() -> pcm_convert_8_to_16()
-
Max Kellermann authored
pcm_mix() might overflow the destination buffer if it is smaller than the second buffer. This is ok because the physical buffer size passed by cross_fade_apply() is always big enough, but clutters pcm_mix() with complicated length checks and contains a dangerous buffer overflow pitfall. Simplify pcm_mix()/pcm_add() and pass only the smaller buffer size; let cross_fade_apply() do the memcpy().
-
Max Kellermann authored
pause() puts the audio output into pause mode: if supported, it may perform a special action, which keeps the device open, but does not play anything. Output plugins like "shout" might want to play silence during pause, so their clients won't be disconnected. Plugins which do not support pausing will simply be closed, and have to be reopened when unpaused. This pach includes an implementation for the shout plugin, which sends silence chunks.
-
Max Kellermann authored
The function audio_output_is_pending() returns whether there is a pending command. This is useful for output plugins as a break condition for longer loops.
-
Max Kellermann authored
The old struct initializers are error prone and don't allow moving elements around. Since we are going to overhaul some of the APIs soon, it's easier to have all implementations use C99 initializers.
-
Max Kellermann authored
Why have a "_func" prefix on all method names? Also don't typedef the methods, there is no advantage in that.
-