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