mirror of https://gitlab.com/ecodis/exhale.git
finish 1.1.9 release
This commit is contained in:
parent
7ebdd6308a
commit
00423757b1
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
|
@ -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> The version of this distribution of the «exhale» software release is <b>1.1.8</b> (official pub­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> The version of this distribution of the «exhale» software release is <b>1.1.9</b> (official pub­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> Version <b>1.1.8 <span class="gray"> Oct. 2021, this release</span></b></h3>
|
||||
<h3> Version <b>1.1.9 <span class="gray"> Dec. 2021, this release</span></b></h3>
|
||||
<ul>
|
||||
<li><h3>exhaleApp: write encoder name and version as «udta» 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> Version <b>1.1.8 <span class="gray"> 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> 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–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">
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue