| Commit message (Collapse) | Author | Files | Lines |
|
If an input_stream is not seekable, libaudiofile fails to play at all:
Audio File Library: unrecognized audio file format [error 0]
Since we know in advance whether the input_stream is seekable, just
refuse to play on a non-seekable stream.
|
|
Renamed several variables and a function.
|
|
Renamed numOfItems to num_items.
|
|
"ls" is a bad name for a library which parses URIs. We'll move the
rest of the "ls" library later.
|
|
After much research[1][2][3] this should be the majority of currently
supported file extensions and mime-types for the currently supported
ffmpeg formats. This list maybe incomplete, but it's more complete
than anything else out there that I've been able to find. This list
needs to be updated every now and again as the ffmpeg sources support
more formats.
1. Sources
2. wiki.multimedia.cx
3. filext.com
|
|
Don't use libfaad's internal type names.
|
|
When mp4ff_read_sample() returns a value bigger than zero, it
guarantees that the buffer is set. Remove the check.
|
|
Don't waste any precious memory when the seek_table cannot be used.
|
|
Don't include limits.h, use GLib constants instead.
|
|
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.
|