mirror of
https://gitlab.com/ecodis/exhale.git
synced 2025-06-05 21:59:32 +02:00
64-bit stabilization
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user