aboutsummaryrefslogtreecommitdiffstats
path: root/src/atrac3denc.cpp
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2020-01-12 22:20:51 +0300
committerDaniil Cherednik <dan.cherednik@gmail.com>2020-01-12 22:20:51 +0300
commit83d5e5d3652608478b5f18212bd3fec2338ae954 (patch)
treef8565d3d74bc68ae1b7c0710ceeb1a2bb57303e5 /src/atrac3denc.cpp
parent5ae5ed6b6c6f0a49372288e309244ccd0b54060f (diff)
downloadatracdenc-83d5e5d3652608478b5f18212bd3fec2338ae954.tar.gz
[atrac3] Initial joint stereo mode support.
Diffstat (limited to 'src/atrac3denc.cpp')
-rw-r--r--src/atrac3denc.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/atrac3denc.cpp b/src/atrac3denc.cpp
index 9bb7eb2..f6d8758 100644
--- a/src/atrac3denc.cpp
+++ b/src/atrac3denc.cpp
@@ -274,6 +274,19 @@ void TAtrac3Processor::CreateSubbandInfo(TFloat* in[4],
}
}
+void TAtrac3Processor::Matrixing()
+{
+ for (uint32_t subband = 0; subband < 4; subband++) {
+ TFloat* pair[2] = {PcmBuffer.GetSecond(subband * 2), PcmBuffer.GetSecond(subband * 2 + 1)};
+ TFloat tmp[2];
+ for (uint32_t sample = 0; sample < 256; sample++) {
+ tmp[0] = pair[0][sample];
+ tmp[1] = pair[1][sample];
+ pair[0][sample] = (tmp[0] + tmp[1]) / 2.0;
+ pair[1][sample] = (tmp[0] - tmp[1]) / 2.0;
+ }
+ }
+}
TPCMEngine<TFloat>::TProcessLambda TAtrac3Processor::GetEncodeLambda()
{
@@ -289,7 +302,6 @@ TPCMEngine<TFloat>::TProcessLambda TAtrac3Processor::GetEncodeLambda()
assert(SingleChannelElements.size() == meta.Channels);
for (uint32_t channel = 0; channel < SingleChannelElements.size(); channel++) {
- vector<TFloat> specs(1024);
TFloat src[NumSamples];
for (size_t i = 0; i < NumSamples; ++i) {
@@ -300,7 +312,14 @@ TPCMEngine<TFloat>::TProcessLambda TAtrac3Processor::GetEncodeLambda()
TFloat* p[4] = {PcmBuffer.GetSecond(channel), PcmBuffer.GetSecond(channel+2), PcmBuffer.GetSecond(channel+4), PcmBuffer.GetSecond(channel+6)};
SplitFilterBank[channel].Split(&src[0], p);
}
-
+ }
+
+ if (Params.ConteinerParams->Js) {
+ Matrixing();
+ }
+
+ for (uint32_t channel = 0; channel < SingleChannelElements.size(); channel++) {
+ vector<TFloat> specs(1024);
TSce* sce = &SingleChannelElements[channel];
sce->SubbandInfo.Reset();