Home | History | Annotate | Download | only in colorchecker
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 #define LOG_NDEBUG 0
     17 
     18 #define LOG_TAG "ExposureCompensationTest"
     19 #include <utils/Log.h>
     20 #include <utils/Timers.h>
     21 #include <cmath>
     22 #include <string>
     23 #include <stdio.h>
     24 
     25 #include "vec2.h"
     26 #include "vec3.h"
     27 #include "exposurecompensationtest.h"
     28 
     29 const float GAMMA_CORRECTION = 2.2f;
     30 void ExposureCompensationTest::processData() {
     31     ALOGV("Start Processing Exposure Compensation Test Data!");
     32     clearDebugImage();
     33 
     34     if (mDebugText != NULL) {
     35         delete mDebugText;
     36         mDebugText = NULL;
     37     }
     38 
     39     int numTests = mExposureValues.size();
     40     int numPatches = mCheckerColors[0].size();
     41     ALOGV("Processing %d tests with %d patches", numTests, numPatches);
     42 
     43     mDebugText = new char[320 * numTests];
     44     mDebugText[0] = 0;
     45     char* debugText = new char[50];
     46 
     47     Vec3i red(255, 0, 0);
     48     Vec3i green(0, 255, 0);
     49     Vec3i blue(0, 0, 255);
     50 
     51     float minExposure = -3.0f;
     52     float scale = 9.0f;
     53     for (int i = 0; i < numTests; ++i) {
     54         snprintf(debugText, 50, "Exposure is %f \n", mExposureValues[i]);
     55         strcat(mDebugText, debugText);
     56         for (int j = 0; j < numPatches; ++j) {
     57             int exposureRed = static_cast<int>((
     58                 log(static_cast<float>(mReferenceColors[j].r()))
     59                 / log(2.0f) * GAMMA_CORRECTION +
     60                 mExposureValues[i] - minExposure) * scale);
     61             int exposureGreen = static_cast<int>((
     62                 log(static_cast<float>(mReferenceColors[j].g()))
     63                 / log(2.0f) * GAMMA_CORRECTION +
     64                 mExposureValues[i] - minExposure) * scale);
     65             int exposureBlue = static_cast<int>((
     66                 log(static_cast<float>(mReferenceColors[j].b()))
     67                 / log(2.0f) * GAMMA_CORRECTION +
     68                 mExposureValues[i] - minExposure) * scale);
     69 
     70             snprintf(debugText, 50, "%d %f %d %f %d %f \n",
     71                     exposureRed, mCheckerColors[i][j].r(),
     72                     exposureGreen, mCheckerColors[i][j].g(),
     73                     exposureBlue, mCheckerColors[i][j].b());
     74 
     75             ALOGV("%s", debugText);
     76             strcat(mDebugText, debugText);
     77 
     78             drawPoint(200 - exposureRed, mCheckerColors[i][j].r(), red);
     79             drawPoint(200 - exposureGreen, mCheckerColors[i][j].g(), green);
     80             drawPoint(200 - exposureBlue, mCheckerColors[i][j].b(), blue);
     81         }
     82     }
     83     mExposureValues.clear();
     84     mCheckerColors.clear();
     85 }
     86 
     87 void ExposureCompensationTest::initializeReferenceColors() {
     88     mReferenceColors.resize(6);
     89 
     90     mReferenceColors[0].set(243, 243, 242);
     91     mReferenceColors[1].set(200, 200, 200);
     92     mReferenceColors[2].set(160, 160, 160);
     93     mReferenceColors[3].set(122, 122, 121);
     94     mReferenceColors[4].set(85, 85, 85);
     95     mReferenceColors[5].set(52, 52, 52);
     96 }
     97