diff --git a/src/app/basicMP4Writer.cpp b/src/app/basicMP4Writer.cpp index 1ac88d8..5105333 100644 --- a/src/app/basicMP4Writer.cpp +++ b/src/app/basicMP4Writer.cpp @@ -105,10 +105,10 @@ int BasicMP4Writer::finishFile (const unsigned avgBitrate, const unsigned maxBit #ifndef NO_FIX_FOR_ISSUE_1 const uint32_t stssAtomSize = STSX_BSIZE; const uint32_t stblIncrSize = m_ascSizeM5 + stszAtomSize + stscAtomSize + stcoAtomSize + stssAtomSize; - const uint32_t headerBytes = STAT_HEADER_SIZE + m_dynamicHeader.size () + stscAtomSize + stcoAtomSize + stssAtomSize; + const uint32_t headerBytes = STAT_HEADER_SIZE + (uint32_t) m_dynamicHeader.size () + stscAtomSize + stcoAtomSize + stssAtomSize; #else const uint32_t stblIncrSize = m_ascSizeM5 + stszAtomSize + stscAtomSize + stcoAtomSize; - const uint32_t headerBytes = STAT_HEADER_SIZE + m_dynamicHeader.size () + stscAtomSize + stcoAtomSize; + const uint32_t headerBytes = STAT_HEADER_SIZE + (uint32_t) m_dynamicHeader.size () + stscAtomSize + stcoAtomSize; #endif const uint32_t moovAtomSize = toBigEndian (toUShortValue (MOOV_BSIZE) + stblIncrSize); const uint32_t trakAtomSize = toBigEndian (toUShortValue (TRAK_BSIZE) + stblIncrSize); @@ -215,7 +215,7 @@ int BasicMP4Writer::finishFile (const unsigned avgBitrate, const unsigned maxBit m_dynamicHeader.push_back ( m_rndAccOffsets.size () & UCHAR_MAX); // add header size corrected random-access offsets to file - for (unsigned i = 0; i < m_rndAccOffsets.size (); i++) + for (uint32_t i = 0; i < (uint32_t) m_rndAccOffsets.size (); i++) { const uint32_t rndAccOffset = m_rndAccOffsets.at (i) + headerBytes; @@ -247,7 +247,7 @@ int BasicMP4Writer::finishFile (const unsigned avgBitrate, const unsigned maxBit _SEEK (m_fileHandle, 0, 0 /*SEEK_SET*/); // back to start bytesWritten += _WRITE (m_fileHandle, m_staticHeader, STAT_HEADER_SIZE); - bytesWritten += _WRITE (m_fileHandle, &m_dynamicHeader.front (), (unsigned) m_dynamicHeader.size ()); + bytesWritten += _WRITE (m_fileHandle, &m_dynamicHeader.front (), (uint32_t) m_dynamicHeader.size ()); return bytesWritten; } diff --git a/src/app/loudnessEstim.cpp b/src/app/loudnessEstim.cpp index 655fe3a..567017a 100644 --- a/src/app/loudnessEstim.cpp +++ b/src/app/loudnessEstim.cpp @@ -92,8 +92,9 @@ uint32_t LoudnessEstimator::addNewPcmData (const unsigned samplesPerChannel) uint32_t LoudnessEstimator::getStatistics (const bool includeWarmUp /*= false*/) { - const uint32_t numWarmUpBlocks = (includeWarmUp ? 0 : 3); - const uint32_t numGatingBlocks = __max (numWarmUpBlocks, m_gbRmsValues.size ()) - numWarmUpBlocks; + const uint32_t numVectorValues = (uint32_t) m_gbRmsValues.size (); + const uint32_t numWarmUpBlocks = includeWarmUp ? 0 : 3; + const uint32_t numGatingBlocks = __max (numWarmUpBlocks, numVectorValues) - numWarmUpBlocks; const uint16_t maxValueDivisor = __max (1u, m_inputMaxValue >> 16); const uint16_t peakValue16Bits = __min (USHRT_MAX, (m_inputPeakValue + (maxValueDivisor >> 1)) / maxValueDivisor); uint32_t i, numBlocks = 0; @@ -104,20 +105,20 @@ uint32_t LoudnessEstimator::getStatistics (const bool includeWarmUp /*= false*/) const float normFac = 1.0f / numGatingBlocks; // prevents loop overflow // calculate arithmetic average of blocks satisfying absolute threshold - for (zg = 0.0f, i = numWarmUpBlocks; i < m_gbRmsValues.size (); i++) + for (zg = 0.0f, i = numWarmUpBlocks; i < numVectorValues; i++) { zg += normFac * (float) m_gbRmsValues.at (i) * (float) m_gbRmsValues.at (i); } - if (zg < LE_THRESH_ABS) return peakValue16Bits; // quiet loudness stats + if (zg < LE_THRESH_ABS) return peakValue16Bits; thrR = LE_THRESH_REL * zg; // find blocks satisfying relative threshold - for (zg = 0.0f, i = numWarmUpBlocks; i < m_gbRmsValues.size (); i++) + for (zg = 0.0f, i = numWarmUpBlocks; i < numVectorValues; i++) { const float p = (float) m_gbRmsValues.at (i) * (float) m_gbRmsValues.at (i); if (p > thrR) { zg += normFac * p; numBlocks++; } } - if (zg < LE_THRESH_ABS) return peakValue16Bits; // quiet loudness stats + if (zg < LE_THRESH_ABS) return peakValue16Bits; zg = LE_LUFS_OFFSET + 10.0f * log10 (zg / (normFac * numBlocks * (float) m_inputMaxValue * (float) m_inputMaxValue)); i = __max (0, int32_t ((zg + 100.0f) * 512.0f + 0.5f)); // map to uint