Commit | Line | Data |
---|---|---|
2ba45a60 DM |
1 | /* |
2 | * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder | |
3 | * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at> | |
4 | * | |
5 | * This file is part of FFmpeg. | |
6 | * | |
7 | * FFmpeg is free software; you can redistribute it and/or | |
8 | * modify it under the terms of the GNU Lesser General Public | |
9 | * License as published by the Free Software Foundation; either | |
10 | * version 2.1 of the License, or (at your option) any later version. | |
11 | * | |
12 | * FFmpeg is distributed in the hope that it will be useful, | |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | * Lesser General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU Lesser General Public | |
18 | * License along with FFmpeg; if not, write to the Free Software | |
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | */ | |
21 | ||
22 | /** | |
23 | * @file | |
24 | * H.264 / AVC / MPEG4 prediction functions. | |
25 | * @author Michael Niedermayer <michaelni@gmx.at> | |
26 | */ | |
27 | ||
28 | #ifndef AVCODEC_H264PRED_H | |
29 | #define AVCODEC_H264PRED_H | |
30 | ||
31 | #include <stddef.h> | |
32 | #include <stdint.h> | |
33 | ||
34 | /** | |
35 | * Prediction types | |
36 | */ | |
37 | //@{ | |
38 | #define VERT_PRED 0 | |
39 | #define HOR_PRED 1 | |
40 | #define DC_PRED 2 | |
41 | #define DIAG_DOWN_LEFT_PRED 3 | |
42 | #define DIAG_DOWN_RIGHT_PRED 4 | |
43 | #define VERT_RIGHT_PRED 5 | |
44 | #define HOR_DOWN_PRED 6 | |
45 | #define VERT_LEFT_PRED 7 | |
46 | #define HOR_UP_PRED 8 | |
47 | ||
48 | // DC edge (not for VP8) | |
49 | #define LEFT_DC_PRED 9 | |
50 | #define TOP_DC_PRED 10 | |
51 | #define DC_128_PRED 11 | |
52 | ||
53 | // RV40 specific | |
54 | #define DIAG_DOWN_LEFT_PRED_RV40_NODOWN 12 | |
55 | #define HOR_UP_PRED_RV40_NODOWN 13 | |
56 | #define VERT_LEFT_PRED_RV40_NODOWN 14 | |
57 | ||
58 | // VP8 specific | |
59 | #define TM_VP8_PRED 9 ///< "True Motion", used instead of plane | |
60 | #define VERT_VP8_PRED 10 ///< for VP8, #VERT_PRED is the average of | |
61 | ///< (left col+cur col x2+right col) / 4; | |
62 | ///< this is the "unaveraged" one | |
63 | #define HOR_VP8_PRED 14 ///< unaveraged version of #HOR_PRED, see | |
64 | ///< #VERT_VP8_PRED for details | |
65 | #define DC_127_PRED 12 | |
66 | #define DC_129_PRED 13 | |
67 | ||
68 | #define DC_PRED8x8 0 | |
69 | #define HOR_PRED8x8 1 | |
70 | #define VERT_PRED8x8 2 | |
71 | #define PLANE_PRED8x8 3 | |
72 | ||
73 | // DC edge | |
74 | #define LEFT_DC_PRED8x8 4 | |
75 | #define TOP_DC_PRED8x8 5 | |
76 | #define DC_128_PRED8x8 6 | |
77 | ||
78 | // H264/SVQ3 (8x8) specific | |
79 | #define ALZHEIMER_DC_L0T_PRED8x8 7 | |
80 | #define ALZHEIMER_DC_0LT_PRED8x8 8 | |
81 | #define ALZHEIMER_DC_L00_PRED8x8 9 | |
82 | #define ALZHEIMER_DC_0L0_PRED8x8 10 | |
83 | ||
84 | // VP8 specific | |
85 | #define DC_127_PRED8x8 7 | |
86 | #define DC_129_PRED8x8 8 | |
87 | //@} | |
88 | ||
89 | /** | |
90 | * Context for storing H.264 prediction functions | |
91 | */ | |
92 | typedef struct H264PredContext { | |
93 | void(*pred4x4[9 + 3 + 3])(uint8_t *src, const uint8_t *topright, | |
94 | ptrdiff_t stride); | |
95 | void(*pred8x8l[9 + 3])(uint8_t *src, int topleft, int topright, | |
96 | ptrdiff_t stride); | |
97 | void(*pred8x8[4 + 3 + 4])(uint8_t *src, ptrdiff_t stride); | |
98 | void(*pred16x16[4 + 3 + 2])(uint8_t *src, ptrdiff_t stride); | |
99 | ||
100 | void(*pred4x4_add[2])(uint8_t *pix /*align 4*/, | |
101 | int16_t *block /*align 16*/, ptrdiff_t stride); | |
102 | void(*pred8x8l_add[2])(uint8_t *pix /*align 8*/, | |
103 | int16_t *block /*align 16*/, ptrdiff_t stride); | |
104 | void(*pred8x8l_filter_add[2])(uint8_t *pix /*align 8*/, | |
105 | int16_t *block /*align 16*/, int topleft, int topright, ptrdiff_t stride); | |
106 | void(*pred8x8_add[3])(uint8_t *pix /*align 8*/, | |
107 | const int *block_offset, | |
108 | int16_t *block /*align 16*/, ptrdiff_t stride); | |
109 | void(*pred16x16_add[3])(uint8_t *pix /*align 16*/, | |
110 | const int *block_offset, | |
111 | int16_t *block /*align 16*/, ptrdiff_t stride); | |
112 | } H264PredContext; | |
113 | ||
114 | void ff_h264_pred_init(H264PredContext *h, int codec_id, | |
115 | const int bit_depth, const int chroma_format_idc); | |
116 | void ff_h264_pred_init_arm(H264PredContext *h, int codec_id, | |
117 | const int bit_depth, const int chroma_format_idc); | |
118 | void ff_h264_pred_init_x86(H264PredContext *h, int codec_id, | |
119 | const int bit_depth, const int chroma_format_idc); | |
120 | ||
121 | #endif /* AVCODEC_H264PRED_H */ |