summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-12-17 21:58:31 +0100
committerGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-12-17 21:58:31 +0100
commitf30ba666c5fa2a16c0b5b2ee1d253ab2ac71de09 (patch)
treebb2677fe0f50b829cfa2c26588f99067588f001a
parent77f7f6b277e1c18d8ead2ab3c5cec3632b1c85dc (diff)
mp3: fixed duration rounding
-rw-r--r--plugins/mpgmad/mpgmad.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/plugins/mpgmad/mpgmad.c b/plugins/mpgmad/mpgmad.c
index b6baac13..b450ffbc 100644
--- a/plugins/mpgmad/mpgmad.c
+++ b/plugins/mpgmad/mpgmad.c
@@ -492,7 +492,7 @@ cmp3_scan_stream (buffer_t *buffer, int sample) {
}
uint32_t nframes = extract_i32 (buf);
if (sample == 0) {
- buffer->duration = (((uint64_t)nframes * (uint64_t)samples_per_frame) - buffer->delay - buffer->padding)/ (uint64_t)samplerate;
+ buffer->duration = (((uint64_t)nframes * (uint64_t)samples_per_frame) - buffer->delay - buffer->padding)/ (float)samplerate;
}
trace ("xing totalsamples: %d, nframes: %d, samples_per_frame: %d\n", nframes*samples_per_frame, nframes, samples_per_frame);
if (nframes <= 0 || samples_per_frame <= 0) {
@@ -605,7 +605,7 @@ cmp3_scan_stream (buffer_t *buffer, int sample) {
buffer->avg_packetlength = packetlength;
buffer->avg_samplerate = samplerate;
buffer->avg_samples_per_frame = samples_per_frame;
- buffer->duration = (buffer->nframes * samples_per_frame - buffer->delay - buffer->padding) / samplerate;
+ buffer->duration = (((uint64_t)buffer->nframes * (uint64_t)samples_per_frame) - buffer->delay - buffer->padding)/ (float)samplerate;
buffer->totalsamples = buffer->nframes * samples_per_frame;
trace ("totalsamples: %d, samplesperframe: %d, fsize=%lld\n", buffer->totalsamples, samples_per_frame, fsize);
// trace ("bitrate=%d, layer=%d, packetlength=%d, fsize=%d, nframes=%d, samples_per_frame=%d, samplerate=%d, duration=%f, totalsamples=%d\n", bitrate, layer, packetlength, sz, nframe, samples_per_frame, samplerate, buffer->duration, buffer->totalsamples);
@@ -676,7 +676,7 @@ end_scan:
buffer->nframes = (fsize - buffer->startoffset - buffer->endoffset) / buffer->avg_packetlength;
if (!buffer->have_xing_header) {
buffer->totalsamples = buffer->nframes * buffer->avg_samples_per_frame;
- buffer->duration = (buffer->totalsamples - buffer->delay - buffer->padding) / buffer->avg_samplerate;
+ buffer->duration = (buffer->totalsamples - buffer->delay - buffer->padding) / (float)buffer->avg_samplerate;
}
buffer->bitrate = (fsize-buffer->startoffset-buffer->endoffset) / buffer->duration * 8;
trace ("nframes: %d, fsize: %lld, spf: %d, smp: %d, totalsamples: %d\n", buffer->nframes, fsize, buffer->avg_samples_per_frame, buffer->avg_samplerate, buffer->totalsamples);
@@ -685,7 +685,7 @@ end_scan:
}
buffer->totalsamples = scansamples;
- buffer->duration = (buffer->totalsamples - buffer->delay - buffer->padding) / buffer->samplerate;
+ buffer->duration = (buffer->totalsamples - buffer->delay - buffer->padding) / (float)buffer->samplerate;
// printf ("nframes=%d, totalsamples=%d, samplerate=%d, dur=%f\n", nframe, scansamples, buffer->samplerate, buffer->duration);
return 0;
}