From 32d818f02b4ed471c0d9f1d23fff784294d83c44 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 26 Mar 2014 16:51:17 +0100 Subject: stream_cdda: fix track time accuracy Don't use an integer division to get the time, since that would round on second boundaries. Also round up the time by sector size. Seeking rounds down due to alignment constraints, but if we round up the time, we can make it land on the exact destination sector. This fixes that the track change code printed the previous track when seeking by chapter. --- stream/stream_cdda.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'stream') diff --git a/stream/stream_cdda.c b/stream/stream_cdda.c index 529e3aa71c..347d6f993d 100644 --- a/stream/stream_cdda.c +++ b/stream/stream_cdda.c @@ -282,9 +282,9 @@ static int control(stream_t *stream, int cmd, void *arg) if (track > end_track) return STREAM_ERROR; int64_t sector = p->cd->disc_toc[track].dwStartSector; - int64_t pos = sector * CDIO_CD_FRAMESIZE_RAW; + int64_t pos = sector * (CDIO_CD_FRAMESIZE_RAW + 1) - 1; // Assume standard audio CD: 44.1khz, 2 channels, s16 samples - *(double *)arg = pos / (44100 * 2 * 2); + *(double *)arg = pos / (44100.0 * 2 * 2); return STREAM_OK; } } -- cgit v1.2.3