Max Kellermann
de0ee26432
decoder/sndfile: call TagHandler::OnAudioFormat()
2018-07-07 13:29:39 +02:00
Max Kellermann
45cccbce59
decoder/sndfile: use AtScopeExit()
...
Fixes memory leaks.
2018-07-07 13:27:26 +02:00
Max Kellermann
479de9c7cb
decoder/sndfile: add CheckAudioFormat(SF_INFO)
2018-07-07 13:26:39 +02:00
Max Kellermann
60821232b9
decoder/audiofile: allocate AFvirtualfile with malloc()
...
afCloseFile() uses free(), so we need to use malloc().
2018-07-07 13:25:01 +02:00
Max Kellermann
9b4156a282
decoder/audiofile: add "noexcept"
2018-07-07 13:21:27 +02:00
Max Kellermann
89b1e27d2e
decoder/audiofile: merge duplicate code into CheckAudioFormat(AFfilehandle)
2018-07-07 13:21:09 +02:00
Max Kellermann
1dcaf8f76a
decoder/audiofile: call TagHandler::OnAudioFormat()
2018-07-07 13:18:06 +02:00
Max Kellermann
18508d1919
decoder/audiofile: merge audiofile_get_duration() into audiofile_scan_stream()
2018-07-07 13:16:38 +02:00
Max Kellermann
9f77d568e2
decoder/mad: call TagHandler::OnAudioFormat()
2018-07-07 13:10:39 +02:00
Max Kellermann
0d0569b9af
decoder/mad: merge mad_decoder_total_file_time() into mad_decoder_scan_stream()
2018-07-07 13:09:23 +02:00
Max Kellermann
0f18e7baf9
decoder/mpg123: call TagHandler::OnAudioFormat()
2018-07-07 13:08:06 +02:00
Max Kellermann
d8b03d4927
decoder/ffmpeg: call TagHandler::OnAudioFormat()
2018-07-07 13:02:08 +02:00
Max Kellermann
60d5bf0240
util/StringFormat: new utility library
2018-07-06 19:07:02 +02:00
Max Kellermann
86a02871fc
decoder/vorbis: call TagHandler::OnAudioFormat()
2018-07-06 12:44:58 +02:00
Max Kellermann
3d3a1232b1
tag/Handler: convert to class with virtual methods
2018-07-05 19:07:05 +02:00
Max Kellermann
efb8a9bd2c
player, decoder, output: wrap MusicPipe in std::shared_ptr/std::unique_ptr
2018-06-23 18:45:57 +02:00
Max Kellermann
2be905b2e2
MusicPipe: eliminate the unused MusicBuffer reference
...
This requires re-adding the reference to struct DecoderControl, which
was removed recently by commit
9f14e7a98d
2018-06-23 18:36:24 +02:00
Max Kellermann
54d295c247
MusicChunkPtr: managed MusicChunk pointer
...
Make all uses of MusicChunk safe.
2018-06-22 23:11:52 +02:00
Max Kellermann
9f14e7a98d
MusicPipe: add MusicBuffer reference
...
This tiny amount of overhead allows omitting the MusicBuffer in
Clear().
2018-06-22 22:59:44 +02:00
Max Kellermann
d0fbf6db59
input/Stream: remove attribute "cond", replace with handler interface
...
This adds a bit of overhead, but also adds flexibility to the API,
because arbitrary triggers may be invoked from that virtual method
implementation, not just Cond::signal().
The motivation for this is to make the handlers more dynamic, for the
upcoming buffering class utilizing ProxyInputStream.
2018-06-22 19:37:18 +02:00
Max Kellermann
66a1e8b737
release v0.20.20
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlsD85IQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEm5xD/oCagsybi2L60r0trtjE7DJ+SnmgbjVmn3z
aieaIA78KFK2QWUettevYkVwtwqEqyw5DwSDmxRRpm9sMKsdDBL+gLCf5hjIFNQY
dZjyBIABgE+aAT+iYeXVmWgJI24s8znEGhZjUG5P/gf+CoLKvN5OQiZoBKOaurjX
YwJUyLV1SXiMLV/4HtOFw4xORuRPflhZ5MnA+cO7BmpV0XQoq82XgBi3XqAB8dv4
cIpDs0MU7DFHNUYHeHEWXVh1PgAcr2madWwQTiscuy8KRAR0GzkCsG5UrSyJs0xH
c0yQ1vVt7X0nyxV35Yemmlfe4DwMwNK9avsTr3Mmr4tNDbxxhiddDYZzy6UJHKis
vaVLhePLjXCOfPRivCY8zVZHwGTO5ArxQqftkGDnM1Gq8PwpTWLimZkvUW35d/xf
SJ+ixpkA1O2DzmkyUam41phhXli+lt0hF1P/7dKsuV/fzmAkJlmRpgxJJhLH8mwq
NNfHk8y8kdGoVy65e/u2asJe8PPB2y9NK2JmbBR9g6Dn+6puP4gkhok3a9cvUZ6q
5GHJF9yRYswVkr/Y6q8UtESeEUczqrQTasVvq0fkxV0f17BKDbOxClb+ItrnPTWV
WMfsyF3TYrHi4piB810q/nBY6pY7R2vQNCPMZwfjGlqn5amR2fm8QWecJVIPpkv3
rEPv+4r8nQ==
=DEYg
-----END PGP SIGNATURE-----
Merge tag 'v0.20.20'
release v0.20.20
2018-05-22 12:47:11 +02:00
Michal Koutenský
d495ec71a8
decoder/opus: add support for R128_ALBUM_GAIN tag
2018-05-07 10:57:03 +02:00
Max Kellermann
b763852f57
decoder/dsd: allow 4 MB ID3 tags
...
Closes #277
2018-05-07 10:53:48 +02:00
Max Kellermann
a8568d7246
Merge branch 'v0.20.x'
2018-05-03 20:15:11 +02:00
Max Kellermann
6522d2f722
decoder/{dsdiff,dsf}: support more MIME types
...
These are used by DSD-streaming servers. For example, MiniDLNA uses
"audio/x-dsd".
2018-05-03 12:02:11 +02:00
Max Kellermann
43a43c1e2b
release v0.20.19
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlriEvAQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEnEpD/4+yH4ydc9l1/j5AD08jFyUUe6YSnC8gLsG
DRrSOU1BQltYAPhlRGxA/HlKxboaT7v5qcXBdIV+HwKs6149j8qxip8g8PYoUBmB
mn6YckjEPCLpLe4WSvfGdm5a1aI7nMC76wHBvTPCAMTZk9FAmUED4DqgNYmWycOd
MpXZbzZdvb2Ti4dQARrK8AbMjTD44LXDOhBgWYnZLpo1ovYhnGvTPAElCQN23tbT
VMcJPYe86lzgs1vWwgURzkn7Y3CaSMF3G+aKw/oLEK3giZmE0y7Kov9Ycy4IC6+3
aXuEP9drMIltAyZ2hmeH6JFigbgQbDhwuAu1biYLLukwa0oEOEFTP1+yxAVbi/vx
58rD6uWJeFbqPna6146TAYVi8QeymJWfhFWxkcol2u7etrIxXpX//qo8Mv+AiLor
wOrTerKgRFYmtSH14wIoSfKsn2wmsXOhDE38h621PAzqvQXDzrBLMo4HMJ4y+G+q
Y6LZWatweL6I2qMsOKWvECOJNxQJrkDFOLq8Mj+O4v6iiLQWhiul1hi2g8EOcRMI
SkdWTakla3LbmuUN1dKQJwoojNevnP5yPXI15rM6JMZkXJcWxi4mvnzoAFnBTmov
57GxpShueo2yy9yrFgS7hBuRsBXzYxze/xY0LSYSO4SjCjNCnWXse6O9pI7JqFbI
m5JJW96Nqg==
=1wwq
-----END PGP SIGNATURE-----
Merge tag 'v0.20.19'
release v0.20.19
2018-04-26 20:06:41 +02:00
Max Kellermann
44b200240f
player/Thread: never reuse decoder when switching radio streams
...
When switching to another song manually, the player checks if the
decoder is already decoding that song; if so, it will attempt to reuse
it by seeking it to the new position. That however fails if the
decoder is not seekable (e.g. a radio stream) which leaves the user
unable to switch to that song with the bogus error message "Not
seekable".
2018-04-25 21:19:26 +02:00
Max Kellermann
60efdce5ff
Merge branch 'v0.20.x'
2018-02-17 13:37:03 +01:00
Max Kellermann
026aef7465
decoder/flac: move the SubmitData() call out of the callback
...
This addresses two problems:
1. the libFLAC write callback had to send an error status to its
caller when SubmitData() returned a command; this disrupted libFLAC
and the resulting command could not be used for anything;
2. the libFLAC function FLAC__stream_decoder_seek_absolute() also
calls the write callback, but its result cannot be used, because
seeking is still in progress, so we lose all data from one FLAC frame.
By moving the SubmitData() call until after CommandFinished(), we
avoid losing this data. This fixes another part of #113
2018-02-17 13:33:53 +01:00
Max Kellermann
b53a23b51b
decoder/flac: call FlacSubmitToClient() again after seeking
...
See code comment.
2018-02-17 13:33:51 +01:00
Max Kellermann
2aad015392
decoder/flac: move code to FlacSubmitToClient()
2018-02-17 13:33:48 +01:00
Max Kellermann
986ec877b0
decoder/Bridge: truncate last chunk at the exact end_time
...
Instead of passing whole chunks to the MusicPipe and checking the
end_time after each chunk, truncate the last chunk if it would exceed
the end_time. This requires keeping track of the absolute PCM frame
number.
This fixes a problem with gapless CUE song transitions: a small part
of the following song was always played twice.
Closes #113
2018-02-17 13:10:00 +01:00
Max Kellermann
bfc886cd54
decoder/Client: update API documentation
2018-02-17 08:20:07 +01:00
Max Kellermann
61f2ce67dd
decoder/HybridDSD: implement seeking
2018-02-13 09:53:05 +01:00
Max Kellermann
60dbf1bea0
decoder/HybridDSD: calculate bit rate
2018-02-13 09:41:07 +01:00
Max Kellermann
58bb866e2d
decoder/HybridDSD: add code comments
2018-02-13 09:29:58 +01:00
Max Kellermann
b2ec5d0f01
decoder/HybridDSD: new decoder plugin for Hybrid DSD
2018-02-13 00:00:00 +01:00
Max Kellermann
fd0a5a1116
decoder/{dsdiff,dsf,mpg123,wavpack}: avoid exceptions in scan methods
...
The scan methods must be "noexcept".
2018-01-25 13:01:39 +01:00
Max Kellermann
97f670658f
util/StringFormat: new utility library
2018-01-24 13:28:28 +01:00
Max Kellermann
2c401f1102
decoder/{adplug,sidplay}: add missing "noexcept"
...
Closes #202
2018-01-23 10:02:36 +01:00
Max Kellermann
7d789a984a
decoder/Plugin: add "noexcept"
2018-01-21 11:47:17 +01:00
Max Kellermann
bbc5212436
fs/AllocatedPath: make the nullptr_t constructor public
2018-01-17 12:17:41 +01:00
Max Kellermann
c4f7740b80
fs/Path: replace method Null() with nullptr_t constructor
2018-01-17 12:16:21 +01:00
Max Kellermann
65059f2add
util/{Const,Writable}Buffer: eliminate static method Null(), use nullptr cast instead
2018-01-16 11:04:51 +01:00
Max Kellermann
8649ea3d6f
thread/Thread: use BoundMethod
2018-01-07 17:20:26 +01:00
Max Kellermann
be65c7d5d0
config/Block: add method GetPositiveValue()
...
Adds missing checks to several plugins.
2018-01-02 17:24:34 +01:00
Max Kellermann
5bd1fbb0d6
player/Thread: merge four mutex locks in SeekDecoder()
2017-12-22 01:04:44 +01:00
Max Kellermann
910496cea9
decoder/Control: caller must lock mutex for Start()
2017-12-22 01:03:01 +01:00
Max Kellermann
860d13c7d8
decoder/Control: caller must lock mutex for Stop()
2017-12-22 00:48:12 +01:00
Max Kellermann
d0194a6fb3
decoder/Control: caller must lock mutex for Seek()
2017-12-22 00:37:25 +01:00
Max Kellermann
499e053d58
decoder/mad: use std::unique_ptr
2017-12-20 15:32:10 +01:00
Max Kellermann
9f33c6fe03
decoder/Bridge: use std::unique_ptr<Tag>
2017-12-20 15:24:41 +01:00
Max Kellermann
73e69edac3
input/InputStream: ReadTag() returns std::unique_ptr<Tag>
2017-12-20 15:22:18 +01:00
Max Kellermann
43d2fd73ab
lib/xiph/VorbisComments: return std::unique_ptr<Tag>
2017-12-20 15:10:59 +01:00
Max Kellermann
71f1ec0bc8
tag/Id3Scan: return std::unique_ptr<Tag>
2017-12-20 15:09:20 +01:00
Max Kellermann
25fa3ccade
MusicChunk, player/Thread: use std::unique_ptr<Tag>
2017-12-20 15:02:14 +01:00
Max Kellermann
c6a95395b5
tag/Tag: Merge() returns std::unique_ptr<Tag>
2017-12-20 14:59:51 +01:00
Max Kellermann
7d035edf9d
player/Control, ...: remove API documentation references to the obsolete Error class
2017-12-20 12:20:09 +01:00
Max Kellermann
914df18bf9
Main, ...: catch any exception, not just std::runtime_error
2017-12-19 10:56:23 +01:00
Max Kellermann
6246d36fe6
Merge branch 'v0.20.x'
2017-12-16 20:56:06 +01:00
Max Kellermann
dfaf08743c
*: check defined(_WIN32) instead of defined(WIN32)
...
Only _WIN32 is defined by the compiler, and WIN32 is not standardized
and may be missing.
Closes #169
2017-12-12 10:22:20 +01:00
Max Kellermann
28fdf1e9ed
decoder/Control: wrap DetachedSong* in std::unique_ptr
2017-11-26 12:16:53 +01:00
Max Kellermann
9a8a3beae4
decoder/Control: add "noexcept"
2017-11-26 12:16:53 +01:00
Max Kellermann
e4a147218b
Merge branch 'v0.20.x'
2017-11-12 18:55:12 +01:00
Max Kellermann
a2b77c8813
decoder/ffmpeg, test/test_protocol: catch exceptions by reference
...
Work around -Werror=catch-value.
2017-11-12 18:54:29 +01:00
Max Kellermann
49784513b1
util/{Const,Writable}Buffer, ...: rename IsEmpty() to empty(), imitating STL
2017-11-10 19:24:33 +01:00
Max Kellermann
523051132d
Merge branch 'v0.20.x'
2017-11-05 17:48:41 +01:00
Marcin Jurkowski
3b23cf0258
decoder/vorbis: scale and clip tremor-decoded samples to 15 bits
...
Tremor decoder is unusable since commit 2ee43c4
. Sound is distorted to
the point where it's nothing but noise.
The data from vorbis_synthesis_pcmout() needs to be scaled and
clipped for 16 bit sample size. For reference see
http://lists.xiph.org/pipermail/tremor/2010-April/001642.html and
http://lists.xiph.org/pipermail/vorbis/2006-October/026513.html .
Signed-off-by: Marcin Jurkowski <marcin1j@gmail.com>
2017-11-03 19:45:41 +01:00
Max Kellermann
b4b468eb27
release v0.20.11
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlnnDXYQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEtPBD/4sOwd7sQr/eeJr5gqVpil+CaVkHN1GpVmF
H72uYnp5eKREywLMAqrY86hxvykeflroHyNyBF7CV5hIZV8kPl1ApN6WvjG3oFeX
ZnM6PQjeqgqczSVUZOd92nATJw6g/Vk0qbC+h6VwhpSoq5716dAKriSO25JzDg0L
KOwEztVsLeziKrk/sHSKjgRrYpuNS8bFVxAY8Pk9MnUhEeHB3Rb7Spd2zMUfMDLF
1pncFliIX5bOUKzDavIo4flAWc3jj514VhS7rVaU2OYpAdsQV18Z5Ze5B+46FUan
2gsn3oCOVbC3QV7X0do5MtD9p1tyX0HREokY3ttgut+iRz9zym2m0uC6t1DXwyVI
cugOF70JbBYxd/ChO4rFYPHZo6A1XE7hb89AcVf6EgZyXROK077EzptprW9et0Ge
kIUbHs01lHfA7gFefEC+8iVGSXQmEmQQp5tBnZkdUaJdpxVULdMkhhHCNU8RIIVP
ot8guH2/9oKkCj+ytHj37SUpk7bKjbzID9XIW5a+4rQPb1oRmQMvIeKgWZ6sjHP1
5cS7l51q0onPmulfdQti0jTuaRcwQZcyKOxBU+eKYNHGNgLsdk1QDxyDhqbCCqWv
0seA7h+lNBGqZL7/F6s0IxsTWIwaInkZWPE1EGSRe0wvZohDtBbNhXWQDPBlgl8O
R42Jdx6PIg==
=8U+o
-----END PGP SIGNATURE-----
Merge tag 'v0.20.11'
release v0.20.11
2017-10-18 10:21:39 +02:00
Max Kellermann
fa67c2548a
decoder/Thread: clear the command after catching an exception
...
If an early exception gets caught (e.g. from
AllocatedPath::FromUTF8Throw()) before
DecoderControl::CommandFinishedLocked() is called, the decoder thread
would go in an endless loop, because DecoderCommand::START is still
set.
Closes #118
2017-09-27 17:08:16 +02:00
John Regan
ea80587ddb
GME Plugin: fix track numbering
...
GME starts all track indexes at zero, but subtune prefixes
start at one. This fixes an off-by-one error during track
enumeration.
2017-09-27 11:18:03 +02:00
John Regan
bd50a0d2ef
GME Plugin: fix track numbering
...
GME starts all track indexes at zero, but subtune prefixes
start at one. This fixes an off-by-one error during track
enumeration.
2017-09-26 08:42:53 -05:00
John Regan
9256e748c8
GME Plugin: only load m3u if it exists
...
If you load an NSFE file (which has embedded track titles),
then attempt to load an M3U file, it causes GME to lose all
information found in the NSFE file. This adds a check that
the M3U file exists before attempting to load.
2017-09-26 08:42:43 -05:00
John Regan
e96513c8db
GME Plugin: try loading m3u sidecar files
2017-09-22 19:58:17 +02:00
Max Kellermann
44bbf42a9f
Merge branch 'v0.20.x'
2017-09-19 18:58:02 +02:00
Charlie Waters
b253a6b71e
ffmpeg plugin: when decoded stream duration is unavailable, attempt fallback to container duration ( fix MusicPlayerDaemon/MPD#110 )
2017-09-18 10:39:27 +02:00
Max Kellermann
d29bdf3e81
Merge branch 'v0.20.x'
2017-07-31 13:50:14 +02:00
Matthew Leon
4c0404c70d
Check for MusicBrainz id3v2 tags in ffmpeg.
...
Addresses #82 .
Previously, the ffmpeg decoder only checked for the "generic"
MusicBrainz metadata keys used in other metadata container formats.
2017-07-20 08:28:14 +02:00
Max Kellermann
979f1b6c39
release v0.20.9
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlkz5jkQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEubuD/kBXMcV4XawqGNNtSHdrY8CxSL8wJMCMJQl
aMgRkKLPRml8Hj9FNNG9pjXBuT+qUgPX7t9gBEiT7c+sV3fHH40gUf1js5GIsEPm
BAVfvww5EhmQWWVhPTLk1iZ4jp6E96mDmIG1znwo7etSZHXU8RJfR7woBi3SPJ9f
OPcrimskNuWpAWeaEIKi/1Iwzy8d9VK9Ttb73gA3M5zSm7ioXzt3YClpwLRM8JU6
QeUJchy6VwXnygswjUNmbhPc3GsD2FyUZ4OtJ0hodnqqajfldBxhcHUnQk4zZULr
1nLSyOuA9bwLuFohH1T6HiY9z8PFzgqdIHvsjOJgZ4gQa69PVNjal2tUEUav9zFv
aK4LvTVPnIk+hqRbtLpV7/rPKuClrC9BO4oYdBGBDNY4hqVpvRA9obP1s00aOi+K
UhYqLqg7yeIEeTlUxFOhXJCKAEL69BuXT5ihJtDlB/dCUzv37sEch/4WDgs7uc+O
9kJYlElvozw57mbczsee/PCSnSWrLCq/qG/bNEUUQOTueWNuifh3PL62UXGgfbEH
01hJDyLr6ETSmWn7rjTfLJiHThX/EQQvOhs+35fbCyry65z4tFwrilGDmFVUWGPq
/6QEpY1D6q4fkoma/iWOZoTkfKewatAPGMGWoJaGhCnfQFz4VTFtS2bDtuUctQ16
jnXnPFxqBw==
=0SSp
-----END PGP SIGNATURE-----
Merge tag 'v0.20.9'
release v0.20.9
2017-06-04 12:57:05 +02:00
Max Kellermann
a057b4f6d8
*: add lost of "noexcept" specifications
2017-06-04 12:46:48 +02:00
Jörg Raftopoulos
18b827b979
decoder/ffmpeg: add support for adx
...
Add ffmpeg decoder support for *.adx files (Sega game console)
Closes #60
2017-06-03 20:57:20 +02:00
Max Kellermann
4faef28cc5
release v0.20.7
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlkaFL0QHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEr4ID/9iAQC+7fFv06uLOm48Ufu+PgoD8uJkAwF5
QuLQkc85g9urn+bu9N7Qs7Vypp7aLyGcJKY0jyA8wxkOj24pUC3GYk80daUt561V
5s20FnoS/Uoman3CSJL94IfCUBxejizE6vgIIHTc5bb6U0qIsPub/8JTTE2Ih7uP
nvFZ5uBQ+YTc7at+iIH9123eUMKkitkh8osNblovqQT9v42++Tm4ztAytRHBjwUA
Itew5HhlvahbLKqFs/7vmICh/YX1FcOV7cV+erEWYfkH0KCI2bhSle4u2d0CBOvD
VJlDnBCo9bM7WKcPYqJiFFFXA0CRk06wbkkkAtwF4zjp8xos7aQcq4FyQnYL8KXo
5lijIhRwBURBd+nt8oA9kuEhBt/T75otcemJkzVaYappHTJCLjhxSGcPt8mw+nE9
9WQzsp/MIVzg9l5g3D9S/43xM7uhvn98Tn1Qf2s8YRd2o8CZeOhW+X3RvbCvVPv2
mOlx4sFAv8DOJ3KxMdqiJT+PmylPyJluQdqH+tMc8BdPg/kpSpYIPTuSjjRqK1yh
ld5do0HtAAwiHtvXfk5YVFjJSpO0c8yVn6xci2Cl4k/5ZHj2UE1ln+N5vCea2BRF
2J3HAjROwtcwY3lU1jFnEAogf24KWiFJqhhC0EqBGUdlrM8Dn37P5cEWWjROIMNK
lPEdovokNw==
=CdDy
-----END PGP SIGNATURE-----
Merge tag 'v0.20.7'
release v0.20.7
2017-05-15 23:01:49 +02:00
Max Kellermann
71f0ed8b74
*: add "noexcept" to many, many function prototypes
...
This eliminates some overhead, because the compiler doesn't need to
consider these functions throwing.
2017-05-08 14:44:49 +02:00
Max Kellermann
b0ce551523
decoder/pcm: support audio/L24
...
Closes #31
2017-04-24 20:54:13 +02:00
Max Kellermann
8b0269c264
Merge branch 'v0.20.x'
2017-04-24 20:54:04 +02:00
Max Kellermann
6b60d1e71f
decoder/pcm: add missing nullptr check
...
Fixes a potential crash bug which is actually unreachable, because the
"pcm" plugin is never invoked when there is no (matching) MIME type.
2017-04-24 20:36:55 +02:00
Max Kellermann
f6e428ac22
Merge branch 'v0.20.x'
2017-04-24 11:44:27 +02:00
Max Kellermann
45fbafae94
decoder/pcm: split variable "frame_size" in "in_*" and "out_*"
2017-04-24 11:32:52 +02:00
Max Kellermann
7b7fb5acd5
decoder/pcm: fix potential assertion failure in FillBuffer()
...
After a seek failure, the buffer may still be full, and then
FillBuffer() aborts with assertion failure.
2017-04-24 11:20:37 +02:00
Max Kellermann
e26d49efb7
release v0.20.6
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAljCzQcQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEnIXD/9ltsmg3VC81NHOmcUehFgUaLyNh8o2iEr9
tQfdydQxfTXBIGztMoPsPz71da8BIqAgMTCTGAEpTUXIW6ViGkgsoDlR2fAOagG2
ybHn2q3WsPERJvkGZ4xIo0ti0pLLy7wrFpmShgOKuwb6YqOgSV+rbu/CaQanxVJE
S599vo6rV/OI4KFSYWJbfafifN/Mqmzfl/D/tB5xaMvhas60XZ6pZTp/xH8OlnML
8qkgPmN3gJe7DPq6L3rdwKobJuS1X6NLHSp1DyGVRy68B0sd3tMmbOocMeyi1OlE
1z/n/M+dcSUhdHAh/Pg0wrvH0UpUlJ11blSDiWB9gqr9oOvCZO+OcPCnk0QJrqq+
qselDNWBLvVPESbxlPO4OUbV6jxPPhVgz18RYl6JaJeUFjXkuiytI/t6jsbVM3+f
ZC1UgO+TznCuDjjMj35RP9QDkUQpuH6CK4+tyxbH7Fe4KQi02FQdtK8Q/CnESBLl
alTLYQk7VlwL1oMgezoZfTLDbsihRrEO6Y0cp/pObUrEjQ65706UGUf61PRQGBM9
DlEPqfuH8TMgksxDIrkt68pWjyCXhhUCA+RsyFJoMp7Xq6Gy2pZUn2yKCmTXLte/
v5xW9FuiSvKUKlvYbfk/q3u/GTCJELf0eY3y0Eryqp6nOEZHmzz8HOF7Bs2PxM3B
eU/fEKWxVQ==
=21bM
-----END PGP SIGNATURE-----
Merge tag 'v0.20.6'
release v0.20.6
2017-03-10 17:02:32 +01:00
Max Kellermann
1dd01c99e8
decoder/sidplay: make compatible with libsidplayfp < 1.8
...
https://bugs.musicpd.org/view.php?id=4665
2017-03-10 13:48:52 +01:00
Thomas Zander
d50b30a498
Add missing include for cstdlib, otherwise free() is undefined
2017-03-07 20:02:36 +01:00
Max Kellermann
3be2051808
decoder/Thread: check ENABLE_FFMPEG, not HAVE_FFMPEG
...
This repairs the damage to commit 74dbaade6f
done by commit
b3f5b4932c
2017-03-01 17:06:23 +01:00
Max Kellermann
29a7b2c5b5
decoder/mpcdec: ignore empty frames
...
https://bugs.musicpd.org/view.php?id=4656 describes a crash due to
division by zero because frame.samples==0. This should never happen,
but apparently can happen after seeking. The best we can do is to
just ignore this frame.
2017-03-01 16:13:21 +01:00
Max Kellermann
781487c4dd
thread/Thread: use BoundMethod
2017-02-10 22:46:09 +01:00
Max Kellermann
a3e28c2d1a
tag/Tag: move tag_name_parse() to ParseName.cxx
2017-02-08 08:57:22 +01:00
Max Kellermann
03a97d87ea
tag/Tag*: rename several source files
2017-02-08 08:49:42 +01:00
Max Kellermann
43348a3e13
decoder/Control: improve locking in Start() and Seek()
...
Previously, both methods accessed a lot of attributes which require
mutex protection.
2017-02-05 13:37:20 +01:00
Max Kellermann
39114f91a7
AudioFormat: replace struct audio_format_string with class StringBuffer, return it
2017-01-17 22:18:21 +01:00
Max Kellermann
7a3a793a12
decoder/Bridge: call PcmConvert::Reset() after seeking
2017-01-11 15:32:57 +01:00
Max Kellermann
142fdc8d86
decoder/flac: add options "probesize" and "analyzeduration"
...
https://bugs.musicpd.org/view.php?id=3876
2017-01-10 23:05:04 +01:00
Max Kellermann
c82b03a74c
decoder/wavpack: fix crash bug
2017-01-08 14:54:12 +01:00
Max Kellermann
5900253b85
update copyright year
2017-01-03 20:48:59 +01:00
Max Kellermann
2e182e84c3
thread/Mutex: remove ScopeLock, use std::lock_guard directly
2017-01-03 07:11:57 +01:00
Max Kellermann
6c818bb37a
AudioFormat: add method WithMask(), shortcut for ApplyMask()
2016-12-13 20:57:46 +01:00
Max Kellermann
99659e4cf9
release v0.19.21
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlhPxTwQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEoR8EACnEBj1zPTiraIoDZi9ZyqvwHZWILdcHRID
8XdUWmgIAwbL83Fwzxfokl060TWa43DWTWtGvieWkMcaAaTYNf8wxH6KZFmEVPCe
cvveFM6/PXJuEED16QjGoII9OzlIH330C4mmcmsfLPrcbAfULx7OtF7neIfbgpPX
ZKgrO6HVbpsMH57+o1CnX6sZXHwW9EvUy0j4YRuSfGX/7pgItfBrypDqPJCv2Hy1
mDy6gKWr7psA5ZiwYfTWVU1SPBuJiaKEM2jU80A5XVN0eZOi1EtUeySpyQO8Uncu
hnJApi9Pd6IT9Tb4Wz7LshmqHCjG82KC+EppI4ESrqE3R/OEsho1iPFej4SdJycV
XIcIRJ/S2JeopgGo4k/vlVzf4Y/9CMZZ7nP4fG1/1yjIYFQbefJeo1Gp/8b5ZTRD
5PjFgNGFyClwXNsHesF/2wDlCs1/DTv51BnapVLKD6AO9uyAOrzxBSeg8qSuprXx
K5m/z2dMdUNjBDzrSBzxKtVBwPfuARuo4Q633AxBk5C+HRpSdirtgrDBgE2aTDfU
4o+BjrhiL60t1C5iQJ48ahzCIRkEfe0czmfeNxu5Jiig8Y9cYtkYJezniyBIGkbL
RpqPxnD0YFTzzvuP8dWP+3zarxelETDwnH8KxD5jLpy2Rf2qjoNbeJNd70N6e8nN
z7Hnvp4YwQ==
=qsCR
-----END PGP SIGNATURE-----
Merge tag 'v0.19.21'
release v0.19.21
2016-12-13 11:00:39 +01:00
Max Kellermann
7146f825b2
decoder/ffmpeg: fix double free bug
...
From the avformat_open_input() API documentation:
"Note that a user-supplied AVFormatContext will be freed on failure."
https://bugs.musicpd.org/view.php?id=4607
2016-12-13 08:34:05 +01:00
Max Kellermann
57dd344f3b
decoder/wavpack: implement WavpackStreamReader64 if available
2016-12-10 00:24:54 +01:00
Max Kellermann
f7f59df8aa
decoder/wavpack: move code to WavpackInput methods
2016-12-10 00:17:46 +01:00
Max Kellermann
0525a6f90f
decoder/wavpack: use WavpackSeekSample64() if available
2016-12-10 00:12:47 +01:00
Max Kellermann
7b4305d81b
decoder/wavpack: seek errors are fatal
...
The libWavPack documentation says:
"After a FALSE return the file should not be accessed again (other
than to close it); this is a fatal error."
2016-12-10 00:11:29 +01:00
Max Kellermann
30bd190b41
decoder/wavpack: implement scan_stream()
2016-12-09 23:23:35 +01:00
Max Kellermann
cf93cd9307
decoder/wavpack: convert WavpackInput::client to pointer
2016-12-09 23:23:02 +01:00
Max Kellermann
f40816e063
decoder/wavpack: add WavpackOpen() wrappers which throw exception
2016-12-09 23:15:40 +01:00
Max Kellermann
3759f29852
decoder/wavpack: move wavpack_scan_file() down
2016-12-09 23:15:06 +01:00
Max Kellermann
bc5555933f
decoder/wavpack: support native DSD
2016-12-09 23:08:54 +01:00
Max Kellermann
ead7ae8504
decoder/wavpack: use template for format_sample_X()
2016-12-09 22:53:01 +01:00
Max Kellermann
ad5abba8c6
decoder/wavpack: move 8 and 16 bit conversion to separate functions
2016-12-09 22:49:07 +01:00
Max Kellermann
61296cedd2
decoder/wavpack: rename format_samples_float() to format_samples_nop()
2016-12-09 22:47:32 +01:00
Max Kellermann
d9c29a2c4f
decoder/wavpack: use std::copy_n()
2016-12-09 22:23:19 +01:00
Max Kellermann
f5172e6b84
decoder/wavpack: use int16_t instead of uint16_t
...
Technically, these samples are signed. There was no practical
difference, only the declaration was formally wrong.
2016-12-09 22:21:31 +01:00
Max Kellermann
544bcbe903
decoder/wavpack: use WavpackGetNumSamples64() if available
2016-12-09 22:09:32 +01:00
Max Kellermann
f35dab1b56
decoder/wavpack: check WavpackGetNumSamples()==-1
2016-12-09 21:46:29 +01:00
Max Kellermann
caee420087
decoder/wavpack: move code to GetDuration()
2016-12-09 21:45:22 +01:00
Max Kellermann
e8c374113e
decoder/wavpack: make is_float const
2016-12-09 21:30:31 +01:00
Max Kellermann
98a241a730
decoder/wavpack: use WavpackGetReducedChannels()
...
Since we don't use OPEN_2CH_MAX, this should be equal to
WavpackGetNumChannels() - but who knows, maybe a future libWavPack
version breaks this assumption.
2016-12-09 21:23:38 +01:00
Max Kellermann
be8297d6f6
decoder/wavpack: basic DSD support (WavPack 5)
...
Enable OPEN_DSD_AS_PCM if available. No OPEN_DSD_NATIVE yet.
https://bugs.musicpd.org/view.php?id=4606
2016-12-09 21:03:47 +01:00
Max Kellermann
df4ecf63a8
decoder/wavpack: disable OPEN_TAGS
...
Use MPD's internal APE tag code, which works just as well. This
removes some duplicate code for reading tags and ReplayGain.
2016-12-09 20:53:54 +01:00
Max Kellermann
b4d1937857
decoder/wavpack: change norm_offset to 0
...
MPD uses a floating point range from -1 to +1 internally - why ask
libwavpack to use -32768..+32768 only to reduce it back to -1..+1
afterwards?
2016-12-09 20:53:45 +01:00
Max Kellermann
0be5fbdc35
decoder/wavpack: use AtScopeExit()
2016-12-09 20:53:04 +01:00
Max Kellermann
c6e1ca1c22
system/Error: use std::generic_category() for errno on Windows
...
It's wrong to use std::system_category() for both GetLastError() and
errno on Windows. Apparently, everybody uses std::generic_category()
for errno values, which appears to be a safe choice.
Some discussion on this confusing topic can be found here:
https://stackoverflow.com/questions/28746372/system-error-categories-and-standard-system-error-codes
2016-12-04 20:07:11 +01:00
Max Kellermann
b3723274f7
decoder/Bridge: move code to DecoderControl::SetReady()
2016-12-03 14:20:51 +01:00
Max Kellermann
9fb7cc796b
decoder/Control: add attribute configured_audio_format
...
Obsoletes the same variable from AudioConfig.cxx.
2016-12-03 14:12:08 +01:00
Max Kellermann
6cc1ff5eeb
decoder/Control: make ReplayGainConfig const
2016-12-03 13:05:25 +01:00
Max Kellermann
86e8b8c10d
decoder/Thread: skip the ReplayGain loader if the feature is disabled
...
https://bugs.musicpd.org/view.php?id=4595
2016-11-25 13:26:40 +01:00
Max Kellermann
ee57c3490a
{decoder,player}/Control: add ReplayGain{Config,Mode} attributes
...
Don't use the global variables in class DecoderBridge; instead,
forward these values to the decoder thread via PlayerControl and
DecoderControl.
2016-11-25 12:51:55 +01:00
Max Kellermann
77c1f54876
ReplayGainConfig: add struct ReplayGainConfig, move globals to ReplayGainGlobal.cxx
2016-11-25 11:13:08 +01:00
Max Kellermann
5f396e824f
ReplayGainMode: convert to strictly-typed enum
2016-11-24 17:34:57 +01:00
Max Kellermann
25e58df5e0
ReplayGainInfo: don't use array in struct ReplayGainInfo
...
Declare two named elements. An enum should not be used as an array
index, as this is error prone.
2016-11-24 17:34:57 +01:00
Max Kellermann
09c3cc58e4
ReplayGainInfo: add method Get()
2016-11-24 17:34:57 +01:00
Max Kellermann
9b9144f25d
decoder/Control: use C++11 initializers
2016-11-24 14:58:17 +01:00
Max Kellermann
b677e891b4
decoder/{mikmod,modplug}: throw exception instead of calling FatalError()
2016-11-24 14:09:58 +01:00
Max Kellermann
95e2bec215
decoder/DecoderPlugin: container_scan() returns forward_list<DetachedSong>
...
Speed up container_scan() again, by eliminating the need to call
scan_file() for each item.
2016-11-22 16:49:31 +01:00
Max Kellermann
72c96052b4
decoder/gme: move gme_container_scan() down
2016-11-22 16:49:30 +01:00
Max Kellermann
bf78b7f815
decoder/sidplay: use template to eliminate duplicate code
2016-11-22 13:17:31 +01:00
Max Kellermann
ffb9874d84
decoder/sidplay: move code to ScanSidTuneInfo()
2016-11-22 12:37:25 +01:00
Max Kellermann
228cdbe6af
decoder/gme: provide the TRACK tag
2016-11-22 12:20:31 +01:00
Max Kellermann
a303639c9e
decoder/{gme,sidplay}: fix off-by-one bug in container_scan()
...
Broken by commit 0abee77e62
2016-11-22 12:20:31 +01:00
Max Kellermann
c5133f6088
db/update/Container: catch C++ exceptions
2016-11-22 12:16:14 +01:00
Max Kellermann
27d368d48d
decoder/gme: use AtScopeExit()
2016-11-22 12:16:14 +01:00
Max Kellermann
085b599f84
decoder/gme: remove redundant extern declaration
2016-11-22 12:16:14 +01:00
Max Kellermann
3b84eb3b70
decoder/gme: add missing SUBTUNE_PREFIX
...
Got lost in 0abee77e62
2016-11-22 12:16:14 +01:00
Max Kellermann
aa877a29d7
decoder/Thread: repair container decoder support
...
Catch ENOTDIR exceptions and in that case, try all matching decoder
plugins which implement the "container_scan" method.
https://bugs.musicpd.org/view.php?id=4561
2016-11-22 10:24:08 +01:00
Max Kellermann
0abee77e62
decoder/DecoderPlugin: container_scan() returns forward_list<string>
2016-11-22 09:33:52 +01:00
Max Kellermann
114fcee2ae
decoder/Client: add virtual method Read()
2016-11-21 22:43:09 +01:00
Max Kellermann
b488204093
decoder/API: move DecoderBridge methods to Bridge.cxx
2016-11-21 22:14:09 +01:00
Max Kellermann
322bfbaf57
decoder/API: simplify the client==nullptr code path in decoder_read()
2016-11-21 22:13:03 +01:00
Max Kellermann
2718f4c333
decoder/API: move part of decoder_check_cancel_read() into class DecoderBridge
2016-11-21 22:07:03 +01:00
Max Kellermann
8c342a764b
decoder/API: move functions into class DecoderBridge
2016-11-21 21:44:57 +01:00
Max Kellermann
697c3f8cb9
decoder/Internal: rename struct Decoder to class DecoderBridge
2016-11-21 21:38:23 +01:00
Max Kellermann
723e54f74e
decoder/Client: add OpenUri(), replacing decoder_open_uri()
2016-11-18 12:34:04 +01:00
Max Kellermann
1a8c96a3f0
decoder/mpcdec: use AtScopeExit()
2016-11-18 12:22:41 +01:00
Max Kellermann
a88040e4d5
decoder/Client: add Submit methods
...
Replaces decoder_data() and others.
2016-11-18 09:05:04 +01:00
Max Kellermann
47a0f46ce8
decoder/Client: add DecoderCommand/seek virtual methods
2016-11-18 09:03:42 +01:00
Max Kellermann
66fb352cca
decoder/Client: add virtual method Ready()
...
Replaces decoder_initialized().
2016-11-18 09:03:41 +01:00
Max Kellermann
fd77acc217
decoder/Client: new interface which wraps struct Decoder
...
Prepare for a Decoder API redesign based on an abstract class with
virtual methods.
2016-11-18 09:03:39 +01:00
Max Kellermann
595d1942cb
decoder/Internal: rename "chunk" to "current_chunk"
2016-11-18 09:01:32 +01:00
Max Kellermann
b0b8f573bc
decoder/API: copy exceptions to Decoder::error
2016-11-17 22:54:13 +01:00
Max Kellermann
746aa6cc0f
decoder/API: check for errors in decoder_read()
2016-11-17 22:53:43 +01:00
Max Kellermann
fac610d47b
decoder/API: decoder_open_uri() can throw StopDecoder
2016-11-17 22:48:18 +01:00
Max Kellermann
93209da176
decoder/API: lock decoder in decoder_get_command()
2016-11-17 22:36:42 +01:00
Max Kellermann
35a2a48c47
Merge branch 'v0.19.x'
2016-11-17 22:20:24 +01:00
Max Kellermann
7019f6bea4
decoder/pcm: round buffer size down to nearest frame size
...
https://bugs.musicpd.org/view.php?id=4599
2016-11-17 21:58:27 +01:00
Max Kellermann
43b285ef7a
decoder/Thread: remove the obsolete catch(Error&)
2016-11-10 12:55:08 +01:00
Max Kellermann
4e16ea0f0a
decoder/flac: migrate from class Error to C++ exceptions
2016-11-10 12:55:08 +01:00
Max Kellermann
42a696873b
decoder/faad: migrate from class Error to C++ exceptions
2016-11-10 12:55:08 +01:00
Max Kellermann
cfd51db229
CheckAudioFormat: migrate from class Error to C++ exceptions
2016-11-10 12:55:08 +01:00
Max Kellermann
12f11c97ae
decoder/faad: use AtScopeExit()
2016-11-10 12:55:08 +01:00
Max Kellermann
6a78d11127
decoder/gme: use AtScopeExit()
2016-11-10 12:55:08 +01:00
Max Kellermann
256ee7a8c7
decoder/audiofile: use AtScopeExit()
2016-11-10 12:55:08 +01:00
Max Kellermann
4dc7d1c0cd
decoder/Thread: use AllocatedPath::FromUTF8Throw()
2016-11-10 12:55:08 +01:00
Max Kellermann
5b8b660bd0
decoder/DecoderAPI: include cleanup
2016-11-09 13:42:52 +01:00
Max Kellermann
4cd21f1e07
decoder/Control: throw exception on Seek() error
2016-11-07 09:05:28 +01:00
Max Kellermann
ecb8f7362b
decoder/ffmpeg: copy_interleave_frame() throws exception on error
2016-10-31 13:03:02 +01:00
Max Kellermann
e17805f208
config/Block: GetPath() throws exception on error
2016-10-28 23:08:42 +02:00
Max Kellermann
d8bcdca55a
config/Block: rename GetBlockPath() to GetPath()
2016-10-28 23:07:26 +02:00
Max Kellermann
debc855806
Merge branch 'v0.19.x'
2016-10-27 21:01:27 +02:00
Max Kellermann
49c04ccfc7
decoder/sidplay: fix playback speed with libsidplayfp
...
https://bugs.musicpd.org/view.php?id=4577
2016-10-27 20:25:19 +02:00
Max Kellermann
11ba44870b
decoder/sidplay: simplify seek loop
2016-10-27 20:25:12 +02:00
Max Kellermann
77a9940461
decoder/ffmpeg: ignore empty packets
...
An empty packet would be a command for avcodec_send_packet() to
finalize the codec.
Fixes https://bugs.musicpd.org/view.php?id=4588
2016-10-26 18:29:07 +02:00
Max Kellermann
f62546ec79
decoder/mad: use C++11 initializers
2016-10-25 18:52:54 +02:00
Max Kellermann
2a2ac35b98
decoder/ffmpeg: FfmpegOpenInput() throws exception on error
2016-09-16 18:49:22 +02:00
Max Kellermann
8c744efd56
input/InputStream: migrate from class Error to C++ exceptions
2016-09-16 17:43:36 +02:00
Max Kellermann
1bc553ea62
decoder/DecoderAPI: catch InputStream::Read() exceptions
2016-09-16 17:34:53 +02:00
Max Kellermann
fc7d3f64c0
input/Plugin: migrate open() from class Error to C++ exceptions
2016-09-09 18:15:01 +02:00
Max Kellermann
38d587aaeb
decoder/wavpack: wavpack_open_wvc() returns InputStreamPtr
...
Let std::unique_ptr manage both the InputStream and the WavpackInput.
2016-09-09 16:04:57 +02:00
Max Kellermann
fe9bafa741
decoder/wavpack: use AtScopeExit() for exception-safety
2016-09-09 15:55:58 +02:00
Max Kellermann
ae1eb9ccde
pcm/Convert: migrate from class Error to C++ exceptions
2016-09-09 14:44:13 +02:00
Max Kellermann
845901ab01
decoder/Internal: convert error from Error to std::exception_ptr
2016-09-08 20:56:05 +02:00
Max Kellermann
25f7360264
decoder/Thread: throw InputStream::Open() errors
...
Code simplification.
2016-09-08 20:54:55 +02:00
Max Kellermann
78ec7d0fe1
decoder/Thread: throw StopDecoder on DecoderCommand::STOP
2016-09-08 20:54:55 +02:00
Max Kellermann
a1e9678b69
decoder/Thread: std::throw_with_nested() to wrap caught exception
2016-09-08 20:54:55 +02:00
Max Kellermann
957b399e90
decoder/Thread: call FlushChunk() using AtScopeExit()
...
Be exception-safe.
2016-09-08 20:41:44 +02:00
Max Kellermann
5e6c164b9f
decoder/Internal: use C++11 initializers
2016-09-08 20:34:39 +02:00
Max Kellermann
5d9a889190
decoder/Thread: throw C++ exceptions on error
2016-09-08 20:26:40 +02:00
Max Kellermann
a9acc9c971
decoder/Thread: catch C++ exceptions from the decoder plugin
2016-09-08 19:24:15 +02:00
Max Kellermann
308010794a
decoder/Control: convert error from Error to std::exception_ptr
...
Prepare full C++ exception support in the decoder thread.
2016-09-08 17:16:03 +02:00
Max Kellermann
d0dae177cf
release v0.19.19
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJXvAb+AAoJECNuiljG20USLukP/1dWwG4U3eQllGtwmKYEuGT8
x8bFImW3zziQgzzQNos8ZyB/7Q9wFDwl90q2Shyg778sk8WgBLVdn1hLhDRyodkg
iTAbnuBeX0GoQO2vZ62jY/xtsSMwCguNMbJe5Yybq+uZ2EYLQO8NWsvy/qZzZRB6
9s78IfQodN/vbKg8cJDPP1ZFvlhC+RfrOJbhwkAhh3D0xkpYjumW636ewcpD5Crk
T+OT035konZEcH2hOy89tleFifo+/nosiJQXL5/RdfIVAy+rWj9HbKMT9Wlb2EO0
iqvbjfC8rAt4a15Y8l/C42m1xhLFtRvI7O5I5wH8zqwpgRfCuG21Kw49zWFQ9md/
tX2urKZC6QsvxfHx4J6ot+SFQJB/VZ1fufG1ZBTHVNp7eJ++mWE5pR79EbCLurlj
x7cN1ZM7wsQfkw8MOsKr+sJqIGkU9sZSHHh3PhEkI83fEssYaAOGtkPuTqU0w/37
wHV2laFD58SOagVPbQlhIdK6MnkiTR8RvV9j6ERywLnFNMBMiI9j7ij7zoDMKjSU
E60JzIR4xUPWtQg91BwM5sJdqZw7xybgNBn0rMt+6AoA0CQseAnPRxA9gstrWR1/
FYRPUzrf9brpvXEsT8R2tXcjNLNYgKzT3GxHEQj1k2MJiVe+1SztiYIi77JPLJfn
MevaiCy/Ho3ZeQKygxVq
=GsV+
-----END PGP SIGNATURE-----
Merge tag 'v0.19.19'
release v0.19.19
2016-08-23 10:27:39 +02:00
Max Kellermann
4204d4928b
decoder/ffmpeg: no avcodec_parameters_to_context() with FFmpeg 3.0
...
This function exists since FFmpeg 3.1. Fix a build failure with
FFmpeg 3.0.
2016-08-23 10:15:54 +02:00
Max Kellermann
05de0ecec3
decoder/ffmpeg: call avcodec_parameters_to_context()
...
These bug reports describe problems with some FFmpeg codecs:
https://bugs.musicpd.org/view.php?id=4564
https://bugs.musicpd.org/view.php?id=4568
https://bugs.musicpd.org/view.php?id=4572
According to the FFmpeg bug tracker, a call to
avcodec_parameters_to_context() is required after
avcodec_alloc_context3():
https://trac.ffmpeg.org/ticket/5781
This requirement was previously undocumented.
2016-08-23 09:59:25 +02:00
Max Kellermann
743fa73a01
Merge branch 'v0.19.x'
2016-08-15 12:33:07 +02:00
Max Kellermann
a546bfe7d9
decoder/wildmidi: support libWildMidi 0.4
2016-08-15 10:08:35 +02:00
Max Kellermann
25deae6cc7
decoder/wildmidi: move code to wildmidi_output()
2016-08-15 10:07:08 +02:00
Max Kellermann
afd5b750dc
release v0.19.18
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJXpMKjAAoJECNuiljG20USti8QAJC6Y/wnyBgE8bGGynhNKoIy
H5GQP9a3iFAiZ4ZBQ6jJAVMhRVzStxqTvYdU8ISbrE9Sw92i37ZaUwvbOcMGjN8G
vm3oTSsPaQKABuaeNo0vdWDKEUIjXIFzyXL31SnGVCkS3KMLFUcq5p4/9OaFtxiD
dMshfi8S+g5MLZf1xf6sviTwHTNQJYYMOEGDlq9E21UorwA5jN22dgYRiEoYAPrv
eOCO+N+N7N3VazIN+Y2L0cU3NtJpRvtv001UcfP0oSb12bysSepCCVc02sYQYIY6
W0LCjgzAbLX5nxyNDR75cjwPZlVDXhulesUVg/0uEEITdwmd8E3MtAxygsSTth6r
fNo6NThceoD10T/HgSCaU/vXOV5MNw3oVwc4Q/aoCoPryuNGeN9vDIro3+EaPdsW
6cfBMTYIU3iWpdNt+WI1mTf2aD4RvWWb0C7kgD6CF2QUm8aBRSHmQAnua0cWvlx9
SSMhG7p4FXrLAveuqaPfDItsQ9IA8oW9E6nxgD8W7eCHEo+fUa1D8Ymfjl7Qcldb
WdT2u38PmF7s/z+YwrFWTISwdDieYq/XC7xPibUYDJQzqBmBksB07sJUwVAO6xF2
YhVlHhhIhYajD4n0VCLuC2QzRgoLEhaNstlK/q01lGZbW4F9/dNuZ2Fe/O+yWsLH
ksxyC62N4oy10f8/PSp1
=48Tb
-----END PGP SIGNATURE-----
Merge tag 'v0.19.18'
release v0.19.18
2016-08-05 18:51:38 +02:00
Max Kellermann
d042ab87da
decoder/Thread: delete the InputStream on error
...
Fixes memory leak after stream failure. See
https://bugs.musicpd.org/view.php?id=4562
2016-08-05 18:15:30 +02:00
Max Kellermann
5834843b8a
decoder/ffmpeg: fix the AVCodecParameters API check
...
Turns out the libavcodec version numbers are not linear; the feature
was added in FFmpeg 3.1 commit 998e1b8, libavcodec 57.14.0; but FFmpeg
3.0 has version 57.48.101. Ouch!
2016-08-02 19:15:23 +02:00
Max Kellermann
2777a23672
Merge branch 'v0.19.x'
2016-07-29 20:25:59 +02:00
Max Kellermann
762f3afb9d
decoder/sidplay: allow building with libsidplayfp instead of libsidplay2
...
https://bugs.musicpd.org/view.php?id=4558
2016-07-29 19:32:21 +02:00
Max Kellermann
7fb2f15a1a
decoder/ffmpeg: check avformat_open_input() return value
2016-07-29 19:32:21 +02:00
Max Kellermann
7456dccd3a
decoder/ffmpeg: FfmpegOpenInput() returns Error
2016-07-29 19:32:21 +02:00
Max Kellermann
245f41bb7e
decoder/ffmpeg: fix endless recursion in FfmpegScanStream()
...
Was accidently added by commit cafc266e0
2016-07-29 19:32:21 +02:00
Max Kellermann
9bfb844cfa
decoder/sidplay: read the "date" tag
2016-07-29 17:47:08 +02:00
Max Kellermann
d790d3ba3c
decoder/sidplay: add GetInfoString()
2016-07-29 17:38:04 +02:00
Max Kellermann
c3dbc92766
decoder/sidplay: use SidTune::getStatus()
2016-07-29 17:31:34 +02:00
Max Kellermann
0bd25f1e17
decoder/sidplay: log detailed error message
2016-07-29 17:04:38 +02:00
Max Kellermann
a4cd7411e8
decoder/sidplay: remove unnecessary error check
...
The ReSIDBuilder constructor cannot fail.
2016-07-29 17:03:26 +02:00
Max Kellermann
bf276f6235
decoder/sidplay: use SidTune::getStatus()
2016-07-29 16:58:58 +02:00
Max Kellermann
071cacc9a4
decoder/sidplay: pass SidTuneMod to get_song_length()
...
Eliminate duplicate SidTune construction.
2016-07-29 14:56:05 +02:00
Max Kellermann
33f33323af
decoder/sidplay: simplify the SidDatabase::length() call
2016-07-29 14:55:58 +02:00
Max Kellermann
388fae2c47
decoder/sidplay: include cleanup
2016-07-29 14:55:28 +02:00
Max Kellermann
9f878b77e9
decoder/sidplay: use class SidDatabase
...
Remove our own songlength database parser.
2016-07-29 14:55:28 +02:00
Max Kellermann
a547d2aaba
decoder/sidplay: use config_param::GetBlockPath()
2016-07-29 14:55:28 +02:00
Max Kellermann
c013026821
decoder/sidplay: make "songlength_file" local
2016-07-29 14:55:28 +02:00
Max Kellermann
96b48a2404
decoder/sidplay: pass parsed path to get_song_length()
...
Eliminates duplicate ParseContainerPath() call.
2016-07-29 14:55:28 +02:00
Max Kellermann
9612975c2c
decoder/sidplay: merge get_container_name() and get_song_num()
2016-07-29 14:55:28 +02:00
Max Kellermann
8825393660
decoder/ffmpeg: use avcodec_alloc_context3()
...
This commit suppresses the remaining deprecation warnings with FFmpeg 3.1.
2016-07-29 09:20:36 +02:00
Max Kellermann
2b9246c6ad
decoder/ffmpeg: use avcodec_send_packet() and avcodec_receive_frame() on FFmpeg 3.1
2016-07-29 09:20:05 +02:00
Max Kellermann
a9edb4de28
decoder/ffmpeg: use AtScopeExit() for safe cleanup
2016-07-29 09:08:14 +02:00
Max Kellermann
0c809fbb40
Merge branch 'v0.19.x'
2016-07-29 09:00:20 +02:00
Max Kellermann
cafc266e0b
decoder/ffmpeg: merge avformat_close_input() calls
2016-07-28 20:38:07 +02:00
Max Kellermann
a3d020eff9
decoder/ffmpeg: use AVCodecParameters on FFmpeg 3.1
...
The AVCodecContext attribute is deprecated.
2016-07-28 19:50:25 +02:00
Max Kellermann
8412d94d05
decoder/ffmpeg: add GetCodecParameters()
...
Preparing for FFmpeg 3.1 support.
2016-07-28 19:49:47 +02:00
Max Kellermann
d1c5bb956a
decoder/ffmpeg: move code to IsAudio()
2016-07-28 19:49:45 +02:00
Max Kellermann
70986bc120
decoder/ffmpeg: move code to FfmpegSendFrame()
2016-07-28 19:49:18 +02:00
Max Kellermann
f31fe8b865
decoder/ffmpeg: include cleanup
2016-07-28 19:49:17 +02:00
Max Kellermann
142a9fe530
decoder/ffmpeg: move code to pcm/Interleave.cxx
2016-07-28 19:49:13 +02:00
Max Kellermann
4dd2ad9b27
decoder/ffmpeg: check for commands earlier
...
Improve initial seek by not reading/decoding the first frame before
checking for the seek command.
2016-07-28 19:48:27 +02:00
Max Kellermann
62f7375804
decoder/ffmpeg: simplify mpd_ffmpeg_open_input()
2016-07-28 19:48:25 +02:00
Max Kellermann
543296b5ba
decoder/ffmpeg: move code to lib/ffmpeg/Init.cxx
2016-07-28 19:48:22 +02:00
Max Kellermann
5fee130d00
decoder/ffmpeg: move code to lib/ffmpeg/LogCallback.cxx
2016-07-28 19:47:49 +02:00
Max Kellermann
073facea70
decoder/ffmpeg: remove obsolete comment
2016-07-28 19:47:47 +02:00
Max Kellermann
dbe3b6eee4
decoder/ffmpeg: convert enums to constexpr
2016-07-28 19:47:36 +02:00
Max Kellermann
df97049647
decoder/ffmpeg: move struct AvioStream to FfmpegIo.hxx
2016-07-28 19:47:31 +02:00
Max Kellermann
42c5f68362
decoder/ffmpeg: use AVStream::duration
...
Use the duration of the stream we're actually decoding - not the
"global" attribute AVFormatContext::duration which may differ.
2016-07-28 19:47:24 +02:00
Max Kellermann
cc19e760cf
decoder/ffmpeg: use more references
2016-07-28 19:45:22 +02:00
Max Kellermann
0ff22a16fa
decoder/ffmpeg: move code to lib/ffmpeg/Time.hxx
2016-07-28 19:45:11 +02:00
Max Kellermann
47360ec906
decoder/ffmpeg: use av_free() instead of av_freep()
2016-07-28 19:45:07 +02:00
Max Kellermann
087a9938d2
decoder/ffmpeg: add API documentation
2016-07-28 19:45:05 +02:00
Max Kellermann
26d8e41a6b
decoder/ffmpeg: copy_interleave_frame() returns ConstBuffer
2016-07-28 19:45:01 +02:00
Max Kellermann
750ae1d3f3
decoder/ffmpeg: copy_interleave_frame() returns Error
2016-07-28 19:44:42 +02:00
Max Kellermann
f8a9a7a108
decoder/ffmpeg: simplify ffmpeg_send_packet()
2016-07-28 19:44:39 +02:00
Max Kellermann
eb192137d6
decoder/ffmpeg: copy the AVPacket in ffmpeg_send_packet()
...
Revert commit 70495aad
by rewriting it. Turns out, in old FFmpeg
versions, copying the AVPacket is necessary.
2016-07-28 19:42:25 +02:00
Max Kellermann
c25b464f37
decoder/ffmpeg: move code to class FfmpegBuffer
2016-07-27 17:31:02 +02:00
Max Kellermann
710b48d410
decoder/ffmpeg: log detailed error message
2016-07-27 17:28:12 +02:00
Max Kellermann
5e77a8199d
decoder/ffmpeg: remove obsolete comment
2016-07-27 17:28:12 +02:00
Max Kellermann
6637db086b
decoder/ffmpeg: add "pure" attributes
2016-07-27 17:28:12 +02:00
Max Kellermann
a271a55da7
decoder/ffpmeg: make variables more local
2016-07-27 17:28:12 +02:00
Max Kellermann
6eeec6cbfa
decoder/ffpmeg: simplify ffmpeg_send_packet()
2016-07-27 17:22:13 +02:00
Max Kellermann
5e3f3b0400
decoder/ffpmeg: rename functions to CamelCase
2016-07-27 17:18:58 +02:00
Max Kellermann
923c402f69
decoder/ffmpeg: optimize ffmpeg_scan_dictionary()
...
Don't scan tag items if the handler doesn't implement the tag()
method.
2016-07-27 17:17:14 +02:00
Max Kellermann
44219d5e91
decoder/flac: refactor flac_convert() to class FlacPcmImport
2016-07-11 23:34:55 +02:00
Max Kellermann
b9de3270f6
decoder/flac: specialize "stereo" for all bit depths
2016-07-11 23:33:34 +02:00
Max Kellermann
590d6faeb0
decoder/flac: convert flac_convert_*() to templates
2016-07-11 23:27:57 +02:00
Max Kellermann
62e96e9a58
decoder/flac: pass number of frames to flac_convert()
2016-07-11 23:24:48 +02:00
Max Kellermann
1c818ef0a0
decoder/flac: improve warning message about unsupported bit depth
2016-07-11 23:13:33 +02:00
Max Kellermann
d6ce2e3671
decoder/flac: move functions into struct FlacDecoder
2016-07-11 23:11:22 +02:00
Max Kellermann
85b6a52662
decoder/flac: use C++11 initializers
2016-07-11 22:44:39 +02:00
Max Kellermann
0246082b9b
decoder/flac: move position code to FlacDecoder::GetDeltaPosition()
2016-07-11 22:38:26 +02:00
Max Kellermann
3b031c6ba5
decoder/flac: throw exception on FLAC__stream_decoder_new() failure
2016-07-11 22:38:03 +02:00
Max Kellermann
74740ca50b
decoder/flac: add class FlacStreamDecoder wrapping a FLAC__StreamDecoder*
2016-07-11 22:37:55 +02:00
Max Kellermann
631baa7120
decoder/flac: eliminate redundant FlacDecoder attributes
2016-07-11 22:37:52 +02:00
Max Kellermann
657d6edff7
decoder/flac: add FlacInput getter methods
2016-07-11 22:37:49 +02:00
Max Kellermann
737c5a9549
decoder/flac: rename struct flac_data to FlacDecoder
2016-07-11 22:37:46 +02:00
Max Kellermann
b67e7df38e
release v0.19.17
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJXgCv6AAoJECNuiljG20USR3cP/RALB4qlhecMo6H8VwZvfjiA
FHfhBKfdpHM3U3EEIZc1zxwHIdWk1yELtmx298vmJbWUifpYAYarXF5497tZf2XE
AVfhTltEJEd7xB5ZULnEScM1aHzMZm5HRcHwM1UqNCsXP7PT8fmpk7gw19pKOChT
h8V3+tpC403lCIcHcJGlkuzgZvKIZDs73g7a0+4GxD9XRAPwnMYRl3Cfd8QjKT/U
r67AcOwQlS6hWJFs0K1JjOQwfwbRq2YmuOmFJua6n8O6CI/7t4h3faSQ0V/5qjFd
k/pAMRtX6mz3mjVhZv4cuMy+QILWlxUNwLBIwtxSfbwcFKrN0vtIRG8O9622hTs2
+mvYiVboWABk6hnukiDAfki96jWYHlsCJR5oIK9DZ4nBe5RVp0r9Nq/ook2AW2it
6VgYIDBI5zS/blyJzXtzDVWEtSmLFxm21JSl+jHfWDtL6/rQGimdVOFkRw40oCBz
seYb5kIbilrg6xq1KiBMT+EWmXMf+q+3YWQsu01blXGYGPhpUqhIr0h/qUfWAqMs
fwIsoxsTrkQQjEWb6YWupPrdOLZ+kTAyaK+7v8B8JmzS/H3SohusMPUZKsQXl82s
5LJVLtVxB9WRRmpfSoYqfk7CkTHOktCzVmiHb/FYUYElS9VKmJYYU8XQ25snCoZ6
bYtERsH28q8rrpkWWEXP
=IXD5
-----END PGP SIGNATURE-----
Merge tag 'v0.19.17'
release v0.19.17
2016-07-09 00:46:09 +02:00
Max Kellermann
ab95027fc6
decoder/flac: suppress warning at end of stream
...
This is required if a stream ands without another chained FLAC file.
2016-07-08 23:19:47 +02:00
Max Kellermann
ed3bc4ab63
decoder/flac: move code to FlacInitAndDecode()
2016-07-08 23:03:49 +02:00
Max Kellermann
68064f1aa6
decoder/flac: move duplicate code to flac_data::Initialize()
2016-07-08 22:44:23 +02:00
Max Kellermann
475ac76a5f
decoder/flac: late "total_frames" initialization
2016-07-08 22:43:31 +02:00
Max Kellermann
79d4f8674c
decoder/flac: remove "duration" parameter from flac_decoder_initialize()
...
It's always 0.
2016-07-08 22:41:19 +02:00
Max Kellermann
e42eed4d4c
decoder/flac: remove pointless check
2016-07-08 22:41:19 +02:00
Max Kellermann
4a7042e847
decoder/flac: handle unknown duration correctly
...
If the duration is unknown, pass SignedSongTime::Negative(), as
documented for decoder_initialized().
2016-07-08 22:33:49 +02:00
Max Kellermann
7f36923eb4
decoder/flac: pass SignedSongTime to decoder_initialized()
2016-07-08 22:32:23 +02:00
Max Kellermann
2ca8d69126
decoder/flac: document flac_data::position
2016-07-08 22:20:16 +02:00
Max Kellermann
70367d70c8
decoder/flac: remove obsolete sub-song support
...
This is obsolete because it has been moved to the MPD core.
2016-07-08 21:59:30 +02:00
Max Kellermann
6f59d71e07
decoder/API: check initial_seek_running in _check_cancel_read()
...
The "seeking" flag is not set for the initial seek, and so
decoder_read() could be canceled when another SEEK was emitted during
initial seek.
This fixes several seek problems, for example the one reported for the
FLAC decoder plugin:
https://bugs.musicpd.org/view.php?id=4552
2016-07-06 15:46:04 +02:00
Max Kellermann
f9130f42a2
decoder/flac: try to recover from seek error()
...
libFLAC API documentation suggests that FLAC__stream_decoder_flush()
should be called to recover from FLAC__STREAM_DECODER_SEEK_ERROR.
2016-07-05 19:29:56 +02:00
Max Kellermann
faf2eeaa99
decoder/flac: evaluate all possible FLAC__stream_decoder_get_state() values
...
Stop after all fatal errors. This fixes assertion failures in
libFLAC.
2016-07-05 19:27:40 +02:00
Max Kellermann
34e91850d9
decoder/pcm: assume that audio/L16 is big-endian
...
See https://bugs.musicpd.org/view.php?id=4547
2016-07-01 21:34:56 +02:00
Max Kellermann
d3c7fac606
thread/Thread: throw std::system_error on error
2016-06-17 19:11:20 +02:00
Max Kellermann
8b903626c2
release v0.19.16
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJXXuZbAAoJECNuiljG20USSegP/1gYoDyp4vDDCcRBNZkr3hlE
VbFyEz06/chfUTCRWFxtM6ghVMzSpqv7I8wDA8zv22NTkForVWD3gjimtJqJ/R4w
aT7QMZJmJUIH0Uf+dRp98YRG7m5S1Y5JkKEYu4oxQOECxbNMPd+ilbb6wwr2pYZ/
k2ks+oyYtPgqtWlriIbJMwXOyQEfqNCJgzxUzC2U6idVALYpj+5aK+VTY4Nk1YXw
nLAu8TT40jNYFfss0bDYBzQbm/82m8Q9JIkmoOpX/3WaRaCjaVza7IvRKgDPZutJ
mmrtu5SJ+QgLQLaXvav84KwtXhDbJu4zEbC7tUL0LGSmzbpiiz2DSUJP2jQ0C6nS
wgcACFkHGBLOjKNbjDB1eUhS7ouzxTGgPlsMC89254R7XQP/5EV9H3Quxb48Bxq7
PuW6nNHytppfAIZP18X62oL8hpSgwK1zLe34jzayJlkGIg5O1he4FcJQykvlzrjm
fBvL+hX3TM9exfASQujNXVgxFGPmgb37bE2aQyxZunE1DltJWfHyOhdme9vCuEcB
acz8gR/jcp8OKe4RCEdD1g86CSW2wlMfKfnzuwPPhcw0L3kz6OYcjRr2oMae7uG0
/NFw+PcdHcVKXjiRoJsdCvtN+jRtJhCUn314IskgyKad/UNcELbo7WDBUqHC36Wg
ncM6Sis4oal4jPXJ2JoE
=6ee1
-----END PGP SIGNATURE-----
Merge tag 'v0.19.16'
release v0.19.16
2016-06-13 19:03:59 +02:00
Max Kellermann
4ecd325371
decoder/flac: log seek errors
2016-06-13 18:37:45 +02:00
Max Kellermann
22ff0d80ce
decoder/pcm: add MIME type "audio/x-mpd-float"
2016-06-10 23:06:21 +02:00
Max Kellermann
5a22a0c27d
decoder/pcm: implement RFC 2586 (audio/L16)
...
https://bugs.musicpd.org/view.php?id=4525
2016-06-10 22:52:35 +02:00
Max Kellermann
92cdea123e
TagStream, decoder/Thread, ...: ignore MIME type parameters for matching plugins
2016-06-10 22:24:13 +02:00
Max Kellermann
e4c7e343c8
util/StringUtil: use CamelCase
2016-06-10 22:08:13 +02:00
Max Kellermann
2ee43c403c
decoder/vorbis: reimplement using class OggDecoder
...
Use libvorbis instead of libvorbisfile, which gives us more control
over the decoding process.
2016-05-14 12:31:12 +02:00
Max Kellermann
24fa3f5e7b
Revert "decoder/Thread: flush last chunk only on success"
...
This reverts commit 995cd95474
. It was
a bad idea because it caused assertion failures when a decoder plugin
aborted with an exception.
2016-05-14 12:31:12 +02:00
Max Kellermann
bbbda7f812
decoder/opus: move code to new class OggDecoder
...
Prepare to reuse the same code for a new Vorbis decoder plugin based
on libvorbis instead of libvorbisfile.
2016-05-14 11:31:31 +02:00
Max Kellermann
e958900380
decoder/vorbis: reimplement _scan_stream() with plain libvorbis
2016-05-14 10:52:52 +02:00
Max Kellermann
74926c1dd3
decoder/opus: move _scan_stream() code to OggReadPacket()
2016-05-14 10:39:53 +02:00
Max Kellermann
2654888782
decoder/OggFind: move to lib/xiph/
2016-05-14 10:34:05 +02:00
Max Kellermann
b5ecfb4c9a
decoder/opus: move code to class OggVisitor
2016-05-13 13:37:49 +02:00
Max Kellermann
5acc77a163
decoder/opus: change return types to void
2016-05-13 13:24:32 +02:00
Max Kellermann
0709878b4c
decoder/API: add class StopDecoder
2016-05-13 13:23:24 +02:00
Max Kellermann
662e477028
decoder/opus: throw exceptions instead of returning DecoderCommand::STOP
2016-05-13 13:18:19 +02:00
Max Kellermann
b7b7c381ee
decoder/Thread: catch exceptions
...
Allow decoders to throw std::runtime_error.
2016-05-13 13:01:39 +02:00
Max Kellermann
995cd95474
decoder/Thread: flush last chunk only on success
2016-05-13 13:01:31 +02:00
Max Kellermann
fe8a13f76f
decoder/Thread: move code to DecoderUnlockedRunUri()
2016-05-13 13:00:40 +02:00
Max Kellermann
9252432bc0
decoder/opus: move OggSyncState into class MPDOpusDecoder
2016-05-13 12:25:30 +02:00
Max Kellermann
f057f6768f
decoder/opus: pass DecoderReader to constructor
2016-05-13 12:16:22 +02:00
Max Kellermann
806bf0be8d
decoder/Reader: add methods GetDecoder(), GetInputStream()
2016-05-13 11:27:06 +02:00
Max Kellermann
958506a108
decoder/Reader: change Decoder pointer to reference
2016-05-13 10:40:10 +02:00
Max Kellermann
e8fd771b91
decoder/opus: change Decoder pointers to references
2016-05-13 10:39:36 +02:00
Max Kellermann
fa4178fefa
decoder/opus: remove ogg_page parameter from constructor
...
Initialize the OggStreamState as soon as the first page is seen; no
special code needed in the caller.
2016-05-11 17:57:51 +02:00
Max Kellermann
1af59d31b9
decoder/opus: add method IsInitialized()
2016-05-11 17:27:26 +02:00
Max Kellermann
20758cef30
decoder/opus: make internal methods "private"
2016-05-11 17:27:02 +02:00
Max Kellermann
272938529d
decoder/opus: move everything into anonymous namespace
2016-05-11 17:25:43 +02:00
Max Kellermann
a1a26b70bc
decoder/opus: make opus_serialno a local variable
2016-05-09 15:43:15 +02:00
Max Kellermann
34a7f86a07
decoder/opus: use class OggStreamState in _stream_decode()
2016-05-09 15:41:03 +02:00
Max Kellermann
e7311ac2f3
decoder/opus: use C++11 initializers
2016-05-09 15:41:01 +02:00
Max Kellermann
8d9ecc0c62
decoder/opus: make variables more local
2016-05-09 15:41:00 +02:00
Max Kellermann
f01b991108
decoder/opus: use class OggStreamState in _scan_stream()
2016-05-09 15:40:59 +02:00
Max Kellermann
a9678f0ae0
decoder/opus: fix minor typo
2016-05-09 15:00:04 +02:00
Max Kellermann
8af68db965
lib/xiph/OggStreamState: new ogg_stream_state wrapper
2016-05-09 14:50:39 +02:00
Max Kellermann
ed6c6296eb
{de,en}coder/{vorbis,flac,opus}: move several libraries to lib/xiph/
2016-05-03 23:40:29 +02:00
Max Kellermann
7adbd00811
decoder/{vorbis,flac,opus}: move OggCodec.cxx to libxiph.a
2016-05-03 12:54:47 +02:00
Max Kellermann
1c91d19163
decoder/OggUtil: pass Reader instance to OggFeed()
2016-05-03 00:05:31 +02:00
Max Kellermann
f491135318
decoder/Reader: new Reader implementation
2016-05-03 00:05:31 +02:00
Max Kellermann
280d35a053
decoder/api: use class ScopeLock
2016-05-02 23:33:08 +02:00
Max Kellermann
3fb8f3ec95
release v0.19.15
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJXJKNhAAoJECNuiljG20US7pcP/A2sFmmf+QlKvV5G88D+UxbX
kIoz3d5mHRoW4kJcbhUKUVe9pIkQEWTVC4XNNi8ggO8/MUa7+FpUPR0bJDgmLnnm
jM3tV/eVXUmPgXTgj1PT0jOTNCNNJx69JYhz7nMGIAbxubs7hRGTfGgJYnTQImsW
yDVst0BH7C6i21kmAWjQYoFZu0h7ZoyBOZTHAyR/6wF6Bmlc5JAEV6eBRyrU3MLN
Mma4+rJhMh+2206SqUBJEVwEszaTJnmu7Xi5Zmk+LGSrykJt93bQio7k2hJ5PvKJ
feFCXl1IpobUMpPJ+Nv1QraTKO9lg5oEYOwlcxJf4JwfqpRk+oXr+MZ52iR9jMtw
otcux72CYMmSJOC2Sl8cq9TdQCOb7XxhDjv+Phf44WG5Ns1QJQY7rvrGLT0gFSLx
MVD2WKJCrWFgql6ugf9lhsrt7x8llD9anNqbJNamXmGoL0NFJs6sg9d02vbRuIDz
xOcBPKnDB/Ao1TxXT4/Ck6gzYwTd+sxvsrC2XwthDXTiM+qe+pAjF+KFKd5thIUs
Hh296GL8Ch68X+6HXVkCKwyW9F503LFAcXTlP6XQUnkpPHNU536VdUjaHmx557jR
3cY7d67gHSVxllDQJYp0GIMIKyaZhQ4V7w3l1IKzPc1KrhryOxvlbAaYVSHo26nI
yZMKwFJ1L0l9j76kZG4a
=GyO9
-----END PGP SIGNATURE-----
Merge tag 'v0.19.15'
release v0.19.15
2016-04-30 14:28:25 +02:00
Florian Schlichting
27d4b15925
DecoderBuffer: add missing include
...
> In file included from src/decoder/DecoderBuffer.cxx:21:0:
> src/decoder/DecoderBuffer.hxx:41:20: error: 'uint8_t' was not declared in this scope
> DynamicFifoBuffer<uint8_t> buffer;
> ^
> src/decoder/DecoderBuffer.hxx:41:27: error: template argument 1 is invalid
> DynamicFifoBuffer<uint8_t> buffer;
> ^
> src/decoder/DecoderBuffer.hxx: In member function 'void DecoderBuffer::Clear()':
> src/decoder/DecoderBuffer.hxx:61:10: error: request for member 'Clear' in '((DecoderBuffer*)this)->DecoderBuffer::buffer', which is of non-class type 'int'
> buffer.Clear();
> ^
> src/decoder/DecoderBuffer.hxx: In member function 'size_t DecoderBuffer::GetAvailable() const':
> src/decoder/DecoderBuffer.hxx:78:17: error: request for member 'GetAvailable' in '((const DecoderBuffer*)this)->DecoderBuffer::buffer', which is of non-class type 'const int'
> return buffer.GetAvailable();
> ^
> src/decoder/DecoderBuffer.hxx: In member function 'ConstBuffer<void> DecoderBuffer::Read() const':
> src/decoder/DecoderBuffer.hxx:87:19: error: request for member 'Read' in '((const DecoderBuffer*)this)->DecoderBuffer::buffer', which is of non-class type 'const int'
> auto r = buffer.Read();
> ^
> src/decoder/DecoderBuffer.hxx:88:27: error: could not convert '{<expression error>, <expression error>}' from '<brace-enclosed initializer list>' to 'ConstBuffer<void>'
> return { r.data, r.size };
> ^
> src/decoder/DecoderBuffer.hxx: In member function 'void DecoderBuffer::Consume(size_t)':
> src/decoder/DecoderBuffer.hxx:105:10: error: request for member 'Consume' in '((DecoderBuffer*)this)->DecoderBuffer::buffer', which is of non-class type 'int'
> buffer.Consume(nbytes);
> ^
This seems to be caused by a lacking include, fixed by the below patch.
I'm unsure what made this appear now, though, compiler and toolchain
libraries seem to be the same upstream versions that built 0.19.14-1
just fine in late March.
2016-04-25 08:30:27 +02:00
Max Kellermann
e8121fdc11
decoder/Thread: fail decoder_input_stream_open() if STOP is received
...
Fixes an assertion failure in tag_ape_scan() which is because
decoder_input_stream_open() returns an "unready" InputStream.
2016-04-21 13:15:34 +02:00
Max Kellermann
c731a82b71
decoder/opus: limit the number of packets in _scan_stream()
2016-04-19 13:08:07 +02:00
Max Kellermann
e6fad97edc
decoder/opus: support bigger OpusTags packets
...
Required for OpusTags packets which contain artwork.
See https://bugs.musicpd.org/view.php?id=4520
2016-04-19 13:05:42 +02:00
Max Kellermann
cd041f8574
decoder/Plugin: container_scan() returns AllocatedString
2016-04-13 12:23:10 +02:00
Max Kellermann
33fdaa5b6d
Merge branch 'v0.19.x'
2016-04-13 10:03:40 +02:00
Max Kellermann
70495aada1
decoder/ffmpeg: don't copy the AVPacket in ffmpeg_send_packet()
...
Reduce some overhead. It is not necessary to copy the object.
2016-04-13 09:04:51 +02:00
Max Kellermann
f243f615ef
decoder/ffmpeg: convert pointers to references
2016-04-13 09:01:54 +02:00
Max Kellermann
6a1f5667f9
util/FormatString: return AllocatedString
2016-04-12 22:59:23 +02:00
Max Kellermann
807c72b2f1
decoder/ffmpeg: use av_packet_unref() instead of av_free_packet()
...
av_free_packet() was deprecated in FFmpeg 3.0.
2016-04-12 21:15:05 +02:00
Max Kellermann
74dbaade6f
decoder/Thread: use "ffmpeg" as fallback instead of "mad"
...
Adds support for stream codecs which havn't been explicitly listed in
ffmpeg_mime_types.
2016-03-30 00:58:48 +02:00
Max Kellermann
6ff01cc72c
Merge branch 'v0.19.x'
2016-03-07 14:30:43 +01:00
Max Kellermann
b24cbc68ba
decoder/dsdiff: fix off-by-one buffer overflow
2016-03-06 23:28:29 +01:00
Max Kellermann
976fdd76c1
decoder/opus: limit tag size to 64 kB
2016-03-06 23:26:48 +01:00
Max Kellermann
1aee89f5ea
*: include cleanup (using iwyu)
2016-03-01 22:08:13 +01:00
Max Kellermann
1d67aa7bf2
update copyright year to 2016
2016-02-26 17:54:05 +01:00
Max Kellermann
bf65a9732c
decoder/thread: clear Decoder::error before attempting another plugin
...
Keep only the last error. This fixes bogus aborts due to the error
check in decoder_get_virtual_command().
2016-02-26 17:30:24 +01:00
Max Kellermann
1388b3219a
decoder/thread: fix typo in comment
2016-02-26 16:48:27 +01:00
Max Kellermann
a1e680fec7
decoder/thread: open InputStream in decoder_run_file() in any case
...
decoder_load_replay_gain() will create the InputStream anyway, so
we're not saving any overhead by opening the InputStream on demand
only.
2016-02-23 11:14:12 +01:00
Max Kellermann
1b58bd64ff
decoder/thread: use typedef InputStreamPtr
2016-02-23 11:14:11 +01:00
Max Kellermann
196de8c758
decoder/thread: load APE replay gain from remote files
2016-02-23 10:57:03 +01:00
Max Kellermann
73307bf2e7
tag/TagHandler: pass by reference
2016-02-23 10:10:13 +01:00
Max Kellermann
a5f8fd774d
tag/handler: use CamelCase
2016-02-22 17:38:06 +01:00
Max Kellermann
cadc67ea40
input: wrap InputStream in std::unique_ptr
2016-02-21 08:03:32 +01:00
Chris Spiegel
1e0ad1f6bf
Add TAK as a supported FFmpeg format.
2016-02-19 17:32:48 +01:00
Chris Spiegel
e7b211f2c0
Add TAK as a supported FFmpeg format.
2016-02-12 18:49:10 -08:00
Max Kellermann
2939fadd6a
decoder/Control: use ScopeLock
2015-12-31 13:45:10 +01:00
Max Kellermann
ef260377c3
decoder/Internal: use ScopeLock
2015-12-31 13:44:19 +01:00
Max Kellermann
b9213df64b
decoder/API: use ScopeLock
2015-12-31 13:43:35 +01:00
Max Kellermann
aa7694047b
decoder/Thread: pass InputStream errors to DecoderControl::error
...
Give MPD clients access to the error condition.
2015-12-31 13:39:13 +01:00
Max Kellermann
e2bc63217a
decoder/Thread: decoder_input_stream_open() returns std::unique_ptr<InputStream>
...
Fixes memory leak after InputStream::Check() failure.
2015-12-31 13:39:13 +01:00
Max Kellermann
6c5b8bcf9d
decoder/Thread: log all errors
2015-12-31 13:38:35 +01:00
Max Kellermann
e425fe3f97
decoder/Thread: use std::unique_ptr<InputStream>
2015-12-31 13:12:28 +01:00
Max Kellermann
6507993972
decoder/Thread: move decoder_command_finished_locked() to DecoderControl
2015-12-31 13:06:31 +01:00
Max Kellermann
f081696f62
decoder/Thread: convert "int ret" to "bool success"
2015-12-31 13:02:55 +01:00
Max Kellermann
09157c3130
decoder/Thread: use ScopeLock in decoder_run_stream()
2015-12-31 13:01:49 +01:00
Max Kellermann
00626b1633
decoder/Thread: use std::unique_ptr<InputStream>
2015-12-31 13:01:03 +01:00
Max Kellermann
7e0cdbe502
decoder/Thread: use ScopeUnlock for exception-safety
2015-12-31 12:59:06 +01:00
Max Kellermann
ca08902d71
decoder/Thread: use ScopeLock in TryDecoderFile()
2015-12-31 12:58:58 +01:00
Max Kellermann
fad0e834d5
decoder/Thread: always unlock mutex before returning from TryDecoderFile()
...
Remove that surprising rule.
2015-12-31 12:57:35 +01:00
Max Kellermann
dc76eb6139
decoder/Thread: mutex not locked for decoder_run_{file,stream}()
2015-12-31 12:42:02 +01:00
Max Kellermann
55e113c7a7
decoder/Thread: document locking rules
2015-12-31 12:36:32 +01:00
Max Kellermann
b62f5e079e
decoder/Thread: use ScopeLock for exception-safety
2015-12-31 12:36:00 +01:00
Max Kellermann
faca8bc02a
decoder/Control: Seek() returns Error information
2015-11-11 19:56:08 +01:00
Max Kellermann
76a9049739
decoder/Control: State::ERROR is illegal
...
The state ERROR can only be entered during decoder initialization, and
Seek() may only be called after initialization has been finished.
2015-11-11 17:46:06 +01:00
Max Kellermann
27bfcda20d
decoder/Control: use switch/case in Seek()
2015-11-11 17:46:03 +01:00
Max Kellermann
733989a284
util/StringUtil: move comparison functions to StringCompare.cxx
2015-11-06 09:20:18 +01:00
Max Kellermann
94f850a588
release v0.19.11
...
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJWL0cEAAoJECNuiljG20USkHkP/0m3kFEEgqauAIbI1t0TkKOp
2ii5iHZeMAlsxGEc5SX5fFoXM6STbXq/3+OXBf+OnABh9b03o744QAAwh1ei9tiQ
kMysbN2fbpHkuchx1JfrOU1ad3qfWXQri8csTtx5eRYpgyqF7Mfl1SoY1nkpherd
j4MVq7MVqBhwCqpAfJvTFTSOlNrJ4bBcvIgGslhFYhRxMRM83KgFS//lHvbXWnOg
fjYEO34nz0rjCfz6x2r7ZQBLeQVr9n6h24iYhSTnU7Xq9o2ezWlVRIm9YVhxoZKf
/MRJuAzaHhGID8IvX7dPxdQJ+feUhQXSv8HSjOJBO6R2dqIScE3D6EIBHy8Cj9Bk
O2D1SgmR+2NnjNz2GUjCIKHm9c9jTgv+rnZ2l8hweS2oUQOPHbCtOoCNAfwyP+/Y
ms1CavNl7bUuvWrM1ipM2ZK6QfW9P4F1dtmwqtJCsqdGFyQyfACcxqmlkfxhB2vI
NyvKAOn/TlWWQscF9id3r90sEir/J9e7IJ6oZh+uvyIfOtt8wR/Jm5/H1MA7j3iX
XmNbe1GY3WHjCH2lRr3tIRKAE8I3HAtBzwhvq/miSESrkEnJ06VMatkoMRQT63gy
62yaCg+ZWiBRp07ygiedYuGL19pDOhqRjY3U/b/0EHMb9ux083nuUTssqgzzO2OP
9OPao5CPs4M4QvmiG/wF
=RdQt
-----END PGP SIGNATURE-----
Merge tag 'v0.19.11'
2015-10-27 11:05:47 +01:00
Max Kellermann
5719207dfa
gme: don't loop forever, fall back to GME's default play length
...
Fixes http://bugs.musicpd.org/view.php?id=4432
2015-10-26 17:16:20 +01:00
Max Kellermann
a84fbbe327
decoder/gme: free the gme_info_t as early as possible
2015-10-26 17:15:24 +01:00
Max Kellermann
3882c11450
decoder/gme: log the emulator type
2015-10-26 17:00:27 +01:00
Max Kellermann
08f77c2b60
decoder/gme: add option "accuracy"
2015-10-26 16:56:55 +01:00
Max Kellermann
93c97972b9
decoder/gme: call decoder_seek_error() on seek error
2015-10-26 16:32:39 +01:00
Max Kellermann
1958f78cc1
decoder/ffmpeg: fix crash due to wrong avio_alloc_context() call
...
Allocate the buffer dynamically using av_malloc(), and free
AVIOContext.buffer in the destructor, as mandated by the libavformat
documentation.
Fixes http://bugs.musicpd.org/view.php?id=4446
2015-10-26 13:06:29 +01:00
Max Kellermann
62bfb1a273
decoder/mad: reduce memory usage while scanning tags
...
Allocate the frame pointers only when actually decoding the file.
2015-10-19 13:12:36 +02:00
Max Kellermann
a7ee64a25b
decoder/mpcdec: use SampleTraits<SampleFormat::S24_P32>
...
Eliminates some duplicate code, and as a side effect, this works
around clang 3.8 compiler warning because a negative value was
shifted.
2015-10-16 18:12:32 +02:00
Max Kellermann
2a58f22649
decoder/mpcdec: use Clamp()
2015-10-16 18:11:42 +02:00
Max Kellermann
356c829b76
util/StringView: new utility class
2015-09-30 22:21:46 +02:00
Max Kellermann
7652a2986b
client/Response: new Client wrapper class for writing responses
2015-08-12 08:41:05 +02:00
Max Kellermann
3e9738dc66
decoder/mpcdec: read the bit rate
...
This was lost in commit 8ead8f7ea
, because this was never implemented
for the new API.
2015-08-05 23:33:11 +02:00