finish 1.1.9 release

This commit is contained in:
Christian R. Helmrich 2021-12-17 11:00:00 +01:00
parent 7ebdd6308a
commit 00423757b1
7 changed files with 58 additions and 11 deletions

View File

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

View File

@ -41,7 +41,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.8 can
The license text and release notes for the current version 1.1.9 can
be found in the `include` subdirectory of the exhale distribution.

View File

@ -25,9 +25,14 @@
<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.8</b> (official pub&shy;lic minor release) from October 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.9</b> (official pub&shy;lic minor release) from January 2022. 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.8 <span class="gray">&nbsp;Oct. 2021, this release</span></b></h3>
<h3>&nbsp; &nbsp;Version <b>1.1.9 <span class="gray">&nbsp;Dec. 2021, this release</span></b></h3>
<ul>
<li><h3>exhaleApp: write encoder name and version as &laquo;udta&raquo; tool string into MP4 header</h3></li>
<li><h3>exhaleApp: optimize leading and trailing PCM read for gapless playback (issue 21)</h3></li>
</ul>
<h3>&nbsp; &nbsp;Version <b>1.1.8 <span class="gray">&nbsp;Oct. 2021</span></b></h3>
<ul>
<li><h3>some final code cleanup, small code corrections and editorial changes for this year</h3></li>
<li><h3>exhaleLib: minor stereo quality tuning for low rates, optional CBR mode via macro</h3></li>
@ -158,12 +163,11 @@
<h3><br><b>Roadmap of Upcoming Features</b></h3>
<h3>&nbsp; &nbsp;If you are in need of an additional library or application feature <b>not</b> mentioned below, please contact ecodis or a contributor with a request, and we will see what we can do.</h3>
<ul>
<li><h3>support for coding with a core coder frame length of 768 samples, no version plan</h3></li>
<li><h3>exhaleLib: finalization of support for 5.1&#x2013;7.1 multichannel coding, no version plan</h3></li>
<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.8, Oct. 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.9, Dec. 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 ".8" // "RC" or ".0", ".1", ...
# define EXHALELIB_VERSION_BUGFIX ".9" // "RC" or ".0", ".1", ...
#endif

View File

@ -133,7 +133,7 @@ int BasicMP4Writer::finishFile (const unsigned avgBitrate, const unsigned maxBit
const uint32_t sampleCountSize = (m_frameCount > UINT16_MAX ? 4 : (m_frameCount > UINT8_MAX ? 2 : 1));
const uint32_t csgpAtomSize = STSX_BSIZE + 4 /*patternCount == 1*/ + patternLengthSize + sampleCountSize + compPatternLength;
const uint32_t stblIncrSize = m_ascSizeM5 + stszAtomSize + stscAtomSize + stcoAtomSize + stssAtomSize + sgpdAtomSize + csgpAtomSize;
const uint32_t moovAtomSize = toBigEndian (toUShortValue (MOOV_BSIZE) + stblIncrSize);
const uint32_t moovAtomSize = toBigEndian (toUShortValue (MOOV_BSIZE) + stblIncrSize + UDTA_BSIZE);
const uint32_t trakAtomSize = toBigEndian (toUShortValue (TRAK_BSIZE) + stblIncrSize);
const uint32_t mdiaAtomSize = toBigEndian (toUShortValue (MDIA_BSIZE) + stblIncrSize);
const uint32_t minfAtomSize = toBigEndian (toUShortValue (MINF_BSIZE) + stblIncrSize);
@ -268,7 +268,47 @@ int BasicMP4Writer::finishFile (const unsigned avgBitrate, const unsigned maxBit
m_dynamicHeader.push_back (1 << ((numFramesFirstPeriod & 1) ? 0 : 4));
for (i++; i < compPatternLength; i++) m_dynamicHeader.push_back (0); // rest of nonmembers, second part
}
#if UDTA_BSIZE
const char ver[] = EXHALELIB_VERSION_MAJOR "." EXHALELIB_VERSION_MINOR EXHALELIB_VERSION_BUGFIX;
push32BitValue (UDTA_BSIZE);
m_dynamicHeader.push_back (0x75); m_dynamicHeader.push_back (0x64);
m_dynamicHeader.push_back (0x74); m_dynamicHeader.push_back (0x61); // udta
push32BitValue (UDTA_BSIZE - 8);
m_dynamicHeader.push_back (0x6D); m_dynamicHeader.push_back (0x65);
m_dynamicHeader.push_back (0x74); m_dynamicHeader.push_back (0x61); // meta
push32BitValue (0);
push32BitValue (33);
m_dynamicHeader.push_back (0x68); m_dynamicHeader.push_back (0x64);
m_dynamicHeader.push_back (0x6C); m_dynamicHeader.push_back (0x72); // hdlr
push32BitValue (0);
push32BitValue (0);
m_dynamicHeader.push_back (0x6D); m_dynamicHeader.push_back (0x64);
m_dynamicHeader.push_back (0x69); m_dynamicHeader.push_back (0x72); // mdir
m_dynamicHeader.push_back (0x61); m_dynamicHeader.push_back (0x70);
m_dynamicHeader.push_back (0x70); m_dynamicHeader.push_back (0x6C); // appl
push32BitValue (0);
push32BitValue (0);
m_dynamicHeader.push_back (0);
push32BitValue (UDTA_BSIZE - 53);
m_dynamicHeader.push_back (0x69); m_dynamicHeader.push_back (0x6C);
m_dynamicHeader.push_back (0x73); m_dynamicHeader.push_back (0x74); // ilst
push32BitValue (UDTA_BSIZE - 53 - 8);
m_dynamicHeader.push_back (0xA9); m_dynamicHeader.push_back (0x74);
m_dynamicHeader.push_back (0x6F); m_dynamicHeader.push_back (0x6F); // ©too
push32BitValue (UDTA_BSIZE - 53 - 16);
m_dynamicHeader.push_back (0x64); m_dynamicHeader.push_back (0x61);
m_dynamicHeader.push_back (0x74); m_dynamicHeader.push_back (0x61); // data
push32BitValue (1);
push32BitValue (0);
m_dynamicHeader.push_back (0x65); m_dynamicHeader.push_back (0x78);
m_dynamicHeader.push_back (0x68); m_dynamicHeader.push_back (0x61);
m_dynamicHeader.push_back (0x6C); m_dynamicHeader.push_back (0x65); // exhale
m_dynamicHeader.push_back (0x20);
for (i = 0; i < 5; i++) m_dynamicHeader.push_back ((uint8_t) ver[i]);
#endif
const uint32_t moovAndMdatOverhead = STAT_HEADER_SIZE + (uint32_t) m_dynamicHeader.size () + 8;
const uint32_t headerPaddingLength = uint32_t (m_mediaOffset - moovAndMdatOverhead);
@ -288,7 +328,9 @@ int BasicMP4Writer::finishFile (const unsigned avgBitrate, const unsigned maxBit
{
if (pNdx == 0) // add padding byte with library version
{
#if !UDTA_BSIZE
const char ver[] = EXHALELIB_VERSION_MAJOR "." EXHALELIB_VERSION_MINOR EXHALELIB_VERSION_BUGFIX;
#endif
const int verInt = (ver[0] - 0x30) * 100 + (ver[2] - 0x30) * 10 + (ver[4] - 0x30);
m_dynamicHeader.push_back (__max (0, __min (UCHAR_MAX, verInt)));
@ -323,9 +365,9 @@ int BasicMP4Writer::initHeader (const uint32_t audioLength, const unsigned extra
const unsigned smpGrpSize = 10 /*sgpd*/ + (patternEntryCount > UINT8_MAX ? 10 : 9) + ((patternEntryCount + 1) >> 1) /*csgp*/;
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*/ +
4 /*minimum stss*/ + UDTA_BSIZE +
#else
((chunkCount + 1) >> 1) * 4 /*stss*/ +
((chunkCount + 1) >> 1) * 4 /*stss*/ + UDTA_BSIZE +
#endif
(numFramesFinalPeriod == 0 ? (frameCount > m_rndAccPeriod && m_frameLength == 2048 ? 20 : 12) : 24) /*stsc*/ + 8 /*mdat*/;
int bytesWritten = 0;

View File

@ -16,6 +16,7 @@
// constant data sizes in bytes
#define STAT_HEADER_SIZE 576
#define STSX_BSIZE 0x10
#define UDTA_BSIZE 0x61 // udta: 0 to turn off!
#define ESDS_BSIZE 0x00, 0x36 // esds: 54 (+ m_ascSizeM5 later)
#define MP4A_BSIZE 0x00, 0x5A // mp4a: 36 + ESDS_BSIZE
#define STSD_BSIZE 0x00, 0x6A // mp4a: 16 + MP4A_BSIZE

View File

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