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
|
#ifndef NO_FIX_FOR_ISSUE_1
|
||||||
const uint32_t stssAtomSize = STSX_BSIZE;
|
const uint32_t stssAtomSize = STSX_BSIZE;
|
||||||
const uint32_t stblIncrSize = m_ascSizeM5 + stszAtomSize + stscAtomSize + stcoAtomSize + stssAtomSize;
|
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
|
#else
|
||||||
const uint32_t stblIncrSize = m_ascSizeM5 + stszAtomSize + stscAtomSize + stcoAtomSize;
|
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
|
#endif
|
||||||
const uint32_t moovAtomSize = toBigEndian (toUShortValue (MOOV_BSIZE) + stblIncrSize);
|
const uint32_t moovAtomSize = toBigEndian (toUShortValue (MOOV_BSIZE) + stblIncrSize);
|
||||||
const uint32_t trakAtomSize = toBigEndian (toUShortValue (TRAK_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);
|
m_dynamicHeader.push_back ( m_rndAccOffsets.size () & UCHAR_MAX);
|
||||||
|
|
||||||
// add header size corrected random-access offsets to file
|
// 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;
|
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
|
_SEEK (m_fileHandle, 0, 0 /*SEEK_SET*/); // back to start
|
||||||
|
|
||||||
bytesWritten += _WRITE (m_fileHandle, m_staticHeader, STAT_HEADER_SIZE);
|
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;
|
return bytesWritten;
|
||||||
}
|
}
|
||||||
|
@@ -92,8 +92,9 @@ uint32_t LoudnessEstimator::addNewPcmData (const unsigned samplesPerChannel)
|
|||||||
|
|
||||||
uint32_t LoudnessEstimator::getStatistics (const bool includeWarmUp /*= false*/)
|
uint32_t LoudnessEstimator::getStatistics (const bool includeWarmUp /*= false*/)
|
||||||
{
|
{
|
||||||
const uint32_t numWarmUpBlocks = (includeWarmUp ? 0 : 3);
|
const uint32_t numVectorValues = (uint32_t) m_gbRmsValues.size ();
|
||||||
const uint32_t numGatingBlocks = __max (numWarmUpBlocks, m_gbRmsValues.size ()) - numWarmUpBlocks;
|
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 maxValueDivisor = __max (1u, m_inputMaxValue >> 16);
|
||||||
const uint16_t peakValue16Bits = __min (USHRT_MAX, (m_inputPeakValue + (maxValueDivisor >> 1)) / maxValueDivisor);
|
const uint16_t peakValue16Bits = __min (USHRT_MAX, (m_inputPeakValue + (maxValueDivisor >> 1)) / maxValueDivisor);
|
||||||
uint32_t i, numBlocks = 0;
|
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
|
const float normFac = 1.0f / numGatingBlocks; // prevents loop overflow
|
||||||
|
|
||||||
// calculate arithmetic average of blocks satisfying absolute threshold
|
// 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);
|
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
|
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);
|
const float p = (float) m_gbRmsValues.at (i) * (float) m_gbRmsValues.at (i);
|
||||||
|
|
||||||
if (p > thrR) { zg += normFac * p; numBlocks++; }
|
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));
|
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
|
i = __max (0, int32_t ((zg + 100.0f) * 512.0f + 0.5f)); // map to uint
|
||||||
|
Reference in New Issue
Block a user