Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b621677c authored by Jason Sams's avatar Jason Sams Committed by Android (Google) Code Review
Browse files

Merge "Minor ImageProcessing script optimization to make it a better FP benchmark."

parents 54dc4b32 f46f25a4
Loading
Loading
Loading
Loading
+32 −19
Original line number Diff line number Diff line
@@ -7,9 +7,21 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32
    const FilterStruct *fs = (const FilterStruct *)usrData;
    const uchar4 *input = (const uchar4 *)rsGetElementAt(fs->ain, 0, y);

    float4 blurredPixel = 0;
    float4 currentPixel = 0;
    float3 blurredPixel = 0;
    float3 currentPixel = 0;

    const float *gPtr = fs->gaussian;
    if ((x > fs->radius) && (x < (fs->width - fs->radius))) {
        const uchar4 *i = input + (x - fs->radius);
        for(int r = -fs->radius; r <= fs->radius; r ++) {
            currentPixel.x = (float)(i->x);
            currentPixel.y = (float)(i->y);
            currentPixel.z = (float)(i->z);
            blurredPixel += currentPixel * gPtr[0];
            gPtr++;
            i++;
        }
    } else {
        for(int r = -fs->radius; r <= fs->radius; r ++) {
            // Stepping left and right away from the pixel
            int validW = x + r;
@@ -22,16 +34,17 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32
            }
            //int validW = rsClamp(w + r, 0, width - 1);

        float weight = fs->gaussian[r + fs->radius];
            currentPixel.x = (float)(input[validW].x);
            currentPixel.y = (float)(input[validW].y);
            currentPixel.z = (float)(input[validW].z);
        //currentPixel.w = (float)(input->a);

        blurredPixel += currentPixel * weight;
            blurredPixel += currentPixel * gPtr[0];
            gPtr++;
        }
    }

    output->x = (uint8_t)blurredPixel.x;
    output->y = (uint8_t)blurredPixel.y;
    output->z = (uint8_t)blurredPixel.z;
}
+5 −4
Original line number Diff line number Diff line
@@ -64,17 +64,18 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32
    const uchar4 *input = v_in;
    uchar4 *output = v_out;

    float4 currentPixel = 0;
    float3 currentPixel = 0;

    //currentPixel.xyz = convert_float3(input.xyz);
    currentPixel.x = (float)(input->x);
    currentPixel.y = (float)(input->y);
    currentPixel.z = (float)(input->z);

    float3 temp = rsMatrixMultiply(&colorMat, currentPixel.xyz);
    float3 temp = rsMatrixMultiply(&colorMat, currentPixel);
    temp = (clamp(temp, 0.f, 255.f) - inBlack) * overInWMinInB;
    if (gamma.x != 1.0f)
        temp = pow(temp, (float3)gamma);
    currentPixel.xyz = clamp(temp * outWMinOutB + outBlack, 0.f, 255.f);
    currentPixel = clamp(temp * outWMinOutB + outBlack, 0.f, 255.f);

    //output.xyz = convert_uchar3(currentPixel.xyz);
    output->x = (uint8_t)currentPixel.x;
+40 −27
Original line number Diff line number Diff line
@@ -7,8 +7,21 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32
    const FilterStruct *fs = (const FilterStruct *)usrData;
    const uchar4 *input = (const uchar4 *)rsGetElementAt(fs->ain, x, 0);

    float4 blurredPixel = 0;
    float4 currentPixel = 0;
    float3 blurredPixel = 0;
    float3 currentPixel = 0;

    const float *gPtr = fs->gaussian;
    if ((y > fs->radius) && (y < (fs->height - fs->radius))) {
        const uchar4 *i = input + ((y - fs->radius) * fs->width);
        for(int r = -fs->radius; r <= fs->radius; r ++) {
            currentPixel.x = (float)(i->x);
            currentPixel.y = (float)(i->y);
            currentPixel.z = (float)(i->z);
            blurredPixel += currentPixel * gPtr[0];
            gPtr++;
            i += fs->width;
        }
    } else {
        for(int r = -fs->radius; r <= fs->radius; r ++) {
    #if 1
            int validH = y + r;
@@ -23,20 +36,20 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32
            const uchar4 *i = input + validH * fs->width;
            //const uchar4 *i = (const uchar4 *)rsGetElementAt(fs->ain, x, validH);

        float weight = fs->gaussian[r + fs->radius];

            currentPixel.x = (float)(i->x);
            currentPixel.y = (float)(i->y);
            currentPixel.z = (float)(i->z);

        blurredPixel.xyz += currentPixel.xyz * weight;
            blurredPixel += currentPixel * gPtr[0];
            gPtr++;
    #else
            int validH = rsClamp(y + r, 0, height - 1);
            validH -= y;
            uchar4 *i = input + validH * width + x;
        blurredPixel.xyz += convert_float3(i->xyz) * gaussian[r + fs->radius];
            blurredPixel.xyz += convert_float3(i->xyz) * gPtr[0];
            gPtr++;
    #endif
        }
    }

    //output->xyz = convert_uchar3(blurredPixel.xyz);
    output->x = (uint8_t)blurredPixel.x;