void HistogramTask::processData()

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);
    }
}