finish 1.1.6 release

This commit is contained in:
Christian R. Helmrich 2021-05-22 18:00:00 +02:00
parent 1592b40c66
commit e38b9a3d7d
8 changed files with 31 additions and 15 deletions

View File

@ -16,7 +16,7 @@ if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
endif()
project(exhale VERSION 1.1.5 LANGUAGES CXX)
project(exhale VERSION 1.1.6 LANGUAGES CXX)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE Release

View File

@ -33,7 +33,7 @@ exhale is being made available under an open-source license which is
based on the 3-clause BSD license but modified to address particular
aspects dictated by the nature and the output of this application.
The license text and release notes for the current version 1.1.5 can
The license text and release notes for the current version 1.1.6 can
be found in the `include` subdirectory of the exhale distribution.

View File

@ -25,9 +25,16 @@
<td valign="top">
<h1><br><span class="pink">exhale</span> - <span class="pink">e</span>codis e<span class="pink">x</span>tended <span class="pink">h</span>igh-efficiency <span class="pink">a</span>nd <span class="pink">l</span>ow-complexity <span class="pink">e</span>ncoder<br><span class="gray"><sup><br>Software Release Notes, Version History, Known Issues, Upcoming Feature Roadmap</sup></span><br><br></h1>
<h3>&nbsp; &nbsp;The version of this distribution of the &laquo;exhale&raquo; software release is <b>1.1.5</b> (official pub&shy;lic minor release) from April 2021. Please check <a href="http://www.ecodis.de/audio.htm#mpeg">www.ecodis.de</a> regularly for new versions of this software. A summary of each version up to this release, a list of known issues with this release, and a roadmap of additional functionality are provided below.</h3>
<h3>&nbsp; &nbsp;The version of this distribution of the &laquo;exhale&raquo; software release is <b>1.1.6</b> (official pub&shy;lic minor release) from May 30, 2021. Please check <a href="http://www.ecodis.de/audio.htm#mpeg">www.ecodis.de</a> regularly for new versions of this software. A summary of each version up to this release, a list of known issues with this release, and a roadmap of additional functionality are provided below.</h3>
<h3><br><b>Chronological Version History</b></h3>
<h3>&nbsp; &nbsp;Version <b>1.1.5 <span class="gray">&nbsp;Apr. 2021, this release</span></b></h3>
<h3>&nbsp; &nbsp;Version <b>1.1.6 <span class="gray">&nbsp;May 2021, this release</span></b></h3>
<ul>
<li><h3>minor quality tuning and support for delayless operation (media time=0) with SBR</h3></li>
<li><h3>exhaleApp: fixed very rare output file corruption after finishing encoding with SBR</h3></li>
<li><h3>exhaleApp: fixed compilation error under Fedora (issue 20) and stdin hickup issue</h3></li>
<li><h3>exhaleLib: fixed some quality issues in SBR modes, no changes in non-SBR modes</h3></li>
</ul>
<h3>&nbsp; &nbsp;Version <b>1.1.5 <span class="gray">&nbsp;Apr. 2021</span></b></h3>
<ul>
<li><h3>exhaleApp: correct print-out of Unicode file names and paths, minor code cleanup</h3></li>
<li><h3>exhaleLib: minor tuning of immediate playout frames, no changes to audio quality</h3></li>
@ -146,7 +153,7 @@
<li><h3>exhaleLib: speed-ups and further quality tuning for difficult signals, as necessary.</h3></li>
</ul>
<h3><br></h3>
<h4><span class="gray">Written by C. R. Helmrich for exhale 1.1.5, Apr. 2021. Available at www.ecodis.de/exhale/release.htm.</span><br><br></h4>
<h4><span class="gray">Written by C. R. Helmrich for exhale 1.1.6, May 2021. Available at www.ecodis.de/exhale/release.htm.</span><br><br></h4>
</td>
<td valign="top" colspan="2">

View File

@ -15,5 +15,5 @@
# define EXHALELIB_VERSION_MINOR "1"
#endif
#ifndef EXHALELIB_VERSION_BUGFIX
# define EXHALELIB_VERSION_BUGFIX ".5" // "RC" or ".0", ".1", ...
# define EXHALELIB_VERSION_BUGFIX ".6" // "RC" or ".0", ".1", ...
#endif

View File

@ -323,13 +323,13 @@ int BasicMP4Writer::initHeader (const uint32_t audioLength, const unsigned extra
const unsigned numFramesFirstPeriod = __min (frameCount, m_rndAccPeriod);
const unsigned numFramesFinalPeriod = (frameCount <= m_rndAccPeriod ? 0 : frameCount % m_rndAccPeriod);
const unsigned smpGrpSize = 10 /*sgpd*/ + (numFramesFirstPeriod > UINT8_MAX ? 10 : 9) + ((numFramesFirstPeriod + 1) >> 1) /*csgp*/;
const int estimHeaderSize = STAT_HEADER_SIZE + m_ascSizeM5 + 6 + 4 + frameCount * 4 /*stsz*/ + STSX_BSIZE * 6 + smpGrpSize +
const int estimHeaderSize = STAT_HEADER_SIZE + m_ascSizeM5 + 6 + 4 + frameCount * 4 /*stsz*/ + STSX_BSIZE * 6 + smpGrpSize + chunkCount * 4 /*stco*/ +
#ifdef NO_PREROLL_DATA
4 /*minimum stss*/ +
#else
((chunkCount + 1) >> 1) * 4 /*stss*/ +
#endif
(numFramesFinalPeriod == 0 ? 12 : 24) /*stsc*/ + chunkCount * 4 /*stco*/ + 8 /*mdat*/;
(numFramesFinalPeriod == 0 ? (frameCount > m_rndAccPeriod && m_frameLength == 2048 ? 20 : 12) : 24) /*stsc*/ + 8 /*mdat*/;
int bytesWritten = 0;
for (int i = estimHeaderSize; i > 0; i -= STAT_HEADER_SIZE)

View File

@ -257,7 +257,7 @@ int main (const int argc, char* argv[])
{
if (argc <= 0) return argc; // for safety
const bool readStdin = (argc == 3);
const bool readStdin = (argc == 3 || argc == 5);
BasicWavReader wavReader;
int32_t* inPcmData = nullptr; // 24-bit WAVE audio input buffer
#if ENABLE_RESAMPLING
@ -282,7 +282,7 @@ int main (const int argc, char* argv[])
uint16_t coreSbrFrameLengthIndex = 1; // 0: 768, 1: 1024 samples
uint16_t variableCoreBitRateMode = 3; // 0: lowest... 9: highest
#if ENABLE_RESAMPLING
uint8_t zeroDelayForSbrEncoding = 0; // 0: 1 frame, 1: no delay
uint8_t zeroDelayForSbrEncoding = (argc >= 5 && (argv[2][0] == 's' || argv[2][0] == 'S') && argv[2][1] == 0 ? 1 : 0);
#endif
#ifdef EXHALE_APP_WIN
const HANDLE hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
@ -391,7 +391,7 @@ int main (const int argc, char* argv[])
fprintf_s (stdout, " ---------------------------------------------------------------------\n\n");
// check arg. list, print usage if needed
if ((argc < 3) || (argc > 4) || (argc > 1 && argv[1][1] != 0))
if ((argc < 3) || (argc > 6) || (argc > 1 && argv[1][1] != 0))
{
fprintf_s (stdout, " Copyright 2018-2021 C.R.Helmrich, project ecodis. See License.htm for details.\n\n");
@ -522,7 +522,11 @@ int main (const int argc, char* argv[])
if (inPathEnd == 0) // name has no path
{
#if EA_USE_WORK_DIR
# ifdef __linux__
if ((currPath == nullptr) && (currPath = _GETCWD (NULL, 0)) != nullptr)
# else
if ((currPath == nullptr) && (currPath = _GETCWD (NULL, 1)) != nullptr)
# endif
{
exePath = currPath;
exePathEnd = (uint16_t) __min (USHRT_MAX - 1, _STRLEN (currPath));
@ -631,7 +635,11 @@ int main (const int argc, char* argv[])
if (outPathEnd == 0) // name has no path
{
#if EA_USE_WORK_DIR
# ifdef __linux__
if ((currPath != exePath) && (currPath = _GETCWD (NULL, 0)) != nullptr)
# else
if ((currPath != exePath) && (currPath = _GETCWD (NULL, 1)) != nullptr)
# endif
{
exePath = currPath;
exePathEnd = (uint16_t) __min (USHRT_MAX - 1, _STRLEN (currPath));
@ -746,7 +754,8 @@ int main (const int argc, char* argv[])
#else
const unsigned sampleRate = wavReader.getSampleRate ();
#endif
const unsigned indepPeriod = (sampleRate < 48000 ? sampleRate - 320u : 50u << 10u) / frameLength;
const bool userIndepPeriod = (argc >= 5 && argv[3][0] > '0' && argv[3][0] <= '9' && argv[3][1] >= '0' && argv[3][1] <= '9' && argv[3][2] == 0);
const unsigned indepPeriod = (userIndepPeriod ? 10 * (argv[3][0] - 48) + (argv[3][1] - 48) : (sampleRate < 48000 ? sampleRate - 320u : 50u << 10u) / frameLength);
const unsigned mod3Percent = unsigned ((expectLength * (3 + (coreSbrFrameLengthIndex & 3))) >> 17);
uint32_t byteCount = 0, bw = (numChannels < 7 ? loudStats : 0);
uint32_t br, bwMax = 0; // br will be used to hold bytes read and/or bit-rate

View File

@ -13,7 +13,7 @@
0 ICON "exhaleApp.ico"
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,1,5
FILEVERSION 1,1,6
BEGIN
BLOCK "StringFileInfo"
BEGIN

View File

@ -1447,7 +1447,7 @@ unsigned ExhaleEncoder::spectralProcessing () // complete ics_info(), calc TNS
}
icsCurr.maxSfb = __min (icsCurr.maxSfb, brModeAndFsToMaxSfbLong (m_bitRateMode, samplingRate));
}
while (grpSO[icsCurr.maxSfb] > __max (m_bandwidCurr[ci], m_bandwidPrev[ci])) icsCurr.maxSfb--; // BW detector
while (grpSO[icsCurr.maxSfb] > __max (m_bandwidCurr[ci], m_bandwidPrev[ci]) + (icsCurr.maxSfb >> 1)) icsCurr.maxSfb--; // detect BW
}
else // icsCurr.windowSequence == EIGHT_SHORT
{
@ -2142,7 +2142,7 @@ unsigned ExhaleEncoder::initEncoder (unsigned char* const audioConfigBuffer, uin
const uint32_t loudnessInfo = (audioConfigBytes ? *audioConfigBytes : 0);
if (*audioConfigBuffer & 1) m_frameCount--; // to skip 1 frame
m_priLength = (*audioConfigBuffer >> 1); // priming, see below
m_priLength = (*audioConfigBuffer >> 1);
errorValue = m_outStream.createAudioConfig (m_frequencyIdx, m_frameLength != CCFL_1024, chConf, m_numElements,
elementTypeConfig[chConf], loudnessInfo,
#if !RESTRICT_TO_AAC