Eric Wollesen
b8ebb748c9
Add sticker list command.
...
[mk: merged memory leak patch; fixed indentation (tabs); fixed
documentation typo]
2009-03-03 07:49:23 +01:00
Max Kellermann
4220e6b0ad
input_lastfm: new input plugin for last.fm radio
...
The lastfm input plugin enables MPD to play lastfm:// URLs. This
plugin is not complete yet: it plays only the first song in the
last.fm playlist, and the playlist parser isn't even implemented
properly.
2009-03-02 23:11:31 +01:00
Max Kellermann
cfb350f4f0
input: pass config_param to input_plugin.init()
...
Allow input plugins to configure with an "input" block in mpd.conf.
Also allow the user to disable a plugin completely.
2009-03-02 23:08:17 +01:00
Max Kellermann
9a350acf04
input_plugin: added methods init(), finish()
...
Instead of hard-coding the plugin global initialization in
input_stream_global_init(), make it walk the plugin list and
initialize all plugins.
2009-03-02 20:45:50 +01:00
Max Kellermann
36d24fb7ea
input: moved plugins to ./src/input/
...
Create a sub directory for input plugins.
2009-03-02 20:40:31 +01:00
Max Kellermann
2e51365ea4
input_stream: moved struct input_plugin to input_plugin.h
...
Start to separate private from public input_stream API.
2009-03-02 20:13:08 +01:00
Viliam Mateicka
8694574f63
ffmpeg: use ffmpeg's sampleformat for output format
2009-03-02 20:12:36 +01:00
Viliam Mateicka
60a5b5562b
fixing unused parameter warning
2009-03-02 19:00:21 +01:00
Viliam Mateicka
57d836da49
fixing unsigned to signed comparision
...
[mk: cast off_t to uint32_t; same fix for aiff.c]
2009-03-02 18:59:59 +01:00
Viliam Mateicka
406b0403a5
mixer: adding code to optionally disable all hw mixers
2009-03-02 18:57:49 +01:00
Max Kellermann
2f438e5d23
tag_id3: parse ID3 tags in AIFF files
...
Added a small AIFF parser library, code copied from the RIFF parser
(big-endian integers). Look for an "ID3" chunk, and let libid3tag
parse it.
2009-03-02 18:12:44 +01:00
Max Kellermann
336f624277
tag_id3: parse ID3 tags in RIFF/WAV files
...
Added a small RIFF parser library. Look for an "id3" chunk, and let
libid3tag parse it.
2009-03-02 18:00:46 +01:00
Max Kellermann
72176db429
alsa: fall back to 32 bit samples if 24 is not supported
...
Some sound chips/drivers (e.g. Intel HDA) don't support 24 bit
samples, they want to get 32 bit instead. Now that MPD's PCM library
supports 32 bit, add a 32 bit fallback when 24 bit is not supported.
2009-03-02 16:41:38 +01:00
Max Kellermann
a5a15beac2
pcm_convert: added 32 bit support
...
All PCM sub libraries have 32 bit support now. Add support to the
glue function pcm_convert().
2009-03-02 16:41:10 +01:00
Max Kellermann
3165e26f9a
pcm_format: added conversion from 32 bit
...
Support converting 32 bit samples to any other supported sample
format.
2009-03-02 16:41:08 +01:00
Max Kellermann
d4e4c57b8d
pcm_format: added pcm_convert_to_32()
...
Added code to convert all other sample formats to 32 bit.
2009-03-02 16:39:54 +01:00
Max Kellermann
d24f2ba5ee
pcm_dither: added pcm_dither_32_to_16()
...
For 32 bit dithering, reuse the 24 bit dithering code, but apply a 8
bit right shift first.
2009-03-02 16:37:11 +01:00
Max Kellermann
78e08f655a
pcm_dither: renamed struct pcm_dither_24 to struct pcm_dither
...
There is nothing 24 bit specific in the pcm_dither_24 struct. Since
we want to reuse the struct for 32 bit dithering, let's drop the "_24"
suffix from the struct name.
2009-03-02 16:37:05 +01:00
Max Kellermann
d9c1434298
pcm_resample: use 24 bit resampling code for 32 bit samples
...
Resampling 32 bit samples is the same as resampling 24 bit samples -
both are stored in the int32_t type.
2009-03-02 16:37:00 +01:00
Max Kellermann
1b31f52285
pcm_channels: added implementation for 32 bit samples
...
Some 24 bit code can be reused. The 32 bit variant has to use 64 bit
integers, because 32 bit integers could overflow. This may be a
performance hit on 32 bit CPUs.
2009-03-02 16:36:49 +01:00
Max Kellermann
062f37071c
audio_format: allow 32 bit samples
...
This is the first patch in a series to enable 32 bit audio samples in
MPD. 32 bit samples are more tricky than 24 bit samples, because the
integer may overflow when you operate on a sample.
2009-03-02 15:46:09 +01:00
Max Kellermann
8c0bce0b94
audio_format: allow up to 8 channels
...
audio_valid_sample_format() verifies the number of channels. Let's
just say up to 8 channels is allowed (which is possible with some
consumer sound chips). I don't know if there are bigger cards, and
since I cannot test it, I'll limit it to 8 for now.
2009-03-02 15:43:45 +01:00
Max Kellermann
a1561252d0
directory: directory_load() returns GError
...
Do error reporting with GLib's GError library in this library, too.
2009-03-02 15:42:42 +01:00
Max Kellermann
c0ffec2fd1
database: db_load() returns GError
...
Do error reporting with GLib's GError library.
2009-03-02 15:42:21 +01:00
Max Kellermann
eb5b3ce553
database: no CamelCase
...
Renamed a bunch of variables.
2009-03-02 15:41:44 +01:00
Max Kellermann
b7bfa24f22
pcm_volume: return bool
...
Don't abort MPD when a sample format is not supported by pcm_volume().
2009-03-02 09:42:16 +01:00
Max Kellermann
0579b6ed27
pcm_volume: no CamelCase
2009-03-01 20:11:41 +01:00
Max Kellermann
4194f4b18b
audio_parser: added API documentation
2009-03-01 20:08:48 +01:00
Max Kellermann
f48c58d17b
crossfade: fix doxygen tag
2009-03-01 20:05:27 +01:00
Max Kellermann
ba3a8474b6
flac: parse stream tags
...
Parse the vorbis comments in libflac's metadata_callback and pass them
as tag struct to the decoder API.
2009-03-01 14:07:23 +01:00
Max Kellermann
92db09fdf8
listen: return GError on "unix path too long"
...
When the unix domain socket path is too long, don't abort with
g_error().
2009-03-01 13:35:44 +01:00
Max Kellermann
f2664e329f
listen: removed unused macro BINDERROR()
2009-03-01 13:34:44 +01:00
Max Kellermann
d399d4b63b
output_init: removed getBlockParam()
...
Use config_get_block_string() and manual GError handling instead.
2009-03-01 13:32:42 +01:00
Max Kellermann
f298fcf3a6
output_init: return GError on error
...
Do error handling with GError instead of aborting with g_error().
2009-03-01 13:31:56 +01:00
Max Kellermann
cb942eeb45
output_init: moved code to audio_output_detect()
2009-03-01 13:31:32 +01:00
Max Kellermann
af66f666c6
audiofile: added 24 bit support
...
Don't hard code the "bits" parameter to 16. Try to use the input's
sample format, if possible.
2009-03-01 10:53:46 +01:00
Max Kellermann
614fe8b341
output: removed duplicate debug messages from plugins
...
The MPD core logs the audio format of all audio outputs. Remove the
duplicate message from the plugins.
2009-03-01 10:39:42 +01:00
Max Kellermann
e1b79479a5
output_thread: log audio format in a debug message
...
To aid debugging, print the audio format of the output plugin in a
debug message, and print information about PCM conversion.
2009-03-01 10:37:26 +01:00
Max Kellermann
a81a84eaa4
decoder_api: log audio format in a debug message
...
To aid debugging, print the audio format of the decoder plugin in a
debug message, and print information about PCM conversion.
2009-03-01 10:31:47 +01:00
Max Kellermann
c0e61687b6
listen: fix windows specific code
...
During the listen_add_host() API transition, the windows code wasn't
tested, and several removed arguments are still in use there.
2009-03-01 01:49:49 +01:00
Max Kellermann
8c3df4cc83
socket_util: include ws2tcpip.h for getnameinfo()
...
Windows doesn't have the standard headers sys/socket.h and netdb.h.
2009-03-01 01:35:54 +01:00
Max Kellermann
eb64f6542f
daemon: disable daemonize_detach() on WIN32
2009-03-01 01:35:53 +01:00
Max Kellermann
80571d1b5a
tag: convert ignore_tag_items to a bool array
2009-03-01 00:58:32 +01:00
Max Kellermann
6153c86bc3
tag: added API documentation
2009-03-01 00:55:20 +01:00
Max Kellermann
b49518c636
tag: no CamelCase
...
Renamed functions and variables.
2009-03-01 00:52:02 +01:00
Max Kellermann
ae87abae59
use GLIB_CHECK_VERSION()
...
Use GLIB_CHECK_VERSION() instead of manually checking
GLIB_MAJOR_VERSION, ...
2009-03-01 00:37:22 +01:00
Max Kellermann
82b081a6db
volume: throttle access to hardware mixers
...
On some hardware, reading the mixer value from hardware is an
expensive operation, and MPD has to do it for every client. Throttle
access to the hardware, cache the result for one second.
2009-02-28 21:12:15 +01:00
Max Kellermann
ec4fd9fd88
output: use GTimer instead of time_t for reopen after failure
...
time() is not a monotonic timer, and MPD might get confused by clock
skews. clock_gettime() provides a monotonic clock, but is not
portable to non-POSIX systems (i.e. Windows). This patch uses GLib's
GTimer API, which aims to be portable.
2009-02-28 20:43:23 +01:00
Max Kellermann
a5c09c91c4
output: added option to disable audio outputs by default
...
The option "enabled" is on by default. If you specify "enabled no" in
an audio_output section, then this device is disabled by default.
2009-02-28 19:40:39 +01:00
Max Kellermann
d29db0111c
audiofile: removed duplicate decoder_get_command() calls
...
decoder_data() returns a decoder_command, no need to call
decoder_get_command() twice after decoder_command().
2009-02-28 19:28:38 +01:00
Max Kellermann
0813092c63
audiofile: refuse to play non-seekable files
...
If an input_stream is not seekable, libaudiofile fails to play at all:
Audio File Library: unrecognized audio file format [error 0]
Since we know in advance whether the input_stream is seekable, just
refuse to play on a non-seekable stream.
2009-02-28 19:24:40 +01:00
Max Kellermann
44b55bff89
audiofile: no CamelCase
...
Renamed several variables and a function.
2009-02-28 19:09:54 +01:00
Max Kellermann
4a2b315ab6
tag: moved APE code to tag_ape.c
2009-02-28 16:44:41 +01:00
Michal Nazarewicz
cabbf7ab4a
pipe: new audio output plugin which runs a command
...
[mk: adapted to new output plugin API]
2009-02-28 16:11:59 +01:00
Max Kellermann
5ea8a0df3f
decoder_list: print decoder list with suffixes
...
Print the list of suffixes supported by each decoder, instead of
prining a list of all suffixes of all decoders with duplicates.
2009-02-28 15:29:51 +01:00
Max Kellermann
1bb0124b77
listen: allocate sockaddr_storage struct for accept()
...
The generic sockaddr struct is too small for some addresses. For
accept(), we have to allocate a sockaddr_storage struct on the stack,
which is large enough for all addresses.
2009-02-28 15:20:35 +01:00
Max Kellermann
5c10d2ded7
client: use sockaddr_to_string()
...
Removed the sockaddr_to_tmp_string() hack, use
the new function sockaddr_to_string() instead.
2009-02-28 15:20:35 +01:00
Max Kellermann
e085deb944
socket_util: unpack V4MAPPED addresses
...
Unpack IPv4 addresses which are packed inside an IPv6 address,
i.e. return "127.0.0.1" rather than "::ffff:127.0.0.1".
2009-02-28 15:20:33 +01:00
Max Kellermann
b55d9fcdb8
socket_util: added function sockaddr_to_string()
...
Create the socket_util.c library, the first function is
sockaddr_to_string(): it converts a sockaddr struct to a string
containing the IP address in a human-readable form.
2009-02-28 15:12:24 +01:00
Max Kellermann
0fcb7dc65c
update: use G_FILE_TEST_IS_REGULAR for archive files
...
When checking whether database entries have been deleted, don't check
if an archive file is a directory (G_FILE_TEST_IS_DIR), use
G_FILE_TEST_IS_REGULAR for this case instead. To determine if a
"struct directory" is an archive, check for device==DEVICE_INARCHIVE.
This is always false after loading the database, so this patch is not
complete yet.
2009-02-28 14:02:08 +01:00
Max Kellermann
83b1b0ff69
update: don't update unchanged archive
...
When the mtime of an archive time hasn't changed, don't update it
again.
2009-02-28 14:02:03 +01:00
Max Kellermann
2aebbf8460
directory: added "mtime" property
...
Remember the modification time of each directory. This is important
for archives (which are virtual directories right now), but may also
be useful for an automatic update mechanism.
2009-02-28 14:02:00 +01:00
Max Kellermann
3d6e6416e5
update: moved code to update_archive_file()
...
Simplify the rather large function update_regular_file().
2009-02-28 14:01:33 +01:00
Max Kellermann
7473fa0f4e
directory: moved DIRECTORY_* string constants
...
Moved some of them to to directory_save.c, and others to database.c.
2009-02-27 19:30:16 +01:00
Max Kellermann
eae0287466
song_print: hide HTTP password in playlist
...
Added the uri_remove_auth() library function which strips username
and password from a HTTP URI, and use it in song_print_url(). This
allows you to add HTTP URIs to the playlist including secret username
and password, without disclosing it to all MPD clients.
2009-02-27 19:20:11 +01:00
Max Kellermann
9dd00dfab7
client: removed duplicate "client" string from log
...
Since we introduced a GLib logging domain, the "client" string appears
twice in the log lines:
client: client 0: command returned 0
Removed the second one, now it looks like this:
client: [0] command returned 0
Still not quite good, but better than before.
2009-02-27 19:03:13 +01:00
Max Kellermann
53271e8ae7
update: print error when opendir() fails
...
MPD used to be silent when it could stat() a directory, but could not
opendir() it to read its contents. This caused a lot of support
headache with users who have wrong file permissions. Add another
warning message.
2009-02-27 09:05:58 +01:00
Max Kellermann
497c0b1c18
tag: don't accept invalid UTF-8 sequences
...
Overwrite invalid UTF-8 sequences with question marks.
2009-02-27 09:02:32 +01:00
Max Kellermann
c1ab2d06aa
tag: make tag.num_items unsigned
...
There's no point in declaring num_items as a uint8_t, it doesn't save
any space, due to padding. This allows us to lift the articial "255
items" limitation.
2009-02-27 09:02:13 +01:00
Max Kellermann
75c2029b1c
tag: no CamelCase
...
Renamed numOfItems to num_items.
2009-02-27 09:01:55 +01:00
Max Kellermann
5b07cbf0b4
tag: make tag_equal() return bool
2009-02-27 08:06:59 +01:00
Max Kellermann
bcdf947afc
player_thread: removed meaningless warning on output failure
...
The warning message "problems opening audio device while playing ..."
does not help at all, and should be removed. At this point, the real
error message has already been logged by the output thread.
2009-02-26 22:21:35 +01:00
Max Kellermann
9e61c0503e
output_all: print a warning when all outputs are disabled
...
When all outputs are disabled, MPD printed only a meaningless message
"problems opening audio device", although it didn't attempt to open a
device.
2009-02-26 22:21:32 +01:00
Max Kellermann
58c201ce14
output_all: removed "audio_outputs!=NULL" check
...
After initialization, audio_outputs is always non-NULL. Don't check
that.
2009-02-26 22:14:54 +01:00
Max Kellermann
dfea6b7cdd
mvp: fixed default device detection
...
The check "open()!=0" is wrong, you have to write "open()>=0", because
-1 means error, and 0 is a valid file handle.
2009-02-26 22:10:58 +01:00
Max Kellermann
ec926539a3
output_plugin: report errors with GError
...
Use GLib's GError library for reporting output device failures.
Note that some init() methods don't clean up properly after a failure,
but that's ok for now, because the MPD core will abort anyway.
2009-02-26 22:04:59 +01:00
Max Kellermann
353ae5e558
osx: use OSStatus and GetMacOSStatusCommentString()
...
The return type of most OS X functions is OSStatus, not int. We can
get a nice error message from GetMacOSStatusCommentString(), log it.
2009-02-26 22:01:42 +01:00
Max Kellermann
9dc966041d
osx: start the audio device in the open() method
...
Don't call AudioOutputUnitStart() in the play() method, do it after
the device has been opened. We can eliminate the "started" property
now, because the device is always started when it's open.
2009-02-26 21:40:22 +01:00
Max Kellermann
fb5ca6aa29
osx: removed commented code
...
We don't need to keep commented code forever. If we want that
test_default_device() implementation back one day, we'll pick it from
the git history.
2009-02-26 21:33:13 +01:00
Max Kellermann
985ca094f2
osx: no CamelCase
...
Renamed types, functions, variables.
2009-02-26 21:03:06 +01:00
Max Kellermann
a7b0cfccb4
output_thread: use the right audio_format in assert()
...
ao_play() gets PCM data in the in_audio_format, and converts it to
out_audio_format. Comparing the input data with out_audio_format is
wrong.
prefixed with "STG:" will be automatically removed. STG: Trailing
empty lines will be automatically removed. STG: vi: set textwidth=75
filetype=diff nobackup:
2009-02-26 21:02:39 +01:00
Max Kellermann
bcc3a9debf
shout: use config_get_block_unsigned()
...
Eliminated manual integer parsing.
2009-02-26 19:34:00 +01:00
Max Kellermann
710a61a3dc
pulse: removed pa_simple!=NULL checks
...
The MPD core guarantees that the audio_output object is always
consistent, and our pa_simple!=NULL checks are superfluous. Also
don't manually close the device on error in pulse_play(), since the
MPD core does this automatically when the play() method returns 0.
2009-02-26 19:29:06 +01:00
Max Kellermann
4f2ac7ec2c
oss: moved code from oss_open() to oss_setup()
...
Eliminate one label and a bunch of gotos.
2009-02-26 19:18:16 +01:00
Max Kellermann
749d6c7766
oss: convert OSS_STAT_* to an enum
...
Use C instead of CPP.
2009-02-26 19:18:13 +01:00
Max Kellermann
a0b3f35537
oss: return bool instead of int
...
Return type of oss_find_supported_param(), oss_can_convert() and
oss_find_unsupported_param() should be bool instead of int.
2009-02-26 19:17:56 +01:00
Max Kellermann
e1f58fdcf5
oss: use unsigned integers
...
Convert the num_supported and num_unsupported variables from signed to
unsigned.
2009-02-26 19:17:09 +01:00
Max Kellermann
4958a6f56f
oss: no CamelCase
...
Renamed types, functions and variables.
2009-02-26 19:16:33 +01:00
Avuton Olrich
90ee488597
mixer: Add "disabled" mixer_type.
2009-02-26 09:13:07 -08:00
Avuton Olrich
1b79449ef1
cmdline: Alphabetical help order like other GNU projects.
2009-02-25 15:34:57 -08:00
Avuton Olrich
de07547426
cmdline: Add --no-config to explicitly set daemon default options.
2009-02-25 15:30:52 -08:00
Max Kellermann
a4cf7b7dfd
alsa: fall back to 16 bit audio
...
When the sample format is unknown, fall back to 16 bit samples.
2009-02-25 22:01:32 +01:00
Max Kellermann
4c1fb8278b
alsa: moved code from alsa_open() to alsa_setup()
...
Simplify error handling a bit by moving some code into a separate
function. This eliminates a good bunch of gotos, but that's not
finished yet.
2009-02-25 22:01:30 +01:00
Max Kellermann
d3409a65b5
mvp: check for reopen errors
...
When the MVP device has been closed in the cancel() method, and the
play() method attempts to reopen it, check for errors.
2009-02-25 21:57:02 +01:00
Max Kellermann
883e31d55b
mvp: moved code to mvp_find_sample_rate()
...
Moved the table lookup code to a separate function.
2009-02-25 21:56:48 +01:00
Max Kellermann
b4c65cac8c
mvp: make the mvp_sample_rates array const
...
The array must never be modified, it's a constant lookup table.
2009-02-25 21:54:02 +01:00
Max Kellermann
99f535ad77
mvp: fall back to 16 bit audio samples
...
Looks like the MVP audio output only supports 16 and 24 bit audio
samples. If MPD generates any other sample formats, force it to use
16 bit.
2009-02-25 21:52:11 +01:00
Max Kellermann
8491f61d6c
mvp: fall back to stereo
...
When the channel count is greater than 2, fall back to stereo sound.
2009-02-25 21:51:39 +01:00
Max Kellermann
6722c508a1
mvp: mvp_set_pcm_params() returns bool
...
Return true/false instead of 0/-1. Also check its return value in
mvp_output_open().
2009-02-25 21:51:36 +01:00
Max Kellermann
84ed6d4701
mvp: pass audio_format struct to mvp_set_pcm_params()
...
Pass a pointer to the audio_format struct instead of 3 separate
integers.
2009-02-25 21:51:32 +01:00
Max Kellermann
57a9e5605b
mvp: removed big_endian parameter from mvp_set_pcm_params()
...
Don't pass the big_endian flag to mvp_set_pcm_params(), do a simple
"G_BYTE_ORDER==G_LITTLE_ENDIAN" instead.
2009-02-25 21:51:13 +01:00
Max Kellermann
d902465375
mvp: use G_N_ELEMENTS(mvp_sample_rates)
...
Instead of manually calculating the number of elements in the
mvp_sample_rates array, use GLib's convenience macro G_N_ELEMENTS().
2009-02-25 21:50:50 +01:00
Max Kellermann
fff52ac5b9
mvp: no CamelCase
...
Renamed types, functions and variables.
2009-02-25 21:49:59 +01:00
Max Kellermann
6aa6def776
output: audio_output_init() returns bool
...
Return true/false instead of 1/0.
2009-02-25 19:53:56 +01:00
Max Kellermann
9512704055
output: set a GLib log domain
2009-02-25 19:53:38 +01:00
Max Kellermann
d56ae1e9c2
fifo: return bool values
...
Return true/false for success/failure instead of returning 0/-1.
2009-02-25 19:53:27 +01:00
Max Kellermann
74af4e4c3d
fifo: no CamelCase
...
Renamed types, functions and variables.
2009-02-25 19:53:24 +01:00
Max Kellermann
ee7cf9c9b8
fifo: removed timer!=NULL checks
...
The MPD core guarantees that the audio_output object is always
consistent, and our timer!=NULL checks are superfluous.
2009-02-25 19:09:38 +01:00
Max Kellermann
ba4dd651ef
ao: no CamelCase
...
Renamed functions and variables.
2009-02-25 19:08:49 +01:00
Max Kellermann
074d5ae13e
ao: removed AoData.device!=NULL checks
...
The MPD core guarantees that the audio_output object is always in a
consistent state: either open or closed. When open, it will not call
the open() method again, and when closed, it will not call play().
Removed several checks and the NULL initialization.
2009-02-25 18:48:27 +01:00
Max Kellermann
8a882209c3
ao: removed implementation of method cancel()
...
The method is empty, and we can simply set the method pointer to NULL
instead.
2009-02-25 18:45:09 +01:00
Max Kellermann
dcd84c19cd
output_plugin: don't pass audio_output object to method init()
...
audio_output_get_name() has been removed, which was the only function
left in output_api.h. The output plugin doesn't need the audio_output
object at all, remove the parameter from the init() method.
2009-02-25 18:34:02 +01:00
Max Kellermann
0cf4f09e4f
output_api: removed audio_output_get_name()
...
Use config_get_block_string("name") instead of audio_output_get_name().
2009-02-25 17:32:58 +01:00
Max Kellermann
6823217697
ls: moved generic URI utilities to uri.c
...
"ls" is a bad name for a library which parses URIs. We'll move the
rest of the "ls" library later.
2009-02-25 16:44:06 +01:00
Max Kellermann
2054464c01
vorbis_encoder: vorbis_encoder_clear() returns void
...
Don't return an uninitialized bool variable.
2009-02-24 19:06:37 +01:00
Max Kellermann
e065c4db33
jack: initialize local variable "space"
...
Fix a gcc warning, initialize the "space" variable at the beginning of
mpd_jack_play().
2009-02-24 19:06:34 +01:00
Max Kellermann
1630fe00a2
listen: fix unused parameter warnings when TCP is disabled
...
Work around gcc warnings by casting the parameters to void.
2009-02-24 19:06:31 +01:00
Max Kellermann
d0a17ffb9d
listen: removed is_ipv6_enabled()
...
Don't explicitly check is_ipv6_enabled(), just try calling
listen_add_port_ipv6(), but check its error code.
2009-02-24 18:55:12 +01:00
Max Kellermann
adf044eb09
listen: splitted listen_add_port() into IPv4 and IPv6
...
Some more code simplification.
2009-02-24 18:49:09 +01:00
Max Kellermann
d40c439424
listen: don't call listen_add_config_param(NULL)
...
For default bind_to_address settings, don't call
listen_add_config_param(NULL), use listen_add_port() directly.
2009-02-24 18:36:31 +01:00
Max Kellermann
739c23cca5
listen: moved code to listen_add_host()
...
Split code from the rather large function listen_add_config_param(),
part 3.
2009-02-24 18:29:53 +01:00
Max Kellermann
33749e7ea9
listen: moved code to listen_add_path()
...
Split code from the rather large function listen_add_config_param(),
part 2.
2009-02-24 17:51:39 +01:00
Max Kellermann
36b1a860d3
listen: moved code to listen_add_port()
...
Split code from the rather large function listen_add_config_param().
2009-02-24 17:51:32 +01:00
Max Kellermann
dbb067c016
listen: listen_add_address() returns bool/GError
...
Don't return -1 on failure, and abort on fatal error - do proper error
reporting with GError, and return false on failure.
2009-02-24 17:43:10 +01:00
Max Kellermann
7de4e7228f
listen: removed unused macro "MAXHOSTNAME"
2009-02-24 17:42:37 +01:00
Max Kellermann
9bb3f2d060
listen: no CamelCase
...
Renamed functions.
2009-02-24 17:42:36 +01:00
Avuton Olrich
39a33344f2
ffmpeg: add all known ffmpeg extensions and mime-types.
...
After much research[1][2][3] this should be the majority of currently
supported file extensions and mime-types for the currently supported
ffmpeg formats. This list maybe incomplete, but it's more complete
than anything else out there that I've been able to find. This list
needs to be updated every now and again as the ffmpeg sources support
more formats.
1. Sources
2. wiki.multimedia.cx
3. filext.com
2009-02-23 10:48:43 -08:00
Max Kellermann
3b1a9aeca0
Makefile.am: no recursive makefiles
...
Recursive Makefiles are inefficient and error prone (no proper way to
declare dependencies). Since there's no disadvantage in having one
single Makefile, let's do it.
2009-02-23 10:04:51 +01:00
Max Kellermann
a4dfab2aee
output: pass the music chunk pointer as void*, not char*
...
The meaning of the chunk depends on the audio format; don't suggest a
specific format by declaring the pointer as "char*", pass "void*"
instead.
2009-02-23 09:34:26 +01:00
Max Kellermann
5a898c15e7
output_api: play() returns a length
...
The old API required an output plugin to not return until all data
passed to the play() method is consumed. Some output plugins have to
loop to fulfill that requirement, and may block during that. Simplify
these, by letting them consume only part of the buffer: make play()
return the length of the consumed data.
2009-02-23 09:29:56 +01:00
Max Kellermann
d50a3d513e
shout: removed shout_plugin.h
...
There are no plugins left which require shout_plugin.h. Moved the
struct declaration to shout_plugin.c.
2009-02-22 17:52:37 +01:00
Max Kellermann
1c56edd1c8
shout: removed shout_encoder_plugins
...
This array is empty, and is not used anymore.
2009-02-22 17:51:12 +01:00
Max Kellermann
f6e5c00726
shout: use the new encoder API
...
Removed shout's encoder plugin API in favor of the new generic encoder
plugin API.
2009-02-22 17:18:28 +01:00
Max Kellermann
f7c685f1ab
encoder: added lame mp3 encoder
...
This new LAME encoder plugin is based on the existing shout_mp3.c
plugin.
2009-02-22 17:18:03 +01:00
Max Kellermann
3a6619d62c
encoder: added vorbis encoder
...
This new vorbis encoder plugin is based on the existing shout_ogg.c
plugin.
2009-02-22 17:17:26 +01:00
Max Kellermann
a9dde676be
added the encoder API
...
The new generic encoder API will replace shout's custom encoder API.
2009-02-22 17:11:14 +01:00
Max Kellermann
e79a82ba3a
shout: merged open_shout_conn() into my_shout_open_device()
...
The method implementation my_shout_open_device() consists of only one
line, the call to open_shout_conn(). Merge both functions into one.
2009-02-22 15:24:41 +01:00
Max Kellermann
cece6c00f4
shout: bool return values instead of int
...
Return true/false instead of 0/-1.
2009-02-22 15:18:58 +01:00
Max Kellermann
f0554d9a75
pcm: added API documentation
2009-02-21 18:14:20 +01:00
Max Kellermann
cae7c160a3
crossfade: added API documentation
2009-02-20 14:57:32 +01:00
Max Kellermann
91ebf46853
path: don't export path_set_fs_charset()
...
The function path_set_fs_charset() is only used in path.c.
2009-02-20 14:49:57 +01:00
Max Kellermann
09ecfb6567
path: validate configured character set
2009-02-20 12:31:00 +01:00
Max Kellermann
adea76a6ed
decoder_api: fixed shadow warning, rename "wait"
...
The parameter name "wait" overlaps with the POSIX wait() function.
Rename it.
2009-02-19 13:33:06 +01:00
Max Kellermann
e7131b5da2
utils: use g_usleep() instead of my_usleep()
...
Now that I've found this nice function in the GLib docs, we can
finally remove our custom sleep function. Still all those callers of
g_usleep() have to be migrated one day to use events, instead of
regular polling.
2009-02-19 13:33:03 +01:00
Max Kellermann
c228635489
faad: use faacDecFrameInfo instead of NeAACDecFrameInfo
...
Don't use libfaad's internal type names.
2009-02-19 13:29:15 +01:00
Max Kellermann
eac2da635d
added G_LOG_DOMAIN macros to several libraries
...
Define the GLib logging domain in the following libraries: conf,
daemon, event_pipe, log.
2009-02-19 09:24:59 +01:00
Max Kellermann
11e680d640
conf: log the effective configuration file name
...
For better debugging aid when something goes wrong, log the name of
the effective configuration file.
2009-02-19 08:35:22 +01:00
Max Kellermann
0a0736fc4e
log: added log_early_init() for early debug messages
2009-02-19 08:35:20 +01:00
Max Kellermann
84437acffb
Makefile.am: add new headers to $(mpd_headers)
...
I forgot to add these, and this broke "make distcheck".
2009-02-19 08:12:46 +01:00
Peter Colberg
de6cc2691f
mms: fix assertion in input_stream_open
...
Hi,
upon trying to play an MMS stream added to the play list, I got this:
mpd: /tmp/mpd/./src/input_stream.c:85: input_stream_open: Assertion `is->plugin->open == ((void *)0) || is->plugin == plugin' failed.
With the following patch applied, it works perfectly.
Thanks for having implemented MMS support :-).
Best regards,
Peter
2009-02-19 07:34:07 +01:00
Max Kellermann
7f701744a7
pcm_volume: optimized pcm_volume_change_24() on i386
...
Added an inline assembly function for the 64 bit multiplication.
Benchmark results on a Pentium II 266 MHz, 512 MB of 24 bit PCM data:
dd if=/dev/zero bs=64k count=8k |
time ./test/software_volume 48000:24:2 >/dev/null
Before this patch 22.94s, after this patch 7.24s.
2009-02-18 22:27:58 +01:00
Max Kellermann
fcf65de46b
mp4ff: always free the mp4ff_read_sample() buffer
...
When mp4ff_read_sample() returns a value bigger than zero, it
guarantees that the buffer is set. Remove the check.
2009-02-18 19:08:52 +01:00
Max Kellermann
5900ea5299
mp4ff: don't allocate seek_table when input is not seekable
...
Don't waste any precious memory when the seek_table cannot be used.
2009-02-18 18:40:40 +01:00
Max Kellermann
8aa3edb6af
mp4ff: include cleanup
...
Don't include limits.h, use GLib constants instead.
2009-02-18 18:40:33 +01:00
Max Kellermann
51c59f6228
mp4ff: use faacDecInit2() to find the AAC track
...
Use faacDecInit2() instead of AudioSpecificConfig() to detect the AAC
track in the MP4 file. This has a great advantage: it initializes the
libfaad decoder, which the caller would normally do anyway - but now
we can go without the AudioSpecificConfig() call. When decoder==NULL
(called from mp4_tag_dup()), fall back to a mp4ff_get_track_type()==1
check, like other audio players do.
2009-02-18 18:39:12 +01:00
Max Kellermann
111c73e701
mp4ff: moved code to mp4_faad_new()
...
Moved the libfaad decoder initialization to mp4_faad_new(), and also
fill the audio_format struct there. This eliminates a little bit of
complexity in mp4_decode().
2009-02-18 18:38:09 +01:00
Max Kellermann
2bc0fabe73
mp4ff: call decoder_initialized() after libfaad initialization
...
Don't wait for the first frame to be decoded. We already have the
sample rate and the channel count from faacDecInit2().
2009-02-18 18:18:29 +01:00
Max Kellermann
47e3eab872
mp4ff: merged mp4_load_tag() into mp4_tag_dup()
...
The function mp4_load_tag() is used only once, and mp4_tag_dup() is a
one-liner. Merge them.
2009-02-18 18:18:25 +01:00
Max Kellermann
9d2f16d827
player_thread: don't drop audio buffers when not seekable
...
When a file is not seekable, MPD dropped the audio buffers before even
attempting to seek. This caused noticable sound corruption. Fix:
first attempt to seek, and only if that succeeds, call
audio_output_all_cancel().
2009-02-17 23:57:10 +01:00
Max Kellermann
4aca1fa493
faad: variable cleanup
...
Make some variables more local, and eliminate superfluous ones.
2009-02-17 23:44:29 +01:00
Max Kellermann
122e0f3338
faad: added source code comments
2009-02-17 23:42:06 +01:00
Max Kellermann
76b0601f6b
faad: faad_decoder_init() returns an audio_format
...
Instead of returning the sample rate and channel count as separate
values, fill an audio_format struct.
2009-02-17 23:35:49 +01:00
Max Kellermann
161bfc4bc0
faad: call decoder_initialized() after libfaad initialization
...
Don't wait for the first frame to be decoded. We already have the
sample rate and the channel count from faacDecInit().
2009-02-17 23:26:51 +01:00
Max Kellermann
a72c7a7b18
faad: removed DECODE_COMMAND_SEEK check
...
The MPD core will never send a SEEK command to a decoder which has
declared to be not seekable.
2009-02-17 23:20:16 +01:00
Max Kellermann
9245bd0c69
input_file, input_curl, icy_metadata: added GLib log domains
...
Define G_LOG_DOMAIN.
2009-02-17 22:58:27 +01:00
Max Kellermann
7b84f1e6b3
faad: use the decoder_buffer library
...
Replace this plugin's own buffer library with the new decoder_buffer
library.
2009-02-17 22:56:42 +01:00
Max Kellermann
7cea5357e3
faad: check the result of adts_find_frame()
...
Instead of checking if the buffer is empty after adts_find_frame(),
check adts_find_frame()'s return value. This is more robust.
2009-02-17 22:56:07 +01:00
Max Kellermann
77db32f8fb
faad: added libfaad wrappers
...
Moved libfaad API quirks to the wrapper functions faad_decoder_init()
and faad_decoder_decode().
2009-02-17 22:54:26 +01:00
Max Kellermann
6a72db22d7
faad: functions return duration, no float pointer
...
Instead of writing the song duration into a float pointer, return it
from the function.
2009-02-17 22:54:01 +01:00
Max Kellermann
e30ba2e4cf
faad: removed length==NULL check in faad_song_duration()
...
There are no callers which pass NULL here.
2009-02-17 22:53:28 +01:00
Max Kellermann
867ae1cf6f
faad: fill buffer in adts_find_frame()
...
All callers of adts_find_frame() use faad_buffer_fill() before that.
Move that faad_buffer_fill() call into adts_find_frame() instead.
adts_find_frame() will get its own logic for on-demand filling.
2009-02-17 22:53:25 +01:00
Max Kellermann
1a9756156e
added the "decoder buffer" library
...
The decoder buffer library may be used by decoder libraries such as
"faad".
2009-02-17 22:39:45 +01:00
Max Kellermann
66b4a3ab2e
faad: converted length check to assertion in adts_check_frame()
...
adts_check_frame() must not be called with a buffer length smaller
than 8. We can eliminate that duplicate check, and convert it into an
assertion.
2009-02-17 19:28:11 +01:00
Max Kellermann
8edd407918
faad: added length check before comparing "ADIF"
...
It's not valid to use the buffer's data without ensuring that the
buffer contains enough data.
2009-02-17 19:27:36 +01:00
Max Kellermann
d75ce5c4a0
faad: renamed internal functions
...
"aac" -> "faad"
2009-02-17 19:27:01 +01:00
Max Kellermann
943b17c99a
wavpack: added GLib log domain
2009-02-17 19:26:36 +01:00
Max Kellermann
656d5c9c7b
pcm_convert: removed pcm_convert_size()
...
The function is unused, since we added the pcm_buffer library.
2009-02-17 19:26:32 +01:00
Max Kellermann
ac3e2de28b
pcm_buffer: set size after allocation
...
When I implemented the pcm_buffer library, I forgot to set the new
buffer size. This caused a new allocation in each pcm_buffer_get(),
fortunately no memory was leaked.
2009-02-17 18:27:00 +01:00
Max Kellermann
d8db46edfa
decoders: added and fixed GLib log domains
...
Fixed the log domains of the renamed decoders. Added G_LOG_DOMAIN
macros in decoders which don't have one already.
2009-02-17 08:51:34 +01:00
Max Kellermann
c4d69f0ae1
renamed decoder plugin "mpc" to "mpcdec"
...
This plugin is based on "libmpcdec".
2009-02-17 08:48:20 +01:00
Max Kellermann
70523657bf
renamed decoder plugin "mp4" to "mp4ff"
...
This plugin is based on "libmp4ff".
2009-02-17 08:45:26 +01:00
Max Kellermann
f4ff7eab9d
tag: fixed typo in MUSICBRAINZ_TRACKID tag name
2009-02-17 06:48:57 +01:00
Max Kellermann
68314c33e9
faad: no CamelCase
...
Renamed functions and variables.
2009-02-16 19:31:11 +01:00
Max Kellermann
8d2e6bf54c
faad: removed AacBuffer.fileOffset
...
The element fileOffset is only written, but never read. It can be
removed safely.
2009-02-16 19:31:08 +01:00
Max Kellermann
c6205bd461
renamed decoder plugin "oggvorbis" to "vorbis"
...
This plugin uses libvorbis.
2009-02-16 19:31:06 +01:00
Max Kellermann
cafaf33aa8
renamed decoder plugin "aac" to "faad"
...
A decoder plugin should be named after the library which is used.
2009-02-16 19:30:54 +01:00
Max Kellermann
c5edb53797
renamed decoder plugin "mp3" to "mad"
...
A decoder plugin should be named after the library which is used.
2009-02-16 19:30:45 +01:00
Max Kellermann
585f81ece1
output_api: don't include config.h
...
If an output plugin requires config.h, it should include it directly.
2009-02-16 18:41:30 +01:00
Max Kellermann
02c99d7716
mixer: include cleanup
...
Don't include conf.h in mixer_api.h. Use a forward struct declaration
instead.
2009-02-16 18:40:04 +01:00
Max Kellermann
46c15e4ab3
output: include cleanup
...
Don't include output_api.h in output_internal.h. This change requires
adding missing includes in several sources.
2009-02-16 01:51:50 +01:00
Max Kellermann
83ce0e5325
mixer_api: replaced method "control()" with "{get,set}_volume()"
...
The method control() is too complicated, and overengineered. Replace
it with two trivial functions: get_volume() and set_volume().
2009-02-16 01:39:52 +01:00
Max Kellermann
37bc31d161
output_plugin: replaced method "control()" with "mixer()"
...
The output plugin shouldn't know any specifics of the mixer API. Make
it return the mixer object, and let the caller deal with it.
2009-02-16 01:39:00 +01:00
Max Kellermann
79b50b7d9c
output_plugin: added inline wrapper functions
...
Similar to the decoder plugin API: added wrapper functions to increase
code readability.
2009-02-16 01:38:10 +01:00
Max Kellermann
67da4cfe3c
output_plugin: reorder method declarations
...
Initialization and deinitialization first, then tag functions, then
play/cancel/pause.
2009-02-16 01:38:09 +01:00
Max Kellermann
80702fa3a2
output_api: moved "struct audio_output_plugin" to output_plugin.h
...
If we move the plugin struct to a separate header, we don't have to
include the big fat output_api.h everywhere.
2009-02-16 01:37:42 +01:00
Max Kellermann
a5c0394007
output_api: moved "enum output_command" to output_internal.h
...
Now that the output_command enum isn't exposed to output plugins
anymore, we can hide its definition within output_internal.h.
2009-02-16 00:43:12 +01:00
Max Kellermann
3a82283b19
output_control: no CamelCase
...
Renamed variables.
2009-02-16 00:43:06 +01:00
Max Kellermann
ed591f19ef
wildmidi: check if configurationn file exists
...
Don't call WildMidi_Init() if the configuration file does not exist.
Don't let libwildmidi clutter stderr with its warning message.
2009-02-15 18:41:05 +01:00
Max Kellermann
5c68f91dae
wildmidi: obtain timidity.cfg location from mpd.conf
2009-02-15 18:41:03 +01:00
Max Kellermann
1f88cd73d4
decoder_list: added configuration option to disable decoder plugins
2009-02-15 18:40:47 +01:00
Max Kellermann
6cfacc778c
decoder_list: added configuration block "decoder"
...
The "decoder" configuration block may contain the configuration of one
decoder plugin.
2009-02-15 18:35:19 +01:00
Max Kellermann
dec5d48f80
decoder_plugin: pass struct config_param to init() method
...
Preparing for per-plugin configuration sections in mpd.conf.
2009-02-15 18:34:14 +01:00
Max Kellermann
900784bb4e
decoder_api: moved enum decoder_command to decoder_command.h
...
Minimize header dependencies, again.
2009-02-15 18:33:31 +01:00
Max Kellermann
3e3c524264
decoder_plugin: added inline wrapper functions
...
Increase code readability, always use the wrapper functions instead of
calling the plugin method pointers directly.
2009-02-15 18:33:28 +01:00
Max Kellermann
a28287073b
decoder_api: moved struct decoder_plugin to decoder_plugin.h
...
The decoder_plugin struct is used by both the MPD core and the decoder
plugin implementations. Move it to a shared header file, to minimize
header dependencies.
2009-02-15 17:48:37 +01:00
Max Kellermann
92c203d705
daemon: return early from daemonize_set_user()
...
If no "user" is configured, return from daemonize_set_user(). Save
one level of indent.
2009-02-15 16:58:52 +01:00
Max Kellermann
98994c5939
daemon: ignore "user" setting if already running as that user
...
If mpd.conf specifies a user, and MPD is invoked by exactly this user,
ignore the "user" setting. Don't bother to look up its groups and
don't attempt to change uid, it won't work anyway.
2009-02-15 16:47:21 +01:00
Max Kellermann
59e62d95bd
daemon: added comments to daemonize_detach()
2009-02-15 16:28:39 +01:00
Max Kellermann
42415592b4
daemon: print fork error message
...
Print details on why the fork() fails.
2009-02-15 16:27:50 +01:00
Max Kellermann
fd8c63b619
daemon: moved code to daemonize_detach()
...
Moved the code which detaches from the parent process/session to a
separate function.
2009-02-15 16:27:09 +01:00
Romain Bignon
855466df40
playlist_edit: improved range checks in shufflePlaylist()
2009-02-13 11:12:31 +01:00
Romain Bignon
9fe459f625
added the shufflerange command
...
This command shuffles a range of songs.
2009-02-13 10:43:30 +01:00
Max Kellermann
df9245c2aa
update: free deleted subdirectories
...
Use delete_directory() for removing sub directories instead of
dirvec_clear(). This ensures that all memory occupied by
subdirectories of deleted directories is freed.
2009-02-12 19:12:32 +01:00
Max Kellermann
16bab6019b
update: recursively purge deleted directories
...
When a directory is deleted, MPD deleted only the directory from the
database; it did not bother to walk the full tree to free all memory
and to remove deleted songs from the playlist. Replace a
dirvec_delete() with delete_directory().
2009-02-12 19:12:25 +01:00
Max Kellermann
a06e281421
aac: fix stream metadata
...
Pass the input_stream object to decoder_data(). Without it, the MPD
core does not see stream tags.
2009-02-12 18:39:19 +01:00
Max Kellermann
d55f6b5304
database: don't load database after charset was reconfigured
...
When you change the filesystem charset, discard the old database file
and create a new one. The old database file will most likely contain
stale or invalid information.
2009-02-12 18:31:00 +01:00
Max Kellermann
a2ce6e5b82
wildmidi: added seeking support
...
Use WildMidi_SampledSeek() for seeking in a MIDI file.
2009-02-12 18:19:13 +01:00
Max Kellermann
321eb1077a
wildmidi: provide and current total song time
...
The _WM_Info struct provides all we need, it is obtained by
WildMidi_GetInfo().
2009-02-12 16:47:48 +01:00
Max Kellermann
1492339463
wildmidi: new decoder plugin for MIDI files
2009-02-12 16:43:18 +01:00
Max Kellermann
e56a90f3b3
fluidsynth: new decoder plugin for MIDI files
...
There are a few problems left in this plugin:
- fluidsynth decodes in real time, while MPD prefers to buffer as
quickly as possible; as a workaround, this plugin uses a timer
object to synchronize with real-time playback
- I don't know yet how fluidsynth tells me when the song has ended
- the "soundfont" configuration setting is not yet documented, and it
will likely change soon (in favor of a per-decoder configuration
block)
2009-02-12 08:43:26 +01:00
Max Kellermann
1136f6fb7a
sidplay: new decoder plugin for playing C64 SID files
2009-02-11 20:31:17 +01:00
Max Kellermann
b6b181ca87
decoder_thread: re-enable file decoders
...
By accident, I committed a debug flag, which disallowed the decoder
thread to play files locally. Undo this hunk.
2009-02-11 19:58:50 +01:00
Max Kellermann
550b9c3f23
ffmpeg: added TTA support
...
The ffmpeg library supports the "True Audio Codec". The entry in
ffmpeg_suffixes was missing.
2009-02-11 18:27:11 +01:00
Max Kellermann
58a5d30826
playlist: don't preserve "current" song after "random" toggle
...
When MPD is not playing, it may still remember which is the "current"
song. When you switch to "random" mode, MPD will always start playing
exactly this song. This defies the goal of "random" mode a little.
Clear the "current" song when MPD is not playing during the "random"
mode switch.
2009-02-11 18:02:50 +01:00
Max Kellermann
9d447dda1d
audio: moved code to output_command.c
...
The output_command library provides a command interface to the audio
outputs. It assumes the input comes from an untrusted source
(i.e. the client) and verifies all parameters.
2009-02-11 18:02:45 +01:00
Max Kellermann
3bc4224bfd
audio_format: added validation functions
...
In addition to audio_format_valid(), provide functions which validate
only one attribute of an audio_format. These functions are reused by
audio_format_parse().
2009-02-11 18:00:48 +01:00
Max Kellermann
5090cf6484
audio: replaced parseAudioConfig() with audio_format_parse()
...
Added audio_format_parse() in a separate library, with a modern
interface: return a GError instead of logging errors. This allows the
caller to deal with the error.
2009-02-11 18:00:41 +01:00
Qball Cow
5484aaee5f
Set boundPort to the current portnumber, so zeroconf announces the right port number
2009-02-11 14:45:04 +01:00
Max Kellermann
b21e8ad4a5
output_all: immediately reopen output on play
...
When MPD explicitly starts playing, ignore the "REOPEN_AFTER" timeout.
This timeout was useful when MPD attempted to reopen a failed device
over and over, but it confuses users when they explicitly tell MPD to
start playing, while MPD insists to wait for the 10 seconds to pass.
2009-02-10 22:15:42 +01:00
Max Kellermann
e8aee4d992
output_thread: moved code to ao_close()
...
Merge some duplicate code into one function.
2009-02-10 22:09:07 +01:00
Max Kellermann
a96993f655
output_thread: leave the pause loop on failure
...
When the pause() method fails, leave the pause loop, because calling
pause() on a closed device is not allowed.
2009-02-10 22:08:05 +01:00
Max Kellermann
bd8ecba449
output_thread: consistently (de)initialize pcm_convert_state
...
Fix a memory leak: it was not guaranteed that pcm_convert_deinit() was
called for each pcm_convert_init(). This patch always (de)initializes
the pcm_convert library when the audio_output.open flag is flipped.
2009-02-10 22:07:59 +01:00
Max Kellermann
61e3075981
output_api: no CamelCase in struct audio_output
...
Renamed audio_output struct members.
2009-02-10 21:50:51 +01:00
Max Kellermann
744702f266
shout_mp3: use audio_format_frame_size()
...
Use audio_format_frame_size() instead of
channels*audio_format_sample_size().
2009-02-10 21:30:28 +01:00
Max Kellermann
b27d9e055b
shout: pass void pointer to the encoder
...
Pass the music chunk as a "const void *" to the encoder, instead of a
"const char *". Actually, both encoders currently expect 16 bit
samples, passing a 8-bit character is rather pointless.
2009-02-10 21:28:25 +01:00
Max Kellermann
12756c1b55
shout_ogg: moved PCM conversion to a separate function
...
For simplification, moved the PCM conversion code to
pcm16_to_ogg_buffer(). Work with a int16_t pointer instead of a char
pointer.
2009-02-10 21:25:45 +01:00
Max Kellermann
54982f755f
ao: declare AoData.writeSize as size_t
...
writeSize is a memory size and its type should thus be size_t. This
allows us to remove two explicit casts.
2009-02-10 21:24:35 +01:00
Max Kellermann
fe142647a5
osx: removed disabled debug messages
...
Nobody needs these debug messages anymore.
2009-02-10 20:57:21 +01:00
Max Kellermann
86d4cf0dbd
output_all: added API documentation
2009-02-10 18:51:59 +01:00
Max Kellermann
facf146cfd
output_all: moved code to audio_output_all_finished()
...
audio_output_all_finished() returns bool, not int.
2009-02-10 18:51:53 +01:00
Max Kellermann
4493a96425
output_all: no CamelCase
...
Renamed functions and variables.
2009-02-10 18:51:51 +01:00
Max Kellermann
a3a6eefcfe
audio: moved code to output_all.c
...
Moved code which deals with all audio outputs at once into a separate
library.
2009-02-10 18:51:49 +01:00
Max Kellermann
e7505381eb
audio: moved protocol code to output_print.c
2009-02-10 18:51:42 +01:00
Max Kellermann
49ff2aceb5
audio: moved state file code to output_state.c
2009-02-10 18:51:39 +01:00
Max Kellermann
f141d90533
audio: removed isCurrentAudioFormat()
...
This function isn't used anymore.
2009-02-10 18:51:38 +01:00
Max Kellermann
2a388c2aa7
crossfade: don't use isCurrentAudioFormat()
...
The crossfading code shouldn't depend on the audio output code. Pass
the current audio format to cross_fade_calc() and let it compare
directly, instead of using isCurrentAudioFormat().
2009-02-10 18:51:29 +01:00
Max Kellermann
34244398d0
playlist: fix assertion when last/current song is deleted
...
When MPD is stopped, but the last song is still the "current song",
and you delete it, playlist->current is not updated, and becomes an
invalid value. Fix this by catching "!playlist->playing &&
playlist->current == (int)songOrder".
2009-02-10 17:55:08 +01:00
Max Kellermann
e8787ac4a4
audio: added output enumeration functions
...
Added audio_output_get(), audio_output_find().
2009-02-10 17:21:19 +01:00
Max Kellermann
3e87033145
audio: added audio_output_config_count()
...
audio_output_config_count() returns the number of audio outputs in the
configuration file. It is only used by initAudioDriver(). The public
function audio_output_count() now returns audioOutputArraySize.
2009-02-10 17:21:10 +01:00
Max Kellermann
ff09a41807
output_internal: added missing output_api.h include
...
output_api.h is required for enum audio_output_command.
2009-02-10 17:21:08 +01:00
Max Kellermann
c2bbf876fb
player: added some more assertions
...
Assertions on pc.command and pc.next_song.
2009-02-10 08:18:28 +01:00
Max Kellermann
799d1c9dc2
player_thread: reset pc.next_song only if queued
...
When we reset pc.next_song if there is no song queued, this might
cause a race condition: the next song to be played is cleared, while
pc.command was already set. Clear the "next_song" only if there is a
song queued for the current do_play() invocation.
2009-02-10 08:18:01 +01:00
Max Kellermann
40393ae64f
playlist: update queued song after seeking
...
If a new song is queued before calling playerSeek(), then the player
and the playlist enter an inconsistent state, because the player
discards the playlist's "queued" song in favor of the seeked song.
Call playlist_update_queued_song() after playerSeek().
2009-02-10 00:17:46 +01:00
Max Kellermann
2274434e53
player_thread: reset pc.next_song
...
After a player command (successful or not), reset pc.next_song,
because the queue is supposed to be empty then. Otherwise,
playlist.queued and pc.next_song may disagree, which triggers an
assertion failure.
2009-02-10 00:17:34 +01:00
Max Kellermann
710b3275ea
queue: update order array after song move
...
Commit f78cddb4
introduced a regression: after a song was moved, the
order array was not updated (in random mode). This caused MPD to
think the "current" song has changed when you moved something to the
position of the current song.
2009-02-09 22:47:23 +01:00
Vladimir S Eremin
d9ce8d8342
playlist: fixed "next song" check
...
Check if the "current+1" position is actually valid.
2009-02-09 21:14:38 +01:00
Max Kellermann
e2f22229a6
output_api: include "config.h" without "../"
...
Including "../config.h" breaks on some systems.
2009-02-09 16:50:25 +01:00
Max Kellermann
1ac328b553
shout: clear buffer before calling the encoder
...
Always assume the buffer is empty before calling the encoder. Always
flush the buffer immediately after there has been added something.
This reduces the risk of buffer overruns, because there will never be
a "rest" in the current buffer.
2009-02-09 16:38:25 +01:00
Max Kellermann
7fc25ad567
shout: don't postpone metadata
...
Don't duplicate the tag received by the send_metadata() method - send
it to the shout server directly.
2009-02-09 16:38:22 +01:00
Max Kellermann
f5c43889c3
shout: use libshout's synchronization
...
Removed the manual timer synchronization from the shout plugin.
libshout's shout_sync() function does it for us.
2009-02-09 16:38:20 +01:00
Max Kellermann
f6455d5f79
shout: switch to blocking mode
...
The non-blocking mode of libshout is sparsely documented, and MPD's
implementation had several bugs. Also removed connect throttling
code, that is done by the MPD core since 0.14.
2009-02-09 16:38:03 +01:00
Max Kellermann
cf94008b27
shout: removed shout_data.tag_to_send
...
When shout_data.tag!=NULL, there is a "tag to send". The tag_to_send
flag is redundant.
2009-02-09 16:37:16 +01:00
Max Kellermann
044f2561ce
shout: removed shout_data.shout_error
...
That variable is set in handle_shout_error(), but is never read.
2009-02-09 16:37:12 +01:00
Vladimir S Eremin
cde4cb944e
playlist: provide information about "next song"
...
In random mode, this patch allows clients to see the "next song" in
the queue.
2009-02-09 10:38:03 +01:00
Max Kellermann
b358962960
playlist: increase playlist version after loading state
...
After the state file has been loaded, the playlist version is still
"1", and "plchanges 1" returns the whole playlist. Fix this by
increasing the playlist version after the state file has been loaded.
2009-02-04 23:50:04 +01:00
Max Kellermann
5d0c83ba5e
update: check whether stickers are enabled
...
If stickers are not configured at runtime, don't call
sticker_song_delete().
2009-02-04 22:33:43 +01:00
Max Kellermann
94685aa9bd
playlist_save: added spl_save_playlist()
...
spl_save_playlist() is a wrapper for spl_save_queue().
2009-02-04 22:15:37 +01:00
Max Kellermann
19397a84cc
playlist: added G_LOG_DOMAIN
...
Removed the explicit "playlist:" prefix from all log messages.
2009-02-04 22:15:31 +01:00
Max Kellermann
2a1bef2225
playlist_print: added wrappers for printing the queue
...
Hide the details of the playlist behind wrapper functions.
2009-02-04 22:09:04 +01:00
Max Kellermann
cbea8a2a00
playlist: pass const playlist pointers
...
Pass constant playlist objects to functions which do not modify it.
2009-02-04 22:08:39 +01:00
Max Kellermann
080dd095a5
playlist_print: added API documentation
2009-02-04 21:09:37 +01:00
Max Kellermann
60bec77664
playlist_print: use bool instead of int
...
Return true on success, instead of 0. Converted the "detail"
parameter to bool.
2009-02-04 21:04:30 +01:00
Max Kellermann
f817285922
playlist_print: no CamelCase
...
Renamed one function.
2009-02-04 21:02:11 +01:00
Max Kellermann
cfaede610c
playlist_print: include cleanup
2009-02-04 21:02:09 +01:00
Max Kellermann
15f914a74a
playlist: moved code to playlist_edit.c
...
Moved functions for playlist editing (append, delete, shuffle, move)
to playlist_edit.c.
2009-02-04 20:31:53 +01:00
Max Kellermann
f3d6d536f6
playlist: moved code to playlist_control.c
...
Moved handlers for control commands (play, stop, next, prev) to
playlist_control.c.
2009-02-04 20:31:22 +01:00
Max Kellermann
4db51eeccd
playlist: call syncPlaylistWithQueue() only in the event handler
...
Don't call syncPlaylistWithQueue() in nextSongInPlaylist() and
previousSongInPlaylist(). This is a relic from the time when there
was no event, and was a workaround to the timing problem.
2009-02-04 19:44:32 +01:00
Max Kellermann
8d3205871c
playlist: renamed global "playlist" variable to "g_playlist"
...
Export the "g_playlist" variable, and pass it to all playlist
functions. This way, we can split playlist.c easier into separate
parts. The code which initializes the singleton variable is moved to
playlist_global.c.
2009-02-04 18:56:41 +01:00
Max Kellermann
1720c7090d
playlist: moved code to playlist_state.c
...
Moved everything related to saving or loading the playlist from/to the
state file to playlist_state.c.
2009-02-04 18:52:39 +01:00
Max Kellermann
e27a665b89
playlist: simplified playlist.queued updates
...
Before every operation which modifies the playlist, remember a pointer
to the song struct. After the modification, determine the "next song"
again, and if it differs, dequeue and queue the new song.
This removes a lot of complexity from the playlist update code, and
makes it more robust.
2009-02-04 18:52:37 +01:00
Max Kellermann
824d299eb1
ffmpeg: fixed seek integer overflow
...
The "current" variable is used for calculating the seek destination,
and was declared as "int". With very long song files, the 32 bit
integer can overflow. ffmpeg expects an int64_t, which is very
unlikely to overflow. Switch to int64_t.
2009-02-03 22:51:44 +01:00
Max Kellermann
f3b73b824f
ffmpeg: check if the time stamp is valid
...
When ffmpeg cannot estimate the elapsed time, it sets
AVPacket.pts=AV_NOPTS_VALUE. Our ffmpeg decoder plugin did not check
for that special value.
2009-02-03 22:51:41 +01:00
Max Kellermann
81b6c0d77b
ffmpeg: don't warn of empty packet output
...
If avcodec_decode_audio2() returns no output for an AVPacket,
libavcodec may buffer some data, and return a larger chunk of output
later. This patch disables a lot of bogus warnings.
2009-02-03 22:51:38 +01:00
Max Kellermann
a7632b09e0
ffmpeg: print codec name
...
Output the name of the codec as a debug message. During my tests,
ffmpeg never filled this struct member, but it may do so in the past,
and this debug message might become helpful.
2009-02-03 22:51:35 +01:00
Max Kellermann
3b0a78fe0d
shout_mp3: call lame_close() in clear_encoder() method
...
The shout_mp3 encoder had two bugs: when no song was ever played, MPD
segfaulted during cleanup. Second bug: memory leak, each time the
shout device was opened, lame_init() was called again, and
lame_close() is only called once during shutdown.
Fix this by shutting down LAME each time the clear_encoder() method is
called.
2009-02-02 18:22:56 +01:00
Max Kellermann
1fdf25214f
shout_mp3: free the lame_data struct on exit
...
Make valgrind a little bit happier: free the global lame_data struct
in the finish() method.
2009-02-02 18:22:53 +01:00
Max Kellermann
4b7c28f98e
player_thread: set player error when output device fails
...
When the output device fails to play a chunk, set pc.error to
PLAYER_ERROR_AUDIO. This way, the playlist knows that it should not
queue the next song.
2009-02-02 18:22:41 +01:00
Max Kellermann
fdb80e74b7
main: don't pass argv[0] to openDB()
...
Don't mention the program name in the error message.
2009-02-02 16:58:51 +01:00
Max Kellermann
37bcd711b5
main: create database after daemonization
...
When the update thread is started before MPD has forked (for
daemonization), it is killed, because threads do not survive a fork().
This induces an inconsistent state where MPD won't start any update
thread at all, because it thinks the thread is already running.
2009-02-02 16:57:24 +01:00
Max Kellermann
231636b9eb
output_api: moved the command check out of method pause()
...
Move the "while" loop which checks for commands to the caller
ao_pause(). This simplifies the pause() method, and lets us remove
audio_output_is_pending().
2009-01-30 20:12:38 +01:00
Max Kellermann
6aa734dc35
playlist: clear playlist.playing when deleting current song
...
This fixes an assertion failure: when the last song in the playlist
was playing, and you deleted it, MPD aborted.
2009-01-30 19:54:19 +01:00
Max Kellermann
dd23e71953
output_api: removed DISABLED_AUDIO_OUTPUT_PLUGIN
...
The macro is unused.
2009-01-30 19:48:09 +01:00
Max Kellermann
a2e0b71aad
output_api: removed audio_output_closed()
...
The function is only used by the MVP output plugin, and this one call
is wrong.
2009-01-30 19:47:59 +01:00
Max Kellermann
eeec32feaa
jack: don't override output_ports in connect()
...
If no ports are configured, don't overwrite the (NULL) configuration
with the port names of the first JACK server. If the server changes
after a JACK reconnect, MPD won't attempt to auto-detect again.
2009-01-30 19:44:58 +01:00
Max Kellermann
a93e73bea8
jack: removed sample_rate callback
...
Currently, the JACK plugin manipulates the audio_format struct which
was passed to the open() method. This is very likely to break,
because the plugin must not permanently store this pointer. After
this patch, MPD ignores sample rate changes. It looks like other
software is doing the same, and I guess this is a non-issue.
This patch converts the audio_format pointer within jack_data into a
static audio_format struct.
2009-01-30 19:43:31 +01:00
Max Kellermann
5900827675
configure.ac: detect jack_set_info_function()
...
jack_set_info_function() is not provided by older libjack versions.
Attempt to detect if it is available.
2009-01-30 19:43:25 +01:00
Matthias Drochner
5b85288664
mikmod: call MikMod_Exit() only in the finish() method
...
Hi -
independently of libmikmod's other problems - there seems
to be a problem in mpd's wrapper: MikMod_Exit() is called
after the first file is decoded, which frees some ressources
within the mikmod library. An attempt to play a second file
leads to a crash. The appended patch fixes this for me.
(I don't know what the "dup" entry is good for - someone
who knows should review that too.)
best regards
Matthias
[mk: removed 3 more MikMod_Exit() invocations]
2009-01-30 17:51:16 +01:00
Max Kellermann
02bfb0c4e4
wavpack: pass NULL if the .wvc file fails to open
...
The wavpack library seems to use the .wvc stream even if the OPEN_WVC
flag is not set. In this case, pass NULL to be sure libwavpack won't
use it.
2009-01-30 16:05:02 +01:00
Max Kellermann
0d3dff9512
jack: print info messages
...
Use jack_set_info_function() to install an info callback. Don't let
libjack print them to stderr.
2009-01-30 15:57:43 +01:00
Max Kellermann
76b217f71e
client: check for G_IO_ERR and G_IO_HUP
...
When we do not explicitly catch G_IO_ERR and G_IO_HUP, GLib can go
into an infinite loop, because it won't deliver the socket error to
MPD.
2009-01-30 15:56:53 +01:00
Max Kellermann
c38dd9e8d8
mapper: ignore duplicate slashes in playlists
...
When there are duplicate slashes in the song paths, eliminate them;
example:
/var/lib/mpd/music//foo.mp3
becomes:
/var/lib/mpd/music/foo.mp3
The slash is only detected at the border between the music_directory
and the local part.
2009-01-30 13:51:18 +01:00
Max Kellermann
e3d4fa6946
mapper: remove trailing slashes from music_directory
...
When the user configures a music_directory with a trailing slash, it
may break playlist loading, because MPD expects a double slash. Chop
off the trailing slash.
2009-01-30 13:50:24 +01:00
David Horn
efb04532df
ffmeg: added support for the tags comment, genre, year
...
ffmpeg_tag_internal() does not look for a few tags that mpd
supports. Most noteably:
comment -> TAG_ITEM_COMMENT -> Description
genre -> TAG_ITEM_GENRE -> WM/Genre (not WM/GenreID)
year -> TAG_ITEM_DATE -> WM/Year
I *think* that this is the last of the tags that AVFormatContext() in
ffmpeg supports that mpd also uses.
2009-01-30 09:42:49 +01:00
Max Kellermann
32d6d4499e
input_stream: make seek(), buffer() optional
...
Make those two methods optional to implement, and let input_stream.c
provide fallbacks. The buffer() method will be removed one day, and
there is now only one implementation left (input_curl.c).
2009-01-30 00:58:03 +01:00
Max Kellermann
82cfce76eb
archive: replaced setup_stream() with open_stream()
...
The open_stream() method opens the input_stream. This allows the
archive plugin to do its own initialization, and it also allows it to
use input_stream.data. We can remove input_stream.archive now, which
was unnatural to have in the first place.
2009-01-30 00:53:32 +01:00
Max Kellermann
dc1cc7e7e5
input_stream: let the implementation assign is->plugin
...
This way, plugins can manipulate the plugin pointer during open().
2009-01-30 00:40:14 +01:00
Max Kellermann
297101c3f8
input_stream: documented the API
2009-01-30 00:07:53 +01:00
Max Kellermann
27c5b90dc3
jack: don't manually close on shutdown
...
Return false from mpd_jack_play(), let the MPD core close the device.
2009-01-29 23:16:34 +01:00
Max Kellermann
846f126259
jack: initialize output_ports if not configured
...
Don't leave uninitialized bytes in the jack_data struct.
2009-01-29 23:16:30 +01:00
Max Kellermann
e959c8e084
jack: close JACK client on stop
...
When MPD stops playback, close the JACK client connection.
2009-01-29 23:16:21 +01:00
Max Kellermann
e68924435a
jack: removed "bps" attribute
...
The "bps" attribute is calculated, but never used.
2009-01-29 23:15:55 +01:00
Max Kellermann
5a2949552b
jack: make mpd_jack_connect() return bool
...
Return true/false instead of 1/-1.
2009-01-29 23:15:27 +01:00
Max Kellermann
eccc7c21bd
jack: use loops for allocating/freeing ports/buffers
...
Preparation for supporting other channel numbers than stereo: use
loops instead of duplicating code for the second channel. Most
likely, gcc will unroll these loops, so the binary won't be any
different.
2009-01-29 23:14:04 +01:00
Max Kellermann
3baeddbcae
jack: fail if jack_get_ports() returns NULL
...
When jack_get_ports() returns NULL, we cannot have any ports to
connect to, and the device cannot play anything.
2009-01-29 23:12:16 +01:00
Max Kellermann
5bcf415ad0
jack: use jack_port_name() instead of g_malloc()+sprintf()
...
libjack's jack_port_name() function returns the effective port name,
we don't need to do it manually.
2009-01-29 23:12:10 +01:00
Max Kellermann
67cf2ee6e4
jack: initialize libjack's error function in mpd_jack_init()
...
Do the global libjack initialization in the global plugin
initialization function.
2009-01-29 23:12:08 +01:00
Max Kellermann
3a75f15844
mms: declare GLib log domain
2009-01-29 21:43:45 +01:00
Max Kellermann
caa4d28f04
added support for the MMS protocol
...
This patch implements the MMS protocol, by using libmms. It is quite
experimental: it does not support seeking yet, and it is currently
using synchronous I/O, which causes MPD to hang while waiting for the
server.
2009-01-29 21:42:10 +01:00
Max Kellermann
36ca114629
player_control: reset pc.error if pc.errored_song is cleared
...
When the playlist is cleared, pc.errored_song is also cleared. This
causes pc_errored_song_uri() to crash, because it assumes that
pc.errored_song is set. Reset pc.error to fix that assumption.
2009-01-29 21:39:29 +01:00
Max Kellermann
a73266962f
jack: reduced sleep time to 1ms
...
When waiting for free space in the ring buffer, the JACK plugin
sleeped 10ms until there is enough space. This delay was too large
for low-latency setups (<10ms), and created a lot of xruns. Work
around that by reducing the sleep time to 1ms.
A proper solution for this would be to use an event based approach,
and we will do it, just not now.
2009-01-29 18:13:09 +01:00
Max Kellermann
1e0ceb3d88
jack: clear "shutdown" flag on reconnect
...
When the connection failed once, you had to restart MPD, because it
never cleared the jack_data.shutdown flag. Instead, it refused to
play anything "because there is no client thread" (which is wrong at
that point).
2009-01-29 18:13:03 +01:00
Max Kellermann
3a070d3d23
jack: allocate ring buffers before connecting
...
If the ring buffers are allocated after jack_activate(),
mpd_jack_process() might segfault because it attempts to access them.
2009-01-29 18:12:52 +01:00
Max Kellermann
bbf0453709
jack: register ports before activating clients
...
Call jack_port_register() before jack_activate().
2009-01-29 18:12:25 +01:00
Max Kellermann
24d6ae8bea
zeroconf: corrected default service name usage
...
The variable "serviceName" is initialized with SERVICE_NAME, but was
overwritten with NULL when the setting is not configured.
2009-01-27 20:17:44 +01:00
Max Kellermann
8bc6bca555
client: use the GIOChannel for I/O
...
GIOChannel is more portable than raw read()/write() calls. We're
using GIOChannel anyway, because we need it for plugging the client
into the GLib main loop.
Configure the GIOChannel to the bare minimum: no character set, no
buffering.
2009-01-25 19:54:57 +01:00
Max Kellermann
b0ea975642
client: use GLib's win32 IO channel on WIN32
...
Use g_io_channel_win32_new_socket() instead of g_io_channel_unix_new()
on WIN32.
2009-01-25 19:40:10 +01:00
Laszlo Ashin
808a369ca8
tag: remove unused variable param
...
This variable doesn't have a role since 80799fa8
.
2009-01-25 19:38:49 +01:00
Max Kellermann
c4bb227bdb
database: eliminate "goto" usage
...
http://xkcd.com/292/
2009-01-25 18:47:23 +01:00
Max Kellermann
a45922cd66
use g_free() instead of free()
...
On some platforms, g_free() must be used for memory allocated by
GLib. This patch intends to correct a lot of occurrences, but is
probably not complete.
2009-01-25 18:47:21 +01:00
Max Kellermann
936449c622
mixer_api: removed struct mixer_data
...
The mixer plugins should re-use the mixer struct and incorporate it in
their object class.
2009-01-25 17:45:16 +01:00
Max Kellermann
dc575106c2
mixer: merged methods "init" and "configure"
...
Both methods are always called together. There is no point in having
them separate. This simplifies the code, because the old configure()
method could be called more than once, and had to free old
allocations.
2009-01-25 17:38:12 +01:00
Max Kellermann
db2058a265
mixer: removed mixer_configure_legacy(), AC_MIXER_CONFIGURE
...
Those have been superseded by the new legacy configuration code.
2009-01-25 17:38:06 +01:00
Max Kellermann
188f9e663c
mixer: configure legacy mixer before the audio outputs
...
Reimplemented the legacy mixer configuration: copy the deprecated
configuration values into the audio_output section. Don't configure
the mixers twice (once for the audio_output, and a second time for the
legacy values).
This requires volume_init() to be called before initAudioDriver().
2009-01-25 17:38:02 +01:00
Max Kellermann
8695b94232
mixer: removed mixer_configure(), configure mixer in mixer_new()
...
Allocate the mixer object when it is configured.
Merged mixer_configure() into mixer_new(). mixer_new() was quite
useless anyway.
2009-01-25 17:37:59 +01:00
Max Kellermann
763dd8c1dd
mixer: return a mixer struct pointer
...
Don't use statically allocated mixer objects.
2009-01-25 17:37:55 +01:00
Max Kellermann
ad8561bfdc
mixer: make all mixer_plugin pointers const
...
The plugin structures must never be modified.
2009-01-25 17:37:52 +01:00
Max Kellermann
899eb5383d
mixer: added missing copyright headers
2009-01-25 17:37:50 +01:00
Max Kellermann
cb1f2e0c01
conf: added config_add_param()
...
The function config_add_param() allows adding new configuration
parameters.
2009-01-25 17:37:45 +01:00
Qball Cow
b6c3adcaaa
Add idle event on sticker deletion, update and insertion
2009-01-25 16:37:29 +01:00
Max Kellermann
3635c93acb
conf: allow param==NULL
...
Return the default value in the conf_get_block_*() functions when
param==NULL was passed.
This simplifies a lot of code, because all initialization can be done
in one code path, regardless whether configuration is present.
2009-01-25 16:04:03 +01:00
Max Kellermann
5f77910097
conf: const pointers in block get functions
...
All config_get_block_*() functions should accept constant config_param
pointers.
2009-01-25 16:03:49 +01:00
Max Kellermann
80799fa84e
use config_get_string() instead of config_get_param()
...
config_get_string() is easier to use than config_get_param() because
it unpacks the config_param struct.
2009-01-25 16:00:51 +01:00
Max Kellermann
bdfb6c239a
playlist: moved is_valid_playlist_name() to stored_playlist.c
2009-01-25 14:19:28 +01:00
Max Kellermann
98cb8f3969
playlist: moved savePlaylist() and loadPlaylsit() to playlist_save.c
2009-01-25 14:11:47 +01:00
Max Kellermann
69c74afa25
playlist: removed g_rand, PLAYLIST_HASH_MULT
...
Both are unused.
2009-01-25 14:01:27 +01:00
Max Kellermann
688880bc0b
queue: added queue_shuffle_order_last()
...
This function shuffles the last song of a range. This is used by
addSongToPlaylist().
2009-01-25 14:00:51 +01:00
Max Kellermann
1a59afa388
stored_playlist: moved configuration variables from playlist.c
...
Don't declare and export variables specific to stored playlists in
playlist.c/playlist.h.
2009-01-25 13:53:16 +01:00
Max Kellermann
85f7e964de
player_thread: start decoder thread in player thread
...
Start the decoder thread when the player thread starts. The decoder
thread is already stopped by the player thread.
2009-01-25 13:44:39 +01:00
Max Kellermann
d628eb3e8b
player_control: added player_control.thread
...
player_control.thread contains the handle of the player thread, or
NULL if the player thread isn't running.
2009-01-25 13:44:33 +01:00
Max Kellermann
ac0e799965
decoder_control: added decoder_control.thread
...
decoder_control.thread contains the handle of the decoder thread, or
NULL if the decoder thread isn't running.
2009-01-25 13:44:27 +01:00
Max Kellermann
2c45224be7
mapper: added dot to PLAYLIST_FILE_SUFFIX
...
Some code will be a little bit simpler if the dot is part of the
string literal.
2009-01-25 13:43:57 +01:00
Max Kellermann
7cc15ffc08
alsa: added comments
...
Document alsa_data members.
2009-01-25 13:13:24 +01:00
Max Kellermann
fb3e43ed73
alsa: frame_size is size_t, not int
...
frame_size is a memory size and should be a size_t, not a signed integer.
2009-01-25 13:07:06 +01:00
Max Kellermann
d887b6353f
alsa: no CamelCase
...
Renamed types, functions, variables.
2009-01-25 13:05:16 +01:00
Dan McGee
27baf6913e
alsa: fix option parsing and restore default period_time
...
Two bugs here led to a large number of interrupts being generated on the
sound card when ALSA output is being used. Because we specify no default
period_time, the sound card gives us 3000 interrupts/sec rather than a more
sane 20 or 30. This completes the revert of dd7711 already started by
4ca24f.
The larger bug was in the change to config_get_block_unsigned() and using 0
as the default value for both 'buffer_time' and 'period_time'. This means
any pre-setting of these options in newAlsaData() gets wiped out. Add a new
default for period_time, and ensure default values for buffer_time and
period_time are used if none are provided by the user.
Signed-off-by: Dan McGee <dan@archlinux.org>
[mk: set defaults in newAlsaData() to fix auto-configuration; renamed
"_MS" back to "_US" because ALSA expects microseconds, not milliseconds]
Signed-off-by: Max Kellermann <max@duempel.org>
2009-01-25 12:52:37 +01:00
Qball Cow
16796b1209
Fix tag not being set when casefolding the locate_item_list
2009-01-25 12:20:47 +01:00
Max Kellermann
2bfe6f6412
renamed the "mod" decoder plugin to "mikmod"
...
We have two mod plugins now: modplug and mod. Rename the latter to a
more useful name.
2009-01-24 20:18:44 +01:00
Max Kellermann
5795be1f8d
tag_id3: added MusicBrainz tag support
...
Added support for the MusicBrainz TXXX tags, documented on:
http://musicbrainz.org/doc/MusicBrainzTag
2009-01-24 20:07:23 +01:00
Max Kellermann
b4d90cc28c
tag_id3: always allocate tag object
...
Save some code: always allocate the tag object, and free it when it
turns out to be empty.
2009-01-24 20:02:59 +01:00
Max Kellermann
30e2880675
tag: added support for MusicBrainz tags
...
Added all important id tags from the MusicBrainz wiki:
http://musicbrainz.org/doc/MusicBrainzTag
This should automatically enable its suport in the vorbis and flac
decoder plugins.
2009-01-24 20:02:55 +01:00
Max Kellermann
0dc1b4a44e
modplug: removed EOF check from the while loop
...
EOF is checked by input_stream_read() (decoder_read() here). Don't do
it twice. The check was wrong anyway, it was reversed.
2009-01-24 20:02:06 +01:00
Max Kellermann
793934cf9c
modplug: check for input_stream errors
...
When input_stream_read() returns 0, and input_stream_eof() returns
false, an I/O error has occured. Skip this song.
2009-01-24 19:16:33 +01:00
Max Kellermann
14b37656a6
modplug: use size_t instead of int for buffer sizes
2009-01-24 19:16:31 +01:00
Max Kellermann
4a4c6fb6dc
modplug: check size limit before appending new buffer
...
Don't enlarge the GByteArray when the size limit may overflow in this
operation; check the size limit first.
2009-01-24 19:16:20 +01:00
Max Kellermann
b53e80d785
modplug: use GByteArray.len, remove total_len
...
The local variable "total_len" is superfluous because GByteArray
always knows its size.
2009-01-24 19:16:10 +01:00
Max Kellermann
0c71640528
modplug: unknown size is -1; check for empty file
...
The input_stream API sets size to -1 when the size of the resource is
not known. The modplug decoder checked for size==0, which would be an
empty file.
2009-01-24 19:16:07 +01:00
Max Kellermann
961d172200
modplug: header cleanup
...
Don't include utils.h and log.h, they are relics from the past.
2009-01-24 19:16:05 +01:00
Max Kellermann
9229869f04
modplug: define G_LOG_DOMAIN
...
Make sure that log messages are decorated correctly.
2009-01-24 19:15:53 +01:00
Max Kellermann
b381638009
modplug: declare constants as enum
...
Don't write CPP if you can write C.
2009-01-24 19:15:50 +01:00
Max Kellermann
24d4c2df92
modplug: use only decoder_read(), not input_stream_read()
...
You are allowed to call decoder_read() with decoder==NULL. It is a
convenience function provided by the decoder API. Don't manually fall
back to input_stream_read().
2009-01-24 19:15:48 +01:00
Max Kellermann
e6cb939a82
locate: added locate_item_list_casefold()
...
Merged casefolding code from two locations into this one library
function.
2009-01-24 15:56:34 +01:00
Max Kellermann
6a2118d04c
queue_print, dbUtils: use struct locate_item_list
...
Changed the function prototypes to get locate_item_list objects
instead of num_items/items.
2009-01-24 15:56:34 +01:00
Max Kellermann
ba7c996266
locate: added struct locate_item_list
...
Instead of passing two parameters around (number of items, array of
items), combine both in a variable size struct.
2009-01-24 15:56:30 +01:00
Max Kellermann
e100149124
locate: initialize the whole visited_types array
...
The declaration initialized only the first element. Initialize the
whole array with memset() instead.
2009-01-24 15:27:09 +01:00
Max Kellermann
535cf5b5c9
locate: use bool instead of int
...
Use the C99 bool type instead of integer values (1/0 or 0/-1).
2009-01-24 15:27:05 +01:00
Max Kellermann
3582977e01
locate: no CamelCase
...
Renamed functions and variables.
2009-01-24 15:26:59 +01:00
Max Kellermann
daa5f5924d
queue_print: use new_items instead of items
...
Fix a typo in one of the previous patches.
2009-01-24 15:26:23 +01:00
Max Kellermann
cf9595df18
playlist: removed locate functions to queue_print.c
...
Now playlist.c does not contain any protocol specific code anymore.
2009-01-24 14:55:28 +01:00
Max Kellermann
53e712aca4
locate: renamed LocateTagItem to "struct locate_item"
...
No CamelCase and no typedefs.
2009-01-24 14:52:05 +01:00
Max Kellermann
627d590ce5
command: use queue_print_*()
...
Replaced several wrapper functions from playlist.c, and make command.c
use the queue print functions directly.
2009-01-24 14:52:04 +01:00
Max Kellermann
d449d6abab
playlist: added playlist_get_queue()
...
To allow code outside playlist.c to access the "queue" object,
provide a function which returns a const pointer.
2009-01-24 14:51:35 +01:00
Max Kellermann
6cfe032b94
playlist: renamed the Playlist typedef to "struct playlist"
...
No typedefs.
2009-01-24 13:34:53 +01:00
Max Kellermann
ae2d13ac3e
playlist: moved stopOnError and errorCount into struct playlist
...
Moved the 2 remaining global variables into the playlist struct.
2009-01-24 13:20:07 +01:00
Andrzej Rybczak
82df4cb2b0
modplug: change settings before loading a file
...
alternative settings must be set before the file
is loaded, otherwise they won't be respected.
2009-01-24 13:10:02 +01:00
Laszlo Ashin
84b63c45fa
command: eliminate gcc warning
...
Argument cmd of function command_available() is not used if mpd was
configured without sqlite.
2009-01-24 11:13:58 +01:00
Max Kellermann
48d3404727
commands: don't advertise "sticker" unless configured
...
In the return value of the "commands" command, don't list the
"sticker" command if no sticker file is configured.
2009-01-23 18:51:14 +01:00
Max Kellermann
0e5af7d0f6
playlist: restore random mode after playlist is loaded
...
When the playlist was loaded from the state file, the order numbers
were the same as the positions. In random mode, we need to shuffle
the queue order. To accomplish that, call setPlaylistRandomStatus()
at the end of readPlaylistState(), and do a fresh shuffle.
2009-01-23 18:41:12 +01:00
Max Kellermann
62159e8875
playlist: removed song_id_to_position()
...
song_id_to_position() is only a wrapper for queue_id_to_position().
2009-01-23 18:16:21 +01:00
Max Kellermann
a6ad0cdecc
playlist: fix "clear" crash in random mode
...
When MPD is not playing while in random mode, and the client issues
the "clear" command, MPD crashes in stopPlaylist(), or more exactly,
in queue_order_to_position(-1). Exit from stopPlaylist() if MPD isn't
playing.
2009-01-23 18:15:25 +01:00
Max Kellermann
21bb0aab90
song: include cleanup
...
Removed unused includes.
2009-01-23 16:45:35 +01:00
Max Kellermann
349d249867
playlist: moved saving/loading code to queue_save.c
...
Create a new library which saves/loads the queue to/from the state
file.
2009-01-23 16:35:04 +01:00
Max Kellermann
8afe24c1de
playlist: moved PlaylistInfo() to playlist_print.c
...
PlaylistInfo() (notice the capital 'P') sends a stored playlist to the
client. Move it to a separate library, where all the code which glues
the playlist and the MPD protocol together will live.
2009-01-23 16:34:27 +01:00
Max Kellermann
ed25bdf55a
playlist: moved some printing code to queue_print.c
...
Moved protocol printing functions which operate on the queue to
queue_print.c.
2009-01-23 16:23:59 +01:00
Max Kellermann
4c77a4c494
playlist: pass const pointers to search functions
...
The LocateTagItem objects are not modified.
2009-01-23 16:22:43 +01:00
Max Kellermann
3a86a6ca16
playlist: removed swapSongs()
...
swapSongs() is only a wrapper for queue_swap().
2009-01-23 16:22:38 +01:00
Max Kellermann
276843edd5
playlist: don't unpause on delete
...
When you delete a song from the playlist which was paused, MPD forgot
that it was paused and started playing the next song.
2009-01-23 16:17:21 +01:00
Max Kellermann
032640f9e5
queue: update moved song versions
...
This patch fixes a regression introduced by commit aa9ffc.
2009-01-23 16:17:16 +01:00
Max Kellermann
cf3a9ef065
playlist: added source comments
...
The playlist.c source is currently quite hard to understand. I have
managed to wrap my head around it, and this patch attempts to explain
it to the next guy.
2009-01-23 11:33:24 +01:00
Max Kellermann
b5abc02379
playlist: assert in playPlaylistIfPlayerStopped()
...
The function playPlaylistIfPlayerStopped() is only called when the
player thread is stopped. Converted that runtime check into an
assertion, and remove one indent level.
2009-01-23 11:33:03 +01:00
Max Kellermann
cfbafbefdc
playlist: don't shuffle if not in random mode
...
One of the previous patches removed the "random" mode check from
nextSongInPlaylist(), which caused a shuffle whenever MPD wrapped to
the first song in "repeat" mode. Re-add that "random" check.
2009-01-23 11:32:36 +01:00
Max Kellermann
5d31e7e7d2
playlist: removed unreachable "playing" check
...
In playPlaylist(), the second "song==-1 && playing" check can never be
reached, because at this point, the function has already returned
(after unpausing).
2009-01-23 11:32:07 +01:00
Max Kellermann
e5c323fd57
playlist: removed stopOnError flag from playPlaylist()
...
All callers pass false. Don't bother to collect that parameter.
2009-01-23 00:10:50 +01:00
Max Kellermann
9da7ae02f0
playlist: restart playing in deleteFromPlaylist()
...
When a song is deleted, start playing the next song immediately,
within deleteFromPlaylist(). This allows us to remove the ugly
playlist_noGoToNext flag, and the currentSongInPlaylist() function.
2009-01-23 00:10:38 +01:00
Max Kellermann
0d4319ed30
playlist: calculate next song before deleting the current one
...
By calling queue_next_order() before playlist.current is invalidated
(by the deletion of a song), we get more robust results, and the code
becomes a little bit easier. incrPlaylistCurrent() is unused now, and
can be removed.
2009-01-23 00:10:33 +01:00
Max Kellermann
bd71d3ea78
playlist: return early from shufflePlaylist()
...
Remove one indent level by returning diretly after the check. This
makes the function more readable.
2009-01-23 00:09:29 +01:00
Max Kellermann
00541f8ce9
playlist: replaced playlist_state with flag playlist.playing
...
There were only two possible states: STOP and PLAY. The code looks a
lot easier if we use a bool instead. Move the variable into the
playlist struct.
2009-01-23 00:09:26 +01:00
Max Kellermann
3a1de741bb
queue: added queue_shuffle_order()
...
The function shuffles the virtual order of songs, but does not move
them physically. This is used in random mode.
The new function replaces playlist.c's randomizeOrder() function,
which was aware of playlist.current and playlist.queued. The latter
is always -1 anyway, and the former as preserved by the caller, by
converting playlist.current to a position, and then back to an order
number.
2009-01-23 00:08:40 +01:00
Max Kellermann
fb2ef107d1
playlist: check if repeat mode changes
...
Add a "changed" check to setPlaylistRepeatStatus(): when the new
repeat mode is the same as the old one, don't do anything at all. No
more checks, no "idle" event.
2009-01-23 00:07:20 +01:00
Max Kellermann
9cad342056
playlist: recalculate the queued song after random is toggled
...
When the random mode is toggled, MPD did not clear the queue. Because
of this, MPD continued with the next (random or non-random) song
according to the previous mode. Clear the queued song to fix that.
2009-01-23 00:07:10 +01:00
Max Kellermann
144a91cace
playlist: moved code to playlist_queue_song_order()
...
Merged duplicate code from queueNextSongInPlaylist().
2009-01-23 00:06:54 +01:00
Max Kellermann
9d3c14830b
playlist: documented struct members
...
Added several comments.
2009-01-23 00:06:53 +01:00
Max Kellermann
aa9ffcd04d
queue: merged songs, songMod, positionToId into struct queue_item
...
Move everything which belongs together into one common struct. This
simplifies the implementation of several queue operations.
2009-01-23 00:06:38 +01:00
Max Kellermann
f78cddb407
playlist: moved code to queue.c
...
Attempt to untie the playlist.c knot: moved the playlist storage code
to queue.c, struct queue.
2009-01-22 23:40:11 +01:00
Max Kellermann
d5dcd0ed66
playlist: corrected shuffle underflow test
...
Check for current>=0, not queued>=0.
2009-01-22 20:10:17 +01:00
Max Kellermann
1f8a1cbc08
playlist: fix buffer underflow when getting current song
...
The function moveSongInPlaylist() attempted to read the position of
the current song, even if it was -1. Check that first. The same bug
was in shufflePlaylist().
2009-01-22 16:14:34 +01:00
Max Kellermann
1e6a26b6ca
locate: use const pointers
...
Pass const pointers where no writes are performed.
2009-01-22 16:12:34 +01:00
Max Kellermann
d47be76ce0
null: added option to disable timer synchronization
...
The null plugin synchronizes the playback so it will happen in real
time. This patch adds a configuration option which disables this: the
playback will then be as fast as possible. This can be useful to
profile MPD.
2009-01-22 16:06:47 +01:00
Max Kellermann
0122510f2c
null: implemented finish() method
...
Free memory in the finish() method to make valgrind happy.
2009-01-22 16:06:45 +01:00
Max Kellermann
e1707c7ba3
null: no CamelCase
...
Renamed functions and variables.
2009-01-22 16:06:43 +01:00
Max Kellermann
8484c3708b
playlist: convert assertion to check in TAG event handler
...
It is possible that playlist.current is reset before the TAG event
handler playlist_tag_event() is called. Convert the assertion into a
run-time check.
2009-01-21 17:11:41 +01:00
Max Kellermann
1d02318d21
player_thread: emit PLAYLIST event when new song fails
...
Break from the loop instead of returning the function. This calls
player_stop_decoder(), which in turn emits the PLAYLIST event. This
allows the playlist to re-start the player.
2009-01-21 16:44:32 +01:00
Max Kellermann
a088d9f851
player_thread: check for decoder failure before seeking
...
The function player_seek_decoder() starts the decoder, but does not
check the return value of player_wait_for_decoder().
2009-01-21 16:36:30 +01:00
Max Kellermann
38a9ad011a
player_thread: use bool instead of int
...
Make player_wait_for_decoder() and play_chunk() return a bool instead
of 0/-1.
2009-01-21 16:31:15 +01:00
Max Kellermann
5541015ac6
command: don't restart player in the "status" command
...
Don't attempt to restart the player if it was stopped, but there were
still songs left on the playlist. This looks like it has been a
workaround for a bug which has been fixed long time ago.
2009-01-21 16:17:57 +01:00
Max Kellermann
699b31178d
playlist: use the "enum player_error" type
...
Don't assign the result of getPlayerError() to an integer.
2009-01-21 16:17:57 +01:00
Max Kellermann
6fd8c28d2e
playlist: free memory with g_free()
...
Use g_free() consistently with g_malloc(). Don't clear the pointers
after freeing them.
2009-01-21 16:17:57 +01:00
Max Kellermann
b14e48f930
player_thread: request next song only if new one starts playing
...
The player_thread loop requests the next song from the playlist as
soon as the decoder finishes the song which is currently being played.
This is superfluous, and can lead to synchronization errors and wrong
results. The playlist already knows when the player starts playing
the next song (player_wait_for_decoder() triggers the PLAYLIST event),
and will then trigger the scheduler to provide the next song.
2009-01-21 16:17:57 +01:00
Max Kellermann
2362ee4a48
use config_get_positive() instead of manual parsing
...
Simplify some code by using config_get_positive(), instead of doing
manual parsing and validation each time.
2009-01-21 08:48:02 +01:00
Max Kellermann
f11eb14c8a
conf: added config_get_positive()
...
This convenience function parses a configuration value into a positive
integer. It aborts if parsing fails.
2009-01-21 08:46:59 +01:00
Viliam Mateicka
17222e9561
archiveapi: adding seeking support in zip archives
2009-01-21 06:44:57 +01:00
Max Kellermann
1379db379d
player_thread: eliminated duplicate PLAYLIST event
...
player_wait_for_decoder() emits the PLAYLIST event on success, remove
the duplicate PLAYLIST event in its caller.
2009-01-20 23:11:01 +01:00
Max Kellermann
06bd9ad88f
event_pipe: added "TAG" event
...
The "TAG" event is emitted by the player thread when the current
song's tag has changed. Split this event from "PLAYLIST" and make it
a separate callback, which is more efficient.
2009-01-20 22:49:19 +01:00
Qball Cow
d10910cc90
Add space after sticker: to make it consistent.
2009-01-20 13:55:21 +01:00
Max Kellermann
f9c693e602
command: added "sticker" command
...
The "sticker" command allows clients to query or manipulate the
sticker database. This patch implements the sub-commands "get" and
"set"; more will follow soon (enumeration), as well as extended
"lsinfo" / "playlistinfo" versions.
2009-01-19 19:09:49 +01:00
Max Kellermann
2934585d5a
update: delete stickers of deleted songs
...
When a song is deleted from the database, remove its sticker, too.
What's still missing is some sort of garbage collector after a fresh
database create (--create-db).
2009-01-19 19:01:34 +01:00
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
Max Kellermann
d196ffdf3a
sig_handlers: call g_main_loop_quit() in SIGTERM handler
...
We don't need to use asynchronous events to quit MPD, we can just call
g_main_loop_quit() inside the handler.
2008-12-30 19:50:38 +01:00
Max Kellermann
d40cf1652d
main: export the main_loop variable
...
Other libraries may need to access the main_loop reference, to add or
remove events, or to call g_main_loop_quit().
2008-12-30 19:50:22 +01:00
Max Kellermann
a3b0506cfd
sig_handlers: removed SIGCHLD
...
We have no child processes anymore. Remove the SIGCHLD handler.
2008-12-30 19:35:01 +01:00
Max Kellermann
f38aaa2bb7
sig_handlers: don't reload database on SIGHUP
...
The SIGHUP handler was used by the update process to make the main
process re-read the database. We don't need this anymore, since the
update takes place in a thread now.
2008-12-30 19:34:05 +01:00
Max Kellermann
a1434914a7
sig_handlers: removed unused functions
...
Most of these functions were obsoleted when we switched to threaded
MPD.
2008-12-30 19:32:12 +01:00
Max Kellermann
71e7ce5d8e
main: use the GLib main loop
...
This is a rather huge patch, which unfortunately cannot be splitted.
Instead of using our custom ioops.h library, convert everything to use
the GLib main loop.
2008-12-30 19:24:39 +01:00
Max Kellermann
03e650aa9e
main_notify: make the read side of the pipe blocking
...
Currently, both sides of the pipe are blocking, although we do not
need blocking read(). Convert it back to blocking. Eliminate the
select() from wait_main_task().
2008-12-30 19:20:36 +01:00
Max Kellermann
10b5966bf6
main_notify: removed notify object, use only pipe
...
To wake up the main thread, don't attempt to use a GCond/GMutex
(struct notify). This kind of mixed wakeup method has known race
conditions.
The idea behind this patch is: for wakeups which happen while the main
thread is sleeping, use only a pipe. For wakeups which happen while
the main thread is waiting for the player thread, we can later change
to GCond. For now, accept the overhead of using a pipe for the
latter.
In the long run, the main thread will never wait for the player
thread, but will do everything asynchronously.
2008-12-30 19:20:20 +01:00
Max Kellermann
1f0804bdca
listen: don't make the server socket non-blocking
...
There is no point in making the server socket non-blocking. We call
accept() only after select() has notified us about a new connection.
2008-12-30 19:18:59 +01:00
Max Kellermann
6890183c50
utils: port set_nonblocking() to WIN32
...
The new WIN32 version of set_nonblocking() can only deal with sockets,
i.e. it will fail on main_notify.c. On WIN32, we have to reimplement
main_notify.c anyway, so this is not a big deal.
2008-12-30 19:17:20 +01:00
Max Kellermann
bb55ec6b4e
command: don't allow adding local files on WIN32
...
There are no unix sockets on WIN32, and therefore no authentication.
WIN32 might have similar capabilities, but until we implement them,
disable that MPD feature.
2008-12-30 19:14:13 +01:00
Max Kellermann
7330002960
utils: implement my_usleep() with Sleep() on WIN32
...
Sleep() has only millisecond granularity, but good enough for now.
2008-12-30 19:10:08 +01:00
Max Kellermann
2eaeb65666
listen: include winsock headers on WIN32
...
On Windows, socket declarations reside in winsock.h and ws2tcpip.h.
The POSIX headers are not available.
2008-12-30 19:07:10 +01:00
Max Kellermann
e888af98a2
bonjour: fixed "unused parameter" warnings
...
Add G_GNUC_UNUSED attributes.
2008-12-30 16:45:49 +01:00
Max Kellermann
13867a1e7c
zeroconf: eliminated strlen() usage from initZeroconf()
...
To test if a string is empty, we can just see if the first byte is 0.
No need to include string.h for strlen() here.
2008-12-30 16:45:43 +01:00
Max Kellermann
49fa9708d5
zeroconf: moved code to zeroconf-avahi.c and zeroconf-bonjour.c
...
Moved implementation specific code to their own sources, internal
declarations in zeroconf-internal.h.
2008-12-30 16:43:58 +01:00
Max Kellermann
bbed35822e
zeroconf: fail if avahi service name is invalid
...
If the configured avahi service name is invalid, abort MPD. Don't
fall back to the default service name.
2008-12-30 16:43:58 +01:00
Max Kellermann
e9a3c4ce32
playlist: use GLib's random number generator
...
srandom() and random() are not portable. Use GLib's implementation.
2008-12-30 16:34:32 +01:00
Max Kellermann
cdf1eaeb2c
daemon: simplified daemonize_close_stdin()
...
Don't bother to call fstat() or isatty() on STDIN_FILENO.
2008-12-30 16:28:18 +01:00
Max Kellermann
6c0f5fc612
listen: moved redirect_stdin() to daemon.c
...
redirect_stdin() is a daemonization function, and disconnecting from
the standard input is always a good idea for MPD.
2008-12-30 16:28:13 +01:00
Max Kellermann
671480814c
main: moved daemonize() to daemon.c
2008-12-30 16:28:07 +01:00
Max Kellermann
d99595c214
listen: eliminated freeAllListenSockets()
...
Merged freeAllListenSockets() into closeAllListenSockets(), because
this is its only caller.
2008-12-30 16:28:00 +01:00
Viliam Mateicka
4cc0caf1af
print supported decoders in --version
2008-12-30 14:17:15 +01:00
Max Kellermann
d38a7967ab
main: disable non-portable code on WIN32
...
Disable changeToUser(), daemonize(), killFromPidFile().
2008-12-29 17:43:00 +01:00
Max Kellermann
509d12ae88
utils: implement parsePath() with g_strdup() on WIN32
...
On WIN32, parsePath() now simply duplicates the input string. There
is currently nothing special we can do here. The old code was not
portable on WIN32.
2008-12-29 17:42:54 +01:00
Max Kellermann
d4638834f8
utils: use g_get_home_dir()
...
Use g_get_home_dir() to get the home directory of the current user.
This will be portable to win32.
2008-12-29 17:42:49 +01:00
Max Kellermann
db849d1eed
utils: make variables more local in parsePath()
...
Declare variables where they are really used.
2008-12-29 17:42:46 +01:00
Max Kellermann
3c9992aead
client: include winsock headers on WIN32
...
On Windows, socket declarations reside in winsock.h and ws2tcpip.h.
The POSIX headers sys/socket.h etc. are not available.
2008-12-29 17:42:43 +01:00
Max Kellermann
274b919966
main: use g_setenv() instead of setenv()
...
Removed the fallback setenv() implementation for solaris.
2008-12-29 17:37:40 +01:00
Max Kellermann
6517126204
log: removed unused logging wrappers
...
Removed GLib logging wrappers which are not used anymore.
2008-12-29 17:35:42 +01:00
Max Kellermann
91be85a307
main: use GLib logging
2008-12-29 17:35:40 +01:00
Max Kellermann
4d3dd1ed2a
path: use GLib logging
2008-12-29 17:32:53 +01:00
Max Kellermann
29500cedff
update: use GLib logging
2008-12-29 17:29:49 +01:00
Max Kellermann
ef308d9644
alsa: use GLib logging
2008-12-29 17:29:42 +01:00
Max Kellermann
74d4ec7fbb
jack: use GLib logging
2008-12-29 17:29:36 +01:00
Max Kellermann
eddf5e1e5e
fifo: use GLib logging
2008-12-29 17:29:31 +01:00
Max Kellermann
409ee38b42
state_file: use GLib logging
2008-12-29 17:29:23 +01:00
Max Kellermann
d4018c9966
volume: use GLib logging
2008-12-29 17:29:18 +01:00
Max Kellermann
e9b96c6e56
player_thread: use GLib logging
2008-12-29 17:29:14 +01:00
Max Kellermann
46bef03e5a
tag_id3: use GLib logging
2008-12-29 17:29:10 +01:00
Max Kellermann
0a9f69eaaa
listen: use GLib logging
2008-12-29 17:29:04 +01:00
Max Kellermann
d6170c30c8
utils: use GLib logging
2008-12-29 17:29:01 +01:00
Max Kellermann
173021e4eb
client: use GLib logging
2008-12-29 17:28:56 +01:00
Max Kellermann
e0fe4eb722
pcm: use GLib logging
2008-12-29 17:28:49 +01:00
Max Kellermann
f4ce43b958
database: use GLib logging
2008-12-29 17:28:37 +01:00
Max Kellermann
3fa5632704
log: automatically append newline
...
If a log message does not include a newline character, append it.
2008-12-29 17:28:34 +01:00
Max Kellermann
95b3430f52
removed os_compat.h
...
Only include headers which are really needed. os_compat.h aimed to
make MPD easily portable, but was never actually made portable.
2008-12-29 17:28:32 +01:00
Max Kellermann
041b8f697b
command: use gmtime() on WIN32
...
gmtime_r() is not available.
2008-12-29 17:28:13 +01:00
Max Kellermann
b5c5a6b4c7
condition: removed cond_timedwait() and cond_signal_async()
...
These methods are unused.
2008-12-29 17:28:09 +01:00
Thomas Jansen
0d8ba194be
tag_id3: strip leading and trailing whitespace from ID3 tags
...
Fix for bug #1491 .
2008-12-29 16:37:41 +01:00
Frank Mulder
a51fada124
mp4: support the writer/composer tag
...
I tried to search for a certain composer in my collection, but only
non-mp4 files showed up. The source code reveals that this tag is not
read. This can be fixed by reading the 'Writer' tag field, in
mp4_plugin.c, in function mp4_load_tag.
I actually tried this, and after compiling with those lines added,
also mp4 (.m4a) files showed up when searching for a composer.
2008-12-29 11:29:01 +01:00
Viliam Mateicka
6ad7be9525
update: fixing empty filenames in archives
2008-12-29 07:26:17 +01:00
Thomas Jansen
c15ac57271
osx_plugin: migrate from pthread to glib threads
2008-12-28 22:09:42 +01:00
Thomas Jansen
36b8968e36
output: migrate from pthread to glib threads
2008-12-28 22:09:42 +01:00
Thomas Jansen
28128dc4e3
tag & tag_pool: migrate from pthread to glib threads
2008-12-28 22:09:42 +01:00
Thomas Jansen
ce5c22f4f4
condition: migrate from pthread to glib threads
2008-12-28 22:09:42 +01:00
Thomas Jansen
248cd50a20
update & main_notify: migrate from pthread to glib threads
2008-12-28 22:09:42 +01:00
Thomas Jansen
195cec505e
player_thread: migrate from pthread to glib threads
2008-12-28 22:09:38 +01:00
Thomas Jansen
c01ad37d3b
decoder_thread: migrate from pthread to glib threads
2008-12-28 22:09:33 +01:00
Thomas Jansen
bfb5657d6d
songvec: migrate from pthread to glib threads
2008-12-28 21:02:42 +01:00
Thomas Jansen
4ed895c799
dirvec: migrate from pthread to glib threads
2008-12-28 21:02:30 +01:00
Thomas Jansen
8332a70406
idle: migrate from pthread to glib threads
2008-12-28 21:02:14 +01:00
Thomas Jansen
5e3dc6946f
Include <pthread.h> where it is necessary only
2008-12-28 21:02:05 +01:00
Thomas Jansen
f31b4f46e1
Remove xpthread_* wrappers
2008-12-28 21:01:03 +01:00
Max Kellermann
1914e11466
conf: use GLib instead of utils.h/log.h
2008-12-28 19:54:49 +01:00
Max Kellermann
859aac7242
utils: removed myFgets()
...
Replaced myFgets() with fgets() + g_strchomp().
2008-12-28 19:54:49 +01:00
Max Kellermann
2598cdd868
buffer2array: use GLib's g_ascii_isspace()
...
g_ascii_isspace() includes \r and \n. This means that lines from a
text file don't have to be chopped prior to buffer2array().
2008-12-28 19:54:39 +01:00
Max Kellermann
4b3a055ffe
mikmod: use Glib instead of utils.h/log.h
2008-12-28 19:48:53 +01:00
Max Kellermann
4ca02bfcfc
mikmod: convert mod_Data.audio_buffer to a static array
...
Don't do two allocations for the mod_Data structure.
2008-12-28 19:48:53 +01:00
Max Kellermann
7f78ed5b98
log: use GLib logging
2008-12-28 19:48:53 +01:00
Max Kellermann
59cf77bbc8
log: don't keep log file open
...
The log file is duped to STDOUT_FILENO and STDERR_FILENO. No need to
keep another copy of it in out_fd all the time. We only need it once
once in setup_log_output().
2008-12-28 19:48:53 +01:00
Max Kellermann
8fe03b8bce
decoder: terminate decoder thread before MPD cleanup
...
When MPD exits, it should manually free all resources in use, to allow
easy memory leak debugging. Make the decoder thread terminate during
that.
2008-12-28 19:48:53 +01:00
Max Kellermann
c01aa53e6a
log: support syslog()
...
Allow logging to syslog if log_file is configured to "syslog".
2008-12-28 19:48:53 +01:00
Max Kellermann
c6cb611065
log: moved code to log_init_file()
...
Added log_init_file() and log_init_stdout(), preparing for other
logging targets.
2008-12-28 19:48:53 +01:00
Max Kellermann
d70c2e2285
log: merged initLog() and open_log_files().
...
The logging library currently has 3 constructor functions: initLog(),
open_log_files(), setup_log_output(), called in this order. Merged
the first two.
2008-12-28 19:48:53 +01:00
Max Kellermann
caf47f7893
log: moved code to parse_log_level()
2008-12-28 19:48:53 +01:00
Max Kellermann
5d2c59e3f1
log: use the GLogLevelFlags type
...
Declare log_threshold as GLogLevelFlags.
2008-12-28 19:48:53 +01:00
Max Kellermann
2c5885e9c7
log: don't manipulate the umask
...
If the user wants the log files with a specific mode, he has to start
MPD with the correct umask. Don't hard-code that.
This fixes a bug: when log cycling failed, MPD would not restore the
old umask.
2008-12-28 19:48:52 +01:00
Max Kellermann
8e9def1b5a
log: moved code to open_log_file()
...
Merged code from open_log_files() and cycle_log_files().
2008-12-28 19:48:52 +01:00
Max Kellermann
8dc92ad284
log: deprecated "error_file" option
...
Removed the "error_file" option. There is only one log file now. If
a user wants to see only the errors, he should configure a log_level.
2008-12-28 19:48:52 +01:00
Viliam Mateicka
d838a1ad24
decoder: new plugin using modplug library
2008-12-28 17:11:18 +01:00
Pauli Virtanen
65b18644e1
Add RVA2 tag support to MPD
...
This patch adds RVA2 (relative volume adjustment) tag
support to mpd, as a fallback if no replaygain tags are
found. The code is almost directly from madplay (GPL).
RVA2 tags are generated for example by the "normalize" utility.
Updated by: Avuton Olrich <avuton@gmail.com>
2008-12-28 13:02:34 +01:00
Max Kellermann
ed9668f638
notify: use GLib locking
...
Use GLib locking (GMutex, GCond) instead of pthread because GLib is
more portable, e.g. on mingw32.
2008-12-27 20:56:06 +01:00
Max Kellermann
e8c44782d0
output_control: no static "notify" initialization
...
Don't use NOTIFY_INITIALIZER to initialize audio_output_client_notify.
2008-12-27 20:53:52 +01:00
Viliam Mateicka
b2fc0ee274
cmdline: fixed option_no_createdb usage
2008-12-27 20:16:32 +01:00
Max Kellermann
83fc948008
cmdline: use g_build_filename() for ~/.mpdconf
...
Build the path with g_build_filename(). Also use g_get_home_dir() and
g_file_test().
2008-12-27 19:46:43 +01:00
Max Kellermann
f5ff00bba4
cmdline: use GLib's option parser
...
Eliminate duplicated code. The GLib code is much more mature than
MPD's custom parser.
2008-12-27 19:36:03 +01:00
Max Kellermann
357712c8f3
cmdline: use gboolean instead of int
...
Prepare for the migration to the GLib option parser, which uses
gboolean for flags.
2008-12-27 19:35:30 +01:00
Max Kellermann
786bb8cc33
moved command line parser to cmdline.c
2008-12-27 19:03:33 +01:00
Max Kellermann
cc3b6c2f5b
audiofile: don't close onput stream in libaudiofile destroy()
...
The input_stream object should only be closed by the MPD core
(i.e. decoder_thread.c / decoder_run()). A decoder plugin which
attempts to close it will result in a segmentation fault.
2008-12-27 14:34:51 +01:00
Max Kellermann
0fe0425dee
disable archive API without plugins
...
When there are no archive plugins, we do not need the archive API at
all. Drop all its overhead.
2008-12-27 14:33:41 +01:00
Max Kellermann
9220e0edff
Merge branch 'experimental' of git://git.musicpd.org/metyl/mpd
...
Conflicts:
configure.ac
src/ls.h
src/output/shout_plugin.c
2008-12-27 13:34:51 +01:00
Max Kellermann
1bd3cde062
playlist: fix stored playlist modifications with absolute paths
...
When save_absolute_paths_in_playlists was enabled in mpd.conf, MPD
broke all playlists when manipulated using the "playlistdelete"
command. The reason was that map_directory_child_fs() was used, which
doesn't accept slashes in the file name. Use the new map_uri_fs()
function instead.
2008-12-24 22:04:24 +01:00
Max Kellermann
a94e59ca21
stored_playlist: fix integer overflow in length estimation
...
With a large maximum playlist length, the integer multiplication
"playlist_max_length * MPD_PATH_MAX" may overflow. Change that to a
division. This was not a dangerous bug, since it was only used for
a quick estimate.
2008-12-24 17:40:41 +01:00
Max Kellermann
7f98ba24c7
ffmpeg: case AV_NOPTS_VALUE to int64_t
...
The old code casted it to a 32 bit integer, which cut off bits.
AVFormatContext.duration is a int64_t, so use this type.
2008-12-24 11:56:53 +01:00
Max Kellermann
82ef85a309
ffmpeg: don't assign "0" to pointer
...
Use NULL instead. Found by sparse.
2008-12-24 11:49:37 +01:00
Max Kellermann
fefd3d6fb7
Makefile.am: fix sparse invocation
...
Added missing includes.
2008-12-24 11:49:09 +01:00
Max Kellermann
fc723803a4
mp3: "tag" argument is unused when libid3tag is disabled
...
Add G_GNUC_UNUSED attributes.
2008-12-24 11:07:58 +01:00
Max Kellermann
4716ef1014
listen: "port" argument is unused when TCP support is disabled
...
Add a G_GNUC_UNUSED attribute.
2008-12-24 11:07:58 +01:00
Max Kellermann
0d9d82a932
pcm_utils: check pcm_convert()==0
...
It is illegal to pass an empty audio buffer around. pcm_resample()
sometimes seems to result in 0 samples, maybe related to
libsamplerate. To work around that problem, add special checks after
both pcm_convert() invocations. Removed the pcm_resample()==0 checks
from pcm_convert().
2008-12-24 03:08:39 +01:00
Max Kellermann
d2d11d70a8
client: always attempt to flush deferred buffers
...
When a response is very long (e.g. a large playlist > 100k songs),
most of it will end up in the deferred buffers. Filling the deferred
queue is very expensive currently, because a new buffer is allocated
for every client_write() operation. This may lead to long delays, and
the client might give up and disconnect meanwhile. This patch makes
MPD attempt to flush the deferred queue as often as possible, to work
around this problem. Due to the MPD 0.14 code freeze, we should not
optimize the buffering code now.
2008-12-24 03:00:08 +01:00
Viliam Mateicka
d96cda95a1
shout: fixed bad error message printout
2008-12-23 18:05:25 +01:00
Viliam Mateicka
4674d0442a
shout: fixed bad error message printout
2008-12-23 18:00:37 +01:00
Max Kellermann
3b2a752d0e
Merge branch 'http_buffer_remove' of git://git.musicpd.org/avuton/mpd
2008-12-21 19:40:06 +01:00
Avuton Olrich
e75e40085f
Remove obsolete http_buffer* stuff that went away with the new curl backend.
2008-12-20 22:16:02 -08:00
Max Kellermann
bfaaf425c2
log: map log level "SECURE" to GLib's "INFO"
...
Make "secure" a log level different from "default". "secure" should be
right between "default" and "verbose". Map "default" to Glib's
"MESSAGE" log level.
2008-12-20 17:26:49 +01:00
Emanuele Giaquinta
213c021eac
Remove useless statement.
2008-12-17 16:49:33 +01:00
Max Kellermann
5d56b6ced8
player_control: check if errored_song is set
...
getPlayerErrorStr() assumes that pc.errored_song is set when an error
occured. Since the song may have been deleted meanwhile, add a NULL
check.
2008-12-17 16:46:12 +01:00
Max Kellermann
13192546a8
playlist: clear pc.errored_song on delete
...
When a (remote) song is deleted from the playlist, there may still be
a reference to it in pc.errored_song. Clear this reference.
2008-12-17 16:45:49 +01:00
Emanuele Giaquinta
25c04a97d3
Remove useless computation. After the pthread_cond_wait loop there are at least MIN(od->bufferSize, size) free bytes in the buffer. Thus MIN(od->bufferSize - od->len, size) is always equal to MIN(od->bufferSize, size).
2008-12-17 15:56:43 +01:00
Emanuele Giaquinta
c584d6b087
Remove useless statement, curpos is initialized at the beginning of the loop.
2008-12-17 15:56:43 +01:00
Emanuele Giaquinta
c36a6b0aee
Factor computation.
2008-12-17 15:56:43 +01:00
Emanuele Giaquinta
a4f0c7b457
Use MIN.
2008-12-17 15:56:43 +01:00
Emanuele Giaquinta
df80ae86ee
Call CloseComponent after AudioUnitUninitialize.
2008-12-17 15:56:43 +01:00
Viliam Mateicka
37796699cf
archiveapi: archive plugin for ISO files
2008-12-16 21:48:26 +01:00
Viliam Mateicka
ddcf0a4078
archiveapi: archive plugin for ZIP files
2008-12-16 21:46:11 +01:00
Viliam Mateicka
98fd9b7da8
archiveapi: archive plugin for BZ2 files
2008-12-16 21:45:59 +01:00
Viliam Mateicka
77946a901f
update: adding archive updating related code
2008-12-16 21:42:42 +01:00
Viliam Mateicka
455b39fa26
song: adding support for songs in archives
2008-12-16 21:42:42 +01:00
Viliam Mateicka
4d604a7540
ls: adding get_archive_by_suffix() function
2008-12-16 21:42:42 +01:00
Viliam Mateicka
c73ebac4af
new archive api, input_archive stream
2008-12-16 21:42:34 +01:00
Max Kellermann
5aa1afe693
command: reject unsupported URI schemes
...
When a client-specified URI has a scheme which is not supported, do
not try to open it as a local file, but provide a meaningful error
message.
2008-12-16 21:23:29 +01:00
Max Kellermann
c50115f9a2
ls: added uri_has_scheme()
...
uri_has_scheme() checks if an URI contains the sub string "://", which
makes MPD assume that it is a remote URI.
2008-12-16 21:22:10 +01:00
Max Kellermann
e0be4400cf
ls: don't return suffix from parent directory name
...
When a file had no file name extension, getSuffix() could return the
extension of the parent directory (if it had one).
2008-12-16 21:22:08 +01:00
Max Kellermann
b765c62f2f
ls: reimplement getSuffix() with strrchr()
...
The old getSuffix() code was quite wasteful, and can be replaced
completely with strrchr().
2008-12-16 21:20:09 +01:00
Max Kellermann
d0024c077d
ls: use bool
...
Use the C99 "bool" data type instead of "int".
2008-12-16 21:18:33 +01:00
Max Kellermann
1d82edc6d3
ls: make printRemoteUrlHandlers() return void
...
printRemoteUrlHandlers() cannot fail, and does not need a return
value.
2008-12-16 21:18:31 +01:00
Max Kellermann
3287726736
ls: removed isValidRemoteUtf8Url()
...
The function didn't do anything useful, it was just several lines
obfuscating that it was only forwarding isRemoteUrl()'s return value.
2008-12-16 21:15:20 +01:00
Max Kellermann
3d4fb9a9a6
ls: don't include time.h
...
ls.h does not need time.h, do not include it.
2008-12-16 21:05:02 +01:00
Viliam Mateicka
88ab54d3d4
ffmpeg: fixing ffmpeg_send_packet to allow multipackets
2008-12-15 19:37:10 +01:00
Viliam Mateicka
8a412aaa27
ffmpeg: adding APE support
2008-12-15 19:34:58 +01:00
Max Kellermann
dedaf7033b
locate: ignore case when searching in song paths
...
The function strstrSearchTag() used g_utf8_casefold() to generate the
(pseudo-)lowercase version of the song's URL, but it never used the
variable.
2008-12-13 01:54:11 +01:00
Viliam Mateicka
01c591fb84
utils: moving stringFoundInStringArray() from decoder into utils
2008-12-09 17:36:10 +01:00
Max Kellermann
0dab2c5bc1
ao: use 16 bit sample format
...
There have been bug reports on MPD regarding 24 bit output via
libao/esd. The "ao" plugin does not attempt fall back to 16 bit
currently, and thus fails to play 24 bit audio (i.e. all mp3 files).
Make it always use 16 bit samples for now, until more bits are
well-tested.
2008-12-09 07:39:24 +01:00
Max Kellermann
4288cc069a
osx: use 16 bit sample format
...
The OS X output does not seem to support 24 bit audio in the way MPD
implements it currently. Fall back to 16 bit for now, and schedule
24 bit support on OS X for MPD 0.15.
2008-12-08 23:23:37 +01:00
Max Kellermann
a4512d3b9a
osx: use GLib instead of utils.h/log.h
...
One my_usleep() invocation remains, until we find out if we can delete
it.
2008-12-08 23:23:30 +01:00
Max Kellermann
b0f46c2076
osx: don't use void pointer in arithmetic
...
Cast AudioBuffer.mData to a "unsigned char*" before adding "curpos".
This fixes a gcc warning.
2008-12-08 23:23:28 +01:00
Max Kellermann
87f6f57bf6
mp3: declare variables as "enum mp3_action"
...
Variables which hold one of the DECODE_* values should be declared as
"enum mp3_action" instead of "int".
2008-12-08 16:49:19 +01:00
Avuton Olrich
a25b8acd82
update: default to follow all symlinks
...
MPD 0.13 and older followed all symbolic links. Although this can be
a security problem (as it has always been), 0.14 should offer the same
default behaviour as 0.13.
2008-12-08 10:01:20 +01:00
Max Kellermann
5b11d5a332
pcm_utils: always round up resampling buffer size
...
libsamplerate produces cracks in the sound output when the destination
buffer is too small. This is the case when pcm_convert_size() rounds
down. Use ceil(x) instead of floor(0.5+x) there to prevent a buffer
overrun.
2008-12-08 08:58:27 +01:00
Max Kellermann
0128a9e910
stored_playlist: include time.h for the time_t type
...
On some systems, the time_t data type was not present, because
stored_playlist.h didn't include the time.h header directly.
2008-12-04 23:19:31 +01:00
Viliam Mateicka
e61ba50ebd
decoder: audiofile plugin using input stream instead of file
2008-12-03 20:26:08 +01:00
Max Kellermann
6902ff2084
listen: check if AI_ADDRCONFIG is defined
...
AI_ADDRCONFIG is not available on all operating systems. Check if it
is defined in the current build environment.
2008-12-02 10:23:36 +01:00
Max Kellermann
ac0af91912
listen: enable AI_PASSIVE
...
The getaddrinfo() flag AI_PASSIVE should be used when resolving
addresses for the bind() system call.
2008-12-02 10:22:21 +01:00
Thomas Jansen
c06ce44768
replaced mpd_printf etc by G_GNUC_PRINTF
...
We want to remove gcc.h eventually. This takes care of all the G_GNUC_PRINTF
macros.
2008-12-02 03:00:02 +01:00
Thomas Jansen
e6ae40982e
replaced mpd_noreturn by G_GNUC_NORETURN
...
We want to remove gcc.h eventually. This takes care of all the
G_GNUC_NORETURN macros.
2008-12-02 02:42:19 +01:00
Thomas Jansen
c252143d51
replaced mpd_malloc by G_GNUC_MALLOC
...
We want to remove gcc.h eventually. This takes care of all the
G_GNUC_MALLOC macros.
2008-12-02 02:33:24 +01:00
Thomas Jansen
2720585731
replaced mpd_likely/mpd_unlikely by G_LIKELY/G_UNLIKELY
...
We want to remove gcc.h eventually. This takes care of all the
G_LIKELY/G_UNLIKELY macros.
2008-12-02 02:22:43 +01:00
Max Kellermann
4ca24f22f1
alsa: reverted the default buffer_time to 500 ms
...
Commit dd7711d8
removed MPD's default ALSA buffer_time. The result
was a buffer size which was way too small for playing streams on some
sound hardware, and caused skips and distorted sound. Revert the
default to 500 ms.
2008-12-01 22:37:05 +01:00
Max Kellermann
f600f4a256
shout: fixed the lame input buffer allocation
...
"float (*lamebuf)[2] = g_malloc()" does NOT allocate two float*
buffers. The formula is even wrong: it should be applied to LAME's
output buffer, not its input buffer.
Converted "lamebuf" to the two variables "left" and "right", and
allocate them independently with the exact buffer size. Set
right=left if mono output is configured.
2008-11-30 14:25:56 +01:00
Max Kellermann
a7b692a1df
shout_mp3: cast input buffer to int16_t*
...
It's easier to work with an int16_t* pointer here.
2008-11-30 14:21:40 +01:00
Max Kellermann
655ba6a637
input_curl: follow HTTP redirects
...
Follow HTTP redirects, but no more than 5.
2008-11-30 13:06:21 +01:00
Max Kellermann
422c17ceae
input_curl: send a User-Agent header
...
Send "Music Player Daemon " + VERSION as the User-Agent request
header.
2008-11-30 13:06:18 +01:00
Raphaël Rigo
5b089f85fd
update: added options which control symlink behaviour
...
The configuration options "follow_outside_symlinks" and
"follow_inside_symlinks" let the user control whether MPD should
follow symbolic links in the music directory.
[mk: converted variables to "bool"; moved configuration to
update_global_init()]
2008-11-28 10:57:39 +01:00
Max Kellermann
ced4abcd64
update: added update_global_init() and update_global_finish()
...
Those two functions are called when MPD starts and exits. It allows
the update library to perform global initialization and
deinitialization. The implementations are currently empty.
2008-11-27 19:34:54 +01:00
Max Kellermann
bd0653f440
conf: added config_get_bool()
...
In contrast to, getBoolConfigParam(), config_get_bool() properly
returns a "bool" value. In case of "unset", it returns the default
value provided by the caller.
2008-11-27 19:19:34 +01:00
Max Kellermann
910c000954
mp3: use GLib logging
...
Use GLib's g_warning(), ... instead of MPD's deprecated log.h.
2008-11-27 19:19:05 +01:00
Max Kellermann
21dade26aa
input_curl: disable Icy-Metadata
...
input_curl.c does not support parsing shoutcast metadata yet. Disable
the "Icy-Metadata" header for now, since it may cause corruptions in
the stream.
2008-11-25 18:13:15 +01:00
Max Kellermann
d85184256e
main: destroy the save_state timer on exit
...
Make valgrind happier.
2008-11-25 17:55:04 +01:00
Max Kellermann
7918785c78
output: use GLib instead of log.h/util.h
2008-11-25 17:47:46 +01:00
Max Kellermann
0277921e6a
oss: use GLib instead of utils.h/log.h
2008-11-25 17:43:28 +01:00
Max Kellermann
b76f7b769c
mvp: use GLib instead of utils.h/log.h
2008-11-25 17:37:12 +01:00
Max Kellermann
be60ff83f7
shout: use GLib instead of utils.h/log.h
2008-11-25 17:25:41 +01:00
Max Kellermann
125dad7119
shout: don't check HAVE_SHOUT
...
If the shout plugin is disabled, shout_plugin.c isn't compiled at all,
no need to check the macro definition.
2008-11-25 17:19:42 +01:00
Marc Pavot
fd1144145c
player: set elapsed=0 at song change
...
I have found something that looks like a bug in MPD:
- When a song is finished, the next one is played and the 'player'
event is emitted.
- When the client sends the status command just after this event, the
songid is the new one but the 'elapsed' time is not reseted to 0.
This is problem because I have implemented the solution using a timer
on client side to compute the elapsed time but with this bug the
elapsed time continues to be incremented on a new song.
2008-11-25 16:19:53 +01:00
Max Kellermann
c570aa20fa
ao: print error message when ao_open_live() fails
...
When ao_open_live() failed, MPD would ignore the error code in
"errno". Make it print a meaningful error message.
2008-11-25 16:18:06 +01:00
Max Kellermann
423276a384
ao: support all libao error codes
...
The function audioOutputAo_error() did not implement all possible
libao error codes. Support the rest of them, and fall back to
strerror().
2008-11-25 16:17:48 +01:00
Max Kellermann
ffc604498e
ao: use GLib instead of utils.h/log.h
2008-11-25 16:10:01 +01:00
Max Kellermann
bc55d8d78e
decoder: added missing glib.h include
2008-11-25 15:12:00 +01:00
Thomas Jansen
2555176854
tag_id3.h: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:57:30 +01:00
Thomas Jansen
bc74503a69
command.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:55:32 +01:00
Thomas Jansen
843ed730c0
client.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:48:32 +01:00
Thomas Jansen
b9fefc4564
player_thread.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:47:44 +01:00
Thomas Jansen
3742cf3abb
update.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:46:10 +01:00
Thomas Jansen
02273d96c3
sig_handlers.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:45:32 +01:00
Thomas Jansen
87751ddbd0
pcm_resample_fallback.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:44:17 +01:00
Thomas Jansen
34b1a9061e
dbUtils.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:42:47 +01:00
Thomas Jansen
3d258504a1
decoder_thread.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:41:53 +01:00
Thomas Jansen
f7d995f807
zeroconf.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:40:40 +01:00
Thomas Jansen
b31b334ba6
input_file.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:33:46 +01:00
Thomas Jansen
f0e621bcdb
input_curl.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:33:25 +01:00
Thomas Jansen
7c7b0431fe
decoder_api.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:32:53 +01:00
Thomas Jansen
c6a63f1397
main_notify.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:32:02 +01:00
Max Kellermann
14e121af90
flac, mpc, ogg, wavpack: include unistd.h for SEEK_SET
...
SEEK_SET is defined by unistd.h. Explicitly include it.
2008-11-24 10:33:08 +01:00
Max Kellermann
acbfba0698
player: disable music_pipe_check_format()
...
The music pipe audio format bugs seem to be fixed (hopefully).
Disable music_pipe_check_format() for now, since it consumes a lot of
CPU cycles.
2008-11-24 09:25:48 +01:00
Max Kellermann
116662e5a9
update: fixed shadow warning on "basename"
...
Renamed the local variable "basename", which shadows the POSIX
function basename().
2008-11-22 14:57:08 +01:00
Max Kellermann
d0779e71ab
command: format strerror() with "%s"
...
We shouldn't pass strerror() where a format string is expected.
2008-11-22 14:57:00 +01:00
Laszlo Ashin
a493aafe02
wavpack: use assert_static()
2008-11-22 14:28:11 +01:00
Laszlo Ashin
457a6f4bee
utils: introduce assert_static()
...
assert_static() will help us to find false asserts in compile time. Of
course it only works in case of expressions which can be evaluated
compile time. It cannot be used in global scope.
2008-11-22 14:28:11 +01:00
Marc Pavot
0bad84066b
command: allow clients to subscribe to specific idle events
...
The client may provide the names of idle events as arguments to the
"idle" command to inform MPD that it is only interested in these
events.
2008-11-22 13:26:21 +01:00
Max Kellermann
976d5045c6
decoder: check audio_format_valid() in all decoders
...
Refuse to play audio formats which are not supported by MPD.
2008-11-21 20:27:30 +01:00
Max Kellermann
be9e60d55e
audio_format: added audio_format_valid()
2008-11-21 20:27:05 +01:00
Max Kellermann
774417f12f
decoder: ignore decoder_data() calls with length==0
...
Pushing buffers with a zero length into the MPD core causes failures;
don't let them pass beyond the decoder plugi API.
2008-11-21 20:26:57 +01:00
Max Kellermann
63c3ebee46
flac, oggflac: use GLib instead of utils.h/log.h
2008-11-21 20:15:50 +01:00
Max Kellermann
f15fc4e99a
ffmpeg: use GLib instead of log.h
2008-11-21 20:13:41 +01:00
Max Kellermann
4a3a621caf
audiofile: use GLib instead of log.h
2008-11-21 20:13:36 +01:00
Max Kellermann
7a2fe930b8
aac: use GLib instead of utils.h/log.h
...
Removed the superfluous my_usleep() call.
2008-11-21 20:13:26 +01:00
Max Kellermann
0243e1e26d
log: print the log_domain
2008-11-21 20:13:00 +01:00
Max Kellermann
1c0c583216
state_file: save state_file every 5 minutes
...
When MPD quits in a non-clean way, the state file isn't written, and
on the next start, MPD time warps to the previous clean shutdown.
Save the state file every 5 minutes; this will probably be
configurable at a later time.
Note that we don't set a wakeup timer for that: when there is no MPD
traffic, MPD won't wake up to save the state file. This minor bug is
tolerated, because usually there is no change in MPD's state when the
main thread is idle.
2008-11-21 18:36:33 +01:00
Max Kellermann
695d8051d2
input_curl: try to seek by fast-forwarding the buffer
...
If the caller attempts to seek only a few bytes forward, chances are
good that the offset is already in the buffer. In this case, simply
fast-forward the buffer.
2008-11-21 17:10:20 +01:00
Max Kellermann
46df0fd7dc
input_curl: moved code to consume_buffer()
...
Added some assertions.
2008-11-21 16:57:55 +01:00
Max Kellermann
7779e4133a
input_curl: don't do temporary calculations with input_stream.offset
...
If someone calls seek() with an invalid (negative) offset, the curl
implementation of that method returned false, but left this invalid
offset in input_stream.offset. Move the calculation to a temporary
variable.
2008-11-21 16:56:10 +01:00
Max Kellermann
61ba50a9bc
decoder: ignore the SEEK command during startup
...
While waiting for the input stream to become ready, ignore all
commands except STOP. This fixes seeking errors with (remote) songs
which the decoder has already finished.
2008-11-20 21:08:16 +01:00
Max Kellermann
927bf45f84
ogg: moved the "errorStr" variable into the error handler
2008-11-20 20:11:00 +01:00
Laszlo Ashin
65a8822a0b
aac: get rid of gcc warnings
2008-11-20 19:20:25 +01:00
Konstantin Sobolev
7ac3abf499
update: pass UTF-8 path to skip_symlink()
...
skip_symlinks() expects an UTF-8 encoded file name, but
updateDirectory() passed ent->d_name (in file system encoding) to it.
Convert it to UTF-8 first.
2008-11-20 18:22:07 +01:00
Konstantin Sobolev
23b097593e
mapper: use the utf8_to_fs_charset() result
...
In map_directory_child_fs(), the result of utf8_to_fs_charset() was
never used, because it passed the unmodified "name" parameter to
pfx_dir().
2008-11-20 18:10:18 +01:00
Konstantin Sobolev
ddab531b4a
path: fix g_convert() argument order
...
g_convert() wants the destination character set first. This was mixed
up.
2008-11-20 17:48:11 +01:00
Max Kellermann
1f50146e29
ogg: check the ov_read() return value before the vorbis_info evaluation
...
The ov_info() return value may be corrupt when ov_read() did not
return a positive value. First check for success, then check
ov_info().
2008-11-20 12:45:17 +01:00
Max Kellermann
a8f69429b0
input_curl: don't fail when seek to EOF is requested
...
HTTP servers respond with "416 Requested Range Not Satisfiable" when a
client attempts to seek to the end of the file. Catch this special
case in input_curl_seek(). This fixes a glitch in the ogg vorbis
decoder plugin.
2008-11-20 12:45:17 +01:00
Max Kellermann
a0dd5b7f2f
curl: don't check running_handles for EOF
...
Since we are using curl_multi_info_read() / CURLMSG_DONE for detecting
end-of-response, we can remove all running_handles==0 checks. For
some reason, that has never worked correctly.
2008-11-20 12:42:42 +01:00
Max Kellermann
f61904db33
input_curl: always set eof=true on CURLMSG_DONE
...
curl_multi_info_read() is the authoritative source of the
"end-of-response" information. Always set c->eof when a CURLMSG_DONE
message is received, and check the result (success/failure) after
that.
2008-11-20 12:41:59 +01:00
Laszlo Ashin
05f4629fa3
wavpack: redo using audio_format_frame_size()
...
Somehow we lost 600e1322
after renaming some variables in ed6f6046
.
2008-11-19 00:02:06 +01:00
Max Kellermann
362ca300d6
decoder: pass the correct buffer length to pcm_convert()
...
When a global audio format is configured (setting
"audio_output_format"), decoder_data() overwrote the "length"
parameter with the size of the output buffer (result of
pcm_convert_size()). Declare a separate variable for the output
buffer length.
2008-11-18 22:45:51 +01:00
Viliam Mateicka
33b5015469
ffmpeg: read tags from AVFormatContext
...
The ffmpeg library provides some of the song metadata in the
AVFormatContext struct. Pass it from there to MPD.
2008-11-18 20:03:00 +01:00
Viliam Mateicka
eac4ed2241
audiofile: fixed misplaced if
...
[mk: by definition, tag_new() cannot fail - removed check]
2008-11-18 19:54:42 +01:00
Max Kellermann
63272d6888
music_pipe: narrowed assertion on chunk index
...
The chunk index passed to successor() must be valid, i.e. it must be
smaller than num_chunks.
2008-11-18 19:54:39 +01:00
Max Kellermann
7591403566
input_stream: size==-1 means unknown size
...
Define the special value "-1" as "unknown size". Previously, there
was no indicator for streams with unknown size, which might confuse
some decoders.
2008-11-16 20:42:08 +01:00
Max Kellermann
8882f06200
ffmpeg: fixed AVSEEK_SIZE
...
With whence==AVSEEK_SIZE, the seek function should return the file
size, not the current offset. Check the return value of
input_stream_seek().
2008-11-16 20:25:31 +01:00
Max Kellermann
9c4e97a61b
aac: detect whether to pass "uint32_t*" to NeAACDecInit2()
...
neaacdec.h declares all arguments as "unsigned long", but internally
expects uint32_t pointers. This triggers gcc warnings on 64 bit
architectures. To avoid that, make configure.ac detect whether we're
using Debian's corrected headers or the original libfaad headers. In
any case, pass a pointer to an uint32_t, conditionally casted to
"unsigned long*".
2008-11-16 20:04:49 +01:00
Max Kellermann
acfba02310
decoder: check length==0 in decoder_read()
...
When the caller passes length==0, decoder_read() entered an endless
loop. Check that condition before entering the "while" loop.
2008-11-15 19:27:30 +01:00
Laszlo Ashin
c368a2f91c
aac: fix compiler warnings on amd64
2008-11-15 11:54:22 +01:00
Laszlo Ashin
00da7db1e3
aac: don't try to free static buffer
...
In 432da18e
a dynamic buffer was replaced by a static one but some
frees were accidently left there which caused some segfaults.
2008-11-15 11:50:25 +01:00
Max Kellermann
4a1ad61e8e
log: check the log threshold in log_func()
...
The threshold was only checked in the deprecated logging functions
(ERROR(), WARNING(), ...). Add the check to the GLib logging handler.
2008-11-14 18:27:11 +01:00
Max Kellermann
7720a1195a
volume: eliminate alloca() usage
...
alloca() is not a portable function. Don't use it. Using
strncasecmp() is much more efficient anyway, because no memory needs
to be allocated and copied.
2008-11-14 18:15:33 +01:00
Max Kellermann
19131f1eda
volume: moved code to oss_mixer_find()
2008-11-14 18:05:13 +01:00
Max Kellermann
eb199ca207
player: don't queue song when there are 2 songs in the pipe
...
Don't send a "next song" request to the main thread when the current
song hasn't started playing yet, i.e. there are already two different
songs in the music pipe. This would erase information about the song
boundary within the music pipe, and thus triggered an assertion
failure. The bug could occur when playing very short songs which fit
into the pipe as a whole.
2008-11-14 17:55:51 +01:00
Max Kellermann
418dac6f94
player: wake up decoder before waiting for xfade chunks
...
Fix a deadlock: when the decoder waited for buffer space, the player
could enter a deadlock situation because it waits for more chunks for
crossfading chunks. Signal the decoder before entering notify_wait().
2008-11-14 17:55:45 +01:00
László Áshin
440b1ea3ea
wavpack: be more robust if the underlying stream is not seekable
...
The wavpack open function gives us an option called OPEN_STREAMING. This
provides more robust and error tolerant playback, but it automatically
disables seeking. (More exactly the wavpack lib will not return the
length information.) So, if the stream is already not seekable we can
use this option safely.
2008-11-14 15:23:18 +01:00
László Áshin
c495c6f5af
wavpack: tolerate less decoded data than requested
...
Wavpack plugin doesn't stop decoding if a block couldn't be fully
decoded, rather it tries to go on.
2008-11-14 15:23:13 +01:00
László Áshin
ed6f60460d
wavpack: renamed variables and modified coding style slightly
2008-11-14 15:21:44 +01:00
Max Kellermann
7b7340f703
mp3: fix SEEK command check after mp3_synth_and_send()
...
mp3 seeking was broken, because the command==SEEK check was never
reached. Swap the command check order (==SEEK before !=NONE) to fix
that.
2008-11-13 14:43:19 +01:00
Max Kellermann
2dacd16b5b
decoder: additional dc.command checks in decoder_data()
...
When a command is sent while the decoder waits for a free chunk in the
music pipe, it was not returned by decoder_data().
2008-11-13 14:43:19 +01:00
Max Kellermann
2860b1b60f
decoder: wait for the player only if the music pipe is full
...
Prevent superfluous wakeups and a deadlock condition.
2008-11-13 02:54:56 +01:00
Max Kellermann
1a3945b563
decoder: check dc.command at the beginning of decoder_data()
...
Seeking was somewhat broken in some decoder plugins because they sent
empty chunks, and never got a command. Check the decoder command
before doing anything else in decoder_data().
2008-11-13 02:42:40 +01:00
Max Kellermann
709640422c
player: chop the tail of the music pipe after CANCEL
...
When a CANCEL command is received, the player should drop all chunks
of the next song. Added new funciton music_pipe_chop() which is used
for that.
2008-11-13 02:09:33 +01:00
Max Kellermann
66ce1495f0
music_pipe: continuously check the sample format of all chunks
...
Provide a debug function which asserts on the sample format of all
chunks. Call this function in each iteration of the player main loop.
2008-11-13 02:06:58 +01:00
Max Kellermann
998d9a8225
decoder: ignore SEEK commands during initialization
...
When the decoder receives a SEEK during initialization, it should
ignore that for now. The old code made most decoders abort.
2008-11-13 02:06:55 +01:00
Max Kellermann
1178e485cb
music_pipe: check for partial frames in appended chunk
...
Added an additional assertion which checks partial frames in the
existing tail chunk.
2008-11-13 02:06:52 +01:00
Max Kellermann
df09075afc
player: assert that there was no previous "next song chunk"
...
When assigning the next_song_chunk variable, it must have been empty.
If not, there may be 3 songs overlapping in the music pipe.
2008-11-13 01:57:15 +01:00
Max Kellermann
ae9bb92952
playlist: call clearPlayerQueue() only if song is queued II
...
This patch extends commit 35a16b99
, and amends several 2 missing
checks. It simplifies 2 more checks by merging "if" conditions.
2008-11-12 21:55:13 +01:00
Max Kellermann
93f488f034
wavpack: remove commented debug messages
2008-11-12 21:25:08 +01:00
Max Kellermann
600e132280
wavpack: calculate outsamplesize with audio_format_frame_size()
2008-11-12 21:25:02 +01:00
Max Kellermann
ef80464c0c
ogg: revert "use ogg_fopen() instead of ogg_open()"
...
Unfortunately, ov_fopen() is not supported by libvorbis versions older
than 1.2.
2008-11-12 08:38:04 +01:00
Max Kellermann
b67a8e4d6e
aac: shift the input buffer before the full check
...
When the buffer was full, but everything was already consumed,
fillAacBuffer() would not attempt to flush and refill it.
2008-11-12 08:32:21 +01:00
Max Kellermann
432da18e44
aac: make the input buffer static
...
Allocate the input buffer within the AacBuffer struct.
2008-11-12 08:29:40 +01:00
Max Kellermann
487e05c67d
aac: reject SEEK commands
...
The aac plugin does not support seeking. Reject SEEK requests by
calling decoder_seek_error(). Quit the plugin's main loop only when
STOP is received.
2008-11-12 08:25:09 +01:00
Max Kellermann
a9723e661a
aac: get decoder command from decoder_data()
...
Removed a superfluous decoder_get_command() call.
2008-11-12 08:25:06 +01:00
Max Kellermann
35a4ca2421
aac: convert audio_format to temporary variable
...
The audio_format variable is only used and initialized for
decoder_initialized(). Move it into that block to save some bytes on
the stack.
2008-11-12 08:21:00 +01:00
Max Kellermann
39fa60769c
aac: removed method file_decode()
...
aac_stream_decode() was basically copy+pasted from aac_decode().
Since stream_decode() can also decode files, eliminate aac_decode().
2008-11-12 08:17:50 +01:00
Max Kellermann
e19b53f814
aac: check the buffer length in the ADIF parser
...
Check whether enough data has been read yet.
2008-11-12 08:16:54 +01:00
Max Kellermann
b30ec73099
aac: use unsigned integers and size_t where appropriate
2008-11-12 08:16:38 +01:00
Max Kellermann
9806355d4c
aac: check if the stream is seekable before length check
...
If the stream is not seekable, don't try to decode all frames to find
out the total song time.
2008-11-12 07:46:01 +01:00
Max Kellermann
f6765c4d8b
aac: removed attribute "atEof"
...
Use input_stream_eof() instead.
2008-11-12 07:41:54 +01:00
Max Kellermann
eff21067f0
mpc: assume the result fo of mpc_decoder_decode() is unsigned
...
According to the documentation, mpc_decoder_decode() returns an
mpc_uint32_t. Since the special return value (mpc_uint32_t)-1
translates to a very large long integer, this may cause segmentation
faults if not interpreted properly.
2008-11-12 07:14:18 +01:00
Max Kellermann
0a6f4048d0
mpc: don't assume the stream is stereo
...
Don't hard-code the factor "2".
2008-11-12 07:07:40 +01:00
Max Kellermann
8d1ffb1684
mpc: get decoder command from decoder_data()
...
Removed 3 superfluous decoder_get_command() invocations.
2008-11-12 07:07:12 +01:00
Max Kellermann
731e99c26e
mpc: moved code to mpc_to_mpd_buffer()
...
mpc_to_mpd_buffer() converts a whole chunk at a time. This eliminates
3 local variables in mpc_decode().
2008-11-12 07:06:47 +01:00
Max Kellermann
975d5cd77e
mpc: make the buffer large enough for one mpc frame
...
Don't split the buffer conversion loop. When libmpcdec returns a
chunk, convert and send the whole chunk at a time. This moves several
checks out of the loop, and greatly improves performance.
2008-11-12 07:03:44 +01:00
Max Kellermann
865757835e
mpc: use GLib instead of utils.h/log.h
...
Don't use deprecated MPD libraries.
2008-11-12 07:02:29 +01:00
Max Kellermann
1414a3de4c
mpc: declare buffer as int32_t[]
...
The buffer is always casted to int32_t* anyway; declare it as int32_t
array, and remove the cast.
2008-11-12 07:02:06 +01:00
Max Kellermann
06c60888dc
mpc: eliminated the local variable "eof"
...
Since each "eof=true" is followed by "break", the variable is
superfluous.
2008-11-11 21:39:50 +01:00
Max Kellermann
97080b796c
ogg: removed stray "}"
...
Due to an unnoticed merge error, there was a superfluous "}". Remove
it.
2008-11-11 21:39:31 +01:00
Max Kellermann
53c17db5e9
ogg: use ogg_fopen() instead of ogg_open()
...
Move the reponsibility for freeing the file handle to libvorbis.
2008-11-11 21:33:10 +01:00
Max Kellermann
448ff32c96
ogg: use GLib instead of utils.h/log.h
2008-11-11 21:33:01 +01:00