64-bit stabilization

This commit is contained in:
Christian R. Helmrich
2020-02-15 23:00:41 +01:00
parent 9bf8ad5d76
commit 1ed3e96e81
2 changed files with 11 additions and 10 deletions

View File

@@ -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;
}

View File

@@ -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