| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
Another quirk fixed: after the last chunk of a song has been played,
the "elapsed_time" variable is set to the chunk's time stamp. When
the client receives the PLAYER idle event and asks MPD for the current
time stamp, MPD will return the last time stamp of the previous song
when it hasn't played the first chunk of the current song yet.
|
|
|
|
|
|
|
|
| |
Major API redesign: don't let the caller allocate the input_stream
object. Let each input plugin allocate its own (derived/extended)
input_stream pointer. The "data" attribute can now be removed, and
all input plugins simply cast the input_stream pointer to their own
structure (with an "struct input_stream base" as the first attribute).
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This patch changes the following decoder plugins to implement
stream_tag() instead of tag_dup():
faad, ffmpeg, mad, modplug, mp4ff, mpcdec, oggflac
This simplifies their code, because they do not need to take care of
opening/closing the stream.
|
|
|
|
|
| |
This is like tag_dup(), but works with an input_stream object instead
of a file path.
|
|
|
|
| |
Minor code simplification.
|
|
|
|
|
|
|
| |
Make the input_stream implementation hold a reference on the
archive_file object. Allow the caller to "close" the archive_file
object immediately, no matter if the open_stream() method has
succeeded or not.
|
| |
|
|
|
|
| |
The archive plugin should decide this.
|
|
|
|
| |
Reduce the number of malloc()/free() calls.
|
|
|
|
| |
Don't use the bz2_archive_file object for the input_stream.
|
|
|
|
| |
Don't use the iso9660_archive_file object for the input_stream.
|
| |
|
|
|
|
| |
Don't use the zzip_archive object for the input_stream.
|
| |
|
|\
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
Makefile.am
NEWS
configure.ac
src/input/curl_input_plugin.c
src/input_stream.c
|
| |
| |
| |
| | |
This has been reimplemented in the "rewind" input plugin.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This replaces the rewinding buffer code from the CURL input plugin.
It is more generic, and allows rewinding even when the server sends
Icy-Metadata (which would have been too difficult to implement within
the CURL plugin).
This is a rather complex patch for the stable branch (v0.15.x), but it
fixes a serious problem: the "vorbis" decoder plugin was unable to
play streams with Icy-Metadata, because it couldn't rewind the stream
after detecting the codec (Vorbis vs. FLAC).
|
| |
| |
| |
| |
| | |
Support deprecated MIME types such as "audio/x-ogg". Support new
types such as "audio/flac".
|
|\|
| |
| |
| |
| |
| |
| | |
Conflicts:
NEWS
configure.ac
src/decoder_api.c
|
| |
| |
| |
| |
| |
| | |
When collecting tag values for the result set, add all of a song's tag
values of the searched type. This affects the "list" command.
Previously, "list" only considered the first tag value of a song.
|
| |
| |
| |
| |
| |
| | |
Don't clear the music pipe when seeking has failed - check the
"seeking" flag instead of "command==SEEK". Clear the "seeking" flag
in decoder_seek_error().
|
| |
| |
| |
| |
| | |
First multiply the floating point return value of
decoder_seek_where(), then cast to integer.
|
| |
| |
| |
| | |
Without this, seeking may cause MPD to crash.
|
| |
| |
| |
| | |
This patch adds practical usefulness to the CUE playlist plugin.
|
| |
| |
| |
| |
| |
| |
| | |
Seek the decoder to the start of the range before beginning with
playback. Stop the decoder when the end of the range has been
reached. Add the start position to the seek position. Expose the
duration of the range, not the full song file.
|
| |
| |
| |
| |
| |
| | |
Prepend the playlist's base URI to relative song URIs. Look up songs
in the database (if the URI refers to a local song file). Merge
existing database metadata with metadata from the playlist plugin.
|
| |
| |
| |
| |
| |
| | |
Added attributes start_ms, end_ms. This allows us to address a
portion of a song file (important for CUE support). There is no
support yet for storing these attributes in the state file.
|
| |
| |
| |
| |
| | |
Try the playlist directory first, and if that file does not exist, try
the same relative path within the music directory.
|
| | |
|
| |
| |
| |
| | |
The caller should be responsible for building the absolute URI.
|
| | |
|
| | |
|
| |
| |
| |
| | |
If that fails, try opening the file as a stream.
|
| | |
|
| |
| |
| |
| |
| | |
If there's a slash in the uri_get_suffix() return value, then it's
malformed. Return NULL in this case.
|
| |
| |
| |
| |
| |
| | |
Remove the data_time parameter from decoder_data(). This patch
eliminates the timestamp counting in most decoder plugins, because the
MPD core will do it automatically by default.
|
| |
| |
| |
| |
| |
| | |
Use the plugin instead of the glue code in normalize.c. This is used
wrapped inside a "autoconv" filter, to enable normalization for all
input file formats.
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
Make the audio_format argument non-const. Allow the open() method to
modify it, to indicate that it wants a different input audio format
than the one specified. Check that condition in chain_filter_open(),
and fail.
|
| |
| |
| |
| |
| | |
The pcm_volume library supports 32 bit samples, there's no reason to
disallow it in the filter plugin.
|
| |
| |
| |
| | |
Detect misconfiguration during MPD startup, not when playback begins.
|
| |
| |
| |
| | |
Indicate success and error.
|
| |
| |
| |
| | |
This plugin cannot be configured.
|
| |
| |
| |
| | |
Don't close child filters in the filter() method.
|
| |
| |
| |
| |
| |
| | |
This plugin is the groundwork for MPD's future generic CUE sheet
support. That's not complete yet, e.g. there is no way for a playlist
plugin to address an arbitrary position within a music file.
|
| |
| |
| |
| | |
When no plugin matches the URI scheme, try the file name suffix.
|
| |
| |
| |
| |
| | |
Use open_uri() / open_stream() only after checking that they are
implemented.
|
| |
| |
| |
| |
| | |
Get duration from track_get_length().
|
| | |
|