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