Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.76 KB | None | 0 0
  1. __m64 EdgeDetector::populateRun(unsigned int x, unsigned int y, unsigned int channelOffset, RunOrientation orientation)
  2. {
  3.     unsigned int index = (y * 2560) + (x << 2) + channelOffset;
  4.  
  5.     if(orientation == HORIZONTAL)
  6.     {
  7.         return _mm_setr_pi8(yuvArray[index],
  8.                             yuvArray[index + 4],
  9.                             yuvArray[index + 8],
  10.                             yuvArray[index + 12],
  11.                             yuvArray[index + 16],
  12.                             yuvArray[index + 20],
  13.                             yuvArray[index + 24],
  14.                             yuvArray[index + 28]);
  15.     }
  16.     else if(orientation == VERTICAL)
  17.     {
  18.         return _mm_setr_pi8(yuvArray[index],
  19.                             yuvArray[index + 2560],
  20.                             yuvArray[index + 5120],
  21.                             yuvArray[index + 7680],
  22.                             yuvArray[index + 10240],
  23.                             yuvArray[index + 12800],
  24.                             yuvArray[index + 15360],
  25.                             yuvArray[index + 17920]);
  26.     }
  27.  
  28.     return _m_from_int(0);
  29. }
  30.  
  31. long long EdgeDetector::differenceCombined(unsigned int startX, unsigned int startY, RunOrientation orientation, unsigned int channelOffset)
  32. {
  33.     __m64 pixelValues = populateRun(startX, startY, channelOffset, orientation);
  34.  
  35.     __m64 shiftedValuesRight = _mm_srli_si64(pixelValues, 8);
  36.     __m64 shiftedValuesLeft = _mm_slli_si64(pixelValues, 8);
  37.  
  38.     __m64 resultRight = _mm_subs_pu8(pixelValues, shiftedValuesRight);
  39.     __m64 resultLeft = _mm_subs_pu8(pixelValues, shiftedValuesLeft);
  40.  
  41.     __m64 result = _mm_adds_pu8(resultRight, resultLeft);
  42.  
  43.     long long retVal = _m_to_int64(result);
  44.  
  45.     _mm_empty();
  46.  
  47.     return retVal;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement