decoder/dsf: don't play junk at the end of the "data" chunk
This commit is contained in:
parent
9dcbd005f0
commit
4728735acf
1
NEWS
1
NEWS
|
@ -15,6 +15,7 @@ ver 0.18 (2012/??/??)
|
||||||
- lastfm: remove defunct Last.fm support
|
- lastfm: remove defunct Last.fm support
|
||||||
* decoder:
|
* decoder:
|
||||||
- adplug: new decoder plugin using libadplug
|
- adplug: new decoder plugin using libadplug
|
||||||
|
- dsf: don't play junk at the end of the "data" chunk
|
||||||
- ffmpeg: drop support for pre-0.8 ffmpeg
|
- ffmpeg: drop support for pre-0.8 ffmpeg
|
||||||
- flac: require libFLAC 1.2 or newer
|
- flac: require libFLAC 1.2 or newer
|
||||||
- flac: support FLAC files inside archives
|
- flac: support FLAC files inside archives
|
||||||
|
|
|
@ -156,12 +156,20 @@ dsf_read_metadata(Decoder *decoder, InputStream &is,
|
||||||
|
|
||||||
data_size -= sizeof(data_chunk);
|
data_size -= sizeof(data_chunk);
|
||||||
|
|
||||||
metadata->chunk_size = data_size;
|
|
||||||
/* data_size cannot be bigger or equal to total file size */
|
/* data_size cannot be bigger or equal to total file size */
|
||||||
const uint64_t size = (uint64_t)is.GetSize();
|
const uint64_t size = (uint64_t)is.GetSize();
|
||||||
if (data_size >= size)
|
if (data_size >= size)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
/* use the sample count from the DSF header as the upper
|
||||||
|
bound, because some DSF files contain junk at the end of
|
||||||
|
the "data" chunk */
|
||||||
|
const uint64_t samplecnt = dsf_fmt_chunk.scnt.Read();
|
||||||
|
const uint64_t playable_size = samplecnt * 2 / 8;
|
||||||
|
if (data_size > playable_size)
|
||||||
|
data_size = playable_size;
|
||||||
|
|
||||||
|
metadata->chunk_size = data_size;
|
||||||
metadata->channels = (unsigned) dsf_fmt_chunk.channelnum;
|
metadata->channels = (unsigned) dsf_fmt_chunk.channelnum;
|
||||||
metadata->sample_rate = samplefreq;
|
metadata->sample_rate = samplefreq;
|
||||||
#ifdef HAVE_ID3TAG
|
#ifdef HAVE_ID3TAG
|
||||||
|
|
Loading…
Reference in New Issue