Max Kellermann
638f95aa15
sticker: added song sticker library
...
This is a wrapper for the backend sticker library. It provides
several glue functions which take a song object instead of type/uri.
2009-01-19 18:54:04 +01:00
Max Kellermann
145ab84d51
sticker: new library for storing dynamic information about songs
...
"Stickers" are pieces of information attached to existing MPD objects
(e.g. song files, directories, albums). Clients can create arbitrary
name/value pairs. MPD itself does not assume any special meaning in
them.
2009-01-19 18:51:57 +01:00
Max Kellermann
fbed96dcea
flac: include config.h
...
The plugin queries build-time configuration variables, and should
include config.h.
2009-01-19 09:54:47 +01:00
Max Kellermann
33e44fbde8
output: don't include conf.h from output_control.h
...
Minimize header dependencies.
2009-01-18 19:48:31 +01:00
Max Kellermann
65f2386b39
conf: added config_get_block_unsigned()
...
Eliminate some more getBlockParam() invocations.
2009-01-18 19:45:51 +01:00
Max Kellermann
a531a1e650
conf: added config_get_block_string()
...
This replaces lots of getBlockParam() invocations.
2009-01-18 19:37:27 +01:00
Max Kellermann
73e466cfef
jack: parse "ports" setting with g_strsplit()
...
Don't modify the configured string.
2009-01-18 19:24:14 +01:00
Max Kellermann
86f6233f46
jack: use audio_output_get_name()
...
Determine the audio output name with audio_output_get_name() instead
of obtaining the name from the configuration again.
2009-01-18 19:17:52 +01:00
Max Kellermann
70c6cc33f0
conf: removed parseConfigFilePath()
...
Use config_get_path() instead in mapper.c.
2009-01-18 18:59:10 +01:00
Max Kellermann
a0603d8897
mixer: don't check for NULL before g_free()
...
The g_free() function includes a NULL check. We don't have to do it
twice.
2009-01-18 18:55:51 +01:00
Max Kellermann
5ba43e4ac2
daemon: removed unused variable "userpwd"
...
This causes a segmentation fault...
2009-01-18 18:42:44 +01:00
Max Kellermann
9c93249412
daemon: pass "detach" flag to daemonize()
...
This way, we don't have to pass the full "Options" object to
daemonize().
2009-01-18 18:29:30 +01:00
Max Kellermann
bfcaecabbd
daemon: added daemonize_init(), daemonize_finish()
...
The constructor/destructor functions parse and free the configuration
properly. This way, we don't have to load the pid file path more than
once.
2009-01-18 18:29:27 +01:00
Max Kellermann
0dd2dfff9d
main: moved the save_state timer to state_file.c
...
The state_file library should manage its own regular saves.
2009-01-18 18:10:15 +01:00
Max Kellermann
84de45afba
state_file: added state_file_init() and state_file_finish()
...
The constructor/destructor interface should hide the functions
read_state_file() and write_state_file().
2009-01-18 18:09:50 +01:00
Max Kellermann
1482b22351
state_file: include cleanup
2009-01-18 17:54:50 +01:00
Max Kellermann
9c6b2a32f5
conf: added config_get_path()
...
config_get_path() is an simpler interface than parseConfigFilePath().
2009-01-18 17:54:46 +01:00
Max Kellermann
a3f03f3ccd
removed playerData.c
...
Fetch the configuration variables buffered_chunks and
buffered_before_play just when they are needed.
2009-01-18 17:32:43 +01:00
Max Kellermann
90b34f8e6f
main: moved code to daemon.c
...
Moved changeToUser(), cleanUpPidFile(), killFromPidFile() to
daemon.c. These are daemonization functions.
2009-01-18 17:15:34 +01:00
Max Kellermann
1f0dfb4407
mapper: make the music_directory optional
...
Without a music_directory, MPD is an excellent streaming client.
2009-01-18 16:56:07 +01:00
Max Kellermann
9933144de7
mapper: make the playlist directory optional
2009-01-18 16:15:45 +01:00
Max Kellermann
c2cc3b4923
database: pass database file name to db_init()
...
Don't include conf.h in database.c.
2009-01-18 16:09:01 +01:00
Max Kellermann
004dfddca3
stats: use GTimer instead of time(NULL)
...
time(NULL) shows the wrong results when the machine's clock is
changed.
2009-01-18 15:40:53 +01:00
Max Kellermann
14ca99b224
stats: use one db_walk() to obtain stats
...
Don't use dbUtils.h functions. This reduces 4 full database walks to
just one.
2009-01-18 15:40:50 +01:00
Max Kellermann
91fb2a29de
stats: added num_artists, num_albums
...
Don't recalculate the number of artists and albums each time a client
requests statistics. Calculate that once in stats_update().
2009-01-18 15:40:28 +01:00
Max Kellermann
0d449d8df7
stats: no CamelCase
...
Renamed functions and types.
2009-01-18 15:22:26 +01:00
Max Kellermann
0b29a22c08
conf: replaced getConfigParamValue() with config_get_string()
...
Don't return a writable pointer.
2009-01-17 20:23:58 +01:00
Max Kellermann
7acc62366c
conf: replaced getBoolBlockParam() with config_get_block_bool()
...
No "force" parameter, pass a default value instead.
2009-01-17 20:23:56 +01:00
Max Kellermann
a1a97cc048
conf: use config_get_bool() instead of getBoolConfigParam()
2009-01-17 20:23:33 +01:00
Max Kellermann
4d472c265e
conf: no CamelCase, part I
...
Renamed functions, types, variables.
2009-01-17 20:23:27 +01:00
Max Kellermann
2bbf378dd8
song: skip archive check for non-musicdir files
...
If a song is not within the music directory ("file:///..."), it has no
"parent directory". The archive code nonetheless dereferences the
parent pointer, causing a segmentation fault. Check parent!=NULL.
2009-01-17 19:56:36 +01:00
Max Kellermann
7f3be96efa
decoder_api: always notify_wait() for free chunks
...
One of the previous patches made MPD consume 100% CPU in a busy wait:
when the music_pipe was full, it did not wait (with notify_wait()) for
free chunks, because a variable has a different meaning now. Always
pass "true" as the "wait" parameter.
2009-01-17 15:23:57 +01:00
Max Kellermann
5395f5f6b3
moved fallback APE/ID3 tag loader to song.c
...
Some plugins used the APE or ID3 tag loader as a fallback when their
own methods of loading tags did not work. Move this code out of all
decoder plugins, into song_file_update().
2009-01-17 13:23:42 +01:00
Max Kellermann
43eefe9c41
decoder_api: pass const pointer to decoder_data()
2009-01-17 13:23:12 +01:00
Max Kellermann
356526457c
pcm_convert: return PCM buffer from pcm_convert()
...
Removed yet another superfluous buffer layer: return the PCM buffer
from pcm_convert() instead of copying PCM data into the
caller-supplied buffer.
2009-01-17 13:11:16 +01:00
Max Kellermann
e726e2a004
music_pipe: removed music_pipe_append()
...
The function is unused, since decoder_api() uses music_pipe_write() /
music_pipe_expand() now.
2009-01-17 13:11:11 +01:00
Max Kellermann
610e79500e
decoder_api: use music_pipe_write() instead of music_pipe_append()
...
Copy PCM data to the music_pipe_write() buffer, and apply replay gain
/ normalization to it, instead of manipulating the source buffer.
2009-01-17 13:11:10 +01:00
Max Kellermann
fd948571f8
music_pipe: added functions music_pipe_write() and music_pipe_expand()
...
This new API gives the caller a writable buffer to the music pipe
chunk. This may allow the caller to eliminate several buffer copies,
because it may manipulate the returned buffer, until it calls
music_pipe_expand().
2009-01-17 13:09:29 +01:00
Max Kellermann
d83eff80a5
oggvorbis: disable seeking on remote songs
...
When libvorbis knows that a song is seekable, it seeks around like
crazy in the file before starting to decode it. This is very
expensive on remote HTTP resources, and delays MPD for 10 or 20
seconds.
This patch disables seeking on remote songs, because the advantages of
quickly playing a song seem to weigh more than the theoretical ability
of seeking for most MPD users. If users feel this feature is needed,
we will make a configuration option for that.
2009-01-17 11:46:31 +01:00
Max Kellermann
da6f8c270a
decoder_api: added assertion on partial frames
...
Decoder plugins must not send partial frames.
2009-01-16 18:53:32 +01:00
Max Kellermann
953b258e5e
pcm_resample_fallback: corrected the sample calculation
...
Due to rounding errors, it was possible that the fallback resampler
returned partial frames.
2009-01-16 18:52:01 +01:00
Max Kellermann
285a741b27
playlist: don't store getBoolConfigParam() in a bool
...
getBoolConfigParam() returns an int. It is not possible to check for
CONF_BOOL_UNSET after it has been assigned to a bool; use a temporary
int value for that.
2009-01-16 17:11:18 +01:00
Max Kellermann
2a7d99702f
listen: explicitly include sys/socket.h
2009-01-16 17:11:18 +01:00
Max Kellermann
b19a8505f4
player_control: fix shadow warning with older gcc
...
Older gcc versions complained about shadowed parameters in prototypes.
2009-01-16 17:11:18 +01:00
Max Kellermann
106bfaa726
oss: evaluate the oss_open() return value properly
...
It returns bool, not int.
2009-01-16 17:11:18 +01:00
Max Kellermann
b12b5130c9
mixer: check param==NULL in the alsa and oss mixer code
...
When MPD starts without audio output configuration, the "param"
variable is NULL. This triggers a segmentation fault in both mixer
plugins.
2009-01-16 17:11:18 +01:00
Qball Cow
b533307d6f
Enable wav file streaming for ffmpeg input plugin
2009-01-16 17:11:16 +01:00
Rasmus Steinke
3e87e4f3ab
flac: map "Album Artist" to "AlbumArtist"
...
This patch allows mpd to recognise the albumartist tag in the way
foobar2000 and others write it to files.
2009-01-15 22:45:29 +01:00
Max Kellermann
9cc373d62d
flac: splitted flac_copy_vorbis_comment()
...
Splitted flac_copy_vorbis_comment() into flac_copy_comment() and
flac_copy_comment().
2009-01-15 22:45:28 +01:00
Max Kellermann
0dec3f787f
flac: moved code to flac_comment_value()
...
Simplify flac_copy_vorbis_comment() by moving the comment
identification code out.
2009-01-15 22:44:21 +01:00
Max Kellermann
f30adc3526
flac: always allocate tag object
...
Free the tag object when it turns out to be empty. This simplifies
several functions and APIs.
2009-01-15 22:43:39 +01:00
Max Kellermann
ccea365494
tag: added tag_is_defined()
...
tag_is_defined() checks whether there is any information in the tag
object.
2009-01-15 22:00:26 +01:00
Max Kellermann
15435b09af
flac: use bool instead of int
2009-01-15 19:57:57 +01:00
Max Kellermann
8307dd3e87
flac: removed "vorbis_comment_found" flag
...
Use tag_is_empty() instead.
2009-01-15 19:53:07 +01:00
Max Kellermann
86dc79293f
flac: no CamelCase
...
Renamed types, functions, variables.
2009-01-15 19:50:28 +01:00
Max Kellermann
a7461dc27d
input_curl: don't call input_curl_select() when already at EOF
...
Calling input_curl_select() after EOF has been reached causes an
assertion failure. This can happen if the HTTP response is empty.
Check c->eof before calling input_curl_select().
2009-01-15 16:16:57 +01:00
Max Kellermann
f1790fc8bf
input_curl: set "ready" flag on EOF
...
Set the "ready" flag for empty resources.
2009-01-15 16:16:55 +01:00
Max Kellermann
fa3899f7b0
input_curl: call curl_multi_info_read() in constructor
...
To check for early connect failures, call curl_multi_info_read() in
the constructor input_curl_open(). This fixes an assertion failure.
2009-01-15 16:16:53 +01:00
Max Kellermann
08e18f7070
input_curl: added fallback for g_queue_clear()
...
g_queue_clear() was introduced in GLib 2.14. Add a macro hack for
older GLib versions to emulate it.
2009-01-15 09:20:01 +01:00
Max Kellermann
29baf0c190
log, pcm_convert: added return statements after g_error()
...
gcc doesn't know that g_error() never returns. Work around the gcc
warning.
2009-01-15 09:17:06 +01:00
Max Kellermann
2151e2ea53
mapper: check if g_get_user_special_dir() is supported by GLib
...
g_get_user_special_dir() was introduced with GLib 2.14. Don't use it
in older versions.
2009-01-15 09:16:20 +01:00
Max Kellermann
6139174d81
pcm_convert: removed unused variable "dest_size"
...
dest_size is only used in an assertion. Remove its declaration and
move the formula into the assertion.
2009-01-15 08:35:58 +01:00
Max Kellermann
8fe867c71d
decoder_api: added G_GNUC_UNUSED attribute to decoder_initialized()
...
In NDEBUG, the parameter "decoder" is not used.
2009-01-15 08:33:32 +01:00
Max Kellermann
5232f05470
listen: don't compile ipv6Supported() if !HAVE_IPV6
...
The function ipv6Supported() is not used at all when IPv6 support was
disabled at compile time.
2009-01-15 08:33:32 +01:00
Rasmus Steinke
9b0ce18144
oggvorbis: map "Album Artist" to "AlbumArtist"
...
This patch allows mpd to recognise the albumartist tag in the way foobar2000
and others write it to files.
2009-01-15 06:51:58 +01:00
Max Kellermann
9e55a08d79
songvec: sort songs by disc and track number
...
Sorting songs by file name does not make much sense. Most of the
time, users want to add songs in track order to the playlist.
2009-01-15 00:22:30 +01:00
Max Kellermann
2fad578376
tag: added tag_get_value()
2009-01-15 00:21:08 +01:00
Max Kellermann
4847bbaad3
dirvec, songvec: sort using g_utf8_collate()
...
Path names in the directory and song structs are always encoded in
UTF-8. Don't use strcmp(), it cannot handle UTF-8 characters
properly. Use GLib's UTF-8 aware g_utf8_collate() function for that.
2009-01-15 00:09:18 +01:00
Antoine Beaupré
b7fe09fa52
shout: enlarge buffer size to 32 kB
...
I was having problems with shoutcast stream outputs before applying
the attached patch, which enlarges the shoutcast output
buffer. Ideally, this should be configurable, but this resolves the
issue for my needs.
2009-01-14 23:28:26 +01:00
Max Kellermann
283c2621f3
oggvorbis: use g_ascii_strncasecmp() instead of strncasecmp()
...
Don't depend on the daemon's locale settings. Comment names are
ASCII.
2009-01-14 23:23:05 +01:00
Max Kellermann
f353bf77ba
oggvorbis: moved tag look into vorbis_parse_comment()
...
vorbis_parse_comment() should be a function which converts one comment
to a tag item. It should do everything required to do the conversion,
including looping over all possible tag types.
2009-01-14 23:21:45 +01:00
Max Kellermann
69b033757f
oggvorbis: moved code to vorbis_copy_comment()
2009-01-14 23:15:14 +01:00
Max Kellermann
25cf333355
oggvorbis: use vorbis_comment_value() in vorbis_parse_comment()
...
Eliminate some duplicate code.
2009-01-14 23:09:36 +01:00
Max Kellermann
5a26c949bb
oggvorbis: always allocate a tag object
...
Always allocate a new tag object before parsing the vorbis comments;
free it when it turns out to be empty. This simplifies the code a
bit.
2009-01-14 23:09:31 +01:00
Max Kellermann
b5cadc9c04
oggvorbis: no CamelCase
...
Renamed functions and variables.
2009-01-14 23:09:02 +01:00
Max Kellermann
b8e06d414a
oggvorbis: use bool
...
Make ogg_parseCommentAddToTag() return bool instead of unsigned int.
2009-01-14 22:51:11 +01:00
Daniele Sluijters
ca42f01427
tag_id3: added support for the "album artist" tag
...
Read the id3 tags "TPE2" and "TSO2" into the "album artist" tag.
2009-01-14 22:38:55 +01:00
Jérôme Quelin
ae5517b0b3
allow ~/.mpd/mpd.conf as alternate config file
...
mpd uses some additional files to work, such as pid_file, state_file,
db_file, etc. when running mpd as non-root user, it is often that those
files end in ~/.mpd
in that case, we end up with 2 entries in a user's home, .mpdconf and
.mpd - which clutters homedirs.
this patch allows ~/.mpd/mpd.conf as an alternative to ~/.mpdconf,
allowing for a cleaner homedir
2009-01-14 14:31:55 +01:00
Max Kellermann
642b861526
song_save: don't fail on empty tag values
...
If a tag value is an empty string, the space after the colon was
removed by g_strchomp(). Fix this by removing the space check and
using g_strchug() on the return value.
2009-01-14 13:44:14 +01:00
Max Kellermann
3c6a85d8f7
song_save: return value pointer from matchesAnMpdTagItemKey()
...
The matchesAnMpdTagItemKey() API becomes more powerful and flexible if
the return value is the value pointer instead of a boolean. It also
removes (invalid and dangerous) assumptions about the string from its
caller.
2009-01-14 13:43:57 +01:00
Max Kellermann
7cc9ba45a9
song_save: itemType is "enum tag_type", not "int"
2009-01-14 13:38:47 +01:00
Max Kellermann
2c540ee8a4
playlist: safely search the playlist for deleted song
...
When a song file is deleted during database update, all pointers to it
must be removed from the playlist. The "for" loop in
deleteASongFromPlaylist() did not deal with multiple copies of the
deleted song properly, and left instances of the (to-be-invalidated)
pointer in. Fix this by reversing the loop.
2009-01-14 11:42:45 +01:00
Max Kellermann
2af1742fcf
tag: added core support for the "album artist" tag
...
Added TAG_ITEM_ALBUM_ARTIST.
With this patch, MPD should be able to read the (inofficial)
"ALBUMARTIST" Vorbis comment. Implementations in other decoder
plugins will follow soon.
2009-01-13 23:43:20 +01:00
Max Kellermann
1452717459
song_save: check for colon and space when loading a tag
...
matchesAnMpdTagItemKey() broke when two tag items had the same prefix,
because it did not check if the tag name ended after the prefix. Add
a check for the colon and the space after the tag name.
2009-01-13 23:43:16 +01:00
Joe Milbourn
45598d50e3
input_curl: honour http_proxy_* config directives
...
If http_proxy_{host, port, user, password} are provided in mpd.conf
they are not passed on to libcurl. As a result mpd cannot stream from
behind an http proxy.
The attached patch `http_proxy.patch` makes the relevant calls to
curl_easy_setopt(...) for all proxy configuration parameters, but is
only tested for host and port.
2009-01-13 22:57:05 +01:00
Max Kellermann
18cb34700e
daemon: don't check the setsid() return value
...
There is only one valid error condition for setsid(): when the current
process is already the process group leader. This is non-critical.
2009-01-13 21:45:44 +01:00
Max Kellermann
2532129755
daemon: don't fork twice to daemonize
...
To detach from the parent process, fork once and make the old process
exit. No need to do that twice.
2009-01-13 21:44:42 +01:00
Max Kellermann
d8fc8ca7ba
playlist: implement Fisher-Yates shuffle properly
...
MPD's shuffling algorithm was not implemented well: it considers songs
which were already swapped, making it somewhat non-random.
Fix the Fisher-Yates shuffle algorithm by passing the proper bounds to
the PRNG.
2009-01-13 21:25:19 +01:00
Max Kellermann
e7c7e652a3
input_curl: use select() to eliminate busy loop during connect
...
When decoder_run_song() (decoder_thread.c) waits for the input stream
to become ready, it did that in a busy loop. Add a select() call to
input_curl_buffer() during connect/handshake (i.e. before the first
chunk of body data was received), to let the CPU relax.
2009-01-13 19:30:34 +01:00
Max Kellermann
d82061b7ff
decoder_api: don't ignore DECODE_COMMAND_STOP
...
When the decoder thread is waiting for free chunks in the music pipe,
don't ignore the STOP command. Just return dc.command without further
checks.
2009-01-13 18:15:25 +01:00
Max Kellermann
9069a244a4
configure.ac: added the --enable-sqlite option
...
MPD will (optionall) use sqlite databases in the future. Add a
configure option to enable that. There is no code yet to really use
sqlite, so the practical use of this patch is limited.
2009-01-12 09:56:14 +01:00
Max Kellermann
52cf7953ff
Makefile.am: moved C/CPP/LDFLAGS up
2009-01-11 17:41:54 +01:00
Viliam Mateicka
d357f58542
removing mixer_reconfigure memmory leak, fixing configure of alsa and oss mixer (passing parameters)
2009-01-11 17:13:01 +01:00
Max Kellermann
983822ea52
command: restore the "playlistinfo -1" behavior
...
If a range is "-1", display the whole list. This behavior is
undocumented, but some clients rely on it.
2009-01-11 17:11:11 +01:00
Max Kellermann
63d9827c34
main: remove "save_state" timer event on exit
2009-01-10 18:55:43 +01:00
Max Kellermann
0366adddbd
client: remove "expire" event on exit
2009-01-10 18:55:39 +01:00
Max Kellermann
e3c6ad515d
event_pipe: remove the GLib source from the main context
...
Free memory before exiting.
2009-01-10 18:55:36 +01:00
Max Kellermann
ca5432a79b
listen: remove the socket source from the main context
...
Free memory before exiting.
2009-01-10 18:55:33 +01:00
Max Kellermann
d60cf67d19
listen: added struct listen_socket
...
Make the listen socket an object, allowing us to add more fields
later. Convert listenSockets into a simple linked list.
2009-01-10 18:55:29 +01:00
Max Kellermann
a673d6be98
main: deinitialize main_notify on exit
2009-01-10 18:55:28 +01:00
Viliam Mateicka
11c29cccb3
Introducing mixer api
...
This patch tryes to introduce pluggable mixer (struct mixer_plugin) along with some basic infrastructure (mixer_* functions). Instance of mixer (struct mixer) is used in
alsa and oss output plugin
2009-01-10 17:55:38 +01:00
Max Kellermann
8ebe7bfb25
playlist: pass unsigned integers to playlistInfo()
...
A song index cannot be negative. Also require the second parameter to
be valid.
2009-01-10 17:39:49 +01:00
Max Kellermann
b7c4b78846
playlist: exclude end of range
...
In a range "start:end", "end" itself should not be included. Use the
same semantics as other languages implementing ranges, e.g. Python.
2009-01-10 17:05:03 +01:00
Thomas Jansen
6f0781f039
command: playlistinfo now uses a range argument rather than just a song id
...
Loosely based on a patch provided by lesion in bug #1766 . The playlistinfo
command can now retrieve ranges of the playlist. The new argument indicates
which entry is the last one that will be displayed. The number of displayed
entries may be smaller than expected if the end of the playlist is reached.
Previous usage:
playlistinfo [start]
New usage:
playlistinfo [start[:end]]
2009-01-10 16:50:34 +01:00
Thomas Jansen
8ed3cf3e6b
command: add a parser for range arguments
...
A range argument looks like start[:end] and is used to specify the entries
of a list that should be returned (rather than the whole list).
2009-01-10 16:48:12 +01:00
Max Kellermann
5e93d3682f
added missing explicit config.h includes
2009-01-08 21:37:02 +01:00
Max Kellermann
1c2f24dfc6
mapper: use directory_is_root() instead of isRootDirectory()
2009-01-08 21:29:30 +01:00
Max Kellermann
f0b865b4ca
path: include cleanup
2009-01-08 21:29:29 +01:00
Max Kellermann
c232ea10ed
update: removed one more stack buffer
2009-01-08 21:29:21 +01:00
Max Kellermann
5ed5aa99ac
path: allocate buffer in fs_charset conversion functions
...
Don't use fixed static buffers. GLib allocates a new string for us
anyway, let's just return this one instead of copying it.
2009-01-08 21:20:46 +01:00
Max Kellermann
f0980283bc
update: include config.h, fix archive code
...
The archive code was disabled, because config.h was not included and
thus ENABLE_ARCHIVE was not defined.
2009-01-08 21:20:41 +01:00
Stepan Pologov
7a9a1e3e31
mapper: re-add character set conversion in map_uri_fs()
2009-01-08 17:29:08 +01:00
Max Kellermann
628866a065
update: save the database even if it is empty
...
Save an empty database, even if the music directory is empty.
2009-01-08 07:36:40 +01:00
Max Kellermann
bb08679a70
pcm_resample: use pcm_buffer (2/2)
...
Use the PCM buffer library for the libsamplerate output buffer.
2009-01-08 00:47:04 +01:00
Max Kellermann
2a83138913
pcm_resample: use pcm_buffer (1/2)
...
Return a temporary buffer from pcm_resample_*() and pcm_convert().
2009-01-08 00:46:38 +01:00
Max Kellermann
aab85577bf
pcm_channels: use pcm_buffer
...
Replace a "static" buffer with the PCM buffer library.
2009-01-07 23:56:35 +01:00
Max Kellermann
5fe7e3bc14
pcm_format: use the pcm_buffer library
...
Replace a "static" buffer with the PCM buffer library.
2009-01-07 23:56:34 +01:00
Max Kellermann
954c2b5a25
pcm_buffer: new library for temporary buffers
...
This library allocates temporary buffers for storing PCM conversion
results. It should replace all those "static" buffer variables which
are racy and never freed.
2009-01-07 23:56:30 +01:00
Max Kellermann
bf058f978a
output: join the output thread after sending the KILL command
...
Be sure that the output thread has quite before we start destructing
the output object.
2009-01-07 23:55:13 +01:00
Max Kellermann
405c102c17
output: deinitialize notify object
...
Free memory allocated by the notify object (GMutex, GCond) when it's
not used by the output object anymore.
2009-01-07 23:53:28 +01:00
Max Kellermann
97ae4a499a
mapper: don't allocate music_dir twice
2009-01-07 23:53:28 +01:00
Max Kellermann
7f34e9410e
pcm: added pcm_convert_deinit(), pcm_resample_deinit()
...
Free memory allocated by libsamplerate when the output or the decoder
is closed.
2009-01-07 22:20:30 +01:00
Max Kellermann
97b844ec72
pcm_volume: changed PCM_VOLUME_1 to 1024
...
1024 is 2^10, and allows gcc to use bit shift operations instead of
multiplication / division.
2009-01-07 21:40:35 +01:00
Max Kellermann
04a2138b33
pcm: pass void pointers to PCM functions
...
In generic PCM functions allowing all sample formats, pass a void
pointer instead of a char pointer.
2009-01-07 19:00:02 +01:00
Max Kellermann
bb01016400
Makefile.am: added mixer_api.h to mpd_headers
2009-01-07 18:55:26 +01:00
Max Kellermann
b40428b3fd
pcm_utils: moved conversion code to pcm_convert.c
...
All what's left in pcm_utils.h is the pcm_range() utility function,
which is only used internally by pcm_volume and pcm_mix.
2009-01-07 18:53:36 +01:00
Max Kellermann
8b19c74e8e
pcm_format: pass struct pcm_dither_24 to pcm_convert_to_16()
...
The function does not need the full pcm_convert_state struct.
2009-01-07 18:19:22 +01:00
Max Kellermann
df30a29391
pcm_utils: moved code to pcm_format.c
...
Moved all code which converts the sample format to a separate library.
2009-01-07 18:19:09 +01:00
Max Kellermann
6768581c41
pcm_volume: rename pcm_dither() to pcm_volume_dither()
2009-01-07 18:08:26 +01:00
Max Kellermann
b7b5e3f9c3
pcm_prng: renamed prng() to pcm_prng()
2009-01-07 18:07:19 +01:00
Max Kellermann
3fd1fa31ca
pcm_utils: moved code to pcm_mix.c
...
Moved the software mixing code (used by crossfading) to a separate
library.
2009-01-07 18:06:22 +01:00
Max Kellermann
9d0579996c
pcm_utils: moved code to pcm_volume.c
...
Moved the software volume code to a separate library.
2009-01-07 18:05:38 +01:00
Max Kellermann
e8c323ed7e
pcm_utils: export pcm_range()
...
We are going to split the pcm_utils.c library, and pcm_range() will be
useful for several sub libraries.
2009-01-07 18:03:53 +01:00
Max Kellermann
9cb76856c0
removed dlist.h
...
Get rid of the non-portable Linux list library, part III (final).
2009-01-07 16:31:47 +01:00
Max Kellermann
a4a8ac0cc3
curl: use GQueue instead of dlist.h for buffer list
...
Get rid of the non-portable Linux list library, part II.
2009-01-07 16:30:43 +01:00
Max Kellermann
fa503e31e7
client: use GList instead of dlist.h
...
Get rid of the non-portable Linux list library, part I.
2009-01-07 16:30:40 +01:00
Max Kellermann
91dfeff4b9
input_curl: disable "seekable" when icy-metadata is enabled
...
Fix a typo in the icy-metadata patch.
2009-01-07 10:31:30 +01:00
Max Kellermann
493f661fa4
locate: fix strcmp() return value check
...
Yesterday's patch set changed tagItemFoundAndMatches() and moved the
strcmp() return value into a bool, but forgot to add the ==0 check.
2009-01-05 12:50:04 +01:00
Max Kellermann
d9c2960a55
fix G_BYTE_ORDER check
...
"#ifdef G_BYTE_ORDER == G_BIG_ENDIAN" cannot work, of course.
2009-01-05 12:40:57 +01:00
Max Kellermann
0fb21e67ef
configure.ac: use AC_CHECK_HEADERS to check for locale.h
...
AC_CHECK_HEADERS defines HAVE_LOCALE_H, so we don't have to manually
define HAVE_LOCALE.
2009-01-05 09:31:09 +01:00
Max Kellermann
ac0fe98ffb
use GLib byte order macros
2009-01-05 08:17:22 +01:00
Max Kellermann
3516d8fc1d
tag: allocate space for null terminator in clear_non_printable()
...
Use g_strndup() instead of g_memdup().
2009-01-04 21:24:22 +01:00
Max Kellermann
200ef56d4d
database: use stdbool
...
Make db_load(), db_save() and db_check() return bool instead of int.
2009-01-04 21:18:40 +01:00
Max Kellermann
82166b715c
database: db_init() initializes library, does not update
...
For updating the database, directory_update_init() should be called
explicitly.
2009-01-04 21:18:16 +01:00
Max Kellermann
6acba73509
stats: added stats_update()
2009-01-04 20:57:06 +01:00
Max Kellermann
5c477f6067
removed the "condition" library
...
It's unused.
2009-01-04 20:42:53 +01:00
Max Kellermann
60f809b331
update: use notify.h instead of condition.h
...
The notify library is easier to use, and has no disadvantages.
2009-01-04 20:42:43 +01:00
Max Kellermann
21173ea4a9
event_pipe: removed the unused function event_pipe_wait()
2009-01-04 20:32:45 +01:00
Max Kellermann
e4a53df7db
don't exit after --create-db
...
Start the daemon after --create-db. This makes --create-db a flag
which discards the old database and starts with a fresh one.
2009-01-04 20:31:23 +01:00
Max Kellermann
6fb8c54939
update: refresh stats when database update is finished
2009-01-04 20:30:27 +01:00
Max Kellermann
a9bd64b1dd
update: splitted reap_update_task()
...
Handle the DELETE and UPDATE events in separate callbacks:
song_delete_event() safely deletes a song, and update_finished_event()
is called when database update is complete.
2009-01-04 20:30:23 +01:00
Max Kellermann
5e6ac50583
initialize GError pointers
...
GLib mandates that you initialize all GError objects with NULL prior
to passing it.
2009-01-04 19:51:54 +01:00
Max Kellermann
530f0b71de
path, tag: don't allocate GError for charset conversion
...
Pass NULL instead of &error to g_convert(). We're not interested in
the error object.
2009-01-04 19:50:22 +01:00
Max Kellermann
da69382273
path: removed pfx_dir()
...
Use GLib's g_build_filename() instead of pfx_dir().
2009-01-04 19:37:19 +01:00
Viliam Mateicka
1a04e57168
renaming mixer.h to mixer_api.h
2009-01-04 19:15:18 +01:00
Max Kellermann
fed719197c
song: allocate the result of song_get_url()
2009-01-04 19:09:34 +01:00
Max Kellermann
ea8ae68e6f
directory: added directory_is_root()
...
directory_is_root() is cheaper than
isRootDirectory(directory_get_path()).
2009-01-04 19:08:52 +01:00
Max Kellermann
923d2c966f
mapper: allocate the result of map_fs_to_utf8()
2009-01-04 18:59:47 +01:00
Max Kellermann
8c5470a3db
playlist: log errors during loadPlaylist()
...
Don't call command_error() if loading a song from the playlist fails.
This may result in assertion failures, since command_error() may be
called more than once.
2009-01-04 18:59:32 +01:00
Max Kellermann
49ac6fa996
playlist: use GLib logging
2009-01-04 18:17:37 +01:00
Max Kellermann
45597cc571
ls: renamed functions, no CamelCase
2009-01-04 17:46:42 +01:00
Max Kellermann
6a008b52d1
update: removed struct delete_data
...
The struct delete_data has only one member left and can be eliminated.
2009-01-04 17:28:34 +01:00
Max Kellermann
ff72fff68d
ls: removed hasMusicSuffix() and get_archive_by_suffix()
...
Determine the suffix manually, and use decoder_plugin_from_suffix()
and archive_plugin_from_suffix() instead.
This way, song_file_update_inarchive() can be optimized: it does not
have to translate its path.
2009-01-04 17:26:22 +01:00
Max Kellermann
d6b229e35c
update: moved code to update_regular_file()
2009-01-04 17:26:18 +01:00
Max Kellermann
8a562c9c71
song: removed duplicate '\n' check
...
Newline characters are already checked in skip_path() (update.c).
2009-01-04 17:26:15 +01:00
Max Kellermann
77d3643036
ls: include cleanup
...
Don't include headers which are not used. Fix some includes in
decoder_thread.c.
2009-01-04 17:26:12 +01:00
Max Kellermann
599d5820bc
update: moved code to directory_exists(), fix typo
...
Reverse the condition: delete directories which don't exist anymore.
This typo caused a slowdown during partial database update.
2009-01-04 17:26:07 +01:00
Max Kellermann
17d8bdb427
playlist: use uri_has_scheme() instead of isRemoteUrl()
...
For internal checks (i.e. not in command.c), we need to check whether
an URI is in the databse, in the local file system or a remote URI
with a scheme.
2009-01-04 16:23:33 +01:00
Max Kellermann
7d87f71d83
command: check URI scheme in "addid"
...
Check if the URI scheme is supported by MPD, and print an error
message if not. Optimize the checks in "add" and "playlistadd".
2009-01-04 16:22:08 +01:00
Max Kellermann
ef0b328a3c
command: added variable "uri" to command handlers
...
Don't work with argv[1], give it the better name "uri".
2009-01-04 16:19:45 +01:00
Max Kellermann
55b6fd2f0c
player_thread: fix cross-fading duplicate chunk bug
...
When the decoder of the new song is not fast enough, the player thread
has to wait for it for a moment. However the variable "nextChunk" was
reset to -1 during that, making the next loop iteration assume that
cross-fading has not begun yet. This patch overwrites it with "0"
while waiting.
2009-01-04 14:55:02 +01:00
Max Kellermann
96c18e7d15
input_curl: enabled Icy-Metadata support
2009-01-03 23:55:03 +01:00
Max Kellermann
f9e9089f42
added library for parsing icy-metadata
...
The icy_metadata will be used by the curl input_stream implementation.
2009-01-03 23:35:30 +01:00
Max Kellermann
700bd44fda
input_stream: added tag() method
...
The tag() method reads a tag from the stream. This replaces the
meta_name and meta_title attributes.
2009-01-03 23:29:45 +01:00
Max Kellermann
4be479d20c
tag: added function tag_merge()
...
tag_merges() merges the data from two tag objects into one.
2009-01-03 23:28:51 +01:00
Max Kellermann
149f4e10cf
decoder_api: moved code to do_send_tag(), free temporary tag
...
This patch fixes a minor memory leak: when decoder_tag() attempted to
send a merged tag object (created by tag_add_stream_tags()), and was
interrupted by a decoder command, it did not free the temporary merged
tag object.
2009-01-03 23:28:51 +01:00
Max Kellermann
77b32addf1
tag: revert g_strescape() patch
...
Don't use g_strescape(), because it escapes all non-ASCII characters.
Add a new function which clears all non-printable characters, not just
"newline".
2009-01-03 23:13:39 +01:00
Max Kellermann
6d2e4f4e72
player: emit PLAYLIST event when stream tag changes
...
Commit b3e2635a
introduced a regression: when a stream tag was
changed, the playlist version had to be updated. This was done in
syncCurrentPlayerDecodeMetadata(), called by syncPlayerAndPlaylist().
After b3e2635a
, this was not called anymore. Fix this by emitting
PIPE_EVENT_PLAYLIST.
2009-01-03 20:49:51 +01:00
Max Kellermann
38bf81285f
utils: removed unused functions
...
Removed all allocation functions, xwrite(), xread(), ARRAY_SIZE().
Those have been superseded by GLib.
2009-01-03 14:53:42 +01:00
Max Kellermann
b42e10b839
event_pipe: use GLib logging
2009-01-03 14:53:39 +01:00
Max Kellermann
d1c4f261c8
event_pipe: use close() instead of xclose()
...
xclose() aims to be the signal safe version of close(). However during
cleanup, this isn't important.
2009-01-03 14:53:36 +01:00
Max Kellermann
206611e280
conf: use GLib instead of utils.h
2009-01-03 14:53:34 +01:00
Max Kellermann
63e240131e
state_file: use GLib instead of utils.h / stat()
2009-01-03 14:53:29 +01:00
Max Kellermann
dcff29e5aa
state_file: errors are non-fatal in read_state_file()
...
If the state file cannot be read, for whatever reason, don't abort
MPD. The state file isn't _that_ important.
2009-01-03 14:53:23 +01:00
Max Kellermann
2064e8ac4c
songvec, dirvec: use GLib instead of utils.h
2009-01-03 14:53:02 +01:00
Max Kellermann
457301d97b
compress: use GLib instead of utils.h
2009-01-03 14:52:59 +01:00
Max Kellermann
dec4e4ca85
don't include utils.h when it isn't used
2009-01-03 14:52:56 +01:00
Max Kellermann
d17f0f435b
timer: use GLib instead of utils.h
2009-01-03 14:52:53 +01:00
Max Kellermann
03524fb81c
tag: use g_strescape() to eliminate evil characters
...
This always allocates strings on the heap, but we can delete the
stripReturnChar() function now.
2009-01-03 14:52:49 +01:00
Max Kellermann
d342e338db
pcm: use GLib instead of utils.h
2009-01-03 14:52:13 +01:00
Max Kellermann
962f2407d2
pcm_utils: use the custom PRNG for volume dithering
...
Don't use libc's rand() function, because it is slow. Our own trivial
linear congruential generator is good enough for dithering.
2009-01-03 14:51:47 +01:00
Max Kellermann
8ebb3196a8
listen: use GLib instead of utils.h
2009-01-03 14:51:43 +01:00
Max Kellermann
30f75f7f01
tag_id3: use GLib instead of utils.h
2009-01-03 14:51:41 +01:00
Max Kellermann
c24a102c98
tag_pool: use GLib instead of utils.h
2009-01-03 14:51:37 +01:00
Max Kellermann
2189796b96
null, fifo: use GLib instead of utils.h
2009-01-03 14:51:34 +01:00
Max Kellermann
3978b7b1ea
song: use GLib instead of utils.h/log.h
2009-01-03 14:51:30 +01:00
Max Kellermann
2d6f469091
decoder_api: use GLib instead of utils.h
2009-01-03 14:51:28 +01:00
Max Kellermann
2bc0144023
client: use GLib instead of utils.h
2009-01-03 13:44:19 +01:00
Max Kellermann
0eb1166beb
client: convert GREETING to a static string
...
The length of GREETING is known at compile time, don't use strlen().
2009-01-03 13:42:14 +01:00
Max Kellermann
3dc43bb915
strset: use GLib instead of utils.h
2009-01-03 13:38:48 +01:00
Max Kellermann
906ca3e204
dbUtils: use GLib instead of utils.h
2009-01-03 13:37:36 +01:00
Max Kellermann
6ce06a4863
audio: use GLib instead of utils.h
2009-01-03 13:36:20 +01:00
Max Kellermann
019bca2475
listen: use gethostbyname() on WIN32
...
WIN32 has no getaddrinfo(). Fall back to gethostbyname().
2009-01-03 13:23:03 +01:00
Max Kellermann
fa9b5fd10b
event_pipe: use _pipe() on WIN32
...
Windows has no pipe(), it only has _pipe() with two additional
parameters.
2009-01-03 13:22:55 +01:00
Max Kellermann
59067e6a92
ao: use g_strsplit() instead of strtok_r()
...
g_strsplit() is more portable than strtok_r().
2009-01-03 13:20:12 +01:00
Max Kellermann
5b543e8fa6
permission: use g_strsplit() instead of strtok_r()
...
g_strsplit() is more portable than strtok_r().
2009-01-03 13:20:10 +01:00
Max Kellermann
6507bcccd3
permission: parse password without strtok_r()
...
Use strchr()/g_strndup() to extract the password.
2009-01-03 13:20:06 +01:00
Max Kellermann
3cb3baa1e2
log: don't call closelog() on !HAVE_SYSLOG
2009-01-03 13:20:01 +01:00
Max Kellermann
a8dbd8f44f
update: don't check for symlinks on WIN32
...
WIN32 does have some kind of symbolic links (e.g. in NTFS), but the
readlink() function is not available. Disable symlink checking for
now.
2009-01-03 13:19:58 +01:00
Max Kellermann
48aace1859
event_pipe: moved variable "main_task" to main.c
2009-01-03 13:19:01 +01:00
Max Kellermann
96814397ad
sig_handlers: disable on WIN32
...
WIN32 doesn't have POSIX signals. Disable the code. For a complete
port, we will have to implement the WIN32 equivalent.
2009-01-03 12:29:42 +01:00
Max Kellermann
2cf96abcc1
command: fix adding local files on !WIN32
...
Due to a typo, adding local files was always denied.
Disable the second playlist_append_file() invocation on WIN32.
2009-01-03 12:29:42 +01:00
Max Kellermann
7a8ef820a4
list: removed linked list library
...
It's been superseded by GLib's GSList.
2009-01-02 18:41:35 +01:00
Max Kellermann
e943b9bf13
conf: use GLib's GSList library
...
Use GLib's singly-linked list library instead of our custom one.
2009-01-02 18:40:43 +01:00
Max Kellermann
1183236797
alsa: use GLib instead of utils.h
2009-01-02 17:56:08 +01:00
Max Kellermann
051e906d85
jack: use GLib instead of utils.h
2009-01-02 17:23:10 +01:00
Max Kellermann
1fe129330e
jack: duplicate jack_get_ports() return values
...
JACK documentation states: "The caller is responsible for calling
free(3) any non-NULL returned value."
This does not seem to include the array elements. Duplicate them
after jack_get_ports(), and free only the array. Convert
JackData.output_ports to non-const.
2009-01-02 17:23:00 +01:00
Max Kellermann
38fb8a01c1
update: use GLib instead of utils.h
2009-01-02 17:22:56 +01:00
Max Kellermann
4b6d17a670
database: use GLib instead of utils.h
2009-01-02 17:22:54 +01:00
Max Kellermann
9e46c32004
playlist: use GLib instead of utils.h
2009-01-02 17:22:47 +01:00
Max Kellermann
cc4e0a786d
directory: use GLib instead of utils.h
2009-01-02 16:26:19 +01:00
Max Kellermann
8cf9138541
locate: use GLib instead of utils.h
2009-01-02 16:24:16 +01:00
Max Kellermann
e5b8a3b86d
archive: use GLib instead of utils.h
2009-01-02 16:22:40 +01:00
Max Kellermann
cf9bd42416
main: include main.h, fix dependencies
2009-01-02 11:21:33 +01:00
Max Kellermann
272ee5f7d2
event_pipe: replaced PIPE_EVENT_SIGNAL with main_notify
...
There is only one location using PIPE_EVENT_SIGNAL: to synchronize
player_command() with player_command_finished(). Use the "notify"
library instead of the event_pipe here.
2009-01-02 11:20:41 +01:00
Max Kellermann
daf7c3db5a
mapper: allocate the result of map_directory_child_fs(), map_song_fs()
...
Don't use fixed stack buffers.
2009-01-02 10:48:55 +01:00
Max Kellermann
72255d580e
mapper: allocate the result of map_uri_fs(), map_directory_fs()
...
Don't use fixed stack buffers.
2009-01-02 10:48:11 +01:00
Max Kellermann
b2e3b64483
update: use g_file_test() instead of stat()
...
If we want to check whether a file is a directory, use GLib's
g_file_test() instead of stat().
2009-01-02 10:47:31 +01:00
Max Kellermann
38e3220fd4
oggflac: don't use gcc.h
...
Use G_GNUC_UNUSED instead of mpd_unused (which has already been
removed).
2009-01-02 09:50:12 +01:00
Max Kellermann
0c422838a8
playlist: use g_file_test() instead of stat()
...
To find out whether a file exists, use g_file_test() instead of
stat(), because it is more portable and easier to use.
2009-01-01 19:22:07 +01:00
Max Kellermann
80fa9183e4
mapper: allocate playlist path from heap
...
Don't pass a static buffer to map_spl_utf8_to_fs().
2009-01-01 19:17:44 +01:00
Max Kellermann
886ed1b225
mapper: fall back to XDG music directory
...
If no music_directory is configured, fall back to the XDG music
directory, determined by
g_get_user_special_dir(G_USER_DIRECTORY_MUSIC).
2009-01-01 19:07:38 +01:00
Max Kellermann
46aedbae09
removed the signal_check libraries
...
Nobody is using the signal_check library anymore.
This patch also removes the SIGUSR1 handler.
2009-01-01 18:51:38 +01:00
Max Kellermann
2f71b647f4
sig_handlers: use event_pipe for delivering SIGHUP
...
The signal_check library went out of order when we started using the
GLib main loop. Convert the SIGHUP handler to use event_pipe instead.
2009-01-01 18:51:17 +01:00
Max Kellermann
e93136ef0f
event_pipe: added event_pipe_emit_fast()
...
event_pipe_emit_fast() is aimed for use in signal handlers: it doesn't
lock the mutex, and doesn't log on error. That makes it potentially
lossy, but for its intended use, that does not matter.
2009-01-01 18:47:25 +01:00
Max Kellermann
ecb20c5f7e
mixer: renamed mix_* options to mixer_*
...
There is no reason to use the shortcut "mix" instead of "mixer".
2009-01-01 18:36:47 +01:00
Max Kellermann
65f037eb32
cmdline: exit after --version
...
Don't start the daemon when MPD is called with "--version".
2009-01-01 18:26:59 +01:00
Max Kellermann
b3e2635ac1
event_pipe: added pipe_event enum and callbacks
...
Make the event_pipe (formerly main_notify) send/receive a set of
events, with a callback for each one.
The default event PIPE_EVENT_SIGNAL does not have a callback. It
is still there for waking up the main thread, when it is waiting for
the player thread.
2009-01-01 18:22:11 +01:00
Max Kellermann
22bb5a5856
event_pipe: renamed functions from main_notify_* to event_pipe_*
...
Continuing the previous patch.
2009-01-01 18:12:14 +01:00
Max Kellermann
9f5934d95b
main_notify: renamed source to event_pipe.c
...
We are going to migrate away from the concept of notifying the main
thread. There should be events sent to it instead. This patch starts
a series to implement that.
2009-01-01 18:12:00 +01:00
Max Kellermann
99f8dc0168
gcc.h: removed all duplicate macros
...
Removed all macros which are already provided by GLib.
2009-01-01 18:09:28 +01:00
Max Kellermann
17bdcc8bae
decoder plugins: don't include gcc.h
...
Use GLib's G_GNUC_UNUSED instead of gcc.h's mpd_unused.
2009-01-01 18:09:24 +01:00
Max Kellermann
7dfe301b54
output plugins: don't include gcc.h
...
Use GLib's G_GNUC_UNUSED instead of gcc.h's mpd_unused.
2009-01-01 18:08:29 +01:00
Max Kellermann
0734acf392
null: don't include gcc.h
...
Use GLib's G_GNUC_UNUSED instead of macros from gcc.h.
2009-01-01 18:00:46 +01:00
Viliam Mateicka
9a70c4d06d
Moving mixers to audio outputs
2008-12-31 16:46:41 +01:00
Viliam Mateicka
dd9af72a74
exporting functions
2008-12-31 15:10:53 +01:00
Max Kellermann
3cd0b90ff6
client: run client_manager_expire() in an idle event
...
With the GLib main loop, the client manager can install its own event
in case a client is expired. No need for main.c to call
client_manager_expire() manually.
2008-12-31 14:30:03 +01:00
Laszlo Ashin
a12b57e1e9
ls.c: include config.h to have HAVE_CURL here
2008-12-31 13:00:33 +01:00
Max Kellermann
dd0f8e42f3
main_notify: removed lock()/unlock()
...
These functions are not used anymore since we use the GLib main loop.
2008-12-31 00:32:56 +01:00
Max Kellermann
2cdfd93830
client: remember GLib source id
...
Remove the event source from the GMainLoop object in
client_set_expired().
2008-12-31 00:29:27 +01:00