diff options
Diffstat (limited to '7zip/Compress/Rar20/Rar20Multimedia.cpp')
-rwxr-xr-x | 7zip/Compress/Rar20/Rar20Multimedia.cpp | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/7zip/Compress/Rar20/Rar20Multimedia.cpp b/7zip/Compress/Rar20/Rar20Multimedia.cpp deleted file mode 100755 index 3c0a13af..00000000 --- a/7zip/Compress/Rar20/Rar20Multimedia.cpp +++ /dev/null @@ -1,128 +0,0 @@ -// Rar20Multimedia.cpp -// According to unRAR license, -// this code may not be used to develop a -// RAR (WinRAR) compatible archiver - -#include "StdAfx.h" - -#include "Rar20Multimedia.h" - -namespace NCompress { -namespace NRar20 { -namespace NMultimedia { - -void CAudioVariables::Init() -{ - memset(this, 0, sizeof(CAudioVariables)); -} - -void CPredictor::Init() -{ - for(int i = 0; i < kNumChanelsMax; i++) - m_AudioVariablesArray[i].Init(); - m_ChannelDelta = 0; - CurrentChannel = 0; -} - -Byte CPredictor::Predict() -{ - CAudioVariables *v = &m_AudioVariablesArray[CurrentChannel]; - v->ByteCount++; - v->D4 = v->D3; - v->D3 = v->D2; - v->D2 = v->LastDelta-v->D1; - v->D1 = v->LastDelta; - int pCh = 8 * v->LastChar + - v->K1 * v->D1 + - v->K2 * v->D2 + - v->K3 * v->D3 + - v->K4 * v->D4 + - v->K5*m_ChannelDelta; - pCh = (pCh >> 3) & 0xFF; - return Byte(pCh); -} - -void CPredictor::Update(Byte realValue, int predictedValue) -{ - struct CAudioVariables *v = &m_AudioVariablesArray[CurrentChannel]; - - int delta = predictedValue - realValue; - int i = ((signed char)delta) << 3; - - v->Dif[0] += abs(i); - v->Dif[1] += abs(i - v->D1); - v->Dif[2] += abs(i + v->D1); - v->Dif[3] += abs(i - v->D2); - v->Dif[4] += abs(i + v->D2); - v->Dif[5] += abs(i - v->D3); - v->Dif[6] += abs(i + v->D3); - v->Dif[7] += abs(i - v->D4); - v->Dif[8] += abs(i + v->D4); - v->Dif[9] += abs(i - m_ChannelDelta); - v->Dif[10] += abs(i + m_ChannelDelta); - - m_ChannelDelta = v->LastDelta = (signed char)(realValue - v->LastChar); - v->LastChar = realValue; - - UInt32 numMinDif, minDif; - if ((v->ByteCount & 0x1F)==0) - { - minDif = v->Dif[0]; - numMinDif = 0; - v->Dif[0] = 0; - for (i = 1; i < sizeof(v->Dif) / sizeof(v->Dif[0]); i++) - { - if (v->Dif[i] < minDif) - { - minDif = v->Dif[i]; - numMinDif = i; - } - v->Dif[i] = 0; - } - switch(numMinDif) - { - case 1: - if (v->K1 >= -16) - v->K1--; - break; - case 2: - if (v->K1 < 16) - v->K1++; - break; - case 3: - if (v->K2 >= -16) - v->K2--; - break; - case 4: - if (v->K2 < 16) - v->K2++; - break; - case 5: - if (v->K3 >= -16) - v->K3--; - break; - case 6: - if (v->K3 < 16) - v->K3++; - break; - case 7: - if (v->K4 >= -16) - v->K4--; - break; - case 8: - if (v->K4 < 16) - v->K4++; - break; - case 9: - if (v->K5 >= -16) - v->K5--; - break; - case 10: - if (v->K5 < 16) - v->K5++; - break; - } - } -} - -}}} |