decoder/flac: fixed CUE seeking range check
If flac_container_decode() gets a seek destination which is out of range, it ignores the SEEK command (never finishes it). This leads to MPD lockup, because the player thread waits for completion.
This commit is contained in:
parent
68f77e4163
commit
dca4d9cf83
1
NEWS
1
NEWS
@ -7,6 +7,7 @@ ver 0.15.6 (2009/??/??)
|
|||||||
* decoders:
|
* decoders:
|
||||||
- ffmpeg: convert metadata
|
- ffmpeg: convert metadata
|
||||||
- oggflac: rewind stream after FLAC detection
|
- oggflac: rewind stream after FLAC detection
|
||||||
|
- flac: fixed CUE seeking range check
|
||||||
* output_thread: check again if output is open on PAUSE
|
* output_thread: check again if output is open on PAUSE
|
||||||
* update: delete ignored symlinks from database
|
* update: delete ignored symlinks from database
|
||||||
* database: increased maximum line length to 32 kB
|
* database: increased maximum line length to 32 kB
|
||||||
|
@ -629,21 +629,15 @@ flac_container_decode(struct decoder* decoder,
|
|||||||
FLAC__uint64 seek_sample = t_start +
|
FLAC__uint64 seek_sample = t_start +
|
||||||
(decoder_seek_where(decoder) * data.audio_format.sample_rate);
|
(decoder_seek_where(decoder) * data.audio_format.sample_rate);
|
||||||
|
|
||||||
//if (seek_sample >= t_start && seek_sample <= t_end && data.total_time > 30)
|
if (seek_sample >= t_start && seek_sample <= t_end &&
|
||||||
if (seek_sample >= t_start && seek_sample <= t_end)
|
flac_seek_absolute(flac_dec, (FLAC__uint64)seek_sample)) {
|
||||||
{
|
|
||||||
if (flac_seek_absolute(flac_dec, (FLAC__uint64)seek_sample))
|
|
||||||
{
|
|
||||||
data.time = (float)(seek_sample - t_start) /
|
data.time = (float)(seek_sample - t_start) /
|
||||||
data.audio_format.sample_rate;
|
data.audio_format.sample_rate;
|
||||||
data.position = 0;
|
data.position = 0;
|
||||||
|
|
||||||
decoder_command_finished(decoder);
|
decoder_command_finished(decoder);
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
decoder_seek_error(decoder);
|
decoder_seek_error(decoder);
|
||||||
//decoder_command_finished(decoder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (flac_get_state(flac_dec) == flac_decoder_eof)
|
else if (flac_get_state(flac_dec) == flac_decoder_eof)
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user