Max Kellermann
41b4a63f2b
decoder/ffmpeg: support FFmpeg 2.5
...
Version 2.5 fixed an API oddity, however it broke API compatibility,
at least with C++. Disable the workaround when a libavformat version
is detected that is recent enough.
2014-12-08 14:25:34 +01:00
Max Kellermann
c64ad78c7b
decoder/ffmpeg: support opus
2014-11-10 18:00:30 +01:00
Max Kellermann
f6b2899dd2
decoder/faad: remove workaround for ancient libfaad2 ABI bug
...
Many years ago, FAAD had a serious ABI bug: the NeAACDecInit()
prototype in its header declared the "samplerate" parameter to be
"unsigned long *", but internally, the function assumed it was
"uint32_t *" instead. On 32 bit machines, that was no difference, but
on 64 bit, this left one portion of the return value uninitialized;
and worse, on big-endian, the wrong word was filled. This bug had to
be worked around in MPD (commit 9c4e97a6
).
A few months later, the bug was fixed in the FAAD CVS in commit 1.117
on file libfaad/decoder.c; the commit message was:
"Use public headers internally to prevent duplicate declarations"
The commit message was too brief at best; the problem was not
duplicate declarations, but a prototype mismatch. No mention of the
bug fix in the ChangeLog.
The MPD project never learned about this bug fix, and so MPD would
always pass a "uin32_t *" dressed up as a "unsigned long *". Nearly 6
years later, it's about time to fix this second ABI problem. Let's
kill the workaround!
2014-11-02 11:50:56 +01:00
Steven OBrien
bccd4ef2f7
decoder/ffmpeg: recognize MIME type audio/aacp
2014-11-02 11:50:56 +01:00
Max Kellermann
c14a00eec9
decoder/ffmpeg: use memset() to initialize AVProbeData
2014-09-09 19:07:46 +02:00
Max Kellermann
219c42522f
decoder/ffmpeg: pass MIME type to ffmpeg/libav version 11
...
That attribute was uninitialized before, which could crash
libavformat.
See Debian bug 760669
2014-09-07 22:05:33 +02:00
Max Kellermann
7ada7def9e
decoder/audiofile: fix crash after seeking
...
Log call was added to the wrong branch.
Fixes regression by commit ca1a1149
2014-09-06 19:32:10 +02:00
Max Kellermann
8b62127770
decoder/gme: fix song duration
...
The unit of gme_info_t::length is milliseconds, not centiseconds.
2014-08-29 23:03:29 +02:00
Max Kellermann
78abcd7df7
decoer/dsdiff: fix endless loop on malformed file
...
Same bug as in the previous commit.
2014-08-21 12:48:03 +02:00
Max Kellermann
23dce21647
decoer/dsf: fix endless loop on malformed file
...
When the data chunk size is not a multiple of the frame size, the last
partial frame lead to an endless loop. We fix this by checking
chunk_sze>=frame instead of chunk_sze>0. This way, the partial frame
is simply skipped.
2014-08-21 12:37:22 +02:00
Max Kellermann
fe9299ceff
decoder/ffmpeg: use avcodec_descriptor_get() to determine codec name
...
In version 11, both ffmpeg and libav deprecate
AVCodecContext::codec_name. The function avcodec_descriptor_get() has
been introduced long ago.
2014-08-13 18:40:39 +02:00
Max Kellermann
94efeb2845
decoder/dsdiff: simplify dsdlib_skip() call
2014-07-12 20:51:00 +02:00
Max Kellermann
a73834436f
decoder/dsdiff: simplify loop condition, merge branches
2014-07-12 20:46:24 +02:00
Max Kellermann
85f4aeca05
decoder/dsdiff: ignore garbage null byte at end of file
...
Failure to read another chunk header is not fatal. Continue to read
metadata.
2014-07-12 20:41:26 +02:00
Max Kellermann
7db84a961a
decoder/dsdiff: fix metadata parser bug (uninitialized variables)
2014-07-12 20:41:26 +02:00
Max Kellermann
a960e2ef48
decoder/faad: estimate song duration for remote files
...
Previously, MPD tried to slurp the whole song file, count the number
of frames and calculate the song duration from that. That however is
extremely expensive for remote files, and will delay playback for a
long time. Workaround: check only the first 128 frames and try to
extrapolate from here. Fixes Mantis ticket 0004035.
2014-07-12 00:37:00 +02:00
Max Kellermann
06aa689383
decoder/faad: bail out early if sample rate is invalid
2014-07-12 00:23:11 +02:00
Max Kellermann
835b0c44cd
decoder/faad: use adts_check_frame() in faad_song_duration()
...
Eliminate more duplicate code.
2014-07-12 00:18:02 +02:00
Max Kellermann
54b6f8a4ae
decoder/faad: test "seekable" after ADTS frame check
...
Don't bother to check for ADIF just because the stream is not
seekable.
2014-07-12 00:17:51 +02:00
Max Kellermann
18787ebe8f
decoder/faad: move code to faad_decoder_new()
...
Merge some duplicate code.
2014-07-12 00:17:43 +02:00
Max Kellermann
47e8fcf37e
decoder/faad: remove unnecessary read
...
Eliminate some overhead when the caller doesn't need the buffer.
2014-07-12 00:17:30 +02:00
Max Kellermann
9d9697b366
DecoderBuffer: add method _clear()
2014-07-12 00:15:35 +02:00
Max Kellermann
6585e18571
decoder/faad: check sample_rate, not frames_per_second
...
Checking the integer is faster, easier and more reliable.
2014-07-11 23:12:08 +02:00
Max Kellermann
6f1b4292f0
decoder/faad: make variables more local
2014-07-11 22:52:31 +02:00
Max Kellermann
ef9ef03b1f
decoder/faad: use MAX_CHANNELS
...
.. instead of declaring a new constant.
2014-07-11 22:40:28 +02:00
Max Kellermann
ecb67a1ed1
decoder/sndfile: use decoder_read_full()
...
Replaces the loop in sndfile_vio_read(), eliminating duplicate and
fragile code.
2014-07-11 21:18:44 +02:00
Max Kellermann
0ef843f138
decoder/sndfile: use decoder_read()
...
.. instead of InputStream::LockRead(). The former is cancellable.
2014-07-11 21:18:44 +02:00
Max Kellermann
eb79d83051
decoder/sndfile: log seek errors
2014-07-11 21:18:44 +02:00
Max Kellermann
ca1a11493d
decoder/audiofile: log seek errors
2014-07-11 21:18:44 +02:00
Max Kellermann
69bb086ba5
decoder/audiofile: fix typo in comment
2014-07-11 21:18:44 +02:00
Joff
09384df32c
decoder/dsd: use decoder_read_full() where appropriate
...
Addresses Mantis ticket 0004015.
[mk: use decoder_read_full() only when needed, and a few formal
changes]
2014-07-09 19:18:36 +02:00
Max Kellermann
20538516b9
decoder/audiofile: use decoder_read_full()
...
Works around WAV stream playback bug, because libaudiofile does not
like partial reads (Mantis 0004028).
2014-07-09 19:05:20 +02:00
Max Kellermann
0759421d11
DecoderAPI: add function decoder_read_full()
...
Move code from the "mad" plugin.
2014-07-09 19:03:58 +02:00
Max Kellermann
bf7417981f
DecoderAPI: add function decoder_skip()
...
Move code from the "mad" plugin.
2014-07-09 19:03:31 +02:00
Max Kellermann
bc6472bb9e
decoder/audiofile: use decoder_read()
...
.. instead of InputStream::LockRead(). The former is cancellable.
2014-07-09 18:57:50 +02:00
Gustavo Zacarias
a70443af31
decoder/OpusDecoderPlugin: fix build failure due to missing stdio.h include
...
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
2014-07-09 17:41:31 +02:00
Gustavo Zacarias
3f221e2edb
decoder/AudiofileDecoderPlugin: fix build failure due to missing stdio.h include
...
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
2014-07-09 17:41:31 +02:00
Max Kellermann
70bd35abe2
decoder/OggUtil: allow skipping up to 32 kB after seek
...
Fixes missing song length on high-latency Opus files.
According to tests with 320 kbit/s opus files with 60ms packets, we
need to skip up to 29 kB.
2014-04-29 11:56:05 +02:00
Marcello Desantis
95ac6071b9
decoder/sndfile: work around libsndfile bug on partial read
2014-04-09 23:58:56 +02:00
Max Kellermann
ce18c36ed9
decoder/ffmpeg: handle unknown stream start time
2014-03-18 09:16:09 +01:00
Max Kellermann
8e39cf62e7
decoder/ffmpeg: pass AVSEEK_FLAG_ANY to av_seek_frame()
...
This corrects a major mistake from commit 724a59aa
- there was one
small thing that commit was supposed to do, and it failed.
AV_TIME_BASE is not a seek flag.
2014-03-18 09:10:36 +01:00
Max Kellermann
a9e351e00d
decoder/gme: fix memory leak in container_scan()
2014-03-06 13:12:39 +01:00
Max Kellermann
313d1d5d83
decoder/ffmpeg: support libav v10_alpha1
2014-01-15 11:33:18 +01:00
Max Kellermann
b7d6133593
decoder/ffmpeg: include cleanup
2014-01-15 11:31:51 +01:00
Max Kellermann
5b6bb114ad
decoder/ffmpeg: check for av_samples_get_buffer_size() errors
...
Fixes potential nullptr dereference.
2014-01-15 11:25:58 +01:00
Max Kellermann
fdd76b3461
decoder/faad: fix memory leak
2014-01-08 22:11:00 +01:00
Steven O'Brien
6b3b8c6f2e
fix FfmpegDecoderPlugin to use relative timestamps
2013-12-20 22:28:33 +01:00
Max Kellermann
47c50c079d
decoder/ffmpeg: use IgnoreError instead of local Error instance
2013-11-28 00:05:26 +01:00
Max Kellermann
73f45d87d5
decoder/{dsf,dsdiff}: eliminate useless assignments
2013-11-23 18:30:12 +01:00
Denis Krjuchkov
0bcc477d46
decoder/OggFind.cxx: include stdio.h for SEEK_END definition
2013-11-18 16:28:39 +06:00