mirror of https://github.com/mstorsjo/fdk-aac.git
Improve encoder audio quality for low bitreservoir configuration.
Bug: 149489652 Test: atest android.media.cts.EncoderTest#testAACEncoders Change-Id: I87d5695a93b1f130b95b45d48157e6aaf947709d
This commit is contained in:
parent
6b0aab087d
commit
79305e068e
|
@ -1,7 +1,7 @@
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
Software License for The Fraunhofer FDK AAC Codec Library for Android
|
Software License for The Fraunhofer FDK AAC Codec Library for Android
|
||||||
|
|
||||||
© Copyright 1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten
|
© Copyright 1995 - 2019 Fraunhofer-Gesellschaft zur Förderung der angewandten
|
||||||
Forschung e.V. All rights reserved.
|
Forschung e.V. All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
|
@ -114,6 +114,8 @@ amm-info@iis.fraunhofer.de
|
||||||
|
|
||||||
#include "genericStds.h"
|
#include "genericStds.h"
|
||||||
|
|
||||||
|
#define BITRES_MIN \
|
||||||
|
300 /* default threshold for using reduced/disabled bitres mode */
|
||||||
#define BITRES_MAX_LD 4000
|
#define BITRES_MAX_LD 4000
|
||||||
#define BITRES_MIN_LD 500
|
#define BITRES_MIN_LD 500
|
||||||
#define BITRATE_MAX_LD 70000 /* Max assumed bitrate for bitres calculation */
|
#define BITRATE_MAX_LD 70000 /* Max assumed bitrate for bitres calculation */
|
||||||
|
@ -550,7 +552,8 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(
|
||||||
(config->minBitsPerFrame != -1) ? config->minBitsPerFrame : 0;
|
(config->minBitsPerFrame != -1) ? config->minBitsPerFrame : 0;
|
||||||
qcInit.minBits = fixMin(qcInit.minBits, averageBitsPerFrame & ~7);
|
qcInit.minBits = fixMin(qcInit.minBits, averageBitsPerFrame & ~7);
|
||||||
} else {
|
} else {
|
||||||
INT bitreservoir = -1; /* default bitrservoir size*/
|
INT bitreservoir = -1; /* default bitreservoir size*/
|
||||||
|
bitresMin = BITRES_MIN;
|
||||||
if (isLowDelay(config->audioObjectType)) {
|
if (isLowDelay(config->audioObjectType)) {
|
||||||
INT brPerChannel = config->bitRate / config->nChannels;
|
INT brPerChannel = config->bitRate / config->nChannels;
|
||||||
brPerChannel = fMin(BITRATE_MAX_LD, fMax(BITRATE_MIN_LD, brPerChannel));
|
brPerChannel = fMin(BITRATE_MAX_LD, fMax(BITRATE_MIN_LD, brPerChannel));
|
||||||
|
@ -601,9 +604,9 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(
|
||||||
qcInit.nSubFrames = config->nSubFrames;
|
qcInit.nSubFrames = config->nSubFrames;
|
||||||
qcInit.padding.paddingRest = config->sampleRate;
|
qcInit.padding.paddingRest = config->sampleRate;
|
||||||
|
|
||||||
if (qcInit.bitRes >= bitresMin * config->nChannels) {
|
if (qcInit.maxBits - qcInit.averageBits >= bitresMin * config->nChannels) {
|
||||||
qcInit.bitResMode = AACENC_BR_MODE_FULL; /* full bitreservoir */
|
qcInit.bitResMode = AACENC_BR_MODE_FULL; /* full bitreservoir */
|
||||||
} else if (qcInit.bitRes > 0) {
|
} else if (qcInit.maxBits > qcInit.averageBits) {
|
||||||
qcInit.bitResMode = AACENC_BR_MODE_REDUCED; /* reduced bitreservoir */
|
qcInit.bitResMode = AACENC_BR_MODE_REDUCED; /* reduced bitreservoir */
|
||||||
} else {
|
} else {
|
||||||
qcInit.bitResMode = AACENC_BR_MODE_DISABLED; /* disabled bitreservoir */
|
qcInit.bitResMode = AACENC_BR_MODE_DISABLED; /* disabled bitreservoir */
|
||||||
|
|
Loading…
Reference in New Issue