MusicChunk: pad MusicChunkInfo to a multiple of 8 bytes
Workaround for a regression caused by commit
a06bf388d9
, revealing a problem with
discarding odd numer of frames in the DSD_U32 and DoP converters,
causing distortions with DSD_U32 and DoP on 32 bit CPUs.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/469
This commit is contained in:
parent
79839db3a3
commit
2c3eeb7194
2
NEWS
2
NEWS
@ -1,4 +1,6 @@
|
|||||||
ver 0.21.11 (not yet released)
|
ver 0.21.11 (not yet released)
|
||||||
|
* output
|
||||||
|
- alsa, osx: fix distortions with DSD_U32 and DoP on 32 bit CPUs
|
||||||
* protocol
|
* protocol
|
||||||
- fix "list" with multiple "group" levels
|
- fix "list" with multiple "group" levels
|
||||||
|
|
||||||
|
@ -43,7 +43,15 @@ struct MusicChunk;
|
|||||||
/**
|
/**
|
||||||
* Meta information for #MusicChunk.
|
* Meta information for #MusicChunk.
|
||||||
*/
|
*/
|
||||||
struct MusicChunkInfo {
|
struct alignas(8) MusicChunkInfo {
|
||||||
|
/* align to multiple of 8 bytes, which adds padding at the
|
||||||
|
end, so the size of MusicChunk::data is also a multiple of
|
||||||
|
8 bytes; this is a workaround for a bug in the DSD_U32 and
|
||||||
|
DoP converters which require processing 8 bytes at a time,
|
||||||
|
discarding the remainder */
|
||||||
|
/* TODO: once all converters have been fixed, we should remove
|
||||||
|
this workaround */
|
||||||
|
|
||||||
/** the next chunk in a linked list */
|
/** the next chunk in a linked list */
|
||||||
MusicChunkPtr next;
|
MusicChunkPtr next;
|
||||||
|
|
||||||
@ -119,6 +127,10 @@ struct MusicChunk : MusicChunkInfo {
|
|||||||
/** the data (probably PCM) */
|
/** the data (probably PCM) */
|
||||||
uint8_t data[CHUNK_SIZE - sizeof(MusicChunkInfo)];
|
uint8_t data[CHUNK_SIZE - sizeof(MusicChunkInfo)];
|
||||||
|
|
||||||
|
/* TODO: remove this check once all converters have been fixed
|
||||||
|
(see comment in struct MusicChunkInfo for details) */
|
||||||
|
static_assert(sizeof(data) % 8 == 0, "Wrong alignment");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepares appending to the music chunk. Returns a buffer
|
* Prepares appending to the music chunk. Returns a buffer
|
||||||
* where you may write into. After you are finished, call
|
* where you may write into. After you are finished, call
|
||||||
|
Loading…
Reference in New Issue
Block a user