| 1 |
#pragma once |
| 2 |
|
| 3 |
namespace IntraPrediction { |
| 4 |
|
| 5 |
enum Mode { |
| 6 |
Mode_Vertical = 0, |
| 7 |
Mode_Horizontal = 1, |
| 8 |
Mode_DC = 2, |
| 9 |
Mode_DiagonalDownLeft = 3, |
| 10 |
Mode_DiagonalDownRight = 4, |
| 11 |
Mode_VerticalRight = 5, |
| 12 |
Mode_HorizontalDown = 6, |
| 13 |
Mode_VerticalLeft = 7, |
| 14 |
Mode_HorizontalUp = 8, |
| 15 |
}; |
| 16 |
|
| 17 |
class Predictor8 |
| 18 |
{ |
| 19 |
public: |
| 20 |
void predict(Mode mode, const int original[8][8], int processed[8][8]) |
| 21 |
{ |
| 22 |
switch (mode) { |
| 23 |
case Mode_Vertical: |
| 24 |
vertical(original, processed); |
| 25 |
break; |
| 26 |
case Mode_Horizontal: |
| 27 |
horizontal(original, processed); |
| 28 |
break; |
| 29 |
case Mode_DC: |
| 30 |
dc(original, processed); |
| 31 |
break; |
| 32 |
case Mode_DiagonalDownLeft: |
| 33 |
diagonalDownLeft(original, processed); |
| 34 |
break; |
| 35 |
case Mode_DiagonalDownRight: |
| 36 |
diagonalDownRight(original, processed); |
| 37 |
break; |
| 38 |
case Mode_VerticalRight: |
| 39 |
verticalRight(original, processed); |
| 40 |
break; |
| 41 |
case Mode_HorizontalDown: |
| 42 |
horizontalDown(original, processed); |
| 43 |
break; |
| 44 |
case Mode_VerticalLeft: |
| 45 |
verticalLeft(original, processed); |
| 46 |
break; |
| 47 |
case Mode_HorizontalUp: |
| 48 |
horizontalUp(original, processed); |
| 49 |
break; |
| 50 |
} |
| 51 |
} |
| 52 |
|
| 53 |
void vertical(const int original[8][8], int processed[8][8]); |
| 54 |
void horizontal(const int original[8][8], int processed[8][8]); |
| 55 |
void dc(const int original[8][8], int processed[8][8]); |
| 56 |
void diagonalDownLeft(const int original[8][8], int processed[8][8]); |
| 57 |
void diagonalDownRight(const int original[8][8], int processed[8][8]); |
| 58 |
|
| 59 |
void verticalRight(const int original[8][8], int processed[8][8]); |
| 60 |
void verticalRight_Sub(size_t offset, const int original[8][8], int processed[8][8]); |
| 61 |
|
| 62 |
void horizontalDown(const int original[8][8], int processed[8][8]); |
| 63 |
|
| 64 |
void verticalLeft(const int original[8][8], int processed[8][8]); |
| 65 |
void verticalLeft_Sub(size_t offset, const int original[8][8], int processed[8][8]); |
| 66 |
|
| 67 |
void horizontalUp(const int original[8][8], int processed[8][8]); |
| 68 |
|
| 69 |
int cols[17]; // bottom row |
| 70 |
int rows[17]; // right-most columns |
| 71 |
int average; |
| 72 |
}; |
| 73 |
|
| 74 |
} // namespace IntraPrediction |
| 75 |
|