h264: move [uv]linesize to the per-slice context
[ffmpeg.git] / libavcodec / h264_slice.c
1 /*
2  * H.26L/H.264/AVC/JVT/14496-10/... decoder
3  * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4  *
5  * This file is part of Libav.
6  *
7  * Libav 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  * Libav 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 Libav; 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 part10 codec.
25  * @author Michael Niedermayer <michaelni@gmx.at>
26  */
27
28 #include "libavutil/avassert.h"
29 #include "libavutil/imgutils.h"
30 #include "libavutil/timer.h"
31 #include "internal.h"
32 #include "cabac.h"
33 #include "cabac_functions.h"
34 #include "error_resilience.h"
35 #include "avcodec.h"
36 #include "h264.h"
37 #include "h264data.h"
38 #include "h264chroma.h"
39 #include "h264_mvpred.h"
40 #include "golomb.h"
41 #include "mathops.h"
42 #include "mpegutils.h"
43 #include "rectangle.h"
44 #include "thread.h"
45
46
47 static const uint8_t rem6[QP_MAX_NUM + 1] = {
48     0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,
49     3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
50     0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
51 };
52
53 static const uint8_t div6[QP_MAX_NUM + 1] = {
54     0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3,  3,  3,
55     3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6,  6,  6,
56     7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
57 };
58
59 static const uint8_t field_scan[16] = {
60     0 + 0 * 4, 0 + 1 * 4, 1 + 0 * 4, 0 + 2 * 4,
61     0 + 3 * 4, 1 + 1 * 4, 1 + 2 * 4, 1 + 3 * 4,
62     2 + 0 * 4, 2 + 1 * 4, 2 + 2 * 4, 2 + 3 * 4,
63     3 + 0 * 4, 3 + 1 * 4, 3 + 2 * 4, 3 + 3 * 4,
64 };
65
66 static const uint8_t field_scan8x8[64] = {
67     0 + 0 * 8, 0 + 1 * 8, 0 + 2 * 8, 1 + 0 * 8,
68     1 + 1 * 8, 0 + 3 * 8, 0 + 4 * 8, 1 + 2 * 8,
69     2 + 0 * 8, 1 + 3 * 8, 0 + 5 * 8, 0 + 6 * 8,
70     0 + 7 * 8, 1 + 4 * 8, 2 + 1 * 8, 3 + 0 * 8,
71     2 + 2 * 8, 1 + 5 * 8, 1 + 6 * 8, 1 + 7 * 8,
72     2 + 3 * 8, 3 + 1 * 8, 4 + 0 * 8, 3 + 2 * 8,
73     2 + 4 * 8, 2 + 5 * 8, 2 + 6 * 8, 2 + 7 * 8,
74     3 + 3 * 8, 4 + 1 * 8, 5 + 0 * 8, 4 + 2 * 8,
75     3 + 4 * 8, 3 + 5 * 8, 3 + 6 * 8, 3 + 7 * 8,
76     4 + 3 * 8, 5 + 1 * 8, 6 + 0 * 8, 5 + 2 * 8,
77     4 + 4 * 8, 4 + 5 * 8, 4 + 6 * 8, 4 + 7 * 8,
78     5 + 3 * 8, 6 + 1 * 8, 6 + 2 * 8, 5 + 4 * 8,
79     5 + 5 * 8, 5 + 6 * 8, 5 + 7 * 8, 6 + 3 * 8,
80     7 + 0 * 8, 7 + 1 * 8, 6 + 4 * 8, 6 + 5 * 8,
81     6 + 6 * 8, 6 + 7 * 8, 7 + 2 * 8, 7 + 3 * 8,
82     7 + 4 * 8, 7 + 5 * 8, 7 + 6 * 8, 7 + 7 * 8,
83 };
84
85 static const uint8_t field_scan8x8_cavlc[64] = {
86     0 + 0 * 8, 1 + 1 * 8, 2 + 0 * 8, 0 + 7 * 8,
87     2 + 2 * 8, 2 + 3 * 8, 2 + 4 * 8, 3 + 3 * 8,
88     3 + 4 * 8, 4 + 3 * 8, 4 + 4 * 8, 5 + 3 * 8,
89     5 + 5 * 8, 7 + 0 * 8, 6 + 6 * 8, 7 + 4 * 8,
90     0 + 1 * 8, 0 + 3 * 8, 1 + 3 * 8, 1 + 4 * 8,
91     1 + 5 * 8, 3 + 1 * 8, 2 + 5 * 8, 4 + 1 * 8,
92     3 + 5 * 8, 5 + 1 * 8, 4 + 5 * 8, 6 + 1 * 8,
93     5 + 6 * 8, 7 + 1 * 8, 6 + 7 * 8, 7 + 5 * 8,
94     0 + 2 * 8, 0 + 4 * 8, 0 + 5 * 8, 2 + 1 * 8,
95     1 + 6 * 8, 4 + 0 * 8, 2 + 6 * 8, 5 + 0 * 8,
96     3 + 6 * 8, 6 + 0 * 8, 4 + 6 * 8, 6 + 2 * 8,
97     5 + 7 * 8, 6 + 4 * 8, 7 + 2 * 8, 7 + 6 * 8,
98     1 + 0 * 8, 1 + 2 * 8, 0 + 6 * 8, 3 + 0 * 8,
99     1 + 7 * 8, 3 + 2 * 8, 2 + 7 * 8, 4 + 2 * 8,
100     3 + 7 * 8, 5 + 2 * 8, 4 + 7 * 8, 5 + 4 * 8,
101     6 + 3 * 8, 6 + 5 * 8, 7 + 3 * 8, 7 + 7 * 8,
102 };
103
104 // zigzag_scan8x8_cavlc[i] = zigzag_scan8x8[(i/4) + 16*(i%4)]
105 static const uint8_t zigzag_scan8x8_cavlc[64] = {
106     0 + 0 * 8, 1 + 1 * 8, 1 + 2 * 8, 2 + 2 * 8,
107     4 + 1 * 8, 0 + 5 * 8, 3 + 3 * 8, 7 + 0 * 8,
108     3 + 4 * 8, 1 + 7 * 8, 5 + 3 * 8, 6 + 3 * 8,
109     2 + 7 * 8, 6 + 4 * 8, 5 + 6 * 8, 7 + 5 * 8,
110     1 + 0 * 8, 2 + 0 * 8, 0 + 3 * 8, 3 + 1 * 8,
111     3 + 2 * 8, 0 + 6 * 8, 4 + 2 * 8, 6 + 1 * 8,
112     2 + 5 * 8, 2 + 6 * 8, 6 + 2 * 8, 5 + 4 * 8,
113     3 + 7 * 8, 7 + 3 * 8, 4 + 7 * 8, 7 + 6 * 8,
114     0 + 1 * 8, 3 + 0 * 8, 0 + 4 * 8, 4 + 0 * 8,
115     2 + 3 * 8, 1 + 5 * 8, 5 + 1 * 8, 5 + 2 * 8,
116     1 + 6 * 8, 3 + 5 * 8, 7 + 1 * 8, 4 + 5 * 8,
117     4 + 6 * 8, 7 + 4 * 8, 5 + 7 * 8, 6 + 7 * 8,
118     0 + 2 * 8, 2 + 1 * 8, 1 + 3 * 8, 5 + 0 * 8,
119     1 + 4 * 8, 2 + 4 * 8, 6 + 0 * 8, 4 + 3 * 8,
120     0 + 7 * 8, 4 + 4 * 8, 7 + 2 * 8, 3 + 6 * 8,
121     5 + 5 * 8, 6 + 5 * 8, 6 + 6 * 8, 7 + 7 * 8,
122 };
123
124 static const uint8_t dequant4_coeff_init[6][3] = {
125     { 10, 13, 16 },
126     { 11, 14, 18 },
127     { 13, 16, 20 },
128     { 14, 18, 23 },
129     { 16, 20, 25 },
130     { 18, 23, 29 },
131 };
132
133 static const uint8_t dequant8_coeff_init_scan[16] = {
134     0, 3, 4, 3, 3, 1, 5, 1, 4, 5, 2, 5, 3, 1, 5, 1
135 };
136
137 static const uint8_t dequant8_coeff_init[6][6] = {
138     { 20, 18, 32, 19, 25, 24 },
139     { 22, 19, 35, 21, 28, 26 },
140     { 26, 23, 42, 24, 33, 31 },
141     { 28, 25, 45, 26, 35, 33 },
142     { 32, 28, 51, 30, 40, 38 },
143     { 36, 32, 58, 34, 46, 43 },
144 };
145
146
147 static void release_unused_pictures(H264Context *h, int remove_current)
148 {
149     int i;
150
151     /* release non reference frames */
152     for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
153         if (h->DPB[i].f.buf[0] && !h->DPB[i].reference &&
154             (remove_current || &h->DPB[i] != h->cur_pic_ptr)) {
155             ff_h264_unref_picture(h, &h->DPB[i]);
156         }
157     }
158 }
159
160 static int alloc_scratch_buffers(H264SliceContext *sl, int linesize)
161 {
162     const H264Context *h = sl->h264;
163     int alloc_size = FFALIGN(FFABS(linesize) + 32, 32);
164
165     av_fast_malloc(&sl->bipred_scratchpad, &sl->bipred_scratchpad_allocated, 16 * 6 * alloc_size);
166     // edge emu needs blocksize + filter length - 1
167     // (= 21x21 for  h264)
168     av_fast_malloc(&sl->edge_emu_buffer, &sl->edge_emu_buffer_allocated, alloc_size * 2 * 21);
169
170     av_fast_malloc(&sl->top_borders[0], &sl->top_borders_allocated[0],
171                    h->mb_width * 16 * 3 * sizeof(uint8_t) * 2);
172     av_fast_malloc(&sl->top_borders[1], &sl->top_borders_allocated[1],
173                    h->mb_width * 16 * 3 * sizeof(uint8_t) * 2);
174
175     if (!sl->bipred_scratchpad || !sl->edge_emu_buffer ||
176         !sl->top_borders[0]    || !sl->top_borders[1]) {
177         av_freep(&sl->bipred_scratchpad);
178         av_freep(&sl->edge_emu_buffer);
179         av_freep(&sl->top_borders[0]);
180         av_freep(&sl->top_borders[1]);
181
182         sl->bipred_scratchpad_allocated = 0;
183         sl->edge_emu_buffer_allocated   = 0;
184         sl->top_borders_allocated[0]    = 0;
185         sl->top_borders_allocated[1]    = 0;
186         return AVERROR(ENOMEM);
187     }
188
189     return 0;
190 }
191
192 static int init_table_pools(H264Context *h)
193 {
194     const int big_mb_num    = h->mb_stride * (h->mb_height + 1) + 1;
195     const int mb_array_size = h->mb_stride * h->mb_height;
196     const int b4_stride     = h->mb_width * 4 + 1;
197     const int b4_array_size = b4_stride * h->mb_height * 4;
198
199     h->qscale_table_pool = av_buffer_pool_init(big_mb_num + h->mb_stride,
200                                                av_buffer_allocz);
201     h->mb_type_pool      = av_buffer_pool_init((big_mb_num + h->mb_stride) *
202                                                sizeof(uint32_t), av_buffer_allocz);
203     h->motion_val_pool   = av_buffer_pool_init(2 * (b4_array_size + 4) *
204                                                sizeof(int16_t), av_buffer_allocz);
205     h->ref_index_pool    = av_buffer_pool_init(4 * mb_array_size, av_buffer_allocz);
206
207     if (!h->qscale_table_pool || !h->mb_type_pool || !h->motion_val_pool ||
208         !h->ref_index_pool) {
209         av_buffer_pool_uninit(&h->qscale_table_pool);
210         av_buffer_pool_uninit(&h->mb_type_pool);
211         av_buffer_pool_uninit(&h->motion_val_pool);
212         av_buffer_pool_uninit(&h->ref_index_pool);
213         return AVERROR(ENOMEM);
214     }
215
216     return 0;
217 }
218
219 static int alloc_picture(H264Context *h, H264Picture *pic)
220 {
221     int i, ret = 0;
222
223     av_assert0(!pic->f.data[0]);
224
225     pic->tf.f = &pic->f;
226     ret = ff_thread_get_buffer(h->avctx, &pic->tf, pic->reference ?
227                                                    AV_GET_BUFFER_FLAG_REF : 0);
228     if (ret < 0)
229         goto fail;
230
231     if (h->avctx->hwaccel) {
232         const AVHWAccel *hwaccel = h->avctx->hwaccel;
233         av_assert0(!pic->hwaccel_picture_private);
234         if (hwaccel->frame_priv_data_size) {
235             pic->hwaccel_priv_buf = av_buffer_allocz(hwaccel->frame_priv_data_size);
236             if (!pic->hwaccel_priv_buf)
237                 return AVERROR(ENOMEM);
238             pic->hwaccel_picture_private = pic->hwaccel_priv_buf->data;
239         }
240     }
241
242     if (!h->qscale_table_pool) {
243         ret = init_table_pools(h);
244         if (ret < 0)
245             goto fail;
246     }
247
248     pic->qscale_table_buf = av_buffer_pool_get(h->qscale_table_pool);
249     pic->mb_type_buf      = av_buffer_pool_get(h->mb_type_pool);
250     if (!pic->qscale_table_buf || !pic->mb_type_buf)
251         goto fail;
252
253     pic->mb_type      = (uint32_t*)pic->mb_type_buf->data + 2 * h->mb_stride + 1;
254     pic->qscale_table = pic->qscale_table_buf->data + 2 * h->mb_stride + 1;
255
256     for (i = 0; i < 2; i++) {
257         pic->motion_val_buf[i] = av_buffer_pool_get(h->motion_val_pool);
258         pic->ref_index_buf[i]  = av_buffer_pool_get(h->ref_index_pool);
259         if (!pic->motion_val_buf[i] || !pic->ref_index_buf[i])
260             goto fail;
261
262         pic->motion_val[i] = (int16_t (*)[2])pic->motion_val_buf[i]->data + 4;
263         pic->ref_index[i]  = pic->ref_index_buf[i]->data;
264     }
265
266     return 0;
267 fail:
268     ff_h264_unref_picture(h, pic);
269     return (ret < 0) ? ret : AVERROR(ENOMEM);
270 }
271
272 static inline int pic_is_unused(H264Context *h, H264Picture *pic)
273 {
274     if (!pic->f.buf[0])
275         return 1;
276     if (pic->needs_realloc && !(pic->reference & DELAYED_PIC_REF))
277         return 1;
278     return 0;
279 }
280
281 static int find_unused_picture(H264Context *h)
282 {
283     int i;
284
285     for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
286         if (pic_is_unused(h, &h->DPB[i]))
287             break;
288     }
289     if (i == H264_MAX_PICTURE_COUNT)
290         return AVERROR_INVALIDDATA;
291
292     if (h->DPB[i].needs_realloc) {
293         h->DPB[i].needs_realloc = 0;
294         ff_h264_unref_picture(h, &h->DPB[i]);
295     }
296
297     return i;
298 }
299
300
301 static void init_dequant8_coeff_table(H264Context *h)
302 {
303     int i, j, q, x;
304     const int max_qp = 51 + 6 * (h->sps.bit_depth_luma - 8);
305
306     for (i = 0; i < 6; i++) {
307         h->dequant8_coeff[i] = h->dequant8_buffer[i];
308         for (j = 0; j < i; j++)
309             if (!memcmp(h->pps.scaling_matrix8[j], h->pps.scaling_matrix8[i],
310                         64 * sizeof(uint8_t))) {
311                 h->dequant8_coeff[i] = h->dequant8_buffer[j];
312                 break;
313             }
314         if (j < i)
315             continue;
316
317         for (q = 0; q < max_qp + 1; q++) {
318             int shift = div6[q];
319             int idx   = rem6[q];
320             for (x = 0; x < 64; x++)
321                 h->dequant8_coeff[i][q][(x >> 3) | ((x & 7) << 3)] =
322                     ((uint32_t)dequant8_coeff_init[idx][dequant8_coeff_init_scan[((x >> 1) & 12) | (x & 3)]] *
323                      h->pps.scaling_matrix8[i][x]) << shift;
324         }
325     }
326 }
327
328 static void init_dequant4_coeff_table(H264Context *h)
329 {
330     int i, j, q, x;
331     const int max_qp = 51 + 6 * (h->sps.bit_depth_luma - 8);
332     for (i = 0; i < 6; i++) {
333         h->dequant4_coeff[i] = h->dequant4_buffer[i];
334         for (j = 0; j < i; j++)
335             if (!memcmp(h->pps.scaling_matrix4[j], h->pps.scaling_matrix4[i],
336                         16 * sizeof(uint8_t))) {
337                 h->dequant4_coeff[i] = h->dequant4_buffer[j];
338                 break;
339             }
340         if (j < i)
341             continue;
342
343         for (q = 0; q < max_qp + 1; q++) {
344             int shift = div6[q] + 2;
345             int idx   = rem6[q];
346             for (x = 0; x < 16; x++)
347                 h->dequant4_coeff[i][q][(x >> 2) | ((x << 2) & 0xF)] =
348                     ((uint32_t)dequant4_coeff_init[idx][(x & 1) + ((x >> 2) & 1)] *
349                      h->pps.scaling_matrix4[i][x]) << shift;
350         }
351     }
352 }
353
354 void h264_init_dequant_tables(H264Context *h)
355 {
356     int i, x;
357     init_dequant4_coeff_table(h);
358     if (h->pps.transform_8x8_mode)
359         init_dequant8_coeff_table(h);
360     if (h->sps.transform_bypass) {
361         for (i = 0; i < 6; i++)
362             for (x = 0; x < 16; x++)
363                 h->dequant4_coeff[i][0][x] = 1 << 6;
364         if (h->pps.transform_8x8_mode)
365             for (i = 0; i < 6; i++)
366                 for (x = 0; x < 64; x++)
367                     h->dequant8_coeff[i][0][x] = 1 << 6;
368     }
369 }
370
371 #define IN_RANGE(a, b, size) (((a) >= (b)) && ((a) < ((b) + (size))))
372
373 #define REBASE_PICTURE(pic, new_ctx, old_ctx)             \
374     ((pic && pic >= old_ctx->DPB &&                       \
375       pic < old_ctx->DPB + H264_MAX_PICTURE_COUNT) ?          \
376      &new_ctx->DPB[pic - old_ctx->DPB] : NULL)
377
378 static void copy_picture_range(H264Picture **to, H264Picture **from, int count,
379                                H264Context *new_base,
380                                H264Context *old_base)
381 {
382     int i;
383
384     for (i = 0; i < count; i++) {
385         assert((IN_RANGE(from[i], old_base, sizeof(*old_base)) ||
386                 IN_RANGE(from[i], old_base->DPB,
387                          sizeof(H264Picture) * H264_MAX_PICTURE_COUNT) ||
388                 !from[i]));
389         to[i] = REBASE_PICTURE(from[i], new_base, old_base);
390     }
391 }
392
393 static int copy_parameter_set(void **to, void **from, int count, int size)
394 {
395     int i;
396
397     for (i = 0; i < count; i++) {
398         if (to[i] && !from[i]) {
399             av_freep(&to[i]);
400         } else if (from[i] && !to[i]) {
401             to[i] = av_malloc(size);
402             if (!to[i])
403                 return AVERROR(ENOMEM);
404         }
405
406         if (from[i])
407             memcpy(to[i], from[i], size);
408     }
409
410     return 0;
411 }
412
413 #define copy_fields(to, from, start_field, end_field)                   \
414     memcpy(&to->start_field, &from->start_field,                        \
415            (char *)&to->end_field - (char *)&to->start_field)
416
417 static int h264_slice_header_init(H264Context *h, int reinit);
418
419 int ff_h264_update_thread_context(AVCodecContext *dst,
420                                   const AVCodecContext *src)
421 {
422     H264Context *h = dst->priv_data, *h1 = src->priv_data;
423     int inited = h->context_initialized, err = 0;
424     int context_reinitialized = 0;
425     int i, ret;
426
427     if (dst == src || !h1->context_initialized)
428         return 0;
429
430     if (inited &&
431         (h->width                 != h1->width                 ||
432          h->height                != h1->height                ||
433          h->mb_width              != h1->mb_width              ||
434          h->mb_height             != h1->mb_height             ||
435          h->sps.bit_depth_luma    != h1->sps.bit_depth_luma    ||
436          h->sps.chroma_format_idc != h1->sps.chroma_format_idc ||
437          h->sps.colorspace        != h1->sps.colorspace)) {
438
439         /* set bits_per_raw_sample to the previous value. the check for changed
440          * bit depth in h264_set_parameter_from_sps() uses it and sets it to
441          * the current value */
442         h->avctx->bits_per_raw_sample = h->sps.bit_depth_luma;
443
444         h->width     = h1->width;
445         h->height    = h1->height;
446         h->mb_height = h1->mb_height;
447         h->mb_width  = h1->mb_width;
448         h->mb_num    = h1->mb_num;
449         h->mb_stride = h1->mb_stride;
450         h->b_stride  = h1->b_stride;
451
452         if ((err = h264_slice_header_init(h, 1)) < 0) {
453             av_log(h->avctx, AV_LOG_ERROR, "h264_slice_header_init() failed");
454             return err;
455         }
456         context_reinitialized = 1;
457
458         /* copy block_offset since frame_start may not be called */
459         memcpy(h->block_offset, h1->block_offset, sizeof(h->block_offset));
460     }
461
462     if (!inited) {
463         H264SliceContext *orig_slice_ctx = h->slice_ctx;
464
465         for (i = 0; i < MAX_SPS_COUNT; i++)
466             av_freep(h->sps_buffers + i);
467
468         for (i = 0; i < MAX_PPS_COUNT; i++)
469             av_freep(h->pps_buffers + i);
470
471         memcpy(h, h1, sizeof(*h1));
472         memset(h->sps_buffers, 0, sizeof(h->sps_buffers));
473         memset(h->pps_buffers, 0, sizeof(h->pps_buffers));
474         h->context_initialized = 0;
475
476         memset(&h->cur_pic, 0, sizeof(h->cur_pic));
477         av_frame_unref(&h->cur_pic.f);
478         h->cur_pic.tf.f = &h->cur_pic.f;
479
480         h->slice_ctx = orig_slice_ctx;
481
482         memset(&h->slice_ctx[0].er,         0, sizeof(h->slice_ctx[0].er));
483         memset(&h->slice_ctx[0].mb,         0, sizeof(h->slice_ctx[0].mb));
484         memset(&h->slice_ctx[0].mb_luma_dc, 0, sizeof(h->slice_ctx[0].mb_luma_dc));
485         memset(&h->slice_ctx[0].mb_padding, 0, sizeof(h->slice_ctx[0].mb_padding));
486
487         h->avctx             = dst;
488         h->DPB               = NULL;
489         h->qscale_table_pool = NULL;
490         h->mb_type_pool      = NULL;
491         h->ref_index_pool    = NULL;
492         h->motion_val_pool   = NULL;
493
494         ret = ff_h264_alloc_tables(h);
495         if (ret < 0) {
496             av_log(dst, AV_LOG_ERROR, "Could not allocate memory\n");
497             return ret;
498         }
499         ret = ff_h264_slice_context_init(h, &h->slice_ctx[0]);
500         if (ret < 0) {
501             av_log(dst, AV_LOG_ERROR, "context_init() failed.\n");
502             return ret;
503         }
504
505         h->context_initialized = 1;
506     }
507
508     h->avctx->coded_height  = h1->avctx->coded_height;
509     h->avctx->coded_width   = h1->avctx->coded_width;
510     h->avctx->width         = h1->avctx->width;
511     h->avctx->height        = h1->avctx->height;
512     h->coded_picture_number = h1->coded_picture_number;
513     h->first_field          = h1->first_field;
514     h->picture_structure    = h1->picture_structure;
515     h->droppable            = h1->droppable;
516     h->low_delay            = h1->low_delay;
517
518     for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
519         ff_h264_unref_picture(h, &h->DPB[i]);
520         if (h1->DPB[i].f.buf[0] &&
521             (ret = ff_h264_ref_picture(h, &h->DPB[i], &h1->DPB[i])) < 0)
522             return ret;
523     }
524
525     h->cur_pic_ptr = REBASE_PICTURE(h1->cur_pic_ptr, h, h1);
526     ff_h264_unref_picture(h, &h->cur_pic);
527     if (h1->cur_pic.f.buf[0]) {
528         ret = ff_h264_ref_picture(h, &h->cur_pic, &h1->cur_pic);
529         if (ret < 0)
530             return ret;
531     }
532
533     h->workaround_bugs = h1->workaround_bugs;
534     h->low_delay       = h1->low_delay;
535     h->droppable       = h1->droppable;
536
537     // extradata/NAL handling
538     h->is_avc = h1->is_avc;
539
540     // SPS/PPS
541     if ((ret = copy_parameter_set((void **)h->sps_buffers,
542                                   (void **)h1->sps_buffers,
543                                   MAX_SPS_COUNT, sizeof(SPS))) < 0)
544         return ret;
545     h->sps = h1->sps;
546     if ((ret = copy_parameter_set((void **)h->pps_buffers,
547                                   (void **)h1->pps_buffers,
548                                   MAX_PPS_COUNT, sizeof(PPS))) < 0)
549         return ret;
550     h->pps = h1->pps;
551
552     // Dequantization matrices
553     // FIXME these are big - can they be only copied when PPS changes?
554     copy_fields(h, h1, dequant4_buffer, dequant4_coeff);
555
556     for (i = 0; i < 6; i++)
557         h->dequant4_coeff[i] = h->dequant4_buffer[0] +
558                                (h1->dequant4_coeff[i] - h1->dequant4_buffer[0]);
559
560     for (i = 0; i < 6; i++)
561         h->dequant8_coeff[i] = h->dequant8_buffer[0] +
562                                (h1->dequant8_coeff[i] - h1->dequant8_buffer[0]);
563
564     h->dequant_coeff_pps = h1->dequant_coeff_pps;
565
566     // POC timing
567     copy_fields(h, h1, poc_lsb, default_ref_list);
568
569     // reference lists
570     copy_fields(h, h1, short_ref, current_slice);
571
572     copy_picture_range(h->short_ref, h1->short_ref, 32, h, h1);
573     copy_picture_range(h->long_ref, h1->long_ref, 32, h, h1);
574     copy_picture_range(h->delayed_pic, h1->delayed_pic,
575                        MAX_DELAYED_PIC_COUNT + 2, h, h1);
576
577     h->last_slice_type = h1->last_slice_type;
578
579     if (context_reinitialized)
580         ff_h264_set_parameter_from_sps(h);
581
582     if (!h->cur_pic_ptr)
583         return 0;
584
585     if (!h->droppable) {
586         err = ff_h264_execute_ref_pic_marking(h, h->mmco, h->mmco_index);
587         h->prev_poc_msb = h->poc_msb;
588         h->prev_poc_lsb = h->poc_lsb;
589     }
590     h->prev_frame_num_offset = h->frame_num_offset;
591     h->prev_frame_num        = h->frame_num;
592     h->outputed_poc          = h->next_outputed_poc;
593
594     h->recovery_frame        = h1->recovery_frame;
595     h->frame_recovered       = h1->frame_recovered;
596
597     return err;
598 }
599
600 static int h264_frame_start(H264Context *h)
601 {
602     H264Picture *pic;
603     int i, ret;
604     const int pixel_shift = h->pixel_shift;
605
606     release_unused_pictures(h, 1);
607     h->cur_pic_ptr = NULL;
608
609     i = find_unused_picture(h);
610     if (i < 0) {
611         av_log(h->avctx, AV_LOG_ERROR, "no frame buffer available\n");
612         return i;
613     }
614     pic = &h->DPB[i];
615
616     pic->reference              = h->droppable ? 0 : h->picture_structure;
617     pic->f.coded_picture_number = h->coded_picture_number++;
618     pic->field_picture          = h->picture_structure != PICT_FRAME;
619     /*
620      * Zero key_frame here; IDR markings per slice in frame or fields are ORed
621      * in later.
622      * See decode_nal_units().
623      */
624     pic->f.key_frame = 0;
625     pic->mmco_reset  = 0;
626     pic->recovered   = 0;
627
628     if ((ret = alloc_picture(h, pic)) < 0)
629         return ret;
630
631     h->cur_pic_ptr = pic;
632     ff_h264_unref_picture(h, &h->cur_pic);
633     if ((ret = ff_h264_ref_picture(h, &h->cur_pic, h->cur_pic_ptr)) < 0)
634         return ret;
635
636     if (CONFIG_ERROR_RESILIENCE)
637         ff_er_frame_start(&h->slice_ctx[0].er);
638
639     for (i = 0; i < 16; i++) {
640         h->block_offset[i]           = (4 * ((scan8[i] - scan8[0]) & 7) << pixel_shift) + 4 * pic->f.linesize[0] * ((scan8[i] - scan8[0]) >> 3);
641         h->block_offset[48 + i]      = (4 * ((scan8[i] - scan8[0]) & 7) << pixel_shift) + 8 * pic->f.linesize[0] * ((scan8[i] - scan8[0]) >> 3);
642     }
643     for (i = 0; i < 16; i++) {
644         h->block_offset[16 + i]      =
645         h->block_offset[32 + i]      = (4 * ((scan8[i] - scan8[0]) & 7) << pixel_shift) + 4 * pic->f.linesize[1] * ((scan8[i] - scan8[0]) >> 3);
646         h->block_offset[48 + 16 + i] =
647         h->block_offset[48 + 32 + i] = (4 * ((scan8[i] - scan8[0]) & 7) << pixel_shift) + 8 * pic->f.linesize[1] * ((scan8[i] - scan8[0]) >> 3);
648     }
649
650     /* Some macroblocks can be accessed before they're available in case
651      * of lost slices, MBAFF or threading. */
652     memset(h->slice_table, -1,
653            (h->mb_height * h->mb_stride - 1) * sizeof(*h->slice_table));
654
655     /* We mark the current picture as non-reference after allocating it, so
656      * that if we break out due to an error it can be released automatically
657      * in the next ff_mpv_frame_start().
658      */
659     h->cur_pic_ptr->reference = 0;
660
661     h->cur_pic_ptr->field_poc[0] = h->cur_pic_ptr->field_poc[1] = INT_MAX;
662
663     h->next_output_pic = NULL;
664
665     assert(h->cur_pic_ptr->long_ref == 0);
666
667     return 0;
668 }
669
670 static av_always_inline void backup_mb_border(const H264Context *h, H264SliceContext *sl,
671                                               uint8_t *src_y,
672                                               uint8_t *src_cb, uint8_t *src_cr,
673                                               int linesize, int uvlinesize,
674                                               int simple)
675 {
676     uint8_t *top_border;
677     int top_idx = 1;
678     const int pixel_shift = h->pixel_shift;
679     int chroma444 = CHROMA444(h);
680     int chroma422 = CHROMA422(h);
681
682     src_y  -= linesize;
683     src_cb -= uvlinesize;
684     src_cr -= uvlinesize;
685
686     if (!simple && FRAME_MBAFF(h)) {
687         if (sl->mb_y & 1) {
688             if (!MB_MBAFF(sl)) {
689                 top_border = sl->top_borders[0][sl->mb_x];
690                 AV_COPY128(top_border, src_y + 15 * linesize);
691                 if (pixel_shift)
692                     AV_COPY128(top_border + 16, src_y + 15 * linesize + 16);
693                 if (simple || !CONFIG_GRAY || !(h->flags & CODEC_FLAG_GRAY)) {
694                     if (chroma444) {
695                         if (pixel_shift) {
696                             AV_COPY128(top_border + 32, src_cb + 15 * uvlinesize);
697                             AV_COPY128(top_border + 48, src_cb + 15 * uvlinesize + 16);
698                             AV_COPY128(top_border + 64, src_cr + 15 * uvlinesize);
699                             AV_COPY128(top_border + 80, src_cr + 15 * uvlinesize + 16);
700                         } else {
701                             AV_COPY128(top_border + 16, src_cb + 15 * uvlinesize);
702                             AV_COPY128(top_border + 32, src_cr + 15 * uvlinesize);
703                         }
704                     } else if (chroma422) {
705                         if (pixel_shift) {
706                             AV_COPY128(top_border + 32, src_cb + 15 * uvlinesize);
707                             AV_COPY128(top_border + 48, src_cr + 15 * uvlinesize);
708                         } else {
709                             AV_COPY64(top_border + 16, src_cb + 15 * uvlinesize);
710                             AV_COPY64(top_border + 24, src_cr + 15 * uvlinesize);
711                         }
712                     } else {
713                         if (pixel_shift) {
714                             AV_COPY128(top_border + 32, src_cb + 7 * uvlinesize);
715                             AV_COPY128(top_border + 48, src_cr + 7 * uvlinesize);
716                         } else {
717                             AV_COPY64(top_border + 16, src_cb + 7 * uvlinesize);
718                             AV_COPY64(top_border + 24, src_cr + 7 * uvlinesize);
719                         }
720                     }
721                 }
722             }
723         } else if (MB_MBAFF(sl)) {
724             top_idx = 0;
725         } else
726             return;
727     }
728
729     top_border = sl->top_borders[top_idx][sl->mb_x];
730     /* There are two lines saved, the line above the top macroblock
731      * of a pair, and the line above the bottom macroblock. */
732     AV_COPY128(top_border, src_y + 16 * linesize);
733     if (pixel_shift)
734         AV_COPY128(top_border + 16, src_y + 16 * linesize + 16);
735
736     if (simple || !CONFIG_GRAY || !(h->flags & CODEC_FLAG_GRAY)) {
737         if (chroma444) {
738             if (pixel_shift) {
739                 AV_COPY128(top_border + 32, src_cb + 16 * linesize);
740                 AV_COPY128(top_border + 48, src_cb + 16 * linesize + 16);
741                 AV_COPY128(top_border + 64, src_cr + 16 * linesize);
742                 AV_COPY128(top_border + 80, src_cr + 16 * linesize + 16);
743             } else {
744                 AV_COPY128(top_border + 16, src_cb + 16 * linesize);
745                 AV_COPY128(top_border + 32, src_cr + 16 * linesize);
746             }
747         } else if (chroma422) {
748             if (pixel_shift) {
749                 AV_COPY128(top_border + 32, src_cb + 16 * uvlinesize);
750                 AV_COPY128(top_border + 48, src_cr + 16 * uvlinesize);
751             } else {
752                 AV_COPY64(top_border + 16, src_cb + 16 * uvlinesize);
753                 AV_COPY64(top_border + 24, src_cr + 16 * uvlinesize);
754             }
755         } else {
756             if (pixel_shift) {
757                 AV_COPY128(top_border + 32, src_cb + 8 * uvlinesize);
758                 AV_COPY128(top_border + 48, src_cr + 8 * uvlinesize);
759             } else {
760                 AV_COPY64(top_border + 16, src_cb + 8 * uvlinesize);
761                 AV_COPY64(top_border + 24, src_cr + 8 * uvlinesize);
762             }
763         }
764     }
765 }
766
767 /**
768  * Initialize implicit_weight table.
769  * @param field  0/1 initialize the weight for interlaced MBAFF
770  *                -1 initializes the rest
771  */
772 static void implicit_weight_table(const H264Context *h, H264SliceContext *sl, int field)
773 {
774     int ref0, ref1, i, cur_poc, ref_start, ref_count0, ref_count1;
775
776     for (i = 0; i < 2; i++) {
777         sl->luma_weight_flag[i]   = 0;
778         sl->chroma_weight_flag[i] = 0;
779     }
780
781     if (field < 0) {
782         if (h->picture_structure == PICT_FRAME) {
783             cur_poc = h->cur_pic_ptr->poc;
784         } else {
785             cur_poc = h->cur_pic_ptr->field_poc[h->picture_structure - 1];
786         }
787         if (sl->ref_count[0] == 1 && sl->ref_count[1] == 1 && !FRAME_MBAFF(h) &&
788             sl->ref_list[0][0].poc + sl->ref_list[1][0].poc == 2 * cur_poc) {
789             sl->use_weight        = 0;
790             sl->use_weight_chroma = 0;
791             return;
792         }
793         ref_start  = 0;
794         ref_count0 = sl->ref_count[0];
795         ref_count1 = sl->ref_count[1];
796     } else {
797         cur_poc    = h->cur_pic_ptr->field_poc[field];
798         ref_start  = 16;
799         ref_count0 = 16 + 2 * sl->ref_count[0];
800         ref_count1 = 16 + 2 * sl->ref_count[1];
801     }
802
803     sl->use_weight               = 2;
804     sl->use_weight_chroma        = 2;
805     sl->luma_log2_weight_denom   = 5;
806     sl->chroma_log2_weight_denom = 5;
807
808     for (ref0 = ref_start; ref0 < ref_count0; ref0++) {
809         int poc0 = sl->ref_list[0][ref0].poc;
810         for (ref1 = ref_start; ref1 < ref_count1; ref1++) {
811             int w = 32;
812             if (!sl->ref_list[0][ref0].parent->long_ref && !sl->ref_list[1][ref1].parent->long_ref) {
813                 int poc1 = sl->ref_list[1][ref1].poc;
814                 int td   = av_clip_int8(poc1 - poc0);
815                 if (td) {
816                     int tb = av_clip_int8(cur_poc - poc0);
817                     int tx = (16384 + (FFABS(td) >> 1)) / td;
818                     int dist_scale_factor = (tb * tx + 32) >> 8;
819                     if (dist_scale_factor >= -64 && dist_scale_factor <= 128)
820                         w = 64 - dist_scale_factor;
821                 }
822             }
823             if (field < 0) {
824                 sl->implicit_weight[ref0][ref1][0] =
825                 sl->implicit_weight[ref0][ref1][1] = w;
826             } else {
827                 sl->implicit_weight[ref0][ref1][field] = w;
828             }
829         }
830     }
831 }
832
833 /**
834  * initialize scan tables
835  */
836 static void init_scan_tables(H264Context *h)
837 {
838     int i;
839     for (i = 0; i < 16; i++) {
840 #define TRANSPOSE(x) (x >> 2) | ((x << 2) & 0xF)
841         h->zigzag_scan[i] = TRANSPOSE(zigzag_scan[i]);
842         h->field_scan[i]  = TRANSPOSE(field_scan[i]);
843 #undef TRANSPOSE
844     }
845     for (i = 0; i < 64; i++) {
846 #define TRANSPOSE(x) (x >> 3) | ((x & 7) << 3)
847         h->zigzag_scan8x8[i]       = TRANSPOSE(ff_zigzag_direct[i]);
848         h->zigzag_scan8x8_cavlc[i] = TRANSPOSE(zigzag_scan8x8_cavlc[i]);
849         h->field_scan8x8[i]        = TRANSPOSE(field_scan8x8[i]);
850         h->field_scan8x8_cavlc[i]  = TRANSPOSE(field_scan8x8_cavlc[i]);
851 #undef TRANSPOSE
852     }
853     if (h->sps.transform_bypass) { // FIXME same ugly
854         h->zigzag_scan_q0          = zigzag_scan;
855         h->zigzag_scan8x8_q0       = ff_zigzag_direct;
856         h->zigzag_scan8x8_cavlc_q0 = zigzag_scan8x8_cavlc;
857         h->field_scan_q0           = field_scan;
858         h->field_scan8x8_q0        = field_scan8x8;
859         h->field_scan8x8_cavlc_q0  = field_scan8x8_cavlc;
860     } else {
861         h->zigzag_scan_q0          = h->zigzag_scan;
862         h->zigzag_scan8x8_q0       = h->zigzag_scan8x8;
863         h->zigzag_scan8x8_cavlc_q0 = h->zigzag_scan8x8_cavlc;
864         h->field_scan_q0           = h->field_scan;
865         h->field_scan8x8_q0        = h->field_scan8x8;
866         h->field_scan8x8_cavlc_q0  = h->field_scan8x8_cavlc;
867     }
868 }
869
870 static enum AVPixelFormat get_pixel_format(H264Context *h)
871 {
872 #define HWACCEL_MAX (CONFIG_H264_DXVA2_HWACCEL + \
873                      CONFIG_H264_VAAPI_HWACCEL + \
874                      (CONFIG_H264_VDA_HWACCEL * 2) + \
875                      CONFIG_H264_VDPAU_HWACCEL)
876     enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmt = pix_fmts;
877     const enum AVPixelFormat *choices = pix_fmts;
878
879     switch (h->sps.bit_depth_luma) {
880     case 9:
881         if (CHROMA444(h)) {
882             if (h->avctx->colorspace == AVCOL_SPC_RGB) {
883                 *fmt++ = AV_PIX_FMT_GBRP9;
884             } else
885                 *fmt++ = AV_PIX_FMT_YUV444P9;
886         } else if (CHROMA422(h))
887             *fmt++ = AV_PIX_FMT_YUV422P9;
888         else
889             *fmt++ = AV_PIX_FMT_YUV420P9;
890         break;
891     case 10:
892         if (CHROMA444(h)) {
893             if (h->avctx->colorspace == AVCOL_SPC_RGB) {
894                 *fmt++ = AV_PIX_FMT_GBRP10;
895             } else
896                 *fmt++ = AV_PIX_FMT_YUV444P10;
897         } else if (CHROMA422(h))
898             *fmt++ = AV_PIX_FMT_YUV422P10;
899         else
900             *fmt++ = AV_PIX_FMT_YUV420P10;
901         break;
902     case 8:
903 #if CONFIG_H264_VDPAU_HWACCEL
904         *fmt++ = AV_PIX_FMT_VDPAU;
905 #endif
906         if (CHROMA444(h)) {
907             if (h->avctx->colorspace == AVCOL_SPC_RGB)
908                 *fmt++ = AV_PIX_FMT_GBRP;
909             else if (h->avctx->color_range == AVCOL_RANGE_JPEG)
910                 *fmt++ = AV_PIX_FMT_YUVJ444P;
911             else
912                 *fmt++ = AV_PIX_FMT_YUV444P;
913         } else if (CHROMA422(h)) {
914             if (h->avctx->color_range == AVCOL_RANGE_JPEG)
915                 *fmt++ = AV_PIX_FMT_YUVJ422P;
916             else
917                 *fmt++ = AV_PIX_FMT_YUV422P;
918         } else {
919 #if CONFIG_H264_DXVA2_HWACCEL
920             *fmt++ = AV_PIX_FMT_DXVA2_VLD;
921 #endif
922 #if CONFIG_H264_VAAPI_HWACCEL
923             *fmt++ = AV_PIX_FMT_VAAPI_VLD;
924 #endif
925 #if CONFIG_H264_VDA_HWACCEL
926             *fmt++ = AV_PIX_FMT_VDA_VLD;
927             *fmt++ = AV_PIX_FMT_VDA;
928 #endif
929             if (h->avctx->codec->pix_fmts)
930                 choices = h->avctx->codec->pix_fmts;
931             else if (h->avctx->color_range == AVCOL_RANGE_JPEG)
932                 *fmt++ = AV_PIX_FMT_YUVJ420P;
933             else
934                 *fmt++ = AV_PIX_FMT_YUV420P;
935         }
936         break;
937     default:
938         av_log(h->avctx, AV_LOG_ERROR,
939                "Unsupported bit depth %d\n", h->sps.bit_depth_luma);
940         return AVERROR_INVALIDDATA;
941     }
942
943     *fmt = AV_PIX_FMT_NONE;
944
945     return ff_get_format(h->avctx, choices);
946 }
947
948 /* export coded and cropped frame dimensions to AVCodecContext */
949 static int init_dimensions(H264Context *h)
950 {
951     int width  = h->width  - (h->sps.crop_right + h->sps.crop_left);
952     int height = h->height - (h->sps.crop_top   + h->sps.crop_bottom);
953     int crop_present = h->sps.crop_left  || h->sps.crop_top ||
954                        h->sps.crop_right || h->sps.crop_bottom;
955
956     /* handle container cropping */
957     if (!crop_present &&
958         FFALIGN(h->avctx->width,  16) == h->width &&
959         FFALIGN(h->avctx->height, 16) == h->height) {
960         width  = h->avctx->width;
961         height = h->avctx->height;
962     }
963
964     if (width <= 0 || height <= 0) {
965         av_log(h->avctx, AV_LOG_ERROR, "Invalid cropped dimensions: %dx%d.\n",
966                width, height);
967         if (h->avctx->err_recognition & AV_EF_EXPLODE)
968             return AVERROR_INVALIDDATA;
969
970         av_log(h->avctx, AV_LOG_WARNING, "Ignoring cropping information.\n");
971         h->sps.crop_bottom =
972         h->sps.crop_top    =
973         h->sps.crop_right  =
974         h->sps.crop_left   =
975         h->sps.crop        = 0;
976
977         width  = h->width;
978         height = h->height;
979     }
980
981     h->avctx->coded_width  = h->width;
982     h->avctx->coded_height = h->height;
983     h->avctx->width        = width;
984     h->avctx->height       = height;
985
986     return 0;
987 }
988
989 static int h264_slice_header_init(H264Context *h, int reinit)
990 {
991     int nb_slices = (HAVE_THREADS &&
992                      h->avctx->active_thread_type & FF_THREAD_SLICE) ?
993                     h->avctx->thread_count : 1;
994     int i, ret;
995
996     ff_set_sar(h->avctx, h->sps.sar);
997     av_pix_fmt_get_chroma_sub_sample(h->avctx->pix_fmt,
998                                      &h->chroma_x_shift, &h->chroma_y_shift);
999
1000     if (h->sps.timing_info_present_flag) {
1001         int64_t den = h->sps.time_scale;
1002         if (h->x264_build < 44U)
1003             den *= 2;
1004         av_reduce(&h->avctx->framerate.den, &h->avctx->framerate.num,
1005                   h->sps.num_units_in_tick, den, 1 << 30);
1006     }
1007
1008     if (reinit)
1009         ff_h264_free_tables(h, 0);
1010     h->first_field           = 0;
1011     h->prev_interlaced_frame = 1;
1012
1013     init_scan_tables(h);
1014     ret = ff_h264_alloc_tables(h);
1015     if (ret < 0) {
1016         av_log(h->avctx, AV_LOG_ERROR, "Could not allocate memory\n");
1017         return ret;
1018     }
1019
1020     if (nb_slices > H264_MAX_THREADS || (nb_slices > h->mb_height && h->mb_height)) {
1021         int max_slices;
1022         if (h->mb_height)
1023             max_slices = FFMIN(H264_MAX_THREADS, h->mb_height);
1024         else
1025             max_slices = H264_MAX_THREADS;
1026         av_log(h->avctx, AV_LOG_WARNING, "too many threads/slices %d,"
1027                " reducing to %d\n", nb_slices, max_slices);
1028         nb_slices = max_slices;
1029     }
1030     h->slice_context_count = nb_slices;
1031
1032     if (!HAVE_THREADS || !(h->avctx->active_thread_type & FF_THREAD_SLICE)) {
1033         ret = ff_h264_slice_context_init(h, &h->slice_ctx[0]);
1034         if (ret < 0) {
1035             av_log(h->avctx, AV_LOG_ERROR, "context_init() failed.\n");
1036             return ret;
1037         }
1038     } else {
1039         for (i = 0; i < h->slice_context_count; i++) {
1040             H264SliceContext *sl = &h->slice_ctx[i];
1041
1042             sl->h264               = h;
1043             sl->intra4x4_pred_mode = h->intra4x4_pred_mode + i * 8 * 2 * h->mb_stride;
1044             sl->mvd_table[0]       = h->mvd_table[0]       + i * 8 * 2 * h->mb_stride;
1045             sl->mvd_table[1]       = h->mvd_table[1]       + i * 8 * 2 * h->mb_stride;
1046
1047             if ((ret = ff_h264_slice_context_init(h, sl)) < 0) {
1048                 av_log(h->avctx, AV_LOG_ERROR, "context_init() failed.\n");
1049                 return ret;
1050             }
1051         }
1052     }
1053
1054     h->context_initialized = 1;
1055
1056     return 0;
1057 }
1058
1059 /**
1060  * Decode a slice header.
1061  * This will (re)intialize the decoder and call h264_frame_start() as needed.
1062  *
1063  * @param h h264context
1064  *
1065  * @return 0 if okay, <0 if an error occurred, 1 if decoding must not be multithreaded
1066  */
1067 int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl)
1068 {
1069     unsigned int first_mb_in_slice;
1070     unsigned int pps_id;
1071     int ret;
1072     unsigned int slice_type, tmp, i, j;
1073     int default_ref_list_done = 0;
1074     int last_pic_structure, last_pic_droppable;
1075     int needs_reinit = 0;
1076     int field_pic_flag, bottom_field_flag;
1077
1078     h->qpel_put = h->h264qpel.put_h264_qpel_pixels_tab;
1079     h->qpel_avg = h->h264qpel.avg_h264_qpel_pixels_tab;
1080
1081     first_mb_in_slice = get_ue_golomb(&sl->gb);
1082
1083     if (first_mb_in_slice == 0) { // FIXME better field boundary detection
1084         if (h->current_slice && h->cur_pic_ptr && FIELD_PICTURE(h)) {
1085             ff_h264_field_end(h, sl, 1);
1086         }
1087
1088         h->current_slice = 0;
1089         if (!h->first_field) {
1090             if (h->cur_pic_ptr && !h->droppable) {
1091                 ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX,
1092                                           h->picture_structure == PICT_BOTTOM_FIELD);
1093             }
1094             h->cur_pic_ptr = NULL;
1095         }
1096     }
1097
1098     slice_type = get_ue_golomb_31(&sl->gb);
1099     if (slice_type > 9) {
1100         av_log(h->avctx, AV_LOG_ERROR,
1101                "slice type %d too large at %d\n",
1102                slice_type, first_mb_in_slice);
1103         return AVERROR_INVALIDDATA;
1104     }
1105     if (slice_type > 4) {
1106         slice_type -= 5;
1107         sl->slice_type_fixed = 1;
1108     } else
1109         sl->slice_type_fixed = 0;
1110
1111     slice_type = golomb_to_pict_type[slice_type];
1112     if (slice_type == AV_PICTURE_TYPE_I ||
1113         (h->current_slice != 0 && slice_type == h->last_slice_type)) {
1114         default_ref_list_done = 1;
1115     }
1116     sl->slice_type     = slice_type;
1117     sl->slice_type_nos = slice_type & 3;
1118
1119     if (h->nal_unit_type  == NAL_IDR_SLICE &&
1120         sl->slice_type_nos != AV_PICTURE_TYPE_I) {
1121         av_log(h->avctx, AV_LOG_ERROR, "A non-intra slice in an IDR NAL unit.\n");
1122         return AVERROR_INVALIDDATA;
1123     }
1124
1125     // to make a few old functions happy, it's wrong though
1126     h->pict_type = sl->slice_type;
1127
1128     pps_id = get_ue_golomb(&sl->gb);
1129     if (pps_id >= MAX_PPS_COUNT) {
1130         av_log(h->avctx, AV_LOG_ERROR, "pps_id %u out of range\n", pps_id);
1131         return AVERROR_INVALIDDATA;
1132     }
1133     if (!h->pps_buffers[pps_id]) {
1134         av_log(h->avctx, AV_LOG_ERROR,
1135                "non-existing PPS %u referenced\n",
1136                pps_id);
1137         return AVERROR_INVALIDDATA;
1138     }
1139     h->pps = *h->pps_buffers[pps_id];
1140
1141     if (!h->sps_buffers[h->pps.sps_id]) {
1142         av_log(h->avctx, AV_LOG_ERROR,
1143                "non-existing SPS %u referenced\n",
1144                h->pps.sps_id);
1145         return AVERROR_INVALIDDATA;
1146     }
1147
1148     if (h->pps.sps_id != h->sps.sps_id ||
1149         h->sps_buffers[h->pps.sps_id]->new) {
1150         h->sps_buffers[h->pps.sps_id]->new = 0;
1151
1152         h->sps = *h->sps_buffers[h->pps.sps_id];
1153
1154         if (h->bit_depth_luma    != h->sps.bit_depth_luma ||
1155             h->chroma_format_idc != h->sps.chroma_format_idc) {
1156             h->bit_depth_luma    = h->sps.bit_depth_luma;
1157             h->chroma_format_idc = h->sps.chroma_format_idc;
1158             needs_reinit         = 1;
1159         }
1160         if ((ret = ff_h264_set_parameter_from_sps(h)) < 0)
1161             return ret;
1162     }
1163
1164     h->avctx->profile = ff_h264_get_profile(&h->sps);
1165     h->avctx->level   = h->sps.level_idc;
1166     h->avctx->refs    = h->sps.ref_frame_count;
1167
1168     if (h->mb_width  != h->sps.mb_width ||
1169         h->mb_height != h->sps.mb_height * (2 - h->sps.frame_mbs_only_flag))
1170         needs_reinit = 1;
1171
1172     h->mb_width  = h->sps.mb_width;
1173     h->mb_height = h->sps.mb_height * (2 - h->sps.frame_mbs_only_flag);
1174     h->mb_num    = h->mb_width * h->mb_height;
1175     h->mb_stride = h->mb_width + 1;
1176
1177     h->b_stride = h->mb_width * 4;
1178
1179     h->chroma_y_shift = h->sps.chroma_format_idc <= 1; // 400 uses yuv420p
1180
1181     h->width  = 16 * h->mb_width;
1182     h->height = 16 * h->mb_height;
1183
1184     ret = init_dimensions(h);
1185     if (ret < 0)
1186         return ret;
1187
1188     if (h->sps.video_signal_type_present_flag) {
1189         h->avctx->color_range = h->sps.full_range ? AVCOL_RANGE_JPEG
1190                                                   : AVCOL_RANGE_MPEG;
1191         if (h->sps.colour_description_present_flag) {
1192             if (h->avctx->colorspace != h->sps.colorspace)
1193                 needs_reinit = 1;
1194             h->avctx->color_primaries = h->sps.color_primaries;
1195             h->avctx->color_trc       = h->sps.color_trc;
1196             h->avctx->colorspace      = h->sps.colorspace;
1197         }
1198     }
1199
1200     if (h->context_initialized && needs_reinit) {
1201         if (sl != h->slice_ctx) {
1202             av_log(h->avctx, AV_LOG_ERROR,
1203                    "changing width %d -> %d / height %d -> %d on "
1204                    "slice %d\n",
1205                    h->width, h->avctx->coded_width,
1206                    h->height, h->avctx->coded_height,
1207                    h->current_slice + 1);
1208             return AVERROR_INVALIDDATA;
1209         }
1210
1211         ff_h264_flush_change(h);
1212
1213         if ((ret = get_pixel_format(h)) < 0)
1214             return ret;
1215         h->avctx->pix_fmt = ret;
1216
1217         av_log(h->avctx, AV_LOG_INFO, "Reinit context to %dx%d, "
1218                "pix_fmt: %d\n", h->width, h->height, h->avctx->pix_fmt);
1219
1220         if ((ret = h264_slice_header_init(h, 1)) < 0) {
1221             av_log(h->avctx, AV_LOG_ERROR,
1222                    "h264_slice_header_init() failed\n");
1223             return ret;
1224         }
1225     }
1226     if (!h->context_initialized) {
1227         if (sl != h->slice_ctx) {
1228             av_log(h->avctx, AV_LOG_ERROR,
1229                    "Cannot (re-)initialize context during parallel decoding.\n");
1230             return AVERROR_PATCHWELCOME;
1231         }
1232
1233         if ((ret = get_pixel_format(h)) < 0)
1234             return ret;
1235         h->avctx->pix_fmt = ret;
1236
1237         if ((ret = h264_slice_header_init(h, 0)) < 0) {
1238             av_log(h->avctx, AV_LOG_ERROR,
1239                    "h264_slice_header_init() failed\n");
1240             return ret;
1241         }
1242     }
1243
1244     if (sl == h->slice_ctx && h->dequant_coeff_pps != pps_id) {
1245         h->dequant_coeff_pps = pps_id;
1246         h264_init_dequant_tables(h);
1247     }
1248
1249     h->frame_num = get_bits(&sl->gb, h->sps.log2_max_frame_num);
1250
1251     sl->mb_mbaff       = 0;
1252     h->mb_aff_frame    = 0;
1253     last_pic_structure = h->picture_structure;
1254     last_pic_droppable = h->droppable;
1255     h->droppable       = h->nal_ref_idc == 0;
1256     if (h->sps.frame_mbs_only_flag) {
1257         h->picture_structure = PICT_FRAME;
1258     } else {
1259         field_pic_flag = get_bits1(&sl->gb);
1260         if (field_pic_flag) {
1261             bottom_field_flag = get_bits1(&sl->gb);
1262             h->picture_structure = PICT_TOP_FIELD + bottom_field_flag;
1263         } else {
1264             h->picture_structure = PICT_FRAME;
1265             h->mb_aff_frame      = h->sps.mb_aff;
1266         }
1267     }
1268     sl->mb_field_decoding_flag = h->picture_structure != PICT_FRAME;
1269
1270     if (h->current_slice != 0) {
1271         if (last_pic_structure != h->picture_structure ||
1272             last_pic_droppable != h->droppable) {
1273             av_log(h->avctx, AV_LOG_ERROR,
1274                    "Changing field mode (%d -> %d) between slices is not allowed\n",
1275                    last_pic_structure, h->picture_structure);
1276             h->picture_structure = last_pic_structure;
1277             h->droppable         = last_pic_droppable;
1278             return AVERROR_INVALIDDATA;
1279         } else if (!h->cur_pic_ptr) {
1280             av_log(h->avctx, AV_LOG_ERROR,
1281                    "unset cur_pic_ptr on slice %d\n",
1282                    h->current_slice + 1);
1283             return AVERROR_INVALIDDATA;
1284         }
1285     } else {
1286         /* Shorten frame num gaps so we don't have to allocate reference
1287          * frames just to throw them away */
1288         if (h->frame_num != h->prev_frame_num) {
1289             int unwrap_prev_frame_num = h->prev_frame_num;
1290             int max_frame_num         = 1 << h->sps.log2_max_frame_num;
1291
1292             if (unwrap_prev_frame_num > h->frame_num)
1293                 unwrap_prev_frame_num -= max_frame_num;
1294
1295             if ((h->frame_num - unwrap_prev_frame_num) > h->sps.ref_frame_count) {
1296                 unwrap_prev_frame_num = (h->frame_num - h->sps.ref_frame_count) - 1;
1297                 if (unwrap_prev_frame_num < 0)
1298                     unwrap_prev_frame_num += max_frame_num;
1299
1300                 h->prev_frame_num = unwrap_prev_frame_num;
1301             }
1302         }
1303
1304         /* See if we have a decoded first field looking for a pair...
1305          * Here, we're using that to see if we should mark previously
1306          * decode frames as "finished".
1307          * We have to do that before the "dummy" in-between frame allocation,
1308          * since that can modify s->current_picture_ptr. */
1309         if (h->first_field) {
1310             assert(h->cur_pic_ptr);
1311             assert(h->cur_pic_ptr->f.buf[0]);
1312             assert(h->cur_pic_ptr->reference != DELAYED_PIC_REF);
1313
1314             /* figure out if we have a complementary field pair */
1315             if (!FIELD_PICTURE(h) || h->picture_structure == last_pic_structure) {
1316                 /* Previous field is unmatched. Don't display it, but let it
1317                  * remain for reference if marked as such. */
1318                 if (!last_pic_droppable && last_pic_structure != PICT_FRAME) {
1319                     ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX,
1320                                               last_pic_structure == PICT_TOP_FIELD);
1321                 }
1322             } else {
1323                 if (h->cur_pic_ptr->frame_num != h->frame_num) {
1324                     /* This and previous field were reference, but had
1325                      * different frame_nums. Consider this field first in
1326                      * pair. Throw away previous field except for reference
1327                      * purposes. */
1328                     if (!last_pic_droppable && last_pic_structure != PICT_FRAME) {
1329                         ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX,
1330                                                   last_pic_structure == PICT_TOP_FIELD);
1331                     }
1332                 } else {
1333                     /* Second field in complementary pair */
1334                     if (!((last_pic_structure   == PICT_TOP_FIELD &&
1335                            h->picture_structure == PICT_BOTTOM_FIELD) ||
1336                           (last_pic_structure   == PICT_BOTTOM_FIELD &&
1337                            h->picture_structure == PICT_TOP_FIELD))) {
1338                         av_log(h->avctx, AV_LOG_ERROR,
1339                                "Invalid field mode combination %d/%d\n",
1340                                last_pic_structure, h->picture_structure);
1341                         h->picture_structure = last_pic_structure;
1342                         h->droppable         = last_pic_droppable;
1343                         return AVERROR_INVALIDDATA;
1344                     } else if (last_pic_droppable != h->droppable) {
1345                         avpriv_request_sample(h->avctx,
1346                                               "Found reference and non-reference fields in the same frame, which");
1347                         h->picture_structure = last_pic_structure;
1348                         h->droppable         = last_pic_droppable;
1349                         return AVERROR_PATCHWELCOME;
1350                     }
1351                 }
1352             }
1353         }
1354
1355         while (h->frame_num != h->prev_frame_num &&
1356                h->frame_num != (h->prev_frame_num + 1) % (1 << h->sps.log2_max_frame_num)) {
1357             H264Picture *prev = h->short_ref_count ? h->short_ref[0] : NULL;
1358             av_log(h->avctx, AV_LOG_DEBUG, "Frame num gap %d %d\n",
1359                    h->frame_num, h->prev_frame_num);
1360             ret = h264_frame_start(h);
1361             if (ret < 0) {
1362                 h->first_field = 0;
1363                 return ret;
1364             }
1365
1366             h->prev_frame_num++;
1367             h->prev_frame_num        %= 1 << h->sps.log2_max_frame_num;
1368             h->cur_pic_ptr->frame_num = h->prev_frame_num;
1369             ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX, 0);
1370             ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX, 1);
1371             ret = ff_generate_sliding_window_mmcos(h, 1);
1372             if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
1373                 return ret;
1374             ret = ff_h264_execute_ref_pic_marking(h, h->mmco, h->mmco_index);
1375             if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
1376                 return ret;
1377             /* Error concealment: If a ref is missing, copy the previous ref
1378              * in its place.
1379              * FIXME: Avoiding a memcpy would be nice, but ref handling makes
1380              * many assumptions about there being no actual duplicates.
1381              * FIXME: This does not copy padding for out-of-frame motion
1382              * vectors.  Given we are concealing a lost frame, this probably
1383              * is not noticeable by comparison, but it should be fixed. */
1384             if (h->short_ref_count) {
1385                 if (prev) {
1386                     av_image_copy(h->short_ref[0]->f.data,
1387                                   h->short_ref[0]->f.linesize,
1388                                   (const uint8_t **)prev->f.data,
1389                                   prev->f.linesize,
1390                                   h->avctx->pix_fmt,
1391                                   h->mb_width  * 16,
1392                                   h->mb_height * 16);
1393                     h->short_ref[0]->poc = prev->poc + 2;
1394                 }
1395                 h->short_ref[0]->frame_num = h->prev_frame_num;
1396             }
1397         }
1398
1399         /* See if we have a decoded first field looking for a pair...
1400          * We're using that to see whether to continue decoding in that
1401          * frame, or to allocate a new one. */
1402         if (h->first_field) {
1403             assert(h->cur_pic_ptr);
1404             assert(h->cur_pic_ptr->f.buf[0]);
1405             assert(h->cur_pic_ptr->reference != DELAYED_PIC_REF);
1406
1407             /* figure out if we have a complementary field pair */
1408             if (!FIELD_PICTURE(h) || h->picture_structure == last_pic_structure) {
1409                 /* Previous field is unmatched. Don't display it, but let it
1410                  * remain for reference if marked as such. */
1411                 h->cur_pic_ptr = NULL;
1412                 h->first_field = FIELD_PICTURE(h);
1413             } else {
1414                 if (h->cur_pic_ptr->frame_num != h->frame_num) {
1415                     /* This and the previous field had different frame_nums.
1416                      * Consider this field first in pair. Throw away previous
1417                      * one except for reference purposes. */
1418                     h->first_field = 1;
1419                     h->cur_pic_ptr = NULL;
1420                 } else {
1421                     /* Second field in complementary pair */
1422                     h->first_field = 0;
1423                 }
1424             }
1425         } else {
1426             /* Frame or first field in a potentially complementary pair */
1427             h->first_field = FIELD_PICTURE(h);
1428         }
1429
1430         if (!FIELD_PICTURE(h) || h->first_field) {
1431             if (h264_frame_start(h) < 0) {
1432                 h->first_field = 0;
1433                 return AVERROR_INVALIDDATA;
1434             }
1435         } else {
1436             release_unused_pictures(h, 0);
1437         }
1438     }
1439
1440     h->cur_pic_ptr->frame_num = h->frame_num; // FIXME frame_num cleanup
1441
1442     assert(h->mb_num == h->mb_width * h->mb_height);
1443     if (first_mb_in_slice << FIELD_OR_MBAFF_PICTURE(h) >= h->mb_num ||
1444         first_mb_in_slice >= h->mb_num) {
1445         av_log(h->avctx, AV_LOG_ERROR, "first_mb_in_slice overflow\n");
1446         return AVERROR_INVALIDDATA;
1447     }
1448     sl->resync_mb_x = sl->mb_x =  first_mb_in_slice % h->mb_width;
1449     sl->resync_mb_y = sl->mb_y = (first_mb_in_slice / h->mb_width) <<
1450                                  FIELD_OR_MBAFF_PICTURE(h);
1451     if (h->picture_structure == PICT_BOTTOM_FIELD)
1452         sl->resync_mb_y = sl->mb_y = sl->mb_y + 1;
1453     assert(sl->mb_y < h->mb_height);
1454
1455     if (h->picture_structure == PICT_FRAME) {
1456         h->curr_pic_num = h->frame_num;
1457         h->max_pic_num  = 1 << h->sps.log2_max_frame_num;
1458     } else {
1459         h->curr_pic_num = 2 * h->frame_num + 1;
1460         h->max_pic_num  = 1 << (h->sps.log2_max_frame_num + 1);
1461     }
1462
1463     if (h->nal_unit_type == NAL_IDR_SLICE)
1464         get_ue_golomb(&sl->gb); /* idr_pic_id */
1465
1466     if (h->sps.poc_type == 0) {
1467         h->poc_lsb = get_bits(&sl->gb, h->sps.log2_max_poc_lsb);
1468
1469         if (h->pps.pic_order_present == 1 && h->picture_structure == PICT_FRAME)
1470             h->delta_poc_bottom = get_se_golomb(&sl->gb);
1471     }
1472
1473     if (h->sps.poc_type == 1 && !h->sps.delta_pic_order_always_zero_flag) {
1474         h->delta_poc[0] = get_se_golomb(&sl->gb);
1475
1476         if (h->pps.pic_order_present == 1 && h->picture_structure == PICT_FRAME)
1477             h->delta_poc[1] = get_se_golomb(&sl->gb);
1478     }
1479
1480     ff_init_poc(h, h->cur_pic_ptr->field_poc, &h->cur_pic_ptr->poc);
1481
1482     if (h->pps.redundant_pic_cnt_present)
1483         sl->redundant_pic_count = get_ue_golomb(&sl->gb);
1484
1485     ret = ff_set_ref_count(h, sl);
1486     if (ret < 0)
1487         return ret;
1488     else if (ret == 1)
1489         default_ref_list_done = 0;
1490
1491     if (!default_ref_list_done)
1492         ff_h264_fill_default_ref_list(h, sl);
1493
1494     if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
1495        ret = ff_h264_decode_ref_pic_list_reordering(h, sl);
1496        if (ret < 0) {
1497            sl->ref_count[1] = sl->ref_count[0] = 0;
1498            return ret;
1499        }
1500     }
1501
1502     if ((h->pps.weighted_pred && sl->slice_type_nos == AV_PICTURE_TYPE_P) ||
1503         (h->pps.weighted_bipred_idc == 1 &&
1504          sl->slice_type_nos == AV_PICTURE_TYPE_B))
1505         ff_pred_weight_table(h, sl);
1506     else if (h->pps.weighted_bipred_idc == 2 &&
1507              sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1508         implicit_weight_table(h, sl, -1);
1509     } else {
1510         sl->use_weight = 0;
1511         for (i = 0; i < 2; i++) {
1512             sl->luma_weight_flag[i]   = 0;
1513             sl->chroma_weight_flag[i] = 0;
1514         }
1515     }
1516
1517     // If frame-mt is enabled, only update mmco tables for the first slice
1518     // in a field. Subsequent slices can temporarily clobber h->mmco_index
1519     // or h->mmco, which will cause ref list mix-ups and decoding errors
1520     // further down the line. This may break decoding if the first slice is
1521     // corrupt, thus we only do this if frame-mt is enabled.
1522     if (h->nal_ref_idc) {
1523         ret = ff_h264_decode_ref_pic_marking(h, &sl->gb,
1524                                              !(h->avctx->active_thread_type & FF_THREAD_FRAME) ||
1525                                              h->current_slice == 0);
1526         if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
1527             return AVERROR_INVALIDDATA;
1528     }
1529
1530     if (FRAME_MBAFF(h)) {
1531         ff_h264_fill_mbaff_ref_list(h, sl);
1532
1533         if (h->pps.weighted_bipred_idc == 2 && sl->slice_type_nos == AV_PICTURE_TYPE_B) {
1534             implicit_weight_table(h, sl, 0);
1535             implicit_weight_table(h, sl, 1);
1536         }
1537     }
1538
1539     if (sl->slice_type_nos == AV_PICTURE_TYPE_B && !sl->direct_spatial_mv_pred)
1540         ff_h264_direct_dist_scale_factor(h, sl);
1541     ff_h264_direct_ref_list_init(h, sl);
1542
1543     if (sl->slice_type_nos != AV_PICTURE_TYPE_I && h->pps.cabac) {
1544         tmp = get_ue_golomb_31(&sl->gb);
1545         if (tmp > 2) {
1546             av_log(h->avctx, AV_LOG_ERROR, "cabac_init_idc %u overflow\n", tmp);
1547             return AVERROR_INVALIDDATA;
1548         }
1549         sl->cabac_init_idc = tmp;
1550     }
1551
1552     sl->last_qscale_diff = 0;
1553     tmp = h->pps.init_qp + get_se_golomb(&sl->gb);
1554     if (tmp > 51 + 6 * (h->sps.bit_depth_luma - 8)) {
1555         av_log(h->avctx, AV_LOG_ERROR, "QP %u out of range\n", tmp);
1556         return AVERROR_INVALIDDATA;
1557     }
1558     sl->qscale       = tmp;
1559     sl->chroma_qp[0] = get_chroma_qp(h, 0, sl->qscale);
1560     sl->chroma_qp[1] = get_chroma_qp(h, 1, sl->qscale);
1561     // FIXME qscale / qp ... stuff
1562     if (sl->slice_type == AV_PICTURE_TYPE_SP)
1563         get_bits1(&sl->gb); /* sp_for_switch_flag */
1564     if (sl->slice_type == AV_PICTURE_TYPE_SP ||
1565         sl->slice_type == AV_PICTURE_TYPE_SI)
1566         get_se_golomb(&sl->gb); /* slice_qs_delta */
1567
1568     sl->deblocking_filter     = 1;
1569     sl->slice_alpha_c0_offset = 0;
1570     sl->slice_beta_offset     = 0;
1571     if (h->pps.deblocking_filter_parameters_present) {
1572         tmp = get_ue_golomb_31(&sl->gb);
1573         if (tmp > 2) {
1574             av_log(h->avctx, AV_LOG_ERROR,
1575                    "deblocking_filter_idc %u out of range\n", tmp);
1576             return AVERROR_INVALIDDATA;
1577         }
1578         sl->deblocking_filter = tmp;
1579         if (sl->deblocking_filter < 2)
1580             sl->deblocking_filter ^= 1;  // 1<->0
1581
1582         if (sl->deblocking_filter) {
1583             sl->slice_alpha_c0_offset = get_se_golomb(&sl->gb) * 2;
1584             sl->slice_beta_offset     = get_se_golomb(&sl->gb) * 2;
1585             if (sl->slice_alpha_c0_offset >  12 ||
1586                 sl->slice_alpha_c0_offset < -12 ||
1587                 sl->slice_beta_offset >  12     ||
1588                 sl->slice_beta_offset < -12) {
1589                 av_log(h->avctx, AV_LOG_ERROR,
1590                        "deblocking filter parameters %d %d out of range\n",
1591                        sl->slice_alpha_c0_offset, sl->slice_beta_offset);
1592                 return AVERROR_INVALIDDATA;
1593             }
1594         }
1595     }
1596
1597     if (h->avctx->skip_loop_filter >= AVDISCARD_ALL ||
1598         (h->avctx->skip_loop_filter >= AVDISCARD_NONKEY &&
1599          sl->slice_type_nos != AV_PICTURE_TYPE_I) ||
1600         (h->avctx->skip_loop_filter >= AVDISCARD_BIDIR  &&
1601          sl->slice_type_nos == AV_PICTURE_TYPE_B) ||
1602         (h->avctx->skip_loop_filter >= AVDISCARD_NONREF &&
1603          h->nal_ref_idc == 0))
1604         sl->deblocking_filter = 0;
1605
1606     if (sl->deblocking_filter == 1 && h->max_contexts > 1) {
1607         if (h->avctx->flags2 & CODEC_FLAG2_FAST) {
1608             /* Cheat slightly for speed:
1609              * Do not bother to deblock across slices. */
1610             sl->deblocking_filter = 2;
1611         } else {
1612             h->max_contexts = 1;
1613             if (!h->single_decode_warning) {
1614                 av_log(h->avctx, AV_LOG_INFO,
1615                        "Cannot parallelize deblocking type 1, decoding such frames in sequential order\n");
1616                 h->single_decode_warning = 1;
1617             }
1618             if (sl != h->slice_ctx) {
1619                 av_log(h->avctx, AV_LOG_ERROR,
1620                        "Deblocking switched inside frame.\n");
1621                 return 1;
1622             }
1623         }
1624     }
1625     sl->qp_thresh = 15 -
1626                    FFMIN(sl->slice_alpha_c0_offset, sl->slice_beta_offset) -
1627                    FFMAX3(0,
1628                           h->pps.chroma_qp_index_offset[0],
1629                           h->pps.chroma_qp_index_offset[1]) +
1630                    6 * (h->sps.bit_depth_luma - 8);
1631
1632     h->last_slice_type = slice_type;
1633     sl->slice_num       = ++h->current_slice;
1634     if (sl->slice_num >= MAX_SLICES) {
1635         av_log(h->avctx, AV_LOG_ERROR,
1636                "Too many slices, increase MAX_SLICES and recompile\n");
1637     }
1638
1639     for (j = 0; j < 2; j++) {
1640         int id_list[16];
1641         int *ref2frm = sl->ref2frm[sl->slice_num & (MAX_SLICES - 1)][j];
1642         for (i = 0; i < 16; i++) {
1643             id_list[i] = 60;
1644             if (j < sl->list_count && i < sl->ref_count[j] &&
1645                 sl->ref_list[j][i].parent->f.buf[0]) {
1646                 int k;
1647                 AVBuffer *buf = sl->ref_list[j][i].parent->f.buf[0]->buffer;
1648                 for (k = 0; k < h->short_ref_count; k++)
1649                     if (h->short_ref[k]->f.buf[0]->buffer == buf) {
1650                         id_list[i] = k;
1651                         break;
1652                     }
1653                 for (k = 0; k < h->long_ref_count; k++)
1654                     if (h->long_ref[k] && h->long_ref[k]->f.buf[0]->buffer == buf) {
1655                         id_list[i] = h->short_ref_count + k;
1656                         break;
1657                     }
1658             }
1659         }
1660
1661         ref2frm[0] =
1662         ref2frm[1] = -1;
1663         for (i = 0; i < 16; i++)
1664             ref2frm[i + 2] = 4 * id_list[i] + (sl->ref_list[j][i].reference & 3);
1665         ref2frm[18 + 0] =
1666         ref2frm[18 + 1] = -1;
1667         for (i = 16; i < 48; i++)
1668             ref2frm[i + 4] = 4 * id_list[(i - 16) >> 1] +
1669                              (sl->ref_list[j][i].reference & 3);
1670     }
1671
1672     if (h->avctx->debug & FF_DEBUG_PICT_INFO) {
1673         av_log(h->avctx, AV_LOG_DEBUG,
1674                "slice:%d %s mb:%d %c%s%s pps:%u frame:%d poc:%d/%d ref:%d/%d qp:%d loop:%d:%d:%d weight:%d%s %s\n",
1675                sl->slice_num,
1676                (h->picture_structure == PICT_FRAME ? "F" : h->picture_structure == PICT_TOP_FIELD ? "T" : "B"),
1677                first_mb_in_slice,
1678                av_get_picture_type_char(sl->slice_type),
1679                sl->slice_type_fixed ? " fix" : "",
1680                h->nal_unit_type == NAL_IDR_SLICE ? " IDR" : "",
1681                pps_id, h->frame_num,
1682                h->cur_pic_ptr->field_poc[0],
1683                h->cur_pic_ptr->field_poc[1],
1684                sl->ref_count[0], sl->ref_count[1],
1685                sl->qscale,
1686                sl->deblocking_filter,
1687                sl->slice_alpha_c0_offset, sl->slice_beta_offset,
1688                sl->use_weight,
1689                sl->use_weight == 1 && sl->use_weight_chroma ? "c" : "",
1690                sl->slice_type == AV_PICTURE_TYPE_B ? (sl->direct_spatial_mv_pred ? "SPAT" : "TEMP") : "");
1691     }
1692
1693     return 0;
1694 }
1695
1696 int ff_h264_get_slice_type(const H264SliceContext *sl)
1697 {
1698     switch (sl->slice_type) {
1699     case AV_PICTURE_TYPE_P:
1700         return 0;
1701     case AV_PICTURE_TYPE_B:
1702         return 1;
1703     case AV_PICTURE_TYPE_I:
1704         return 2;
1705     case AV_PICTURE_TYPE_SP:
1706         return 3;
1707     case AV_PICTURE_TYPE_SI:
1708         return 4;
1709     default:
1710         return AVERROR_INVALIDDATA;
1711     }
1712 }
1713
1714 static av_always_inline void fill_filter_caches_inter(const H264Context *h,
1715                                                       H264SliceContext *sl,
1716                                                       int mb_type, int top_xy,
1717                                                       int left_xy[LEFT_MBS],
1718                                                       int top_type,
1719                                                       int left_type[LEFT_MBS],
1720                                                       int mb_xy, int list)
1721 {
1722     int b_stride = h->b_stride;
1723     int16_t(*mv_dst)[2] = &sl->mv_cache[list][scan8[0]];
1724     int8_t *ref_cache   = &sl->ref_cache[list][scan8[0]];
1725     if (IS_INTER(mb_type) || IS_DIRECT(mb_type)) {
1726         if (USES_LIST(top_type, list)) {
1727             const int b_xy  = h->mb2b_xy[top_xy] + 3 * b_stride;
1728             const int b8_xy = 4 * top_xy + 2;
1729             int (*ref2frm)[64] = sl->ref2frm[h->slice_table[top_xy] & (MAX_SLICES - 1)][0] + (MB_MBAFF(sl) ? 20 : 2);
1730             AV_COPY128(mv_dst - 1 * 8, h->cur_pic.motion_val[list][b_xy + 0]);
1731             ref_cache[0 - 1 * 8] =
1732             ref_cache[1 - 1 * 8] = ref2frm[list][h->cur_pic.ref_index[list][b8_xy + 0]];
1733             ref_cache[2 - 1 * 8] =
1734             ref_cache[3 - 1 * 8] = ref2frm[list][h->cur_pic.ref_index[list][b8_xy + 1]];
1735         } else {
1736             AV_ZERO128(mv_dst - 1 * 8);
1737             AV_WN32A(&ref_cache[0 - 1 * 8], ((LIST_NOT_USED) & 0xFF) * 0x01010101u);
1738         }
1739
1740         if (!IS_INTERLACED(mb_type ^ left_type[LTOP])) {
1741             if (USES_LIST(left_type[LTOP], list)) {
1742                 const int b_xy  = h->mb2b_xy[left_xy[LTOP]] + 3;
1743                 const int b8_xy = 4 * left_xy[LTOP] + 1;
1744                 int (*ref2frm)[64] = sl->ref2frm[h->slice_table[left_xy[LTOP]] & (MAX_SLICES - 1)][0] + (MB_MBAFF(sl) ? 20 : 2);
1745                 AV_COPY32(mv_dst - 1 +  0, h->cur_pic.motion_val[list][b_xy + b_stride * 0]);
1746                 AV_COPY32(mv_dst - 1 +  8, h->cur_pic.motion_val[list][b_xy + b_stride * 1]);
1747                 AV_COPY32(mv_dst - 1 + 16, h->cur_pic.motion_val[list][b_xy + b_stride * 2]);
1748                 AV_COPY32(mv_dst - 1 + 24, h->cur_pic.motion_val[list][b_xy + b_stride * 3]);
1749                 ref_cache[-1 +  0] =
1750                 ref_cache[-1 +  8] = ref2frm[list][h->cur_pic.ref_index[list][b8_xy + 2 * 0]];
1751                 ref_cache[-1 + 16] =
1752                 ref_cache[-1 + 24] = ref2frm[list][h->cur_pic.ref_index[list][b8_xy + 2 * 1]];
1753             } else {
1754                 AV_ZERO32(mv_dst - 1 +  0);
1755                 AV_ZERO32(mv_dst - 1 +  8);
1756                 AV_ZERO32(mv_dst - 1 + 16);
1757                 AV_ZERO32(mv_dst - 1 + 24);
1758                 ref_cache[-1 +  0] =
1759                 ref_cache[-1 +  8] =
1760                 ref_cache[-1 + 16] =
1761                 ref_cache[-1 + 24] = LIST_NOT_USED;
1762             }
1763         }
1764     }
1765
1766     if (!USES_LIST(mb_type, list)) {
1767         fill_rectangle(mv_dst, 4, 4, 8, pack16to32(0, 0), 4);
1768         AV_WN32A(&ref_cache[0 * 8], ((LIST_NOT_USED) & 0xFF) * 0x01010101u);
1769         AV_WN32A(&ref_cache[1 * 8], ((LIST_NOT_USED) & 0xFF) * 0x01010101u);
1770         AV_WN32A(&ref_cache[2 * 8], ((LIST_NOT_USED) & 0xFF) * 0x01010101u);
1771         AV_WN32A(&ref_cache[3 * 8], ((LIST_NOT_USED) & 0xFF) * 0x01010101u);
1772         return;
1773     }
1774
1775     {
1776         int8_t *ref = &h->cur_pic.ref_index[list][4 * mb_xy];
1777         int (*ref2frm)[64] = sl->ref2frm[sl->slice_num & (MAX_SLICES - 1)][0] + (MB_MBAFF(sl) ? 20 : 2);
1778         uint32_t ref01 = (pack16to32(ref2frm[list][ref[0]], ref2frm[list][ref[1]]) & 0x00FF00FF) * 0x0101;
1779         uint32_t ref23 = (pack16to32(ref2frm[list][ref[2]], ref2frm[list][ref[3]]) & 0x00FF00FF) * 0x0101;
1780         AV_WN32A(&ref_cache[0 * 8], ref01);
1781         AV_WN32A(&ref_cache[1 * 8], ref01);
1782         AV_WN32A(&ref_cache[2 * 8], ref23);
1783         AV_WN32A(&ref_cache[3 * 8], ref23);
1784     }
1785
1786     {
1787         int16_t(*mv_src)[2] = &h->cur_pic.motion_val[list][4 * sl->mb_x + 4 * sl->mb_y * b_stride];
1788         AV_COPY128(mv_dst + 8 * 0, mv_src + 0 * b_stride);
1789         AV_COPY128(mv_dst + 8 * 1, mv_src + 1 * b_stride);
1790         AV_COPY128(mv_dst + 8 * 2, mv_src + 2 * b_stride);
1791         AV_COPY128(mv_dst + 8 * 3, mv_src + 3 * b_stride);
1792     }
1793 }
1794
1795 /**
1796  *
1797  * @return non zero if the loop filter can be skipped
1798  */
1799 static int fill_filter_caches(const H264Context *h, H264SliceContext *sl, int mb_type)
1800 {
1801     const int mb_xy = sl->mb_xy;
1802     int top_xy, left_xy[LEFT_MBS];
1803     int top_type, left_type[LEFT_MBS];
1804     uint8_t *nnz;
1805     uint8_t *nnz_cache;
1806
1807     top_xy = mb_xy - (h->mb_stride << MB_FIELD(sl));
1808
1809     /* Wow, what a mess, why didn't they simplify the interlacing & intra
1810      * stuff, I can't imagine that these complex rules are worth it. */
1811
1812     left_xy[LBOT] = left_xy[LTOP] = mb_xy - 1;
1813     if (FRAME_MBAFF(h)) {
1814         const int left_mb_field_flag = IS_INTERLACED(h->cur_pic.mb_type[mb_xy - 1]);
1815         const int curr_mb_field_flag = IS_INTERLACED(mb_type);
1816         if (sl->mb_y & 1) {
1817             if (left_mb_field_flag != curr_mb_field_flag)
1818                 left_xy[LTOP] -= h->mb_stride;
1819         } else {
1820             if (curr_mb_field_flag)
1821                 top_xy += h->mb_stride &
1822                           (((h->cur_pic.mb_type[top_xy] >> 7) & 1) - 1);
1823             if (left_mb_field_flag != curr_mb_field_flag)
1824                 left_xy[LBOT] += h->mb_stride;
1825         }
1826     }
1827
1828     sl->top_mb_xy        = top_xy;
1829     sl->left_mb_xy[LTOP] = left_xy[LTOP];
1830     sl->left_mb_xy[LBOT] = left_xy[LBOT];
1831     {
1832         /* For sufficiently low qp, filtering wouldn't do anything.
1833          * This is a conservative estimate: could also check beta_offset
1834          * and more accurate chroma_qp. */
1835         int qp_thresh = sl->qp_thresh; // FIXME strictly we should store qp_thresh for each mb of a slice
1836         int qp        = h->cur_pic.qscale_table[mb_xy];
1837         if (qp <= qp_thresh &&
1838             (left_xy[LTOP] < 0 ||
1839              ((qp + h->cur_pic.qscale_table[left_xy[LTOP]] + 1) >> 1) <= qp_thresh) &&
1840             (top_xy < 0 ||
1841              ((qp + h->cur_pic.qscale_table[top_xy] + 1) >> 1) <= qp_thresh)) {
1842             if (!FRAME_MBAFF(h))
1843                 return 1;
1844             if ((left_xy[LTOP] < 0 ||
1845                  ((qp + h->cur_pic.qscale_table[left_xy[LBOT]] + 1) >> 1) <= qp_thresh) &&
1846                 (top_xy < h->mb_stride ||
1847                  ((qp + h->cur_pic.qscale_table[top_xy - h->mb_stride] + 1) >> 1) <= qp_thresh))
1848                 return 1;
1849         }
1850     }
1851
1852     top_type        = h->cur_pic.mb_type[top_xy];
1853     left_type[LTOP] = h->cur_pic.mb_type[left_xy[LTOP]];
1854     left_type[LBOT] = h->cur_pic.mb_type[left_xy[LBOT]];
1855     if (sl->deblocking_filter == 2) {
1856         if (h->slice_table[top_xy] != sl->slice_num)
1857             top_type = 0;
1858         if (h->slice_table[left_xy[LBOT]] != sl->slice_num)
1859             left_type[LTOP] = left_type[LBOT] = 0;
1860     } else {
1861         if (h->slice_table[top_xy] == 0xFFFF)
1862             top_type = 0;
1863         if (h->slice_table[left_xy[LBOT]] == 0xFFFF)
1864             left_type[LTOP] = left_type[LBOT] = 0;
1865     }
1866     sl->top_type        = top_type;
1867     sl->left_type[LTOP] = left_type[LTOP];
1868     sl->left_type[LBOT] = left_type[LBOT];
1869
1870     if (IS_INTRA(mb_type))
1871         return 0;
1872
1873     fill_filter_caches_inter(h, sl, mb_type, top_xy, left_xy,
1874                              top_type, left_type, mb_xy, 0);
1875     if (sl->list_count == 2)
1876         fill_filter_caches_inter(h, sl, mb_type, top_xy, left_xy,
1877                                  top_type, left_type, mb_xy, 1);
1878
1879     nnz       = h->non_zero_count[mb_xy];
1880     nnz_cache = sl->non_zero_count_cache;
1881     AV_COPY32(&nnz_cache[4 + 8 * 1], &nnz[0]);
1882     AV_COPY32(&nnz_cache[4 + 8 * 2], &nnz[4]);
1883     AV_COPY32(&nnz_cache[4 + 8 * 3], &nnz[8]);
1884     AV_COPY32(&nnz_cache[4 + 8 * 4], &nnz[12]);
1885     sl->cbp = h->cbp_table[mb_xy];
1886
1887     if (top_type) {
1888         nnz = h->non_zero_count[top_xy];
1889         AV_COPY32(&nnz_cache[4 + 8 * 0], &nnz[3 * 4]);
1890     }
1891
1892     if (left_type[LTOP]) {
1893         nnz = h->non_zero_count[left_xy[LTOP]];
1894         nnz_cache[3 + 8 * 1] = nnz[3 + 0 * 4];
1895         nnz_cache[3 + 8 * 2] = nnz[3 + 1 * 4];
1896         nnz_cache[3 + 8 * 3] = nnz[3 + 2 * 4];
1897         nnz_cache[3 + 8 * 4] = nnz[3 + 3 * 4];
1898     }
1899
1900     /* CAVLC 8x8dct requires NNZ values for residual decoding that differ
1901      * from what the loop filter needs */
1902     if (!CABAC(h) && h->pps.transform_8x8_mode) {
1903         if (IS_8x8DCT(top_type)) {
1904             nnz_cache[4 + 8 * 0] =
1905             nnz_cache[5 + 8 * 0] = (h->cbp_table[top_xy] & 0x4000) >> 12;
1906             nnz_cache[6 + 8 * 0] =
1907             nnz_cache[7 + 8 * 0] = (h->cbp_table[top_xy] & 0x8000) >> 12;
1908         }
1909         if (IS_8x8DCT(left_type[LTOP])) {
1910             nnz_cache[3 + 8 * 1] =
1911             nnz_cache[3 + 8 * 2] = (h->cbp_table[left_xy[LTOP]] & 0x2000) >> 12; // FIXME check MBAFF
1912         }
1913         if (IS_8x8DCT(left_type[LBOT])) {
1914             nnz_cache[3 + 8 * 3] =
1915             nnz_cache[3 + 8 * 4] = (h->cbp_table[left_xy[LBOT]] & 0x8000) >> 12; // FIXME check MBAFF
1916         }
1917
1918         if (IS_8x8DCT(mb_type)) {
1919             nnz_cache[scan8[0]] =
1920             nnz_cache[scan8[1]] =
1921             nnz_cache[scan8[2]] =
1922             nnz_cache[scan8[3]] = (sl->cbp & 0x1000) >> 12;
1923
1924             nnz_cache[scan8[0 + 4]] =
1925             nnz_cache[scan8[1 + 4]] =
1926             nnz_cache[scan8[2 + 4]] =
1927             nnz_cache[scan8[3 + 4]] = (sl->cbp & 0x2000) >> 12;
1928
1929             nnz_cache[scan8[0 + 8]] =
1930             nnz_cache[scan8[1 + 8]] =
1931             nnz_cache[scan8[2 + 8]] =
1932             nnz_cache[scan8[3 + 8]] = (sl->cbp & 0x4000) >> 12;
1933
1934             nnz_cache[scan8[0 + 12]] =
1935             nnz_cache[scan8[1 + 12]] =
1936             nnz_cache[scan8[2 + 12]] =
1937             nnz_cache[scan8[3 + 12]] = (sl->cbp & 0x8000) >> 12;
1938         }
1939     }
1940
1941     return 0;
1942 }
1943
1944 static void loop_filter(const H264Context *h, H264SliceContext *sl, int start_x, int end_x)
1945 {
1946     uint8_t *dest_y, *dest_cb, *dest_cr;
1947     int linesize, uvlinesize, mb_x, mb_y;
1948     const int end_mb_y       = sl->mb_y + FRAME_MBAFF(h);
1949     const int old_slice_type = sl->slice_type;
1950     const int pixel_shift    = h->pixel_shift;
1951     const int block_h        = 16 >> h->chroma_y_shift;
1952
1953     if (sl->deblocking_filter) {
1954         for (mb_x = start_x; mb_x < end_x; mb_x++)
1955             for (mb_y = end_mb_y - FRAME_MBAFF(h); mb_y <= end_mb_y; mb_y++) {
1956                 int mb_xy, mb_type;
1957                 mb_xy         = sl->mb_xy = mb_x + mb_y * h->mb_stride;
1958                 sl->slice_num = h->slice_table[mb_xy];
1959                 mb_type       = h->cur_pic.mb_type[mb_xy];
1960                 sl->list_count = h->list_counts[mb_xy];
1961
1962                 if (FRAME_MBAFF(h))
1963                     sl->mb_mbaff               =
1964                     sl->mb_field_decoding_flag = !!IS_INTERLACED(mb_type);
1965
1966                 sl->mb_x = mb_x;
1967                 sl->mb_y = mb_y;
1968                 dest_y  = h->cur_pic.f.data[0] +
1969                           ((mb_x << pixel_shift) + mb_y * sl->linesize) * 16;
1970                 dest_cb = h->cur_pic.f.data[1] +
1971                           (mb_x << pixel_shift) * (8 << CHROMA444(h)) +
1972                           mb_y * sl->uvlinesize * block_h;
1973                 dest_cr = h->cur_pic.f.data[2] +
1974                           (mb_x << pixel_shift) * (8 << CHROMA444(h)) +
1975                           mb_y * sl->uvlinesize * block_h;
1976                 // FIXME simplify above
1977
1978                 if (MB_FIELD(sl)) {
1979                     linesize   = sl->mb_linesize   = sl->linesize   * 2;
1980                     uvlinesize = sl->mb_uvlinesize = sl->uvlinesize * 2;
1981                     if (mb_y & 1) { // FIXME move out of this function?
1982                         dest_y  -= sl->linesize   * 15;
1983                         dest_cb -= sl->uvlinesize * (block_h - 1);
1984                         dest_cr -= sl->uvlinesize * (block_h - 1);
1985                     }
1986                 } else {
1987                     linesize   = sl->mb_linesize   = sl->linesize;
1988                     uvlinesize = sl->mb_uvlinesize = sl->uvlinesize;
1989                 }
1990                 backup_mb_border(h, sl, dest_y, dest_cb, dest_cr, linesize,
1991                                  uvlinesize, 0);
1992                 if (fill_filter_caches(h, sl, mb_type))
1993                     continue;
1994                 sl->chroma_qp[0] = get_chroma_qp(h, 0, h->cur_pic.qscale_table[mb_xy]);
1995                 sl->chroma_qp[1] = get_chroma_qp(h, 1, h->cur_pic.qscale_table[mb_xy]);
1996
1997                 if (FRAME_MBAFF(h)) {
1998                     ff_h264_filter_mb(h, sl, mb_x, mb_y, dest_y, dest_cb, dest_cr,
1999                                       linesize, uvlinesize);
2000                 } else {
2001                     ff_h264_filter_mb_fast(h, sl, mb_x, mb_y, dest_y, dest_cb,
2002                                            dest_cr, linesize, uvlinesize);
2003                 }
2004             }
2005     }
2006     sl->slice_type  = old_slice_type;
2007     sl->mb_x         = end_x;
2008     sl->mb_y         = end_mb_y - FRAME_MBAFF(h);
2009     sl->chroma_qp[0] = get_chroma_qp(h, 0, sl->qscale);
2010     sl->chroma_qp[1] = get_chroma_qp(h, 1, sl->qscale);
2011 }
2012
2013 static void predict_field_decoding_flag(const H264Context *h, H264SliceContext *sl)
2014 {
2015     const int mb_xy = sl->mb_x + sl->mb_y * h->mb_stride;
2016     int mb_type     = (h->slice_table[mb_xy - 1] == sl->slice_num) ?
2017                       h->cur_pic.mb_type[mb_xy - 1] :
2018                       (h->slice_table[mb_xy - h->mb_stride] == sl->slice_num) ?
2019                       h->cur_pic.mb_type[mb_xy - h->mb_stride] : 0;
2020     sl->mb_mbaff    = sl->mb_field_decoding_flag = IS_INTERLACED(mb_type) ? 1 : 0;
2021 }
2022
2023 /**
2024  * Draw edges and report progress for the last MB row.
2025  */
2026 static void decode_finish_row(const H264Context *h, H264SliceContext *sl)
2027 {
2028     int top            = 16 * (sl->mb_y      >> FIELD_PICTURE(h));
2029     int pic_height     = 16 *  h->mb_height >> FIELD_PICTURE(h);
2030     int height         =  16      << FRAME_MBAFF(h);
2031     int deblock_border = (16 + 4) << FRAME_MBAFF(h);
2032
2033     if (sl->deblocking_filter) {
2034         if ((top + height) >= pic_height)
2035             height += deblock_border;
2036         top -= deblock_border;
2037     }
2038
2039     if (top >= pic_height || (top + height) < 0)
2040         return;
2041
2042     height = FFMIN(height, pic_height - top);
2043     if (top < 0) {
2044         height = top + height;
2045         top    = 0;
2046     }
2047
2048     ff_h264_draw_horiz_band(h, sl, top, height);
2049
2050     if (h->droppable)
2051         return;
2052
2053     ff_thread_report_progress(&h->cur_pic_ptr->tf, top + height - 1,
2054                               h->picture_structure == PICT_BOTTOM_FIELD);
2055 }
2056
2057 static void er_add_slice(H264SliceContext *sl,
2058                          int startx, int starty,
2059                          int endx, int endy, int status)
2060 {
2061 #if CONFIG_ERROR_RESILIENCE
2062     ERContext *er = &sl->er;
2063
2064     er->ref_count = sl->ref_count[0];
2065     ff_er_add_slice(er, startx, starty, endx, endy, status);
2066 #endif
2067 }
2068
2069 static int decode_slice(struct AVCodecContext *avctx, void *arg)
2070 {
2071     H264SliceContext *sl = arg;
2072     const H264Context *h = sl->h264;
2073     int lf_x_start = sl->mb_x;
2074     int ret;
2075
2076     sl->linesize   = h->cur_pic_ptr->f.linesize[0];
2077     sl->uvlinesize = h->cur_pic_ptr->f.linesize[1];
2078
2079     ret = alloc_scratch_buffers(sl, sl->linesize);
2080     if (ret < 0)
2081         return ret;
2082
2083     sl->mb_skip_run = -1;
2084
2085     sl->is_complex = FRAME_MBAFF(h) || h->picture_structure != PICT_FRAME ||
2086                      avctx->codec_id != AV_CODEC_ID_H264 ||
2087                      (CONFIG_GRAY && (h->flags & CODEC_FLAG_GRAY));
2088
2089     if (h->pps.cabac) {
2090         /* realign */
2091         align_get_bits(&sl->gb);
2092
2093         /* init cabac */
2094         ff_init_cabac_decoder(&sl->cabac,
2095                               sl->gb.buffer + get_bits_count(&sl->gb) / 8,
2096                               (get_bits_left(&sl->gb) + 7) / 8);
2097
2098         ff_h264_init_cabac_states(h, sl);
2099
2100         for (;;) {
2101             // START_TIMER
2102             int ret = ff_h264_decode_mb_cabac(h, sl);
2103             int eos;
2104             // STOP_TIMER("decode_mb_cabac")
2105
2106             if (ret >= 0)
2107                 ff_h264_hl_decode_mb(h, sl);
2108
2109             // FIXME optimal? or let mb_decode decode 16x32 ?
2110             if (ret >= 0 && FRAME_MBAFF(h)) {
2111                 sl->mb_y++;
2112
2113                 ret = ff_h264_decode_mb_cabac(h, sl);
2114
2115                 if (ret >= 0)
2116                     ff_h264_hl_decode_mb(h, sl);
2117                 sl->mb_y--;
2118             }
2119             eos = get_cabac_terminate(&sl->cabac);
2120
2121             if ((h->workaround_bugs & FF_BUG_TRUNCATED) &&
2122                 sl->cabac.bytestream > sl->cabac.bytestream_end + 2) {
2123                 er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x - 1,
2124                              sl->mb_y, ER_MB_END);
2125                 if (sl->mb_x >= lf_x_start)
2126                     loop_filter(h, sl, lf_x_start, sl->mb_x + 1);
2127                 return 0;
2128             }
2129             if (ret < 0 || sl->cabac.bytestream > sl->cabac.bytestream_end + 2) {
2130                 av_log(h->avctx, AV_LOG_ERROR,
2131                        "error while decoding MB %d %d, bytestream %td\n",
2132                        sl->mb_x, sl->mb_y,
2133                        sl->cabac.bytestream_end - sl->cabac.bytestream);
2134                 er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x,
2135                              sl->mb_y, ER_MB_ERROR);
2136                 return AVERROR_INVALIDDATA;
2137             }
2138
2139             if (++sl->mb_x >= h->mb_width) {
2140                 loop_filter(h, sl, lf_x_start, sl->mb_x);
2141                 sl->mb_x = lf_x_start = 0;
2142                 decode_finish_row(h, sl);
2143                 ++sl->mb_y;
2144                 if (FIELD_OR_MBAFF_PICTURE(h)) {
2145                     ++sl->mb_y;
2146                     if (FRAME_MBAFF(h) && sl->mb_y < h->mb_height)
2147                         predict_field_decoding_flag(h, sl);
2148                 }
2149             }
2150
2151             if (eos || sl->mb_y >= h->mb_height) {
2152                 tprintf(h->avctx, "slice end %d %d\n",
2153                         get_bits_count(&sl->gb), sl->gb.size_in_bits);
2154                 er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x - 1,
2155                              sl->mb_y, ER_MB_END);
2156                 if (sl->mb_x > lf_x_start)
2157                     loop_filter(h, sl, lf_x_start, sl->mb_x);
2158                 return 0;
2159             }
2160         }
2161     } else {
2162         for (;;) {
2163             int ret = ff_h264_decode_mb_cavlc(h, sl);
2164
2165             if (ret >= 0)
2166                 ff_h264_hl_decode_mb(h, sl);
2167
2168             // FIXME optimal? or let mb_decode decode 16x32 ?
2169             if (ret >= 0 && FRAME_MBAFF(h)) {
2170                 sl->mb_y++;
2171                 ret = ff_h264_decode_mb_cavlc(h, sl);
2172
2173                 if (ret >= 0)
2174                     ff_h264_hl_decode_mb(h, sl);
2175                 sl->mb_y--;
2176             }
2177
2178             if (ret < 0) {
2179                 av_log(h->avctx, AV_LOG_ERROR,
2180                        "error while decoding MB %d %d\n", sl->mb_x, sl->mb_y);
2181                 er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x,
2182                              sl->mb_y, ER_MB_ERROR);
2183                 return ret;
2184             }
2185
2186             if (++sl->mb_x >= h->mb_width) {
2187                 loop_filter(h, sl, lf_x_start, sl->mb_x);
2188                 sl->mb_x = lf_x_start = 0;
2189                 decode_finish_row(h, sl);
2190                 ++sl->mb_y;
2191                 if (FIELD_OR_MBAFF_PICTURE(h)) {
2192                     ++sl->mb_y;
2193                     if (FRAME_MBAFF(h) && sl->mb_y < h->mb_height)
2194                         predict_field_decoding_flag(h, sl);
2195                 }
2196                 if (sl->mb_y >= h->mb_height) {
2197                     tprintf(h->avctx, "slice end %d %d\n",
2198                             get_bits_count(&sl->gb), sl->gb.size_in_bits);
2199
2200                     if (get_bits_left(&sl->gb) == 0) {
2201                         er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y,
2202                                      sl->mb_x - 1, sl->mb_y, ER_MB_END);
2203
2204                         return 0;
2205                     } else {
2206                         er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y,
2207                                      sl->mb_x - 1, sl->mb_y, ER_MB_END);
2208
2209                         return AVERROR_INVALIDDATA;
2210                     }
2211                 }
2212             }
2213
2214             if (get_bits_left(&sl->gb) <= 0 && sl->mb_skip_run <= 0) {
2215                 tprintf(h->avctx, "slice end %d %d\n",
2216                         get_bits_count(&sl->gb), sl->gb.size_in_bits);
2217
2218                 if (get_bits_left(&sl->gb) == 0) {
2219                     er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y,
2220                                  sl->mb_x - 1, sl->mb_y, ER_MB_END);
2221                     if (sl->mb_x > lf_x_start)
2222                         loop_filter(h, sl, lf_x_start, sl->mb_x);
2223
2224                     return 0;
2225                 } else {
2226                     er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x,
2227                                  sl->mb_y, ER_MB_ERROR);
2228
2229                     return AVERROR_INVALIDDATA;
2230                 }
2231             }
2232         }
2233     }
2234 }
2235
2236 /**
2237  * Call decode_slice() for each context.
2238  *
2239  * @param h h264 master context
2240  * @param context_count number of contexts to execute
2241  */
2242 int ff_h264_execute_decode_slices(H264Context *h, unsigned context_count)
2243 {
2244     AVCodecContext *const avctx = h->avctx;
2245     H264SliceContext *sl;
2246     int i;
2247
2248     if (h->avctx->hwaccel)
2249         return 0;
2250     if (context_count == 1) {
2251         int ret = decode_slice(avctx, &h->slice_ctx[0]);
2252         h->mb_y = h->slice_ctx[0].mb_y;
2253         return ret;
2254     } else {
2255         for (i = 1; i < context_count; i++) {
2256             sl                 = &h->slice_ctx[i];
2257             sl->er.error_count = 0;
2258         }
2259
2260         avctx->execute(avctx, decode_slice, h->slice_ctx,
2261                        NULL, context_count, sizeof(h->slice_ctx[0]));
2262
2263         /* pull back stuff from slices to master context */
2264         sl                   = &h->slice_ctx[context_count - 1];
2265         h->mb_y              = sl->mb_y;
2266         for (i = 1; i < context_count; i++)
2267             h->slice_ctx[0].er.error_count += h->slice_ctx[i].er.error_count;
2268     }
2269
2270     return 0;
2271 }