1 /*
2 * FFV1 codec for libavcodec
3 *
4 * Copyright (c) 2003-2012 Michael Niedermayer <michaelni@gmx.at>
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23 #ifndef AVCODEC_FFV1_H
24 #define AVCODEC_FFV1_H
25
26 /**
27 * @file
28 * FF Video Codec 1 (a lossless codec)
29 */
30
44
45 #ifdef __INTEL_COMPILER
46 #undef av_flatten
47 #define av_flatten
48 #endif
49
51 #define CONTEXT_SIZE 32
52
53 #define MAX_QUANT_TABLES 8
54 #define MAX_CONTEXT_INPUTS 5
55
62
71
72 #define MAX_SLICES 256
73
92
95 int ac;
///< 1=range coder <-> 0=golomb rice
106
111
114
117
131
139
141 {
142 if (bits == 8)
143 diff = (int8_t)diff;
144 else {
145 diff += 1 << (bits - 1);
146 diff &= (1 <<
bits) - 1;
147 diff -= 1 << (bits - 1);
148 }
149
150 return diff;
151 }
152
154 {
155 const int LT = last[-1];
156 const int T = last[0];
157 const int L = src[-1];
158
160 }
161
163 int16_t *last, int16_t *last2)
164 {
165 const int LT = last[-1];
166 const int T = last[0];
167 const int RT = last[1];
168 const int L = src[-1];
169
171 const int TT = last2[0];
172 const int LL = src[-2];
178 } else
182 }
183
185 {
186 int drift = state->
drift;
190
191 if (count == 128) { // FIXME: variable
192 count >>= 1;
193 drift >>= 1;
195 }
196 count++;
197
198 if (drift <= -count) {
199 if (state->
bias > -128)
201
203 if (drift <= -count)
204 drift = -count + 1;
205 } else if (drift > 0) {
206 if (state->
bias < 127)
208
210 if (drift > 0)
211 drift = 0;
212 }
213
214 state->
drift = drift;
216 }
217
218 #endif /* AVCODEC_FFV1_H */