1fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber/* 2fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * Copyright 2012, The Android Open Source Project 3fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * 4fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * you may not use this file except in compliance with the License. 6fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * You may obtain a copy of the License at 7fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * 8fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * 10fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * Unless required by applicable law or agreed to in writing, software 11fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * See the License for the specific language governing permissions and 14fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * limitations under the License. 15fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber */ 16fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 17fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber#ifndef LINEAR_REGRESSION_H_ 18fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 19fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber#define LINEAR_REGRESSION_H_ 20fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 21fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber#include <sys/types.h> 22fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber#include <media/stagefright/foundation/ABase.h> 23fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 24fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Hubernamespace android { 25fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 26fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber// Helper class to fit a line to a set of points minimizing the sum of 27fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber// squared (orthogonal) distances from line to individual points. 28fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huberstruct LinearRegression { 29fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber LinearRegression(size_t historySize); 30fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber ~LinearRegression(); 31fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 32fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber void addPoint(float x, float y); 33fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 34fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber bool approxLine(float *n1, float *n2, float *b) const; 35fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 36fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huberprivate: 37fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber struct Point { 38fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber float mX, mY; 39fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber }; 40fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 41fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber size_t mHistorySize; 42fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber size_t mCount; 43fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber Point *mHistory; 44fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 45fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber float mSumX, mSumY; 46fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 47fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(LinearRegression); 48fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber}; 49fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 50fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber} // namespace android 51fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 52fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber#endif // LINEAR_REGRESSION_H_ 53