release v0.21.9
-----BEGIN PGP SIGNATURE----- iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlziw4IQHG1heEBtdXNp Y3BkLm9yZwAKCRAjbopYxttFEqrmD/4ipjXE5PkGD7unTIvnmv0X1FRnaOO1rwyY SkqWl2D8DsgFh1d0IkNxzofNQ5mv3YpZY2ycD4kHbM+RWkV+fVuGnhePSCSd0w2s Lj5r8yYq43UfIwn4fVwFeqjsEhtT47gHLATJ4/Zc4q+VfzVhPqp1esxrf+vHX6nH SCMp9WP5L8FBcf28IqW3hBc/cOTtp36FsuzRkyFMrM/tq6a6VF8mqBKO9Qpnz6OU egq3d+tqpg1Qq90QXZx7LfXArK0v89Wezv3M/EhzamBc2DClFQnaL3BTOD0hawdt WRfm8WzdXS73QrmJvcOFtcath6jdrKIvBwMKIdmDikp2ofF0m1COh9UcHReA0MK9 UbRZWmeTzeu+UKNugD//Ma+oNwntv5W/xSSvEsgvLTiyd8XcdlKXcsrwbYVD7o3L uTKq8V2h5iDC5cure5FvWnpaugaI38fJ+DDGArSe/BhScQhioXAPFa3hSGLux3e8 gaKWu6/6biCi8yMra8z4dL2zyUNLEw4J2e9RPweLeQL/gi0A1alSLtcQ6VWGGFFW 5GtQALTuISH5/9TWnr1LGiI6cgNHCQ2JOeL99pChu+PdoSiuA+KwQojZ4UEUVAGL GTbupl3yUFJ9jv/rLZOjOIycJ9cYifM+Th98iTfK4aMQujzAkJj132Qqzci+rUXp 6R9hfalT2A== =aixT -----END PGP SIGNATURE----- Merge tag 'v0.21.9' release v0.21.9
This commit is contained in:
commit
8942be858b
3
NEWS
3
NEWS
@ -8,12 +8,13 @@ ver 0.22 (not yet released)
|
||||
- ffmpeg: new plugin based on FFmpeg's libavfilter library
|
||||
- hdcd: new plugin based on FFmpeg's "af_hdcd" for HDCD playback
|
||||
|
||||
ver 0.21.9 (not yet released)
|
||||
ver 0.21.9 (2019/05/20)
|
||||
* input
|
||||
- buffer: fix deadlock bug
|
||||
* Android
|
||||
- fix crash on ARMv7
|
||||
- request storage permission on Android 6+
|
||||
* fix spurious "single" mode bug
|
||||
|
||||
ver 0.21.8 (2019/04/23)
|
||||
* input
|
||||
|
@ -14,6 +14,9 @@ Once the client is connected to the server, they conduct a
|
||||
conversation until the client closes the connection. The
|
||||
conversation flow is always initiated by the client.
|
||||
|
||||
All data between the client and the server is encoded in
|
||||
UTF-8.
|
||||
|
||||
The client transmits a command sequence, terminated by the
|
||||
newline character ``\n``. The server will
|
||||
respond with one or more lines, the last of which will be a
|
||||
@ -42,9 +45,6 @@ quotation marks.
|
||||
Argument strings are separated from the command and any other
|
||||
arguments by linear white-space (' ' or '\\t').
|
||||
|
||||
All data between the client and the server is encoded in
|
||||
UTF-8.
|
||||
|
||||
Responses
|
||||
=========
|
||||
|
||||
@ -52,6 +52,28 @@ A command returns ``OK`` on completion or
|
||||
``ACK some error`` on failure. These
|
||||
denote the end of command execution.
|
||||
|
||||
Some commands return more data before the response ends with ``OK``.
|
||||
Each line is usually in the form ``NAME: VALUE``. Example::
|
||||
|
||||
foo: bar
|
||||
OK
|
||||
|
||||
.. _binary:
|
||||
|
||||
Binary Responses
|
||||
----------------
|
||||
|
||||
Some commands can return binary data. This is initiated by a line
|
||||
containing ``binary: 1234`` (followed as usual by a newline). After
|
||||
that, the specified number of bytes of binary data follows (without an
|
||||
extra newline, because this binary data is not a text line), and
|
||||
finally the ``OK`` line. Example::
|
||||
|
||||
foo: bar
|
||||
binary: 42
|
||||
<42 bytes>OK
|
||||
|
||||
|
||||
Failure responses
|
||||
-----------------
|
||||
|
||||
@ -112,9 +134,9 @@ list begins with `command_list_begin` or
|
||||
`command_list_ok_begin` and ends with
|
||||
`command_list_end`.
|
||||
|
||||
It does not execute any commands until the list has ended.
|
||||
The return value is whatever the return for a list of commands
|
||||
is. On success for all commands,
|
||||
It does not execute any commands until the list has ended. The
|
||||
response is a concatentation of all individual responses.
|
||||
On success for all commands,
|
||||
``OK`` is returned. If a command
|
||||
fails, no more commands are executed and the appropriate
|
||||
``ACK`` error is returned. If
|
||||
@ -795,7 +817,7 @@ The music database
|
||||
|
||||
Returns the file size and actual number
|
||||
of bytes read at the requested offset, followed
|
||||
by the chunk requested as raw bytes, then a
|
||||
by the chunk requested as raw bytes (see :ref:`binary`), then a
|
||||
newline and the completion code.
|
||||
|
||||
Example::
|
||||
@ -803,8 +825,7 @@ The music database
|
||||
albumart foo/bar.ogg 0
|
||||
size: 1024768
|
||||
binary: 8192
|
||||
<8192 bytes>
|
||||
OK
|
||||
<8192 bytes>OK
|
||||
|
||||
:command:`count {FILTER} [group {GROUPTYPE}]`
|
||||
Count the number of songs and their total playtime in
|
||||
|
@ -999,7 +999,7 @@ Player::Run() noexcept
|
||||
}
|
||||
}
|
||||
|
||||
if (dc.IsIdle() && queued && dc.pipe == pipe) {
|
||||
if (dc.IsIdle() && queued) {
|
||||
/* the decoder has finished the current song;
|
||||
make it decode the next song */
|
||||
|
||||
@ -1061,6 +1061,16 @@ Player::Run() noexcept
|
||||
|
||||
SongBorder();
|
||||
} else if (dc.IsIdle()) {
|
||||
if (queued)
|
||||
/* the decoder has just stopped,
|
||||
between the two IsIdle() checks,
|
||||
probably while UnlockCheckOutputs()
|
||||
left the mutex unlocked; to restart
|
||||
the decoder instead of stopping
|
||||
playback completely, let's re-enter
|
||||
this loop */
|
||||
continue;
|
||||
|
||||
/* check the size of the pipe again, because
|
||||
the decoder thread may have added something
|
||||
since we last checked */
|
||||
|
Loading…
Reference in New Issue
Block a user