diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2020-01-12 22:20:51 +0300 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2020-01-12 22:20:51 +0300 |
commit | 83d5e5d3652608478b5f18212bd3fec2338ae954 (patch) | |
tree | f8565d3d74bc68ae1b7c0710ceeb1a2bb57303e5 /src/atrac3denc.cpp | |
parent | 5ae5ed6b6c6f0a49372288e309244ccd0b54060f (diff) | |
download | atracdenc-83d5e5d3652608478b5f18212bd3fec2338ae954.tar.gz |
[atrac3] Initial joint stereo mode support.
Diffstat (limited to 'src/atrac3denc.cpp')
-rw-r--r-- | src/atrac3denc.cpp | 23 |
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(); |