| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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().
|
|
|
|
|
| |
Don't wait for the first frame to be decoded. We already have the
sample rate and the channel count from faacDecInit2().
|
|
|
|
|
| |
The function mp4_load_tag() is used only once, and mp4_tag_dup() is a
one-liner. Merge them.
|
|
|
|
| |
Make some variables more local, and eliminate superfluous ones.
|
| |
|
|
|
|
|
| |
Instead of returning the sample rate and channel count as separate
values, fill an audio_format struct.
|
|
|
|
|
| |
Don't wait for the first frame to be decoded. We already have the
sample rate and the channel count from faacDecInit().
|
|
|
|
|
| |
The MPD core will never send a SEEK command to a decoder which has
declared to be not seekable.
|
|
|
|
|
| |
Replace this plugin's own buffer library with the new decoder_buffer
library.
|
|
|
|
|
| |
Instead of checking if the buffer is empty after adts_find_frame(),
check adts_find_frame()'s return value. This is more robust.
|
|
|
|
|
| |
Moved libfaad API quirks to the wrapper functions faad_decoder_init()
and faad_decoder_decode().
|
|
|
|
|
| |
Instead of writing the song duration into a float pointer, return it
from the function.
|
|
|
|
| |
There are no callers which pass NULL here.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
It's not valid to use the buffer's data without ensuring that the
buffer contains enough data.
|
|
|
|
| |
"aac" -> "faad"
|
| |
|
|
|
|
|
| |
Fixed the log domains of the renamed decoders. Added G_LOG_DOMAIN
macros in decoders which don't have one already.
|
|
|
|
| |
This plugin is based on "libmpcdec".
|
|
|
|
| |
This plugin is based on "libmp4ff".
|
|
|
|
| |
Renamed functions and variables.
|
|
|
|
|
| |
The element fileOffset is only written, but never read. It can be
removed safely.
|
|
|
|
| |
This plugin uses libvorbis.
|
|
|
|
| |
A decoder plugin should be named after the library which is used.
|
|
|
|
| |
A decoder plugin should be named after the library which is used.
|
|
|
|
|
| |
Don't call WildMidi_Init() if the configuration file does not exist.
Don't let libwildmidi clutter stderr with its warning message.
|
| |
|
|
|
|
| |
Preparing for per-plugin configuration sections in mpd.conf.
|
|
|
|
|
| |
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.
|