Commit Graph

1414 Commits

Author SHA1 Message Date
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