diff --git a/README.md b/README.md
index 2b7758e..8225baa 100644
--- a/README.md
+++ b/README.md
@@ -31,10 +31,10 @@ License
-------
exhale is being made available under an open-source license which is
-similar to the 3-clause BSD license but modified to address specific
+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.1RC can
+The license text and release notes for the current version 1.1.0 can
be found in the `include` subdirectory of the exhale distribution.
diff --git a/include/Release.htm b/include/Release.htm
index 9a2d9cb..82085f2 100644
--- a/include/Release.htm
+++ b/include/Release.htm
@@ -25,9 +25,9 @@
exhale - ecodis extended high-efficiency and low-complexity encoder
Software Release Notes, Version History, Known Issues, Upcoming Feature Roadmap
- The version of this distribution of the «exhale» software release is 1.1RC (preliminary public major release) from Nov. 2020. Please check www.ecodis.de 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.
+ The version of this distribution of the «exhale» software release is 1.1.0 (official public major release) from Nov. 2020. Please check www.ecodis.de 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.
Chronological Version History
- Version 1.1RC Nov. 2020, this release
+ Version 1.1.0 Nov. 2020, this release
addition of basic SBR functionality for lower-rate coding down to 18 kbps/channel
exhaleApp: add support for CVBR modes a—g for encoding with SBR functionality
@@ -112,13 +112,14 @@
Roadmap of Upcoming Features
If you are in need of an additional library or application feature not mentioned below, please contact ecodis or a contributor with a request, and we will see what we can do.
+ calculate / code SBR envelope values at higher frequency resolution, version 1.1.x
support for coding with a core coder frame length of 768 samples, no version plan
exhaleLib: complete integration of predictive joint-channel coding, no version plan
exhaleLib: finalization of support for 5.1–7.1 multichannel coding, no version plan
exhaleLib: speed-ups and further quality tuning for difficult signals, as necessary.
-Written by C. R. Helmrich for exhale 1.1RC, Nov. 2020. Available at www.ecodis.de/exhale/release.htm.
+Written by C. R. Helmrich for exhale 1.1.0, Nov. 2020. Available at www.ecodis.de/exhale/release.htm.
|
diff --git a/include/version.h b/include/version.h
index 62d9a9b..b31977e 100644
--- a/include/version.h
+++ b/include/version.h
@@ -15,5 +15,5 @@
# define EXHALELIB_VERSION_MINOR "1"
#endif
#ifndef EXHALELIB_VERSION_BUGFIX
-# define EXHALELIB_VERSION_BUGFIX "RC" // "RC" or ".0", ".1", ...
+# define EXHALELIB_VERSION_BUGFIX ".0" // "RC" or ".0", ".1", ...
#endif
diff --git a/src/lib/bitAllocation.cpp b/src/lib/bitAllocation.cpp
index 0b1b21e..13bca10 100644
--- a/src/lib/bitAllocation.cpp
+++ b/src/lib/bitAllocation.cpp
@@ -435,7 +435,7 @@ unsigned BitAllocator::imprSfbStepSizes (const SfbGroupData* const groupData[USA
const SfbGroupData& grpData = *groupData[ch];
const uint32_t maxSfbInCh = __min (MAX_NUM_SWB_LONG, grpData.sfbsPerGroup);
const bool eightShorts = (grpData.numWindowGroups != 1);
- const bool lowRateTuning = (samplingRate >= 27713) && (sfm[ch] <= (SCHAR_MAX >> 1));
+ const bool lowRateTuning = (samplingRate >= 25495) && (sfm[ch] <= (SCHAR_MAX >> 1));
const uint32_t* rms = grpData.sfbRmsValues;
uint32_t* stepSizes = &sfbStepSizes[ch * numSwbShort * NUM_WINDOW_GROUPS];
diff --git a/src/lib/entropyCoding.cpp b/src/lib/entropyCoding.cpp
index d0a61ee..f11decf 100644
--- a/src/lib/entropyCoding.cpp
+++ b/src/lib/entropyCoding.cpp
@@ -282,8 +282,11 @@ static inline unsigned arithGetPkIndex (const unsigned ctx) // cumul. frequency
static inline unsigned writeSymbol (OutputStream* const stream, const bool leadingBitIs1, const uint16_t trailingBits)
{
+ const uint8_t lowBits = trailingBits & 0x1F;
+
stream->write (leadingBitIs1 ? 1 : 0, 1);
- stream->write (leadingBitIs1 ? 0 : (1u << trailingBits) - 1, (uint8_t) trailingBits);
+ stream->write (leadingBitIs1 ? 0 : UINT_MAX, trailingBits & 0x20);
+ stream->write (leadingBitIs1 ? 0 : (1u << lowBits) - 1u, lowBits);
return trailingBits + 1; // count
}
diff --git a/src/lib/exhaleEnc.cpp b/src/lib/exhaleEnc.cpp
index 999e7f9..35959a4 100644
--- a/src/lib/exhaleEnc.cpp
+++ b/src/lib/exhaleEnc.cpp
@@ -464,7 +464,7 @@ static const uint8_t tnsScaleFactorBandLimit[2 /*long/short*/][USAC_NUM_FREQ_TAB
#endif
};
-static const uint8_t sbrRateOffset[10] = {8, 6, 6, 8, 7, 8, 8, 8, 8, 8}; // used for scaleSBR
+static const uint8_t sbrRateOffset[10] = {7, 6, 6, 8, 7, 8, 8, 8, 8, 8}; // used for scaleSBR
// scale_factor_grouping map
// group lengths based on transient location: 1133, 1115, 2114, 3113, 4112, 5111, 3311, 1331
@@ -773,7 +773,7 @@ unsigned ExhaleEncoder::psychBitAllocation () // perceptual bit-allocation via s
const uint16_t scaleSBR = (m_shiftValSBR > 0 || m_nonMpegExt ? sbrRateOffset[m_bitRateMode] : 0); // -25% rate
const uint64_t scaleSr = (samplingRate < 27713 ? (samplingRate < 23004 ? 32 : 34) - __min (3 << m_shiftValSBR, m_bitRateMode)
: (samplingRate < 37566 && m_bitRateMode != 3u ? 36 : 37)) - (nChannels >> 1);
- const uint64_t scaleBr = (m_bitRateMode == 0 ? __min (32, 3 + (samplingRate >> 10) + (samplingRate >> 13) - (nChannels >> 1))
+ const uint64_t scaleBr = (m_bitRateMode == 0 ? __min (32, 17u + (((samplingRate + (1 << 11)) >> 12) << 1) - (nChannels >> 1))
: scaleSr - eightTimesSqrt256Minus[256 - m_bitRateMode] - __min (3, (m_bitRateMode - 1) >> 1)) + scaleSBR;
uint32_t* sfbStepSizes = (uint32_t*) m_tempIntBuf;
uint8_t meanSpecFlat[USAC_MAX_NUM_CHANNELS];
diff --git a/src/lib/exhaleLibPch.cpp b/src/lib/exhaleLibPch.cpp
index 4a8ca09..4b1e21f 100644
--- a/src/lib/exhaleLibPch.cpp
+++ b/src/lib/exhaleLibPch.cpp
@@ -20,7 +20,7 @@ void OutputStream::reset () // clear writer states and byte buffer
void OutputStream::write (const uint32_t bitChunk, const uint8_t bitCount)
{
- if (bitCount > 32) return; // only a maximum of 32 bits is writable at once
+ if (bitCount == 0) return; // nothing to do for length 0, max. length is 32
const uint8_t totalBitCount = bitCount + heldBitCount;
const uint8_t totalByteCount = totalBitCount >> 3; // to be written
|