| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Pass the input_stream object to decoder_data(). Without it, the MPD
core does not see stream tags.
|
|
|
|
| |
Use WildMidi_SampledSeek() for seeking in a MIDI file.
|
|
|
|
|
| |
The _WM_Info struct provides all we need, it is obtained by
WildMidi_GetInfo().
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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)
|
| |
|
|
|
|
|
| |
The ffmpeg library supports the "True Audio Codec". The entry in
ffmpeg_suffixes was missing.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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]
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
We have two mod plugins now: modplug and mod. Rename the latter to a
more useful name.
|
|
|
|
|
| |
EOF is checked by input_stream_read() (decoder_read() here). Don't do
it twice. The check was wrong anyway, it was reversed.
|
|
|
|
|
| |
When input_stream_read() returns 0, and input_stream_eof() returns
false, an I/O error has occured. Skip this song.
|
| |
|
|
|
|
|
| |
Don't enlarge the GByteArray when the size limit may overflow in this
operation; check the size limit first.
|
|
|
|
|
| |
The local variable "total_len" is superfluous because GByteArray
always knows its size.
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
Don't include utils.h and log.h, they are relics from the past.
|
|
|
|
| |
Make sure that log messages are decorated correctly.
|
|
|
|
| |
Don't write CPP if you can write C.
|
|
|
|
|
|
| |
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().
|
|
|
|
|
| |
alternative settings must be set before the file
is loaded, otherwise they won't be respected.
|
|
|
|
|
| |
The plugin queries build-time configuration variables, and should
include config.h.
|
| |
|
|
|
|
|
|
| |
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().
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
Splitted flac_copy_vorbis_comment() into flac_copy_comment() and
flac_copy_comment().
|
|
|
|
|
| |
Simplify flac_copy_vorbis_comment() by moving the comment
identification code out.
|
|
|
|
|
| |
Free the tag object when it turns out to be empty. This simplifies
several functions and APIs.
|
| |
|
|
|
|
| |
Use tag_is_empty() instead.
|
|
|
|
| |
Renamed types, functions, variables.
|
|
|
|
|
| |
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.
|
| |
|