diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9ad3246..ba06f69 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,11 +1,11 @@
## CMakeLists.txt - Main CMake file that defines how cmake should process and generate the necessary build files
- # written by C. D. Degawa, last modified in 2022 - see License.htm for legal notices
+ # written by C. D. Degawa, last modified in 2023 - see License.htm for legal notices
#
# The copyright in this software is being made available under the exhale Copyright License
# and comes with ABSOLUTELY NO WARRANTY. This software may be subject to other third-
# party rights, including patent rights. No such rights are granted under this License.
#
- # Copyright (c) 2018-2021 Christian R. Helmrich, project ecodis. All rights reserved.
+ # Copyright (c) 2018-2024 Christian R. Helmrich, project ecodis. All rights reserved.
##
cmake_minimum_required(VERSION 3.5) # Default version of cmake on Ubuntu 16.04
@@ -16,7 +16,7 @@ if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
endif()
-project(exhale VERSION 1.2.0 LANGUAGES CXX)
+project(exhale VERSION 1.2.1 LANGUAGES CXX)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE Release
diff --git a/README.md b/README.md
index 6100c28..76813b7 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@ ____________________________________________________________________
Copyright
---------
-(c) 2023 Christian R. Helmrich, project ecodis. All rights reserved.
+(c) 2024 Christian R. Helmrich, project ecodis. All rights reserved.
License
@@ -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.2.0 can
+The license text and release notes for the current version 1.2.1 can
be found in the `include` subdirectory of the exhale distribution.
diff --git a/include/License.htm b/include/License.htm
index 28850a1..103e605 100644
--- a/include/License.htm
+++ b/include/License.htm
@@ -1,4 +1,4 @@
-
+
@@ -27,7 +27,7 @@
diff --git a/include/Release.htm b/include/Release.htm
index 3858f89..8673b1f 100644
--- a/include/Release.htm
+++ b/include/Release.htm
@@ -1,4 +1,4 @@
-
+
@@ -25,9 +25,16 @@
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.2.0 (official public major release) from December 2022. 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.2.1 (official public major release) from December 2023. 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.2.0 Dec. 2022, this release
+ Version 1.2.1 Dec. 2023, this release
+
+ exhaleApp: always determine MPEG-4 instantaneous bit-rate across 2048 samples
+ exhaleLib: added code for MSE optimized encoding (for tests, disabled by default)
+ exhaleLib: code cleanup in quantization.*, increase max. IPF AU size to 10 kbit/ch
+ exhaleLib: fix two rare high-rate quality issues (only affects CVBR modes above 5)
+
+ Version 1.2.0 Dec. 2022
C API correction, some code sanitizing (issue 24, merge requests 8–11, J. Regan)
exhaleLib: code cleanup, very minor quality improvements in CVBR modes f and 5
@@ -174,7 +181,7 @@
exhaleLib: speed-ups and further quality tuning for difficult signals, as necessary.
-Written by C. R. Helmrich for exhale 1.2.0, Dec. 2022. Available at www.ecodis.de/exhale/release.htm.
+Written by C. R. Helmrich for exhale 1.2.1, Dec. 2023. Available at www.ecodis.de/exhale/release.htm.
|
diff --git a/include/version.h b/include/version.h
index c3045fc..066b36b 100644
--- a/include/version.h
+++ b/include/version.h
@@ -1,11 +1,11 @@
/* version.h - header file with major and minor library version numbers as characters
- * written by C. R. Helmrich, last modified in 2022 - see License.htm for legal notices
+ * written by C. R. Helmrich, last modified in 2023 - see License.htm for legal notices
*
* The copyright in this software is being made available under the exhale Copyright License
* and comes with ABSOLUTELY NO WARRANTY. This software may be subject to other third-
* party rights, including patent rights. No such rights are granted under this License.
*
- * Copyright (c) 2018-2021 Christian R. Helmrich, project ecodis. All rights reserved.
+ * Copyright (c) 2018-2024 Christian R. Helmrich, project ecodis. All rights reserved.
*/
#ifndef EXHALELIB_VERSION_MAJOR
@@ -15,5 +15,5 @@
# define EXHALELIB_VERSION_MINOR "2"
#endif
#ifndef EXHALELIB_VERSION_BUGFIX
-# define EXHALELIB_VERSION_BUGFIX ".0" // "RC" or ".0", ".1", ...
+# define EXHALELIB_VERSION_BUGFIX ".1" // "RC" or ".0", ".1", ...
#endif
diff --git a/src/app/exhaleApp.cpp b/src/app/exhaleApp.cpp
index b02df83..ca9ab74 100644
--- a/src/app/exhaleApp.cpp
+++ b/src/app/exhaleApp.cpp
@@ -5,7 +5,7 @@
* and comes with ABSOLUTELY NO WARRANTY. This software may be subject to other third-
* party rights, including patent rights. No such rights are granted under this License.
*
- * Copyright (c) 2018-2021 Christian R. Helmrich, project ecodis. All rights reserved.
+ * Copyright (c) 2018-2024 Christian R. Helmrich, project ecodis. All rights reserved.
*/
#include "exhaleAppPch.h"
@@ -483,7 +483,7 @@ int main (const int argc, char* argv[])
// check arg. list, print usage if needed
if ((argc < 3) || (argc > 6) || (argc > 1 && argv[1][1] != 0))
{
- fprintf_s (stdout, " Copyright 2018-2023 C.R.Helmrich, project ecodis. See License.htm for details.\n\n");
+ fprintf_s (stdout, " Copyright 2018-2024 C.R.Helmrich, project ecodis. See License.htm for details.\n\n");
fprintf_s (stdout, " This software is made available under the exhale Copyright License and comes\n");
fprintf_s (stdout, " with ABSOLUTELY NO WARRANTY. This software may be subject to other third-party\n");
@@ -1024,7 +1024,7 @@ int main (const int argc, char* argv[])
goto mainFinish; // writeout error
}
}
-#if EE_MORE_MSE
+#if 0
std::cout << "\n" << "headerSizeBytes " << (headerRes - 34) << "\n";
#endif
i = 1; // for progress bar
diff --git a/src/app/exhaleApp.rc b/src/app/exhaleApp.rc
index a7b6422..4c0a158 100644
--- a/src/app/exhaleApp.rc
+++ b/src/app/exhaleApp.rc
@@ -5,7 +5,7 @@
* and comes with ABSOLUTELY NO WARRANTY. This software may be subject to other third-
* party rights, including patent rights. No such rights are granted under this License.
*
- * Copyright (c) 2018-2021 Christian R. Helmrich, project ecodis. All rights reserved.
+ * Copyright (c) 2018-2024 Christian R. Helmrich, project ecodis. All rights reserved.
*/
#include "../../include/version.h" // for EXHALELIB_VERSION_... strings
@@ -13,7 +13,7 @@
0 ICON "exhaleApp.ico"
VS_VERSION_INFO VERSIONINFO
-FILEVERSION 1,2,0,1
+FILEVERSION 1,2,1,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
@@ -22,7 +22,7 @@ BEGIN
VALUE "CompanyName", "ecodis"
VALUE "FileDescription", "exhale - ecodis extended high-efficiency and low-complexity encoder"
VALUE "InternalName", "exhaleApp.exe"
- VALUE "LegalCopyright", "© 2018-2023 C. R. Helmrich, ecodis"
+ VALUE "LegalCopyright", "© 2018-2024 C. R. Helmrich, ecodis"
VALUE "OriginalFilename", "exhale.exe"
VALUE "ProductName", "exhaleApp"
VALUE "ProductVersion", EXHALELIB_VERSION_MAJOR "." EXHALELIB_VERSION_MINOR EXHALELIB_VERSION_BUGFIX
diff --git a/src/lib/bitStreamWriter.cpp b/src/lib/bitStreamWriter.cpp
index f1edfe9..ea1cd6e 100644
--- a/src/lib/bitStreamWriter.cpp
+++ b/src/lib/bitStreamWriter.cpp
@@ -5,7 +5,7 @@
* and comes with ABSOLUTELY NO WARRANTY. This software may be subject to other third-
* party rights, including patent rights. No such rights are granted under this License.
*
- * Copyright (c) 2018-2021 Christian R. Helmrich, project ecodis. All rights reserved.
+ * Copyright (c) 2018-2024 Christian R. Helmrich, project ecodis. All rights reserved.
*/
#include "exhaleLibPch.h"
diff --git a/src/lib/exhaleEnc.cpp b/src/lib/exhaleEnc.cpp
index a57423a..71faf3d 100644
--- a/src/lib/exhaleEnc.cpp
+++ b/src/lib/exhaleEnc.cpp
@@ -6,7 +6,7 @@
* and comes with ABSOLUTELY NO WARRANTY. This software may be subject to other third-
* party rights, including patent rights. No such rights are granted under this License.
*
- * Copyright (c) 2018-2021 Christian R. Helmrich, project ecodis. All rights reserved.
+ * Copyright (c) 2018-2024 Christian R. Helmrich, project ecodis. All rights reserved.
*/
#include "exhaleLibPch.h"
@@ -965,9 +965,9 @@ unsigned ExhaleEncoder::psychBitAllocation () // perceptual bit-allocation via s
if (grpOff[maxSfbCh] > grpOff[0])
{
s = unsigned ((s * (eightShorts ? (24u + (grpData.windowGroupLength[gr] >> 2)) / grpData.windowGroupLength[gr] : 3u) + 4096u) >> 13);
-#ifndef NO_PREROLL_DATA
- if (((m_frameCount - 1u) % (m_indepPeriod << 1)) == 1 && nrChannels == 1 && !eightShorts) s = (4u + 9u * s) >> 3;
-#endif
+# ifndef NO_PREROLL_DATA
+ if (((m_frameCount - 1u) % (m_indepPeriod << 1)) == 1 && m_numElements == 1 && !eightShorts) s = (4u + 9u * s) >> 3;
+# endif
}
s = __max (1u + ((UINT32_MAX / (eightShorts ? 3u : 8u)) >> ((2 + m_bitRateMode / 9) * m_bitRateMode)), s * s);
#endif
@@ -1185,6 +1185,12 @@ unsigned ExhaleEncoder::quantizationCoding () // apply MDCT quantization and en
// correct entropy coding 2-tuples for the next window
memset (&arithTuples[lastSOff], 1, (swbM1Size >> 1) * sizeof (char));
}
+ // correct next scale factor if the reduction exceeds 60
+ if ((b + 1u < grpData.sfbsPerGroup) && (sfIdxPred < UCHAR_MAX) && (grpLength == 1) &&
+ (grpScaleFacs[b] > grpScaleFacs[b + 1] + INDEX_OFFSET))
+ {
+ grpScaleFacs[b + 1] = grpScaleFacs[b] - INDEX_OFFSET; // avoid preset-9 zero-out
+ }
if (b > 0)
{
diff --git a/src/lib/exhaleEnc.h b/src/lib/exhaleEnc.h
index c1a6aa5..765342e 100644
--- a/src/lib/exhaleEnc.h
+++ b/src/lib/exhaleEnc.h
@@ -5,7 +5,7 @@
* and comes with ABSOLUTELY NO WARRANTY. This software may be subject to other third-
* party rights, including patent rights. No such rights are granted under this License.
*
- * Copyright (c) 2018-2021 Christian R. Helmrich, project ecodis. All rights reserved.
+ * Copyright (c) 2018-2024 Christian R. Helmrich, project ecodis. All rights reserved.
*/
#ifndef _EXHALE_ENC_H_
diff --git a/src/lib/quantization.cpp b/src/lib/quantization.cpp
index 9baf169..36aac53 100644
--- a/src/lib/quantization.cpp
+++ b/src/lib/quantization.cpp
@@ -1,11 +1,11 @@
/* quantization.cpp - source file for class with nonuniform quantization functionality
- * written by C. R. Helmrich, last modified in 2022 - see License.htm for legal notices
+ * written by C. R. Helmrich, last modified in 2023 - see License.htm for legal notices
*
* The copyright in this software is being made available under the exhale Copyright License
* and comes with ABSOLUTELY NO WARRANTY. This software may be subject to other third-
* party rights, including patent rights. No such rights are granted under this License.
*
- * Copyright (c) 2018-2021 Christian R. Helmrich, project ecodis. All rights reserved.
+ * Copyright (c) 2018-2024 Christian R. Helmrich, project ecodis. All rights reserved.
*/
#include "exhaleLibPch.h"
@@ -95,7 +95,6 @@ uint8_t SfbQuantizer::quantizeMagnSfb (const unsigned* const coeffMagn, const ui
for (int i = numCoeffs - 1; i >= 0; i--)
{
const double normalizedMagn = (double) coeffMagn[i] * stepSizeDiv;
-#if SFB_QUANT_FAST_POW
short q;
if (normalizedMagn < 28.5) // fast approximate pow (d, 0.75)
@@ -111,11 +110,8 @@ uint8_t SfbQuantizer::quantizeMagnSfb (const unsigned* const coeffMagn, const ui
}
else
{
- q = short (SFB_QUANT_OFFSET + pow (normalizedMagn, 0.75));
+ q = short (SFB_QUANT_OFFSET + pow (__min (1048544.0, normalizedMagn), 0.75)); // min avoids rare preset-9 overflow
}
-#else
- short q = short (SFB_QUANT_OFFSET + pow (normalizedMagn, 0.75));
-#endif
if (q > 0)
{
diff --git a/src/lib/quantization.h b/src/lib/quantization.h
index 35568bd..05df5df 100644
--- a/src/lib/quantization.h
+++ b/src/lib/quantization.h
@@ -1,11 +1,11 @@
/* quantization.h - header file for class with nonuniform quantization functionality
- * written by C. R. Helmrich, last modified in 2022 - see License.htm for legal notices
+ * written by C. R. Helmrich, last modified in 2023 - see License.htm for legal notices
*
* The copyright in this software is being made available under the exhale Copyright License
* and comes with ABSOLUTELY NO WARRANTY. This software may be subject to other third-
* party rights, including patent rights. No such rights are granted under this License.
*
- * Copyright (c) 2018-2021 Christian R. Helmrich, project ecodis. All rights reserved.
+ * Copyright (c) 2018-2024 Christian R. Helmrich, project ecodis. All rights reserved.
*/
#ifndef _QUANTIZATION_H_
@@ -19,13 +19,8 @@
#define SF_QUANT_OFFSET 0.4783662 // for scale fac
#define SF_THRESH_NEG 0.92044821 // round -1.5 dB
#define SF_THRESH_POS 1.09460356 // round +1.5 dB
-#define SFB_QUANT_FAST_POW 1 // faster pow ()
-#define SFB_QUANT_PERCEPT_OPT 1 // psych. quant.
-#if SFB_QUANT_FAST_POW
#define SFB_QUANT_OFFSET 0.496094 // 13 - 29^(3/4)
-#else
-#define SFB_QUANT_OFFSET 0.405396 // 1 - 0.5^(3/4)
-#endif
+#define SFB_QUANT_PERCEPT_OPT 1 // psych. quant.
#define SFB_QUANT_SSE 0
// class for BL USAC quantization
|