decoder/dsf: fix big-endian bugs
This commit is contained in:
parent
8574bcd494
commit
67f0d26d17
1
NEWS
1
NEWS
@ -44,6 +44,7 @@ ver 0.19 (not yet released)
|
|||||||
- dsdiff, dsf: report bit rate
|
- dsdiff, dsf: report bit rate
|
||||||
- dsf: support DSD512
|
- dsf: support DSD512
|
||||||
- dsf: support multi-channel files
|
- dsf: support multi-channel files
|
||||||
|
- dsf: fix big-endian bugs
|
||||||
- dsf: fix noise at end of malformed file
|
- dsf: fix noise at end of malformed file
|
||||||
- sndfile: support scanning remote files
|
- sndfile: support scanning remote files
|
||||||
- sndfile: support tags "comment", "album", "track", "genre"
|
- sndfile: support tags "comment", "album", "track", "genre"
|
||||||
|
@ -127,14 +127,16 @@ dsf_read_metadata(Decoder *decoder, InputStream &is,
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
uint32_t samplefreq = FromLE32(dsf_fmt_chunk.sample_freq);
|
uint32_t samplefreq = FromLE32(dsf_fmt_chunk.sample_freq);
|
||||||
|
const unsigned channels = FromLE32(dsf_fmt_chunk.channelnum);
|
||||||
|
|
||||||
/* for now, only support version 1 of the standard, DSD raw stereo
|
/* for now, only support version 1 of the standard, DSD raw stereo
|
||||||
files with a sample freq of 2822400 or 5644800 Hz */
|
files with a sample freq of 2822400 or 5644800 Hz */
|
||||||
|
|
||||||
if (dsf_fmt_chunk.version != 1 || dsf_fmt_chunk.formatid != 0
|
if (FromLE32(dsf_fmt_chunk.version) != 1 ||
|
||||||
|| dsf_fmt_chunk.channeltype != 2
|
FromLE32(dsf_fmt_chunk.formatid) != 0 ||
|
||||||
|| dsf_fmt_chunk.channelnum != 2
|
FromLE32(dsf_fmt_chunk.channeltype) != 2 ||
|
||||||
|| (!dsdlib_valid_freq(samplefreq)))
|
channels != 2 ||
|
||||||
|
!dsdlib_valid_freq(samplefreq))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
uint32_t chblksize = FromLE32(dsf_fmt_chunk.block_size);
|
uint32_t chblksize = FromLE32(dsf_fmt_chunk.block_size);
|
||||||
@ -170,13 +172,13 @@ dsf_read_metadata(Decoder *decoder, InputStream &is,
|
|||||||
data_size = playable_size;
|
data_size = playable_size;
|
||||||
|
|
||||||
metadata->chunk_size = data_size;
|
metadata->chunk_size = data_size;
|
||||||
metadata->channels = (unsigned) dsf_fmt_chunk.channelnum;
|
metadata->channels = channels;
|
||||||
metadata->sample_rate = samplefreq;
|
metadata->sample_rate = samplefreq;
|
||||||
#ifdef HAVE_ID3TAG
|
#ifdef HAVE_ID3TAG
|
||||||
metadata->id3_offset = metadata_offset;
|
metadata->id3_offset = metadata_offset;
|
||||||
#endif
|
#endif
|
||||||
/* check bits per sample format, determine if bitreverse is needed */
|
/* check bits per sample format, determine if bitreverse is needed */
|
||||||
metadata->bitreverse = dsf_fmt_chunk.bitssample == 1;
|
metadata->bitreverse = FromLE32(dsf_fmt_chunk.bitssample) == 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user