[PATCH] Fix calculation of length and bitrate in Xing header

Xavier Duret xaviour.maillists at gmail.com
Tue Jan 16 20:10:28 CET 2007


The previous version made the compiler use an integer division which
lead to timePerFrame being equal to 0. If this leads to the other
extreme (overflow) then a 64 bits integer could be used.

diff -ruN  taglib/mpeg/mpegproperties.cpp.old taglib/mpeg/mpegproperties.cpp
--- taglib/mpeg/mpegproperties.cpp.old  2007-01-16 18:37:30.000000000 +0100
+++ taglib/mpeg/mpegproperties.cpp      2007-01-16 18:36:03.000000000 +0100
@@ -213,8 +213,7 @@
   {
       static const int blockSize[] = { 0, 384, 1152, 1152 };

-      double timePerFrame = blockSize[firstHeader.layer()] /
firstHeader.sampleRate();
-      d->length = int(timePerFrame * d->xingHeader->totalFrames());
+      d->length = (blockSize[firstHeader.layer()] *
d->xingHeader->totalFrames()) / firstHeader.sampleRate();
       d->bitrate = d->length > 0 ? d->xingHeader->totalSize() * 8 /
d->length / 1000 : 0;
   }
   else {


More information about the taglib-devel mailing list