10ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen/*
20ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen * Copyright (C) 2011 The Android Open Source Project
30ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen *
40ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen * Licensed under the Apache License, Version 2.0 (the "License");
50ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen * you may not use this file except in compliance with the License.
60ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen * You may obtain a copy of the License at
70ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen *
80ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen *      http://www.apache.org/licenses/LICENSE-2.0
90ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen *
100ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen * Unless required by applicable law or agreed to in writing, software
110ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen * distributed under the License is distributed on an "AS IS" BASIS,
120ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen * See the License for the specific language governing permissions and
140ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen * limitations under the License.
150ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen */
160ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen
170ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen#ifndef IMAGETESTHANDLER_H
180ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen#define IMAGETESTHANDLER_H
190ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen
200ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen#include "vec2.h"
210ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen#include "vec3.h"
220ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen
230ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chenclass ImageTestHandler{
240ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen  public:
250ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    ImageTestHandler() {
260ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen        initDebugImage();
270ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    }
280ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    ImageTestHandler(int debugHeight, int debugWidth) {
290ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen        initDebugImage(debugHeight, debugWidth);
300ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    }
310ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    virtual ~ImageTestHandler() { delete[] mDebugOutput; }
320ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen
330ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    virtual void processData() {}
340ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen
350ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    int getDebugWidth() const { return mDebugWidth; }
360ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    int getDebugHeight() const { return mDebugHeight; }
370ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    const unsigned char* debug_output() const { return mDebugOutput; }
380ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    void copyDebugImage(int inputHeight, int inputWidth,
390ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen                        const unsigned char* inputImage);
400ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen
410ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    void drawPoint(const Vec2i &point, const Vec3i &color);
420ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    void drawPoint(int row, int column, const Vec3i &color);
430ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    void drawLine(int angle, int radius, const Vec3i &color);
440ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen
450ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen  protected:
460ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    void clearDebugImage();
470ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen
480ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen  private:
490ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    void initDebugImage();
500ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    void initDebugImage(int debugHeight, int debugWidth);
510ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen
520ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    unsigned char* mDebugOutput;
530ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    int mDebugWidth;
540ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen    int mDebugHeight;
550ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen};
560ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen
570ed3f71ac8a208f7bf311b9b2a4102e7cecbac57Christine Chen#endif
58