| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
This plugin uses libvorbis.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
This patch allows mpd to recognise the albumartist tag in the way foobar2000
and others write it to files.
|
|
|
|
|
| |
Don't depend on the daemon's locale settings. Comment names are
ASCII.
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
Eliminate some duplicate code.
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
Renamed functions and variables.
|
|
|
|
| |
Make ogg_parseCommentAddToTag() return bool instead of unsigned int.
|
| |
|
|
|
|
| |
"#ifdef G_BYTE_ORDER == G_BIG_ENDIAN" cannot work, of course.
|
| |
|
|
|
|
| |
Use GLib's G_GNUC_UNUSED instead of gcc.h's mpd_unused.
|
|
|
|
| |
SEEK_SET is defined by unistd.h. Explicitly include it.
|
|
|
|
| |
Refuse to play audio formats which are not supported by MPD.
|
| |
|
|
|
|
|
|
| |
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().
|
|
|
|
|
| |
Unfortunately, ov_fopen() is not supported by libvorbis versions older
than 1.2.
|
|
|
|
|
| |
Due to an unnoticed merge error, there was a superfluous "}". Remove
it.
|
|
|
|
| |
Move the reponsibility for freeing the file handle to libvorbis.
|
| |
|
|
|
|
| |
Eliminate two decoder_get_command() invocations from the main loop.
|
|
|
|
|
| |
Don't let the buffer grow until it is full, flush it whenever there is
data available.
|
|
|
|
|
|
|
|
| |
The stream_decode() and file_decode() methods returned a boolean,
indicating whether they were able to decode the song. This is
redundant, since we already know that: if decoder_initialized() has
been called (and dc.state==DECODE), the plugin succeeded. Change both
methods to return void.
|
|
|
|
|
| |
Having an array instead of individual variables allows the use of the
replay_gain_mode enum as an array index.
|
|
|
|
| |
Some code simplification. Avoid pointers to pointers.
|
|
|
|
| |
Renamed functions and variables.
|
|
|
|
|
|
| |
Instead of having a seprate try_decode() method, let the
stream_decode() and file_decode() methods decide whether they are able
to decode the song.
|
|
|
|
|
| |
Instead of checking the stream_types bit set, we can simply check
whether the methods stream_decode() and file_decode() are implemented.
|
|
|
|
|
|
|
|
|
|
| |
If an input stream provides tags (e.g. from an icecast server), send
them in the decoder_data() and decoder_tag() methods. Removed the
according code from the mp3 and oggvorbis plugins - decoders shouldn't
have to care about stream tags.
This patch also adds the missing decoder_tag() invocation to the mp3
plugin.
|
|
|
|
|
|
|
| |
Ogg and ffmpeg detection was disabled when the stream was not
seekable, because the detection was too expensive. Since the curl
input stream can now rewind the stream cheaply, we can re-enable
detection on streams.
|
|
|
|
| |
Provide an API for submitting additional tags from the stream.
|
|
|
|
|
|
| |
Don't pass the "seekable" flag with every decoder_data() invocation.
Since that flag won't change within the file, it is enough to pass it
to decoder_initialized() once per file.
|
|
|
|
|
| |
The strings were constant, but the pointers weren't. C syntax is
somewhat tricky..
|
|
|
|
|
| |
All decoder_plugin structs are initialized at compile time, and must
never change.
|
| |
|
|
|
|
|
| |
Don't return 0/-1 on success/error, but true/false. Instead of int,
use bool for storing flags.
|
|
|
|
|
|
|
| |
A decoder_flush() invocation was missing in the FLAC plugin, resulting
in casual assertion failures due to a wrong assumption about the last
chunk's audio format. It's much easier to remove that decoder_flush()
function and make the decoder thread call ob_flush().
|
|
|
|
|
| |
Call ob_clear() in decoder_command_finished() instead of implementing
that call in every decoder plugin.
|
|
|
|
|
| |
For boolean values and success flags, use bool instead of integer (1/0
for true/false, 0/-1 for success/failure).
|
|
|
|
| |
Renamed all functions and variables.
|
|
|
|
| |
Everybody should use struct input_stream.
|
|
These plugins are not input plugins, they are decoder plugins. No
CamelCase in the directory name.
|