Max Kellermann
2e9f3d8b9f
decoder/HybridDSD: downgrade log message to "debug"
...
This plugin is interesting only for a tiny fraction of MPD users, so
let's not spam everybody else's log with it.
2019-03-29 17:15:48 +01:00
Max Kellermann
0c6d22fe47
decoder/ffmpeg: move code to lib/ffmpeg/SampleFormat.hxx
2019-03-18 10:58:46 +01:00
Max Kellermann
a66097129d
Merge branch 'v0.21.x'
2019-03-16 14:08:22 +01:00
Max Kellermann
1aa7cdd602
decoder/opus: fix replay gain when there are no other tags
...
The `tag_builder.empty()` check was wrong for the SubmitReplayGain()
call.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/497
2019-03-16 13:55:19 +01:00
Max Kellermann
0009d53b3f
decoder/ffmpeg: add AVCodecContext wrapper class
2019-03-13 09:41:52 +01:00
Max Kellermann
05f7a6d1ff
decoder/ffmpeg: add AVFormatContext wrapper class
2019-03-13 00:27:21 +01:00
Max Kellermann
0256bbbbaf
decoder/ffmpeg: wider try/catch in ffmpeg_scan_stream()
2019-03-13 00:27:21 +01:00
Max Kellermann
bce608cdbc
decoder/ffmpeg: ffmpeg_decode() may throw
...
Don't catch and log exceptions. Let the caller handle the error.
2019-03-13 00:20:13 +01:00
Max Kellermann
38a0844cdf
decoder/ffmpeg: add AVFrame wrapper class
2019-03-12 23:51:46 +01:00
Max Kellermann
c176d94598
system/ByteOrder: move to util/
2019-03-08 10:21:10 +01:00
borine
c5df879cf9
decooder/plugins/PcmDecoderPlugin: add missing config for preproceesor macro definitions
2019-03-07 12:31:43 +00:00
borine
0762e5c289
decoder/plugins/PcmDecoderPlugin: guard alsa specific code with pre-processor macro test
2019-03-07 08:26:04 +00:00
borine
945ea51bd4
decoder/plugins/PcmDecoderPlugin: introduce new internal mime type "audio/x-mpd-alsa-pcm"
...
This mime type is to enable the AlsaInputPlugin to communicate the pcm stream audio format to the decoder
2019-03-06 08:39:47 +00:00
Max Kellermann
7a23c123c8
decoder/List: add RAII class
2019-02-05 22:12:22 +01:00
Max Kellermann
e85b24bee0
decoder/List: add noexcept
2019-02-05 22:11:51 +01:00
Jörg Krause
4f7d52dbf2
meson: add fixed-point Vorbis (Tremor) decoder support
...
Re-add build support for the fixed-point Vorbis (Tremor) decoder, which
was dropped when switching from Autotools to Meson.
Note, that it is not possible to build both, the Vorbis and the Tremor
decoder.
Closes : #405
2019-01-21 08:35:17 +01:00
Thomas Klausner
3a0480a482
Add missing include of stdlib.h.
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/456
2019-01-15 16:52:40 +01:00
Max Kellermann
ce49d99c2f
check.h: remove obsolete header
...
Since we switched from autotools to Meson in commit
94592c1406
, we don't need to include
`config.h` early to properly enable large file support. Meson passes
the required macros on the compiler command line instead of defining
them in `config.h`.
This means we can include `config.h` at any time, whenever we want to
check its macros, and there are no ordering constraints.
2018-11-19 16:33:49 +01:00
Max Kellermann
793fd8c479
decoder/ffmpeg: eliminate GetSampleFormat()
2018-11-04 22:36:17 +01:00
Max Kellermann
6c602811df
decoder/ffmepg: fill AudioFormat from AVCodecContext, not AVCodecParameters
...
`AVCodecParameters` contains values from the codec detected by
avformat_find_stream_info(), but after avcodec_open2(), a different
codec might be selected with a different `AVSampleFormat`. This leads
to misinterpretation of data returned from FFmpeg, leading to random
noise or silence.
This was observed with FFmpeg 4.0.2 and a TS container file containing
MP2. A mp3-float codec was detected returning `AV_SAMPLE_FMT_FLTP`,
but finally the `mpegaudiodec_fixed.c` was used, returning
`AV_SAMPLE_FMT_S16`.
By using the audio format from `AVCodecContext`, we ensure that MPD
and FFmpeg always agree on the actual audio format in the buffer.
This removes the FFmpeg bug workaround from commit e1b032cbad
which I
assume is obsolete after 7 years.
Fixes #380
2018-11-04 22:30:50 +01:00
Max Kellermann
bd115a4008
decoder/ffmpeg: use AtScopeExit() to call av_packet_unref()
2018-11-04 22:01:33 +01:00
Max Kellermann
08272cdee2
decoder/ffmpeg: require FFmpeg 3.1 or later
...
Drop some compatibility code.
2018-11-04 21:55:06 +01:00
Max Kellermann
f5c9071494
*: copyright year 2018
2018-10-31 17:54:59 +01:00
Max Kellermann
8bb35e7bb6
decoder/Thread: reimplement HasRemoteTagScanner() using the InputPlugin list
2018-10-25 09:09:21 +02:00
Max Kellermann
9ec86acb9c
decoder/Thread: enable output tags for Tidal and Qobuz
...
Fixes formatted paths in the `recorder` output, closing #345 .
2018-10-24 16:38:26 +02:00
Max Kellermann
426bde3f75
decoder/Thread: move check to SongHasVolatileTags()
2018-10-24 16:32:41 +02:00
Max Kellermann
f7141c9201
decoder/Control: convert to class, make various attributes private
2018-10-24 10:47:34 +02:00
Max Kellermann
c2a2573aa5
release v0.20.22
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlvPX+UQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFElO8EACgPMaiN3m/x1hzJ3QTLzCXgeqSG1vuv1tC
F+sFISLPx/IoVjTpvd9H8jMt7lD+SYB620pAfNyLIGZpWcTxu1wmaviOghqCqnGP
sql0vtS9CrRGhsKDi5earox3zecylWJ3PRPXpy/4NjFuFUxE2ij/wbXzDb9UbtMg
1WnVL++fAlFj54CnPR35XHglYU+X7/bMWApkVUfsKBgyX9aghqLYUIm0jaUjj3Bs
xB/2Nemd1A88yrc4kqyzbFsN96S/W2eXhDYfPlDwFdplfoRJ8nrEMdwrsn0nabIF
7x+OsAGAfrz3e00TZdiDSaIy7VU4EFV9ctZVonoCGUluBHL0iG7G7bj2cnd+hVnZ
ecidfHMUqVO99elmUtWsUQwzbhL/TxM6Fzn2qDwqdwcCWDgHcn4fpXfsY0MRt6NK
cUhCyspMTuhqS3ohLO6RfiWDActm6QL2IHiDty/WAe1Td0VjOiRQMq7CADHlgn/D
IalN8kGyWHK5ew+3Iiw5zRoYjNXG4ALZN8cEqVh2R7i2uxh8+qm46HkhticAjfDM
4mETs3oAZdpOGCgv6Q0eY7tQDKB13DD/303NJaVFb6Iew2TZCWDbFz5HjqYShCZi
PgnPosdRg0LoQbMah4Uhsj6frs6LEBMpg6c7nScJN/1MoRaOyVNDg03X+rBmPe5z
XULvdsZ8Sw==
=8OQx
-----END PGP SIGNATURE-----
Merge tag 'v0.20.22'
release v0.20.22
2018-10-23 20:10:57 +02:00
Max Kellermann
005e691339
decoder/fluidsynth: adapt to API change in version 2.0
...
Closes #360
2018-10-23 18:44:28 +02:00
Max Kellermann
e28d1e0f65
decoder/mad: convert Tag**
parameter to just Tag*
2018-10-22 09:44:54 +02:00
Max Kellermann
a491d8ae24
decoder/mad: use class UniqueId3Tag
2018-10-22 09:44:50 +02:00
Max Kellermann
3cd5dd15f8
decoder/mad: don't initialize xing::frames
2018-10-22 09:44:48 +02:00
Max Kellermann
562ae44d38
decoder/mad: remove unused attribute from xing::magic
2018-10-22 09:44:46 +02:00
Max Kellermann
650a67dc38
decoder/mad: use mad_bit_skip() where appropriate
2018-10-19 20:24:16 +02:00
Max Kellermann
c63f24e58e
decoder/audiofile: larger stack buffer to reduce overhead
2018-10-19 20:04:28 +02:00
Max Kellermann
3be8b02cc2
decoder/sndfile: make vio
constexpr
...
Use `const_cast` to be able to pass it to sf_open_virtual() which has
a wrong parameter declaration.
2018-10-19 19:51:17 +02:00
Max Kellermann
bdfaea0c25
decoder/mad: move parse_id3_mixramp() to src/tag/Id3ReplayGain.cxx
2018-10-19 19:45:32 +02:00
skidoo23
69749eb591
decoder/sidplay: fix typo to avoid linker error with meson (libsidplayfp)
2018-10-16 14:56:40 +02:00
Max Kellermann
94592c1406
build with Meson instead of autotools
...
So long, autotools! This is my last MPD related project to migrate
away from it. It has its strengths, but also very obvious weaknesses
and weirdnesses. Today, many of its quirks are not needed anymore,
and are cumbersome and slow. Now welcome our new Meson overlords!
2018-10-14 23:41:38 +02:00
skidoo23
f80ebf68b0
decoder/wavpack: fix warning 'unused variable is_dsd' when compiled with --enable-dsd=no
2018-10-12 01:02:34 +02:00
Max Kellermann
030e603940
decoder/gme: fix include
...
Broken since commit 08f77c2b60
2018-10-07 22:33:52 +02:00
Max Kellermann
863722545f
player/CrossFade, ...: use lround()
2018-09-22 19:08:03 +02:00
Max Kellermann
d3d1d37782
AudioFormat: add TimeToSize(), SizeToTime()
2018-09-21 20:51:08 +02:00
Max Kellermann
90f4e97751
decoder/Client: use std::chrono::duration<double> instead of raw double
2018-09-21 20:42:34 +02:00
Max Kellermann
c0411fa412
decoder/Thread: add noexcept
2018-09-21 17:58:34 +02:00
Max Kellermann
debdf9bb96
decoder/{Thread,Control,...}: rename source files, drop prefix
2018-09-21 17:01:24 +02:00
Max Kellermann
218d9383d7
decoder/Thread: move decoder_thread_start() into DecoderControl
2018-09-21 16:57:54 +02:00
Max Kellermann
ec54754e22
Compiler.h: move to util/
2018-08-20 16:19:17 +02:00
Max Kellermann
f6b3a88723
Merge branch 'master' of git://github.com/skidoo23/MPD
2018-08-14 19:02:37 +02:00
skidoo23
82e8913c05
decoder/sidplay: support basic and kernal rom (libsidplayfp)
2018-08-12 14:25:11 +02:00
Max Kellermann
01d3777574
decoder/Thread, ...: log all exceptions
2018-08-09 11:14:40 +02:00
Max Kellermann
0ea6a2dd99
decoder/mpg123: remove obsolete const_cast hack
2018-08-07 22:52:38 +02:00
Max Kellermann
cacc1ffdad
decoder/mpg123: use AtScopeExit() to call mpg123_delete() during scan
2018-08-07 22:48:11 +02:00
Max Kellermann
cfe34647e1
decoder/mpg123: use AtScopeExit() to call mpg123_delete()
2018-08-07 22:29:51 +02:00
Max Kellermann
ca4c81dd84
decoder/mikmod: require at least version 3.2
2018-08-02 20:45:14 +02:00
Max Kellermann
e9881bbfc8
configure.ac: detect libmikmod with pkg-config
2018-08-02 20:42:25 +02:00
Max Kellermann
69f4178bff
decoder/ffmpeg: require at least version 11.12
...
This is the version in Debian Jessie (oldstable).
2018-08-02 20:18:19 +02:00
Max Kellermann
90201e9970
DetachedSong, db/LightSong, SongFilter: move to src/song/
2018-08-02 13:51:18 +02:00
Max Kellermann
96017f58a5
decoder/ffmpeg: skip the av_probe_input_format() call
...
This is kind of a revert of commit
b2e3c0757b
, which is not any longer
necessary since commit 0dd4b52b63
removed the last call to `av_open_input_stream()`.
2018-07-25 00:07:16 +02:00
Max Kellermann
fd80683ade
decoder/mad: make "gapless_mp3_playback" a block option
...
Remove another dependency on the config/Global library.
2018-07-18 10:50:09 +02:00
Max Kellermann
57d77cc8a0
decoder/List: use struct ConfigData
2018-07-17 22:05:21 +02:00
Max Kellermann
5b192beaa5
config/Global: remove ConfigBlock::SetUsed() call, let caller do that
...
This fixes an old bug which caused the "unused" warnings to be
unreliable; only the first block in the list was marked as being
"used", no matter if it was really used, and the rest was never marked
as "used", suppressing all warnings for them.
2018-07-17 21:08:41 +02:00
Max Kellermann
816603fd9a
config/Config*: rename files, drop "Config" prefix
2018-07-16 19:50:07 +02:00
Max Kellermann
d7f770ce73
decoder/flac: move flac_sample_format() to FlacAudioFormat.hxx
2018-07-07 14:40:02 +02:00
Max Kellermann
24b14c5aa5
decoder/flac: rename FlacMetadata.cxx to FlacStreamMetadata.cxx
2018-07-07 14:29:49 +02:00
Max Kellermann
2e116c9e28
lib/xiph/FlacMetadataChain: un-inline Read(InputStream)
2018-07-07 14:22:22 +02:00
Max Kellermann
37897d1550
decoder/flac: move class FlacMetadataChain to separate source
2018-07-07 14:18:00 +02:00
Max Kellermann
b153591790
decoder/flac: move FlacIOHandle.?xx to lib/xiph/
2018-07-07 14:17:03 +02:00
Max Kellermann
ee5653338d
decoder/flac: fix comment typo
2018-07-07 14:11:28 +02:00
Max Kellermann
d43218ed16
lib/xiph/FlacMetadataIterator: proper CamelCase
2018-07-07 14:07:48 +02:00
Max Kellermann
3d43e4e954
decoder/flac: move class FLACMetadataIterator to separate source
2018-07-07 14:04:37 +02:00
Max Kellermann
b0d587ded7
decoder/flac: pass FLAC__Metadata_Chain* to FLACMetadataIterator ctor
2018-07-07 14:04:06 +02:00
Max Kellermann
1245b4a49f
decoder/wavpack: merge duplicate code into Scan()
2018-07-07 13:54:02 +02:00
Max Kellermann
d4ce6049c9
decoder/wavpack: call TagHandler::OnAudioFormat()
2018-07-07 13:52:58 +02:00
Max Kellermann
c236a85c13
decoder/wavpack: add CheckAudioFormat(WavpackContext)
2018-07-07 13:48:49 +02:00
Max Kellermann
9cf43eef67
decoder/wildmidi: call TagHandler::OnAudioFormat()
2018-07-07 13:43:29 +02:00
Max Kellermann
ed6d0aa548
decoder/wildmidi: convert WILDMIDI_SAMPLE_RATE to AudioFormat
2018-07-07 13:36:18 +02:00
Max Kellermann
3d27fffc50
decoder/opus: call TagHandler::OnAudioFormat()
2018-07-07 13:34:32 +02:00
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