From 63b919d2426d0fbab0aba880a1220aed63fc5397 Mon Sep 17 00:00:00 2001 From: "Christian R. Helmrich" Date: Sat, 30 May 2020 18:00:00 +0200 Subject: [PATCH] check common_tns flag --- src/lib/bitStreamWriter.cpp | 21 +++++++++++++++++---- src/lib/bitStreamWriter.h | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/lib/bitStreamWriter.cpp b/src/lib/bitStreamWriter.cpp index 3219cc0..ad08740 100644 --- a/src/lib/bitStreamWriter.cpp +++ b/src/lib/bitStreamWriter.cpp @@ -346,7 +346,7 @@ unsigned BitStreamWriter::writeFDChannelStream (const CoreCoderData& elData, Ent unsigned BitStreamWriter::writeStereoCoreToolInfo (const CoreCoderData& elData, EntropyCoder& entrCoder, #if !RESTRICT_TO_AAC - const bool timeWarping, + const bool timeWarping, bool* const commonTnsFlag, #endif const bool indepFlag /*= false*/) { @@ -466,14 +466,27 @@ unsigned BitStreamWriter::writeStereoCoreToolInfo (const CoreCoderData& elData, #endif if (elData.tnsActive) { + bool commonTns = elData.commonTnsData; + if (elData.commonWindow) { - m_auBitStream.write (elData.commonTnsData ? 1 : 0, 1); +#if !RESTRICT_TO_AAC + if ((commonTnsFlag != nullptr) && !commonTns) // common_tns + { + const uint8_t* data1 = (uint8_t*) &tnsData0; // fast comp. + const uint8_t* data2 = (uint8_t*) &tnsData1; // portable?? + + commonTns = true; + for (b = 0; b < sizeof (TnsData); b++) commonTns &= (data1[b] == data2[b]); + *commonTnsFlag = commonTns; + } +#endif + m_auBitStream.write (/*optim.*/commonTns ? 1 : 0, 1); bitCount++; } m_auBitStream.write (elData.tnsOnLeftRight ? 1 : 0, 1); bitCount++; - if (elData.commonTnsData) + if (commonTns) { bitCount += writeChannelWiseTnsData (tnsData0, icsInfo0.windowSequence == EIGHT_SHORT); } @@ -641,7 +654,7 @@ unsigned BitStreamWriter::createAudioFrame (CoreCoderData** const elementData, bitCount += 2; bitCount += writeStereoCoreToolInfo (*elData, entropyCoder[ci], // L #if !RESTRICT_TO_AAC - tw_mdct[el], + tw_mdct[el], &elementData[el]->commonTnsData, #endif usacIndependencyFlag); bitCount += writeFDChannelStream (*elData, entropyCoder[ci], 0, // L diff --git a/src/lib/bitStreamWriter.h b/src/lib/bitStreamWriter.h index 2fc28de..25c0287 100644 --- a/src/lib/bitStreamWriter.h +++ b/src/lib/bitStreamWriter.h @@ -43,7 +43,7 @@ private: const bool indepFlag = false); unsigned writeStereoCoreToolInfo (const CoreCoderData& elData, EntropyCoder& entrCoder, #if !RESTRICT_TO_AAC - const bool timeWarping, + const bool timeWarping, bool* const commonTnsFlag, #endif const bool indepFlag = false);