in renderscript-toolkit/src/main/cpp/Histogram.cpp [78:107]
void HistogramTask::processData(int threadIndex, size_t startX, size_t startY, size_t endX,
size_t endY) {
typedef void (HistogramTask::*KernelFunction)(const uchar*, int*, uint32_t, uint32_t);
KernelFunction kernel;
switch (mVectorSize) {
case 4:
kernel = &HistogramTask::kernelP1U4;
break;
case 3:
kernel = &HistogramTask::kernelP1U3;
break;
case 2:
kernel = &HistogramTask::kernelP1U2;
break;
case 1:
kernel = &HistogramTask::kernelP1U1;
break;
default:
ALOGE("Bad vector size %zd", mVectorSize);
return;
}
int* sums = &mSums[256 * paddedSize(mVectorSize) * threadIndex];
for (size_t y = startY; y < endY; y++) {
const uchar* inPtr = mIn + (mSizeX * y + startX) * paddedSize(mVectorSize);
std::invoke(kernel, this, inPtr, sums, startX, endX);
}
}