Advertisement
kujikita

HEVAG.cs

Nov 2nd, 2019
544
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.99 KB | None | 0 0
  1.         private int min, ShM, s1, s2, s3, s4, tS1, tS2, tS3, tS4, PrNRf;
  2.         private int VAG_1, VAG_2, HEVAG_1, HEVAG_2, HEVAG_3, HEVAG_4;
  3.         private int[] data_buffer, error, four_bit, max, temp_buffer;
  4.         private int* data_bufferPtr, errorPtr, four_bitPtr, maxPtr, temp_bufferPtr;
  5.         private int[] S_1, S_2, S_3, S_4, S1, S2, S3, S4;
  6.         private int* S_1Ptr, S_2Ptr, S_3Ptr, S_4Ptr, S1Ptr, S2Ptr, S3Ptr, S4Ptr;
  7.        
  8.         private void DecodeHEVAG()
  9.         {
  10.             i = 0; i2 = 1;
  11.             while (i < BS)
  12.             {
  13.                 d0 = four_bitPtr[i ];
  14.                 d1 = four_bitPtr[i2];
  15.                 if (d0 > 7) d0 -= 16;
  16.                 if (d1 > 7) d1 -= 16;
  17.                 d0 <<= 20 - ShF;
  18.                 d1 <<= 20 - ShF;
  19.  
  20.                 g = ((tS1 >> 8) * HEVAG_1 + (tS2 >> 8) * HEVAG_2 +
  21.                      (tS3 >> 8) * HEVAG_3 + (tS4 >> 8) * HEVAG_4) >> 5;
  22.                 tS4 = tS3; tS3 = tS2; tS2 = tS1; tS1 = g + d0;
  23.  
  24.                 g = ((tS1 >> 8) * HEVAG_1 + (tS2 >> 8) * HEVAG_2 +
  25.                      (tS3 >> 8) * HEVAG_3 + (tS4 >> 8) * HEVAG_4) >> 5;
  26.                 tS4 = tS3; tS3 = tS2; tS2 = tS1; tS1 = g + d1;
  27.  
  28.                 temp_bufferPtr[i ] = tS2;
  29.                 temp_bufferPtr[i2] = tS1;
  30.                 i  += 2;
  31.                 i2 += 2;
  32.             }
  33.         }
  34.        
  35.         private void Calc4BitsHEVAG()
  36.         {
  37.             PrNRf = 0;
  38.             min   = 0x7FFFFFFF;
  39.             for (j = 0; j < PrNRCount; j++)
  40.             {
  41.                 PrNR = j;
  42.  
  43.                 Calc4Bits_HEVAG();
  44.  
  45.                 tS1 = S1Ptr[c]; tS2 = S2Ptr[c]; tS3 = S3Ptr[c]; tS4 = S4Ptr[c];
  46.                 DecodeHEVAG();
  47.                 i = 0;
  48.                 errorPtr[j] = 0;
  49.                 while (i < BS)
  50.                 {
  51.                     e = data_bufferPtr[i] - temp_bufferPtr[i];
  52.                     if (e < 0) e = -e;
  53.                     errorPtr[j] += e;
  54.                     i++;
  55.                 }
  56.  
  57.                 if (errorPtr[j] < min) { PrNRf = j; min = errorPtr[j]; }
  58.             }
  59.             PrNR = PrNRf;
  60.  
  61.             Calc4Bits_HEVAG();
  62.              S1Ptr[c] =  s1;  S2Ptr[c] =  s2;  S3Ptr[c] =  s3;  S4Ptr[c] =  s4;
  63.             S_1Ptr[c] = tS1; S_2Ptr[c] = tS2; S_3Ptr[c] = tS3; S_4Ptr[c] = tS4;
  64.         }
  65.  
  66.         private void Calc4Bits_HEVAG()
  67.         {
  68.             s1 = S1Ptr[c]; s2 = S2Ptr[c]; s3 = S3Ptr[c]; s4 = S4Ptr[c];
  69.             HEVAG_1 = HEVAG1Ptr[PrNR]; HEVAG_2 = HEVAG2Ptr[PrNR];
  70.             HEVAG_3 = HEVAG3Ptr[PrNR]; HEVAG_4 = HEVAG4Ptr[PrNR];
  71.  
  72.             i = 0;
  73.             maxPtr[PrNR] = 0;
  74.             while (i < BS)
  75.             {
  76.                 g = data_bufferPtr[i];
  77.                 e = ((s1 >> 8) * HEVAG_1 + (s2 >> 8) * HEVAG_2 +
  78.                      (s3 >> 8) * HEVAG_3 + (s4 >> 8) * HEVAG_4) >> 5;
  79.                 e = g - e;
  80.                 if (e >  7864319) e =  7864319;
  81.                 if (e < -7864320) e = -7864320;
  82.                 temp_bufferPtr[i] = e;
  83.                 if (e < 0) e = -e;
  84.                 if (e > maxPtr[PrNR]) maxPtr[PrNR] = e;
  85.                 s4 = s3; s3 = s2; s2 = s1; s1 = g;
  86.                 i++;
  87.             }
  88.  
  89.             for (ShF = 0, ShM = 0x400000; ShF < 15; ShF++, ShM >>= 1)
  90.             { e = maxPtr[PrNR] + (ShM >> 3); if ((ShM & e) == ShM) break; }
  91.  
  92.             tS1 = S_1Ptr[c]; tS2 = S_2Ptr[c]; tS3 = S_3Ptr[c]; tS4 = S_4Ptr[c];
  93.             i = 0;
  94.             while (i < BS)
  95.             {
  96.                 g = temp_bufferPtr[i];
  97.                 e = ((tS1 >> 8) * HEVAG_1 + (tS2 >> 8) * HEVAG_2 +
  98.                      (tS3 >> 8) * HEVAG_3 + (tS4 >> 8) * HEVAG_4) >> 5;
  99.                 e = g - e;
  100.  
  101.                 d1 = e << ShF;
  102.                 d0 = (d1 + 0x80000) >> 20;
  103.                 if (d0 >  7) d0 =  7;
  104.                 if (d0 < -8) d0 = -8;
  105.                 four_bitPtr[i] = d0 & 0xF;
  106.                 d0 <<= 20 - ShF;
  107.  
  108.                 tS4 = tS3; tS3 = tS2; tS2 = tS1; tS1 = d0 - e;
  109.                 i++;
  110.             }
  111.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement