FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
h264_slice.c
Go to the documentation of this file.
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 FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * H.264 / AVC / MPEG-4 part10 codec.
25  * @author Michael Niedermayer <michaelni@gmx.at>
26  */
27 
28 #include "libavutil/avassert.h"
29 #include "libavutil/display.h"
30 #include "libavutil/imgutils.h"
31 #include "libavutil/stereo3d.h"
32 #include "libavutil/timer.h"
33 #include "internal.h"
34 #include "cabac.h"
35 #include "cabac_functions.h"
36 #include "error_resilience.h"
37 #include "avcodec.h"
38 #include "h264.h"
39 #include "h264dec.h"
40 #include "h264data.h"
41 #include "h264chroma.h"
42 #include "h264_mvpred.h"
43 #include "h264_ps.h"
44 #include "golomb.h"
45 #include "mathops.h"
46 #include "mpegutils.h"
47 #include "rectangle.h"
48 #include "thread.h"
49 
50 static const uint8_t field_scan[16+1] = {
51  0 + 0 * 4, 0 + 1 * 4, 1 + 0 * 4, 0 + 2 * 4,
52  0 + 3 * 4, 1 + 1 * 4, 1 + 2 * 4, 1 + 3 * 4,
53  2 + 0 * 4, 2 + 1 * 4, 2 + 2 * 4, 2 + 3 * 4,
54  3 + 0 * 4, 3 + 1 * 4, 3 + 2 * 4, 3 + 3 * 4,
55 };
56 
57 static const uint8_t field_scan8x8[64+1] = {
58  0 + 0 * 8, 0 + 1 * 8, 0 + 2 * 8, 1 + 0 * 8,
59  1 + 1 * 8, 0 + 3 * 8, 0 + 4 * 8, 1 + 2 * 8,
60  2 + 0 * 8, 1 + 3 * 8, 0 + 5 * 8, 0 + 6 * 8,
61  0 + 7 * 8, 1 + 4 * 8, 2 + 1 * 8, 3 + 0 * 8,
62  2 + 2 * 8, 1 + 5 * 8, 1 + 6 * 8, 1 + 7 * 8,
63  2 + 3 * 8, 3 + 1 * 8, 4 + 0 * 8, 3 + 2 * 8,
64  2 + 4 * 8, 2 + 5 * 8, 2 + 6 * 8, 2 + 7 * 8,
65  3 + 3 * 8, 4 + 1 * 8, 5 + 0 * 8, 4 + 2 * 8,
66  3 + 4 * 8, 3 + 5 * 8, 3 + 6 * 8, 3 + 7 * 8,
67  4 + 3 * 8, 5 + 1 * 8, 6 + 0 * 8, 5 + 2 * 8,
68  4 + 4 * 8, 4 + 5 * 8, 4 + 6 * 8, 4 + 7 * 8,
69  5 + 3 * 8, 6 + 1 * 8, 6 + 2 * 8, 5 + 4 * 8,
70  5 + 5 * 8, 5 + 6 * 8, 5 + 7 * 8, 6 + 3 * 8,
71  7 + 0 * 8, 7 + 1 * 8, 6 + 4 * 8, 6 + 5 * 8,
72  6 + 6 * 8, 6 + 7 * 8, 7 + 2 * 8, 7 + 3 * 8,
73  7 + 4 * 8, 7 + 5 * 8, 7 + 6 * 8, 7 + 7 * 8,
74 };
75 
76 static const uint8_t field_scan8x8_cavlc[64+1] = {
77  0 + 0 * 8, 1 + 1 * 8, 2 + 0 * 8, 0 + 7 * 8,
78  2 + 2 * 8, 2 + 3 * 8, 2 + 4 * 8, 3 + 3 * 8,
79  3 + 4 * 8, 4 + 3 * 8, 4 + 4 * 8, 5 + 3 * 8,
80  5 + 5 * 8, 7 + 0 * 8, 6 + 6 * 8, 7 + 4 * 8,
81  0 + 1 * 8, 0 + 3 * 8, 1 + 3 * 8, 1 + 4 * 8,
82  1 + 5 * 8, 3 + 1 * 8, 2 + 5 * 8, 4 + 1 * 8,
83  3 + 5 * 8, 5 + 1 * 8, 4 + 5 * 8, 6 + 1 * 8,
84  5 + 6 * 8, 7 + 1 * 8, 6 + 7 * 8, 7 + 5 * 8,
85  0 + 2 * 8, 0 + 4 * 8, 0 + 5 * 8, 2 + 1 * 8,
86  1 + 6 * 8, 4 + 0 * 8, 2 + 6 * 8, 5 + 0 * 8,
87  3 + 6 * 8, 6 + 0 * 8, 4 + 6 * 8, 6 + 2 * 8,
88  5 + 7 * 8, 6 + 4 * 8, 7 + 2 * 8, 7 + 6 * 8,
89  1 + 0 * 8, 1 + 2 * 8, 0 + 6 * 8, 3 + 0 * 8,
90  1 + 7 * 8, 3 + 2 * 8, 2 + 7 * 8, 4 + 2 * 8,
91  3 + 7 * 8, 5 + 2 * 8, 4 + 7 * 8, 5 + 4 * 8,
92  6 + 3 * 8, 6 + 5 * 8, 7 + 3 * 8, 7 + 7 * 8,
93 };
94 
95 // zigzag_scan8x8_cavlc[i] = zigzag_scan8x8[(i/4) + 16*(i%4)]
96 static const uint8_t zigzag_scan8x8_cavlc[64+1] = {
97  0 + 0 * 8, 1 + 1 * 8, 1 + 2 * 8, 2 + 2 * 8,
98  4 + 1 * 8, 0 + 5 * 8, 3 + 3 * 8, 7 + 0 * 8,
99  3 + 4 * 8, 1 + 7 * 8, 5 + 3 * 8, 6 + 3 * 8,
100  2 + 7 * 8, 6 + 4 * 8, 5 + 6 * 8, 7 + 5 * 8,
101  1 + 0 * 8, 2 + 0 * 8, 0 + 3 * 8, 3 + 1 * 8,
102  3 + 2 * 8, 0 + 6 * 8, 4 + 2 * 8, 6 + 1 * 8,
103  2 + 5 * 8, 2 + 6 * 8, 6 + 2 * 8, 5 + 4 * 8,
104  3 + 7 * 8, 7 + 3 * 8, 4 + 7 * 8, 7 + 6 * 8,
105  0 + 1 * 8, 3 + 0 * 8, 0 + 4 * 8, 4 + 0 * 8,
106  2 + 3 * 8, 1 + 5 * 8, 5 + 1 * 8, 5 + 2 * 8,
107  1 + 6 * 8, 3 + 5 * 8, 7 + 1 * 8, 4 + 5 * 8,
108  4 + 6 * 8, 7 + 4 * 8, 5 + 7 * 8, 6 + 7 * 8,
109  0 + 2 * 8, 2 + 1 * 8, 1 + 3 * 8, 5 + 0 * 8,
110  1 + 4 * 8, 2 + 4 * 8, 6 + 0 * 8, 4 + 3 * 8,
111  0 + 7 * 8, 4 + 4 * 8, 7 + 2 * 8, 3 + 6 * 8,
112  5 + 5 * 8, 6 + 5 * 8, 6 + 6 * 8, 7 + 7 * 8,
113 };
114 
115 static void release_unused_pictures(H264Context *h, int remove_current)
116 {
117  int i;
118 
119  /* release non reference frames */
120  for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
121  if (h->DPB[i].f->buf[0] && !h->DPB[i].reference &&
122  (remove_current || &h->DPB[i] != h->cur_pic_ptr)) {
123  ff_h264_unref_picture(h, &h->DPB[i]);
124  }
125  }
126 }
127 
128 static int alloc_scratch_buffers(H264SliceContext *sl, int linesize)
129 {
130  const H264Context *h = sl->h264;
131  int alloc_size = FFALIGN(FFABS(linesize) + 32, 32);
132 
133  av_fast_malloc(&sl->bipred_scratchpad, &sl->bipred_scratchpad_allocated, 16 * 6 * alloc_size);
134  // edge emu needs blocksize + filter length - 1
135  // (= 21x21 for H.264)
136  av_fast_malloc(&sl->edge_emu_buffer, &sl->edge_emu_buffer_allocated, alloc_size * 2 * 21);
137 
139  h->mb_width * 16 * 3 * sizeof(uint8_t) * 2);
141  h->mb_width * 16 * 3 * sizeof(uint8_t) * 2);
142 
143  if (!sl->bipred_scratchpad || !sl->edge_emu_buffer ||
144  !sl->top_borders[0] || !sl->top_borders[1]) {
147  av_freep(&sl->top_borders[0]);
148  av_freep(&sl->top_borders[1]);
149 
152  sl->top_borders_allocated[0] = 0;
153  sl->top_borders_allocated[1] = 0;
154  return AVERROR(ENOMEM);
155  }
156 
157  return 0;
158 }
159 
161 {
162  const int big_mb_num = h->mb_stride * (h->mb_height + 1) + 1;
163  const int mb_array_size = h->mb_stride * h->mb_height;
164  const int b4_stride = h->mb_width * 4 + 1;
165  const int b4_array_size = b4_stride * h->mb_height * 4;
166 
167  h->qscale_table_pool = av_buffer_pool_init(big_mb_num + h->mb_stride,
169  h->mb_type_pool = av_buffer_pool_init((big_mb_num + h->mb_stride) *
170  sizeof(uint32_t), av_buffer_allocz);
171  h->motion_val_pool = av_buffer_pool_init(2 * (b4_array_size + 4) *
172  sizeof(int16_t), av_buffer_allocz);
173  h->ref_index_pool = av_buffer_pool_init(4 * mb_array_size, av_buffer_allocz);
174 
175  if (!h->qscale_table_pool || !h->mb_type_pool || !h->motion_val_pool ||
176  !h->ref_index_pool) {
181  return AVERROR(ENOMEM);
182  }
183 
184  return 0;
185 }
186 
188 {
189  int i, ret = 0;
190 
191  av_assert0(!pic->f->data[0]);
192 
193  pic->tf.f = pic->f;
194  ret = ff_thread_get_buffer(h->avctx, &pic->tf, pic->reference ?
196  if (ret < 0)
197  goto fail;
198 
199  pic->crop = h->ps.sps->crop;
200  pic->crop_top = h->ps.sps->crop_top;
201  pic->crop_left= h->ps.sps->crop_left;
202 
203  if (h->avctx->hwaccel) {
204  const AVHWAccel *hwaccel = h->avctx->hwaccel;
206  if (hwaccel->frame_priv_data_size) {
208  if (!pic->hwaccel_priv_buf)
209  return AVERROR(ENOMEM);
211  }
212  }
213  if (CONFIG_GRAY && !h->avctx->hwaccel && h->flags & AV_CODEC_FLAG_GRAY && pic->f->data[2]) {
214  int h_chroma_shift, v_chroma_shift;
216  &h_chroma_shift, &v_chroma_shift);
217 
218  for(i=0; i<AV_CEIL_RSHIFT(pic->f->height, v_chroma_shift); i++) {
219  memset(pic->f->data[1] + pic->f->linesize[1]*i,
220  0x80, AV_CEIL_RSHIFT(pic->f->width, h_chroma_shift));
221  memset(pic->f->data[2] + pic->f->linesize[2]*i,
222  0x80, AV_CEIL_RSHIFT(pic->f->width, h_chroma_shift));
223  }
224  }
225 
226  if (!h->qscale_table_pool) {
227  ret = init_table_pools(h);
228  if (ret < 0)
229  goto fail;
230  }
231 
234  if (!pic->qscale_table_buf || !pic->mb_type_buf)
235  goto fail;
236 
237  pic->mb_type = (uint32_t*)pic->mb_type_buf->data + 2 * h->mb_stride + 1;
238  pic->qscale_table = pic->qscale_table_buf->data + 2 * h->mb_stride + 1;
239 
240  for (i = 0; i < 2; i++) {
243  if (!pic->motion_val_buf[i] || !pic->ref_index_buf[i])
244  goto fail;
245 
246  pic->motion_val[i] = (int16_t (*)[2])pic->motion_val_buf[i]->data + 4;
247  pic->ref_index[i] = pic->ref_index_buf[i]->data;
248  }
249 
250  return 0;
251 fail:
252  ff_h264_unref_picture(h, pic);
253  return (ret < 0) ? ret : AVERROR(ENOMEM);
254 }
255 
256 static inline int pic_is_unused(H264Context *h, H264Picture *pic)
257 {
258  if (!pic->f->buf[0])
259  return 1;
260  return 0;
261 }
262 
264 {
265  int i;
266 
267  for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
268  if (pic_is_unused(h, &h->DPB[i]))
269  break;
270  }
271  if (i == H264_MAX_PICTURE_COUNT)
272  return AVERROR_INVALIDDATA;
273 
274  return i;
275 }
276 
277 
278 #define IN_RANGE(a, b, size) (((void*)(a) >= (void*)(b)) && ((void*)(a) < (void*)((b) + (size))))
279 
280 #define REBASE_PICTURE(pic, new_ctx, old_ctx) \
281  (((pic) && (pic) >= (old_ctx)->DPB && \
282  (pic) < (old_ctx)->DPB + H264_MAX_PICTURE_COUNT) ? \
283  &(new_ctx)->DPB[(pic) - (old_ctx)->DPB] : NULL)
284 
286  H264Context *new_base,
287  H264Context *old_base)
288 {
289  int i;
290 
291  for (i = 0; i < count; i++) {
292  av_assert1(!from[i] ||
293  IN_RANGE(from[i], old_base, 1) ||
294  IN_RANGE(from[i], old_base->DPB, H264_MAX_PICTURE_COUNT));
295  to[i] = REBASE_PICTURE(from[i], new_base, old_base);
296  }
297 }
298 
300 
302  const AVCodecContext *src)
303 {
304  H264Context *h = dst->priv_data, *h1 = src->priv_data;
305  int inited = h->context_initialized, err = 0;
306  int need_reinit = 0;
307  int i, ret;
308 
309  if (dst == src)
310  return 0;
311 
312  // We can't fail if SPS isn't set at it breaks current skip_frame code
313  //if (!h1->ps.sps)
314  // return AVERROR_INVALIDDATA;
315 
316  if (inited &&
317  (h->width != h1->width ||
318  h->height != h1->height ||
319  h->mb_width != h1->mb_width ||
320  h->mb_height != h1->mb_height ||
321  !h->ps.sps ||
322  h->ps.sps->bit_depth_luma != h1->ps.sps->bit_depth_luma ||
323  h->ps.sps->chroma_format_idc != h1->ps.sps->chroma_format_idc ||
324  h->ps.sps->colorspace != h1->ps.sps->colorspace)) {
325  need_reinit = 1;
326  }
327 
328  /* copy block_offset since frame_start may not be called */
329  memcpy(h->block_offset, h1->block_offset, sizeof(h->block_offset));
330 
331  // SPS/PPS
332  for (i = 0; i < FF_ARRAY_ELEMS(h->ps.sps_list); i++) {
333  av_buffer_unref(&h->ps.sps_list[i]);
334  if (h1->ps.sps_list[i]) {
335  h->ps.sps_list[i] = av_buffer_ref(h1->ps.sps_list[i]);
336  if (!h->ps.sps_list[i])
337  return AVERROR(ENOMEM);
338  }
339  }
340  for (i = 0; i < FF_ARRAY_ELEMS(h->ps.pps_list); i++) {
341  av_buffer_unref(&h->ps.pps_list[i]);
342  if (h1->ps.pps_list[i]) {
343  h->ps.pps_list[i] = av_buffer_ref(h1->ps.pps_list[i]);
344  if (!h->ps.pps_list[i])
345  return AVERROR(ENOMEM);
346  }
347  }
348 
351  h->ps.pps = NULL;
352  h->ps.sps = NULL;
353  if (h1->ps.pps_ref) {
354  h->ps.pps_ref = av_buffer_ref(h1->ps.pps_ref);
355  if (!h->ps.pps_ref)
356  return AVERROR(ENOMEM);
357  h->ps.pps = (const PPS*)h->ps.pps_ref->data;
358  }
359  if (h1->ps.sps_ref) {
360  h->ps.sps_ref = av_buffer_ref(h1->ps.sps_ref);
361  if (!h->ps.sps_ref)
362  return AVERROR(ENOMEM);
363  h->ps.sps = (const SPS*)h->ps.sps_ref->data;
364  }
365 
366  if (need_reinit || !inited) {
367  h->width = h1->width;
368  h->height = h1->height;
369  h->mb_height = h1->mb_height;
370  h->mb_width = h1->mb_width;
371  h->mb_num = h1->mb_num;
372  h->mb_stride = h1->mb_stride;
373  h->b_stride = h1->b_stride;
374 
375  if (h->context_initialized || h1->context_initialized) {
376  if ((err = h264_slice_header_init(h)) < 0) {
377  av_log(h->avctx, AV_LOG_ERROR, "h264_slice_header_init() failed");
378  return err;
379  }
380  }
381 
382  /* copy block_offset since frame_start may not be called */
383  memcpy(h->block_offset, h1->block_offset, sizeof(h->block_offset));
384  }
385 
386  h->avctx->coded_height = h1->avctx->coded_height;
387  h->avctx->coded_width = h1->avctx->coded_width;
388  h->avctx->width = h1->avctx->width;
389  h->avctx->height = h1->avctx->height;
390  h->coded_picture_number = h1->coded_picture_number;
391  h->first_field = h1->first_field;
392  h->picture_structure = h1->picture_structure;
393  h->mb_aff_frame = h1->mb_aff_frame;
394  h->droppable = h1->droppable;
395  h->backup_width = h1->backup_width;
396  h->backup_height = h1->backup_height;
397  h->backup_pix_fmt = h1->backup_pix_fmt;
398 
399  for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
400  ff_h264_unref_picture(h, &h->DPB[i]);
401  if (h1->DPB[i].f->buf[0] &&
402  (ret = ff_h264_ref_picture(h, &h->DPB[i], &h1->DPB[i])) < 0)
403  return ret;
404  }
405 
406  h->cur_pic_ptr = REBASE_PICTURE(h1->cur_pic_ptr, h, h1);
408  if (h1->cur_pic.f->buf[0]) {
409  ret = ff_h264_ref_picture(h, &h->cur_pic, &h1->cur_pic);
410  if (ret < 0)
411  return ret;
412  }
413 
414  h->enable_er = h1->enable_er;
415  h->workaround_bugs = h1->workaround_bugs;
416  h->droppable = h1->droppable;
417 
418  // extradata/NAL handling
419  h->is_avc = h1->is_avc;
420  h->nal_length_size = h1->nal_length_size;
421  h->sei.unregistered.x264_build = h1->sei.unregistered.x264_build;
422 
423  memcpy(&h->poc, &h1->poc, sizeof(h->poc));
424 
425  memcpy(h->default_ref, h1->default_ref, sizeof(h->default_ref));
426  memcpy(h->short_ref, h1->short_ref, sizeof(h->short_ref));
427  memcpy(h->long_ref, h1->long_ref, sizeof(h->long_ref));
428  memcpy(h->delayed_pic, h1->delayed_pic, sizeof(h->delayed_pic));
429  memcpy(h->last_pocs, h1->last_pocs, sizeof(h->last_pocs));
430 
431  h->next_output_pic = h1->next_output_pic;
432  h->next_outputed_poc = h1->next_outputed_poc;
433 
434  memcpy(h->mmco, h1->mmco, sizeof(h->mmco));
435  h->nb_mmco = h1->nb_mmco;
436  h->mmco_reset = h1->mmco_reset;
437  h->explicit_ref_marking = h1->explicit_ref_marking;
438  h->long_ref_count = h1->long_ref_count;
439  h->short_ref_count = h1->short_ref_count;
440 
441  copy_picture_range(h->short_ref, h1->short_ref, 32, h, h1);
442  copy_picture_range(h->long_ref, h1->long_ref, 32, h, h1);
443  copy_picture_range(h->delayed_pic, h1->delayed_pic,
444  MAX_DELAYED_PIC_COUNT + 2, h, h1);
445 
446  h->frame_recovered = h1->frame_recovered;
447 
448  if (!h->cur_pic_ptr)
449  return 0;
450 
451  if (!h->droppable) {
453  h->poc.prev_poc_msb = h->poc.poc_msb;
454  h->poc.prev_poc_lsb = h->poc.poc_lsb;
455  }
458 
459  h->recovery_frame = h1->recovery_frame;
460 
461  return err;
462 }
463 
465 {
466  H264Picture *pic;
467  int i, ret;
468  const int pixel_shift = h->pixel_shift;
469  int c[4] = {
470  1<<(h->ps.sps->bit_depth_luma-1),
471  1<<(h->ps.sps->bit_depth_chroma-1),
472  1<<(h->ps.sps->bit_depth_chroma-1),
473  -1
474  };
475 
476  if (!ff_thread_can_start_frame(h->avctx)) {
477  av_log(h->avctx, AV_LOG_ERROR, "Attempt to start a frame outside SETUP state\n");
478  return -1;
479  }
480 
482  h->cur_pic_ptr = NULL;
483 
484  i = find_unused_picture(h);
485  if (i < 0) {
486  av_log(h->avctx, AV_LOG_ERROR, "no frame buffer available\n");
487  return i;
488  }
489  pic = &h->DPB[i];
490 
491  pic->reference = h->droppable ? 0 : h->picture_structure;
494  pic->frame_num = h->poc.frame_num;
495  /*
496  * Zero key_frame here; IDR markings per slice in frame or fields are ORed
497  * in later.
498  * See decode_nal_units().
499  */
500  pic->f->key_frame = 0;
501  pic->mmco_reset = 0;
502  pic->recovered = 0;
503  pic->invalid_gap = 0;
505 
506  pic->f->pict_type = h->slice_ctx[0].slice_type;
507 
508  if ((ret = alloc_picture(h, pic)) < 0)
509  return ret;
510  if(!h->frame_recovered && !h->avctx->hwaccel
513 #endif
514  )
515  ff_color_frame(pic->f, c);
516 
517  h->cur_pic_ptr = pic;
519  if (CONFIG_ERROR_RESILIENCE) {
521  }
522 
523  if ((ret = ff_h264_ref_picture(h, &h->cur_pic, h->cur_pic_ptr)) < 0)
524  return ret;
525 
526  for (i = 0; i < h->nb_slice_ctx; i++) {
527  h->slice_ctx[i].linesize = h->cur_pic_ptr->f->linesize[0];
528  h->slice_ctx[i].uvlinesize = h->cur_pic_ptr->f->linesize[1];
529  }
530 
531  if (CONFIG_ERROR_RESILIENCE && h->enable_er) {
535  }
536 
537  for (i = 0; i < 16; i++) {
538  h->block_offset[i] = (4 * ((scan8[i] - scan8[0]) & 7) << pixel_shift) + 4 * pic->f->linesize[0] * ((scan8[i] - scan8[0]) >> 3);
539  h->block_offset[48 + i] = (4 * ((scan8[i] - scan8[0]) & 7) << pixel_shift) + 8 * pic->f->linesize[0] * ((scan8[i] - scan8[0]) >> 3);
540  }
541  for (i = 0; i < 16; i++) {
542  h->block_offset[16 + i] =
543  h->block_offset[32 + i] = (4 * ((scan8[i] - scan8[0]) & 7) << pixel_shift) + 4 * pic->f->linesize[1] * ((scan8[i] - scan8[0]) >> 3);
544  h->block_offset[48 + 16 + i] =
545  h->block_offset[48 + 32 + i] = (4 * ((scan8[i] - scan8[0]) & 7) << pixel_shift) + 8 * pic->f->linesize[1] * ((scan8[i] - scan8[0]) >> 3);
546  }
547 
548  /* We mark the current picture as non-reference after allocating it, so
549  * that if we break out due to an error it can be released automatically
550  * in the next ff_mpv_frame_start().
551  */
552  h->cur_pic_ptr->reference = 0;
553 
554  h->cur_pic_ptr->field_poc[0] = h->cur_pic_ptr->field_poc[1] = INT_MAX;
555 
556  h->next_output_pic = NULL;
557 
558  h->postpone_filter = 0;
559 
561 
562  assert(h->cur_pic_ptr->long_ref == 0);
563 
564  return 0;
565 }
566 
568  uint8_t *src_y,
569  uint8_t *src_cb, uint8_t *src_cr,
570  int linesize, int uvlinesize,
571  int simple)
572 {
573  uint8_t *top_border;
574  int top_idx = 1;
575  const int pixel_shift = h->pixel_shift;
576  int chroma444 = CHROMA444(h);
577  int chroma422 = CHROMA422(h);
578 
579  src_y -= linesize;
580  src_cb -= uvlinesize;
581  src_cr -= uvlinesize;
582 
583  if (!simple && FRAME_MBAFF(h)) {
584  if (sl->mb_y & 1) {
585  if (!MB_MBAFF(sl)) {
586  top_border = sl->top_borders[0][sl->mb_x];
587  AV_COPY128(top_border, src_y + 15 * linesize);
588  if (pixel_shift)
589  AV_COPY128(top_border + 16, src_y + 15 * linesize + 16);
590  if (simple || !CONFIG_GRAY || !(h->flags & AV_CODEC_FLAG_GRAY)) {
591  if (chroma444) {
592  if (pixel_shift) {
593  AV_COPY128(top_border + 32, src_cb + 15 * uvlinesize);
594  AV_COPY128(top_border + 48, src_cb + 15 * uvlinesize + 16);
595  AV_COPY128(top_border + 64, src_cr + 15 * uvlinesize);
596  AV_COPY128(top_border + 80, src_cr + 15 * uvlinesize + 16);
597  } else {
598  AV_COPY128(top_border + 16, src_cb + 15 * uvlinesize);
599  AV_COPY128(top_border + 32, src_cr + 15 * uvlinesize);
600  }
601  } else if (chroma422) {
602  if (pixel_shift) {
603  AV_COPY128(top_border + 32, src_cb + 15 * uvlinesize);
604  AV_COPY128(top_border + 48, src_cr + 15 * uvlinesize);
605  } else {
606  AV_COPY64(top_border + 16, src_cb + 15 * uvlinesize);
607  AV_COPY64(top_border + 24, src_cr + 15 * uvlinesize);
608  }
609  } else {
610  if (pixel_shift) {
611  AV_COPY128(top_border + 32, src_cb + 7 * uvlinesize);
612  AV_COPY128(top_border + 48, src_cr + 7 * uvlinesize);
613  } else {
614  AV_COPY64(top_border + 16, src_cb + 7 * uvlinesize);
615  AV_COPY64(top_border + 24, src_cr + 7 * uvlinesize);
616  }
617  }
618  }
619  }
620  } else if (MB_MBAFF(sl)) {
621  top_idx = 0;
622  } else
623  return;
624  }
625 
626  top_border = sl->top_borders[top_idx][sl->mb_x];
627  /* There are two lines saved, the line above the top macroblock
628  * of a pair, and the line above the bottom macroblock. */
629  AV_COPY128(top_border, src_y + 16 * linesize);
630  if (pixel_shift)
631  AV_COPY128(top_border + 16, src_y + 16 * linesize + 16);
632 
633  if (simple || !CONFIG_GRAY || !(h->flags & AV_CODEC_FLAG_GRAY)) {
634  if (chroma444) {
635  if (pixel_shift) {
636  AV_COPY128(top_border + 32, src_cb + 16 * linesize);
637  AV_COPY128(top_border + 48, src_cb + 16 * linesize + 16);
638  AV_COPY128(top_border + 64, src_cr + 16 * linesize);
639  AV_COPY128(top_border + 80, src_cr + 16 * linesize + 16);
640  } else {
641  AV_COPY128(top_border + 16, src_cb + 16 * linesize);
642  AV_COPY128(top_border + 32, src_cr + 16 * linesize);
643  }
644  } else if (chroma422) {
645  if (pixel_shift) {
646  AV_COPY128(top_border + 32, src_cb + 16 * uvlinesize);
647  AV_COPY128(top_border + 48, src_cr + 16 * uvlinesize);
648  } else {
649  AV_COPY64(top_border + 16, src_cb + 16 * uvlinesize);
650  AV_COPY64(top_border + 24, src_cr + 16 * uvlinesize);
651  }
652  } else {
653  if (pixel_shift) {
654  AV_COPY128(top_border + 32, src_cb + 8 * uvlinesize);
655  AV_COPY128(top_border + 48, src_cr + 8 * uvlinesize);
656  } else {
657  AV_COPY64(top_border + 16, src_cb + 8 * uvlinesize);
658  AV_COPY64(top_border + 24, src_cr + 8 * uvlinesize);
659  }
660  }
661  }
662 }
663 
664 /**
665  * Initialize implicit_weight table.
666  * @param field 0/1 initialize the weight for interlaced MBAFF
667  * -1 initializes the rest
668  */
669 static void implicit_weight_table(const H264Context *h, H264SliceContext *sl, int field)
670 {
671  int ref0, ref1, i, cur_poc, ref_start, ref_count0, ref_count1;
672 
673  for (i = 0; i < 2; i++) {
674  sl->pwt.luma_weight_flag[i] = 0;
675  sl->pwt.chroma_weight_flag[i] = 0;
676  }
677 
678  if (field < 0) {
679  if (h->picture_structure == PICT_FRAME) {
680  cur_poc = h->cur_pic_ptr->poc;
681  } else {
682  cur_poc = h->cur_pic_ptr->field_poc[h->picture_structure - 1];
683  }
684  if (sl->ref_count[0] == 1 && sl->ref_count[1] == 1 && !FRAME_MBAFF(h) &&
685  sl->ref_list[0][0].poc + (int64_t)sl->ref_list[1][0].poc == 2 * cur_poc) {
686  sl->pwt.use_weight = 0;
687  sl->pwt.use_weight_chroma = 0;
688  return;
689  }
690  ref_start = 0;
691  ref_count0 = sl->ref_count[0];
692  ref_count1 = sl->ref_count[1];
693  } else {
694  cur_poc = h->cur_pic_ptr->field_poc[field];
695  ref_start = 16;
696  ref_count0 = 16 + 2 * sl->ref_count[0];
697  ref_count1 = 16 + 2 * sl->ref_count[1];
698  }
699 
700  sl->pwt.use_weight = 2;
701  sl->pwt.use_weight_chroma = 2;
702  sl->pwt.luma_log2_weight_denom = 5;
704 
705  for (ref0 = ref_start; ref0 < ref_count0; ref0++) {
706  int64_t poc0 = sl->ref_list[0][ref0].poc;
707  for (ref1 = ref_start; ref1 < ref_count1; ref1++) {
708  int w = 32;
709  if (!sl->ref_list[0][ref0].parent->long_ref && !sl->ref_list[1][ref1].parent->long_ref) {
710  int poc1 = sl->ref_list[1][ref1].poc;
711  int td = av_clip_int8(poc1 - poc0);
712  if (td) {
713  int tb = av_clip_int8(cur_poc - poc0);
714  int tx = (16384 + (FFABS(td) >> 1)) / td;
715  int dist_scale_factor = (tb * tx + 32) >> 8;
716  if (dist_scale_factor >= -64 && dist_scale_factor <= 128)
717  w = 64 - dist_scale_factor;
718  }
719  }
720  if (field < 0) {
721  sl->pwt.implicit_weight[ref0][ref1][0] =
722  sl->pwt.implicit_weight[ref0][ref1][1] = w;
723  } else {
724  sl->pwt.implicit_weight[ref0][ref1][field] = w;
725  }
726  }
727  }
728 }
729 
730 /**
731  * initialize scan tables
732  */
734 {
735  int i;
736  for (i = 0; i < 16; i++) {
737 #define TRANSPOSE(x) ((x) >> 2) | (((x) << 2) & 0xF)
739  h->field_scan[i] = TRANSPOSE(field_scan[i]);
740 #undef TRANSPOSE
741  }
742  for (i = 0; i < 64; i++) {
743 #define TRANSPOSE(x) ((x) >> 3) | (((x) & 7) << 3)
748 #undef TRANSPOSE
749  }
750  if (h->ps.sps->transform_bypass) { // FIXME same ugly
751  memcpy(h->zigzag_scan_q0 , ff_zigzag_scan , sizeof(h->zigzag_scan_q0 ));
752  memcpy(h->zigzag_scan8x8_q0 , ff_zigzag_direct , sizeof(h->zigzag_scan8x8_q0 ));
754  memcpy(h->field_scan_q0 , field_scan , sizeof(h->field_scan_q0 ));
755  memcpy(h->field_scan8x8_q0 , field_scan8x8 , sizeof(h->field_scan8x8_q0 ));
757  } else {
758  memcpy(h->zigzag_scan_q0 , h->zigzag_scan , sizeof(h->zigzag_scan_q0 ));
759  memcpy(h->zigzag_scan8x8_q0 , h->zigzag_scan8x8 , sizeof(h->zigzag_scan8x8_q0 ));
761  memcpy(h->field_scan_q0 , h->field_scan , sizeof(h->field_scan_q0 ));
762  memcpy(h->field_scan8x8_q0 , h->field_scan8x8 , sizeof(h->field_scan8x8_q0 ));
764  }
765 }
766 
767 static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback)
768 {
769 #define HWACCEL_MAX (CONFIG_H264_DXVA2_HWACCEL + \
770  CONFIG_H264_D3D11VA_HWACCEL + \
771  CONFIG_H264_VAAPI_HWACCEL + \
772  (CONFIG_H264_VDA_HWACCEL * 2) + \
773  CONFIG_H264_VIDEOTOOLBOX_HWACCEL + \
774  CONFIG_H264_VDPAU_HWACCEL)
776  const enum AVPixelFormat *choices = pix_fmts;
777  int i;
778 
779  switch (h->ps.sps->bit_depth_luma) {
780  case 9:
781  if (CHROMA444(h)) {
782  if (h->avctx->colorspace == AVCOL_SPC_RGB) {
783  *fmt++ = AV_PIX_FMT_GBRP9;
784  } else
785  *fmt++ = AV_PIX_FMT_YUV444P9;
786  } else if (CHROMA422(h))
787  *fmt++ = AV_PIX_FMT_YUV422P9;
788  else
789  *fmt++ = AV_PIX_FMT_YUV420P9;
790  break;
791  case 10:
792  if (CHROMA444(h)) {
793  if (h->avctx->colorspace == AVCOL_SPC_RGB) {
794  *fmt++ = AV_PIX_FMT_GBRP10;
795  } else
796  *fmt++ = AV_PIX_FMT_YUV444P10;
797  } else if (CHROMA422(h))
798  *fmt++ = AV_PIX_FMT_YUV422P10;
799  else
800  *fmt++ = AV_PIX_FMT_YUV420P10;
801  break;
802  case 12:
803  if (CHROMA444(h)) {
804  if (h->avctx->colorspace == AVCOL_SPC_RGB) {
805  *fmt++ = AV_PIX_FMT_GBRP12;
806  } else
807  *fmt++ = AV_PIX_FMT_YUV444P12;
808  } else if (CHROMA422(h))
809  *fmt++ = AV_PIX_FMT_YUV422P12;
810  else
811  *fmt++ = AV_PIX_FMT_YUV420P12;
812  break;
813  case 14:
814  if (CHROMA444(h)) {
815  if (h->avctx->colorspace == AVCOL_SPC_RGB) {
816  *fmt++ = AV_PIX_FMT_GBRP14;
817  } else
818  *fmt++ = AV_PIX_FMT_YUV444P14;
819  } else if (CHROMA422(h))
820  *fmt++ = AV_PIX_FMT_YUV422P14;
821  else
822  *fmt++ = AV_PIX_FMT_YUV420P14;
823  break;
824  case 8:
825 #if CONFIG_H264_VDPAU_HWACCEL
826  *fmt++ = AV_PIX_FMT_VDPAU;
827 #endif
828  if (CHROMA444(h)) {
829  if (h->avctx->colorspace == AVCOL_SPC_RGB)
830  *fmt++ = AV_PIX_FMT_GBRP;
831  else if (h->avctx->color_range == AVCOL_RANGE_JPEG)
832  *fmt++ = AV_PIX_FMT_YUVJ444P;
833  else
834  *fmt++ = AV_PIX_FMT_YUV444P;
835  } else if (CHROMA422(h)) {
837  *fmt++ = AV_PIX_FMT_YUVJ422P;
838  else
839  *fmt++ = AV_PIX_FMT_YUV422P;
840  } else {
841 #if CONFIG_H264_DXVA2_HWACCEL
842  *fmt++ = AV_PIX_FMT_DXVA2_VLD;
843 #endif
844 #if CONFIG_H264_D3D11VA_HWACCEL
845  *fmt++ = AV_PIX_FMT_D3D11VA_VLD;
846 #endif
847 #if CONFIG_H264_VAAPI_HWACCEL
848  *fmt++ = AV_PIX_FMT_VAAPI;
849 #endif
850 #if CONFIG_H264_VDA_HWACCEL
851  *fmt++ = AV_PIX_FMT_VDA_VLD;
852  *fmt++ = AV_PIX_FMT_VDA;
853 #endif
854 #if CONFIG_H264_VIDEOTOOLBOX_HWACCEL
855  *fmt++ = AV_PIX_FMT_VIDEOTOOLBOX;
856 #endif
857  if (h->avctx->codec->pix_fmts)
858  choices = h->avctx->codec->pix_fmts;
859  else if (h->avctx->color_range == AVCOL_RANGE_JPEG)
860  *fmt++ = AV_PIX_FMT_YUVJ420P;
861  else
862  *fmt++ = AV_PIX_FMT_YUV420P;
863  }
864  break;
865  default:
867  "Unsupported bit depth %d\n", h->ps.sps->bit_depth_luma);
868  return AVERROR_INVALIDDATA;
869  }
870 
871  *fmt = AV_PIX_FMT_NONE;
872 
873  for (i=0; choices[i] != AV_PIX_FMT_NONE; i++)
874  if (choices[i] == h->avctx->pix_fmt && !force_callback)
875  return choices[i];
876  return ff_thread_get_format(h->avctx, choices);
877 }
878 
879 /* export coded and cropped frame dimensions to AVCodecContext */
881 {
882  const SPS *sps = (const SPS*)h->ps.sps;
883  int width = h->width - (sps->crop_right + sps->crop_left);
884  int height = h->height - (sps->crop_top + sps->crop_bottom);
885  av_assert0(sps->crop_right + sps->crop_left < (unsigned)h->width);
886  av_assert0(sps->crop_top + sps->crop_bottom < (unsigned)h->height);
887 
888  /* handle container cropping */
889  if (FFALIGN(h->avctx->width, 16) == FFALIGN(width, 16) &&
890  FFALIGN(h->avctx->height, 16) == FFALIGN(height, 16) &&
891  h->avctx->width <= width &&
892  h->avctx->height <= height
893  ) {
894  width = h->avctx->width;
895  height = h->avctx->height;
896  }
897 
898  h->avctx->coded_width = h->width;
899  h->avctx->coded_height = h->height;
900  h->avctx->width = width;
901  h->avctx->height = height;
902 
903  return 0;
904 }
905 
907 {
908  const SPS *sps = h->ps.sps;
909  int i, ret;
910 
911  ff_set_sar(h->avctx, sps->sar);
913  &h->chroma_x_shift, &h->chroma_y_shift);
914 
915  if (sps->timing_info_present_flag) {
916  int64_t den = sps->time_scale;
917  if (h->sei.unregistered.x264_build < 44U)
918  den *= 2;
920  sps->num_units_in_tick * h->avctx->ticks_per_frame, den, 1 << 30);
921  }
922 
924 
925  h->first_field = 0;
926  h->prev_interlaced_frame = 1;
927 
928  init_scan_tables(h);
929  ret = ff_h264_alloc_tables(h);
930  if (ret < 0) {
931  av_log(h->avctx, AV_LOG_ERROR, "Could not allocate memory\n");
932  goto fail;
933  }
934 
935 #if FF_API_CAP_VDPAU
936  if (h->avctx->codec &&
938  (sps->bit_depth_luma != 8 || sps->chroma_format_idc > 1)) {
940  "VDPAU decoding does not support video colorspace.\n");
941  ret = AVERROR_INVALIDDATA;
942  goto fail;
943  }
944 #endif
945 
946  if (sps->bit_depth_luma < 8 || sps->bit_depth_luma > 14 ||
947  sps->bit_depth_luma == 11 || sps->bit_depth_luma == 13
948  ) {
949  av_log(h->avctx, AV_LOG_ERROR, "Unsupported bit depth %d\n",
950  sps->bit_depth_luma);
951  ret = AVERROR_INVALIDDATA;
952  goto fail;
953  }
954 
955  h->cur_bit_depth_luma =
958  h->pixel_shift = sps->bit_depth_luma > 8;
960  h->bit_depth_luma = sps->bit_depth_luma;
961 
963  sps->chroma_format_idc);
967  sps->chroma_format_idc);
969 
970  if (!HAVE_THREADS || !(h->avctx->active_thread_type & FF_THREAD_SLICE)) {
971  ret = ff_h264_slice_context_init(h, &h->slice_ctx[0]);
972  if (ret < 0) {
973  av_log(h->avctx, AV_LOG_ERROR, "context_init() failed.\n");
974  goto fail;
975  }
976  } else {
977  for (i = 0; i < h->nb_slice_ctx; i++) {
978  H264SliceContext *sl = &h->slice_ctx[i];
979 
980  sl->h264 = h;
981  sl->intra4x4_pred_mode = h->intra4x4_pred_mode + i * 8 * 2 * h->mb_stride;
982  sl->mvd_table[0] = h->mvd_table[0] + i * 8 * 2 * h->mb_stride;
983  sl->mvd_table[1] = h->mvd_table[1] + i * 8 * 2 * h->mb_stride;
984 
985  if ((ret = ff_h264_slice_context_init(h, sl)) < 0) {
986  av_log(h->avctx, AV_LOG_ERROR, "context_init() failed.\n");
987  goto fail;
988  }
989  }
990  }
991 
992  h->context_initialized = 1;
993 
994  return 0;
995 fail:
997  h->context_initialized = 0;
998  return ret;
999 }
1000 
1002 {
1003  switch (a) {
1007  default:
1008  return a;
1009  }
1010 }
1011 
1012 static int h264_init_ps(H264Context *h, const H264SliceContext *sl, int first_slice)
1013 {
1014  const SPS *sps;
1015  int needs_reinit = 0, must_reinit, ret;
1016 
1017  if (first_slice) {
1018  av_buffer_unref(&h->ps.pps_ref);
1019  h->ps.pps = NULL;
1020  h->ps.pps_ref = av_buffer_ref(h->ps.pps_list[sl->pps_id]);
1021  if (!h->ps.pps_ref)
1022  return AVERROR(ENOMEM);
1023  h->ps.pps = (const PPS*)h->ps.pps_ref->data;
1024  }
1025 
1026  if (h->ps.sps != (const SPS*)h->ps.sps_list[h->ps.pps->sps_id]->data) {
1027  av_buffer_unref(&h->ps.sps_ref);
1028  h->ps.sps = NULL;
1029  h->ps.sps_ref = av_buffer_ref(h->ps.sps_list[h->ps.pps->sps_id]);
1030  if (!h->ps.sps_ref)
1031  return AVERROR(ENOMEM);
1032  h->ps.sps = (const SPS*)h->ps.sps_ref->data;
1033 
1034  if (h->mb_width != h->ps.sps->mb_width ||
1035  h->mb_height != h->ps.sps->mb_height * (2 - h->ps.sps->frame_mbs_only_flag) ||
1038  )
1039  needs_reinit = 1;
1040 
1041  if (h->bit_depth_luma != h->ps.sps->bit_depth_luma ||
1043  needs_reinit = 1;
1044  }
1045  sps = h->ps.sps;
1046 
1047  must_reinit = (h->context_initialized &&
1048  ( 16*sps->mb_width != h->avctx->coded_width
1049  || 16*sps->mb_height * (2 - sps->frame_mbs_only_flag) != h->avctx->coded_height
1050  || h->cur_bit_depth_luma != sps->bit_depth_luma
1052  || h->mb_width != sps->mb_width
1053  || h->mb_height != sps->mb_height * (2 - sps->frame_mbs_only_flag)
1054  ));
1055  if (h->avctx->pix_fmt == AV_PIX_FMT_NONE
1057  must_reinit = 1;
1058 
1059  if (first_slice && av_cmp_q(sps->sar, h->avctx->sample_aspect_ratio))
1060  must_reinit = 1;
1061 
1062  if (!h->setup_finished) {
1063  h->avctx->profile = ff_h264_get_profile(sps);
1064  h->avctx->level = sps->level_idc;
1065  h->avctx->refs = sps->ref_frame_count;
1066 
1067  h->mb_width = sps->mb_width;
1068  h->mb_height = sps->mb_height * (2 - sps->frame_mbs_only_flag);
1069  h->mb_num = h->mb_width * h->mb_height;
1070  h->mb_stride = h->mb_width + 1;
1071 
1072  h->b_stride = h->mb_width * 4;
1073 
1074  h->chroma_y_shift = sps->chroma_format_idc <= 1; // 400 uses yuv420p
1075 
1076  h->width = 16 * h->mb_width;
1077  h->height = 16 * h->mb_height;
1078 
1079  ret = init_dimensions(h);
1080  if (ret < 0)
1081  return ret;
1082 
1083  if (sps->video_signal_type_present_flag) {
1084  h->avctx->color_range = sps->full_range > 0 ? AVCOL_RANGE_JPEG
1085  : AVCOL_RANGE_MPEG;
1087  if (h->avctx->colorspace != sps->colorspace)
1088  needs_reinit = 1;
1090  h->avctx->color_trc = sps->color_trc;
1091  h->avctx->colorspace = sps->colorspace;
1092  }
1093  }
1094  }
1095 
1096  if (!h->context_initialized || must_reinit || needs_reinit) {
1097  int flush_changes = h->context_initialized;
1098  h->context_initialized = 0;
1099  if (sl != h->slice_ctx) {
1101  "changing width %d -> %d / height %d -> %d on "
1102  "slice %d\n",
1103  h->width, h->avctx->coded_width,
1104  h->height, h->avctx->coded_height,
1105  h->current_slice + 1);
1106  return AVERROR_INVALIDDATA;
1107  }
1108 
1109  av_assert1(first_slice);
1110 
1111  if (flush_changes)
1113 
1114  if ((ret = get_pixel_format(h, 1)) < 0)
1115  return ret;
1116  h->avctx->pix_fmt = ret;
1117 
1118  av_log(h->avctx, AV_LOG_VERBOSE, "Reinit context to %dx%d, "
1119  "pix_fmt: %s\n", h->width, h->height, av_get_pix_fmt_name(h->avctx->pix_fmt));
1120 
1121  if ((ret = h264_slice_header_init(h)) < 0) {
1123  "h264_slice_header_init() failed\n");
1124  return ret;
1125  }
1126  }
1127 
1128  return 0;
1129 }
1130 
1132 {
1133  const SPS *sps = h->ps.sps;
1134  H264Picture *cur = h->cur_pic_ptr;
1135 
1136  cur->f->interlaced_frame = 0;
1137  cur->f->repeat_pict = 0;
1138 
1139  /* Signal interlacing information externally. */
1140  /* Prioritize picture timing SEI information over used
1141  * decoding process if it exists. */
1142 
1143  if (sps->pic_struct_present_flag) {
1145  switch (pt->pic_struct) {
1146  case SEI_PIC_STRUCT_FRAME:
1147  break;
1150  cur->f->interlaced_frame = 1;
1151  break;
1154  if (FIELD_OR_MBAFF_PICTURE(h))
1155  cur->f->interlaced_frame = 1;
1156  else
1157  // try to flag soft telecine progressive
1159  break;
1162  /* Signal the possibility of telecined film externally
1163  * (pic_struct 5,6). From these hints, let the applications
1164  * decide if they apply deinterlacing. */
1165  cur->f->repeat_pict = 1;
1166  break;
1168  cur->f->repeat_pict = 2;
1169  break;
1171  cur->f->repeat_pict = 4;
1172  break;
1173  }
1174 
1175  if ((pt->ct_type & 3) &&
1177  cur->f->interlaced_frame = (pt->ct_type & (1 << 1)) != 0;
1178  } else {
1179  /* Derive interlacing flag from used decoding process. */
1181  }
1183 
1184  if (cur->field_poc[0] != cur->field_poc[1]) {
1185  /* Derive top_field_first from field pocs. */
1186  cur->f->top_field_first = cur->field_poc[0] < cur->field_poc[1];
1187  } else {
1188  if (sps->pic_struct_present_flag) {
1189  /* Use picture timing SEI information. Even if it is a
1190  * information of a past frame, better than nothing. */
1193  cur->f->top_field_first = 1;
1194  else
1195  cur->f->top_field_first = 0;
1196  } else if (cur->f->interlaced_frame) {
1197  /* Default to top field first when pic_struct_present_flag
1198  * is not set but interlaced frame detected */
1199  cur->f->top_field_first = 1;
1200  } else {
1201  /* Most likely progressive */
1202  cur->f->top_field_first = 0;
1203  }
1204  }
1205 
1206  if (h->sei.frame_packing.present &&
1211  AVStereo3D *stereo = av_stereo3d_create_side_data(cur->f);
1212  if (stereo) {
1213  switch (fp->frame_packing_arrangement_type) {
1214  case 0:
1215  stereo->type = AV_STEREO3D_CHECKERBOARD;
1216  break;
1217  case 1:
1218  stereo->type = AV_STEREO3D_COLUMNS;
1219  break;
1220  case 2:
1221  stereo->type = AV_STEREO3D_LINES;
1222  break;
1223  case 3:
1224  if (fp->quincunx_sampling_flag)
1226  else
1227  stereo->type = AV_STEREO3D_SIDEBYSIDE;
1228  break;
1229  case 4:
1230  stereo->type = AV_STEREO3D_TOPBOTTOM;
1231  break;
1232  case 5:
1233  stereo->type = AV_STEREO3D_FRAMESEQUENCE;
1234  break;
1235  case 6:
1236  stereo->type = AV_STEREO3D_2D;
1237  break;
1238  }
1239 
1240  if (fp->content_interpretation_type == 2)
1241  stereo->flags = AV_STEREO3D_FLAG_INVERT;
1242  }
1243  }
1244 
1245  if (h->sei.display_orientation.present &&
1250  double angle = o->anticlockwise_rotation * 360 / (double) (1 << 16);
1251  AVFrameSideData *rotation = av_frame_new_side_data(cur->f,
1253  sizeof(int32_t) * 9);
1254  if (rotation) {
1255  av_display_rotation_set((int32_t *)rotation->data, angle);
1256  av_display_matrix_flip((int32_t *)rotation->data,
1257  o->hflip, o->vflip);
1258  }
1259  }
1260 
1261  if (h->sei.afd.present) {
1263  sizeof(uint8_t));
1264 
1265  if (sd) {
1267  h->sei.afd.present = 0;
1268  }
1269  }
1270 
1271  if (h->sei.a53_caption.a53_caption) {
1272  H264SEIA53Caption *a53 = &h->sei.a53_caption;
1275  a53->a53_caption_size);
1276  if (sd)
1277  memcpy(sd->data, a53->a53_caption, a53->a53_caption_size);
1278  av_freep(&a53->a53_caption);
1279  a53->a53_caption_size = 0;
1281  }
1282 
1283  return 0;
1284 }
1285 
1286 /* This function is called right after decoding the slice header for a first
1287  * slice in a field (or a frame). It decides whether we are decoding a new frame
1288  * or a second field in a pair and does the necessary setup.
1289  */
1291  const H2645NAL *nal, int first_slice)
1292 {
1293  int i;
1294  const SPS *sps;
1295 
1296  int last_pic_structure, last_pic_droppable, ret;
1297 
1298  ret = h264_init_ps(h, sl, first_slice);
1299  if (ret < 0)
1300  return ret;
1301 
1302  sps = h->ps.sps;
1303 
1304  last_pic_droppable = h->droppable;
1305  last_pic_structure = h->picture_structure;
1306  h->droppable = (nal->ref_idc == 0);
1308 
1309  h->poc.frame_num = sl->frame_num;
1310  h->poc.poc_lsb = sl->poc_lsb;
1312  h->poc.delta_poc[0] = sl->delta_poc[0];
1313  h->poc.delta_poc[1] = sl->delta_poc[1];
1314 
1315  /* Shorten frame num gaps so we don't have to allocate reference
1316  * frames just to throw them away */
1317  if (h->poc.frame_num != h->poc.prev_frame_num) {
1318  int unwrap_prev_frame_num = h->poc.prev_frame_num;
1319  int max_frame_num = 1 << sps->log2_max_frame_num;
1320 
1321  if (unwrap_prev_frame_num > h->poc.frame_num)
1322  unwrap_prev_frame_num -= max_frame_num;
1323 
1324  if ((h->poc.frame_num - unwrap_prev_frame_num) > sps->ref_frame_count) {
1325  unwrap_prev_frame_num = (h->poc.frame_num - sps->ref_frame_count) - 1;
1326  if (unwrap_prev_frame_num < 0)
1327  unwrap_prev_frame_num += max_frame_num;
1328 
1329  h->poc.prev_frame_num = unwrap_prev_frame_num;
1330  }
1331  }
1332 
1333  /* See if we have a decoded first field looking for a pair...
1334  * Here, we're using that to see if we should mark previously
1335  * decode frames as "finished".
1336  * We have to do that before the "dummy" in-between frame allocation,
1337  * since that can modify h->cur_pic_ptr. */
1338  if (h->first_field) {
1339  av_assert0(h->cur_pic_ptr);
1340  av_assert0(h->cur_pic_ptr->f->buf[0]);
1341  assert(h->cur_pic_ptr->reference != DELAYED_PIC_REF);
1342 
1343  /* Mark old field/frame as completed */
1344  if (h->cur_pic_ptr->tf.owner == h->avctx) {
1346  last_pic_structure == PICT_BOTTOM_FIELD);
1347  }
1348 
1349  /* figure out if we have a complementary field pair */
1350  if (!FIELD_PICTURE(h) || h->picture_structure == last_pic_structure) {
1351  /* Previous field is unmatched. Don't display it, but let it
1352  * remain for reference if marked as such. */
1353  if (last_pic_structure != PICT_FRAME) {
1355  last_pic_structure == PICT_TOP_FIELD);
1356  }
1357  } else {
1358  if (h->cur_pic_ptr->frame_num != h->poc.frame_num) {
1359  /* This and previous field were reference, but had
1360  * different frame_nums. Consider this field first in
1361  * pair. Throw away previous field except for reference
1362  * purposes. */
1363  if (last_pic_structure != PICT_FRAME) {
1365  last_pic_structure == PICT_TOP_FIELD);
1366  }
1367  } else {
1368  /* Second field in complementary pair */
1369  if (!((last_pic_structure == PICT_TOP_FIELD &&
1371  (last_pic_structure == PICT_BOTTOM_FIELD &&
1374  "Invalid field mode combination %d/%d\n",
1375  last_pic_structure, h->picture_structure);
1376  h->picture_structure = last_pic_structure;
1377  h->droppable = last_pic_droppable;
1378  return AVERROR_INVALIDDATA;
1379  } else if (last_pic_droppable != h->droppable) {
1381  "Found reference and non-reference fields in the same frame, which");
1382  h->picture_structure = last_pic_structure;
1383  h->droppable = last_pic_droppable;
1384  return AVERROR_PATCHWELCOME;
1385  }
1386  }
1387  }
1388  }
1389 
1390  while (h->poc.frame_num != h->poc.prev_frame_num && !h->first_field &&
1391  h->poc.frame_num != (h->poc.prev_frame_num + 1) % (1 << sps->log2_max_frame_num)) {
1392  H264Picture *prev = h->short_ref_count ? h->short_ref[0] : NULL;
1393  av_log(h->avctx, AV_LOG_DEBUG, "Frame num gap %d %d\n",
1394  h->poc.frame_num, h->poc.prev_frame_num);
1396  for(i=0; i<FF_ARRAY_ELEMS(h->last_pocs); i++)
1397  h->last_pocs[i] = INT_MIN;
1398  ret = h264_frame_start(h);
1399  if (ret < 0) {
1400  h->first_field = 0;
1401  return ret;
1402  }
1403 
1404  h->poc.prev_frame_num++;
1405  h->poc.prev_frame_num %= 1 << sps->log2_max_frame_num;
1408  ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX, 0);
1409  ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX, 1);
1410 
1411  h->explicit_ref_marking = 0;
1413  if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
1414  return ret;
1415  /* Error concealment: If a ref is missing, copy the previous ref
1416  * in its place.
1417  * FIXME: Avoiding a memcpy would be nice, but ref handling makes
1418  * many assumptions about there being no actual duplicates.
1419  * FIXME: This does not copy padding for out-of-frame motion
1420  * vectors. Given we are concealing a lost frame, this probably
1421  * is not noticeable by comparison, but it should be fixed. */
1422  if (h->short_ref_count) {
1423  if (prev &&
1424  h->short_ref[0]->f->width == prev->f->width &&
1425  h->short_ref[0]->f->height == prev->f->height &&
1426  h->short_ref[0]->f->format == prev->f->format) {
1427  av_image_copy(h->short_ref[0]->f->data,
1428  h->short_ref[0]->f->linesize,
1429  (const uint8_t **)prev->f->data,
1430  prev->f->linesize,
1431  prev->f->format,
1432  prev->f->width,
1433  prev->f->height);
1434  h->short_ref[0]->poc = prev->poc + 2;
1435  }
1436  h->short_ref[0]->frame_num = h->poc.prev_frame_num;
1437  }
1438  }
1439 
1440  /* See if we have a decoded first field looking for a pair...
1441  * We're using that to see whether to continue decoding in that
1442  * frame, or to allocate a new one. */
1443  if (h->first_field) {
1444  av_assert0(h->cur_pic_ptr);
1445  av_assert0(h->cur_pic_ptr->f->buf[0]);
1446  assert(h->cur_pic_ptr->reference != DELAYED_PIC_REF);
1447 
1448  /* figure out if we have a complementary field pair */
1449  if (!FIELD_PICTURE(h) || h->picture_structure == last_pic_structure) {
1450  /* Previous field is unmatched. Don't display it, but let it
1451  * remain for reference if marked as such. */
1452  h->missing_fields ++;
1453  h->cur_pic_ptr = NULL;
1454  h->first_field = FIELD_PICTURE(h);
1455  } else {
1456  h->missing_fields = 0;
1457  if (h->cur_pic_ptr->frame_num != h->poc.frame_num) {
1460  /* This and the previous field had different frame_nums.
1461  * Consider this field first in pair. Throw away previous
1462  * one except for reference purposes. */
1463  h->first_field = 1;
1464  h->cur_pic_ptr = NULL;
1465  } else {
1466  /* Second field in complementary pair */
1467  h->first_field = 0;
1468  }
1469  }
1470  } else {
1471  /* Frame or first field in a potentially complementary pair */
1472  h->first_field = FIELD_PICTURE(h);
1473  }
1474 
1475  if (!FIELD_PICTURE(h) || h->first_field) {
1476  if (h264_frame_start(h) < 0) {
1477  h->first_field = 0;
1478  return AVERROR_INVALIDDATA;
1479  }
1480  } else {
1482  }
1483  /* Some macroblocks can be accessed before they're available in case
1484  * of lost slices, MBAFF or threading. */
1485  if (FIELD_PICTURE(h)) {
1486  for(i = (h->picture_structure == PICT_BOTTOM_FIELD); i<h->mb_height; i++)
1487  memset(h->slice_table + i*h->mb_stride, -1, (h->mb_stride - (i+1==h->mb_height)) * sizeof(*h->slice_table));
1488  } else {
1489  memset(h->slice_table, -1,
1490  (h->mb_height * h->mb_stride - 1) * sizeof(*h->slice_table));
1491  }
1492 
1494  h->ps.sps, &h->poc, h->picture_structure, nal->ref_idc);
1495 
1496  memcpy(h->mmco, sl->mmco, sl->nb_mmco * sizeof(*h->mmco));
1497  h->nb_mmco = sl->nb_mmco;
1499 
1500  h->picture_idr = nal->type == H264_NAL_IDR_SLICE;
1501 
1502  if (h->sei.recovery_point.recovery_frame_cnt >= 0) {
1503  const int sei_recovery_frame_cnt = h->sei.recovery_point.recovery_frame_cnt;
1504 
1505  if (h->poc.frame_num != sei_recovery_frame_cnt || sl->slice_type_nos != AV_PICTURE_TYPE_I)
1506  h->valid_recovery_point = 1;
1507 
1508  if ( h->recovery_frame < 0
1509  || av_mod_uintp2(h->recovery_frame - h->poc.frame_num, h->ps.sps->log2_max_frame_num) > sei_recovery_frame_cnt) {
1510  h->recovery_frame = av_mod_uintp2(h->poc.frame_num + sei_recovery_frame_cnt, h->ps.sps->log2_max_frame_num);
1511 
1512  if (!h->valid_recovery_point)
1513  h->recovery_frame = h->poc.frame_num;
1514  }
1515  }
1516 
1517  h->cur_pic_ptr->f->key_frame |= (nal->type == H264_NAL_IDR_SLICE);
1518 
1519  if (nal->type == H264_NAL_IDR_SLICE ||
1520  (h->recovery_frame == h->poc.frame_num && nal->ref_idc)) {
1521  h->recovery_frame = -1;
1522  h->cur_pic_ptr->recovered = 1;
1523  }
1524  // If we have an IDR, all frames after it in decoded order are
1525  // "recovered".
1526  if (nal->type == H264_NAL_IDR_SLICE)
1528 #if 1
1530 #else
1532 #endif
1533 
1534  /* Set the frame properties/side data. Only done for the second field in
1535  * field coded frames, since some SEI information is present for each field
1536  * and is merged by the SEI parsing code. */
1537  if (!FIELD_PICTURE(h) || !h->first_field) {
1538  ret = h264_export_frame_props(h);
1539  if (ret < 0)
1540  return ret;
1541  }
1542 
1543  return 0;
1544 }
1545 
1547  const H2645NAL *nal)
1548 {
1549  const SPS *sps;
1550  const PPS *pps;
1551  int ret;
1552  unsigned int slice_type, tmp, i;
1553  int field_pic_flag, bottom_field_flag;
1554  int first_slice = sl == h->slice_ctx && !h->current_slice;
1555  int picture_structure;
1556 
1557  if (first_slice)
1559 
1560  sl->first_mb_addr = get_ue_golomb_long(&sl->gb);
1561 
1562  slice_type = get_ue_golomb_31(&sl->gb);
1563  if (slice_type > 9) {
1565  "slice type %d too large at %d\n",
1566  slice_type, sl->first_mb_addr);
1567  return AVERROR_INVALIDDATA;
1568  }
1569  if (slice_type > 4) {
1570  slice_type -= 5;
1571  sl->slice_type_fixed = 1;
1572  } else
1573  sl->slice_type_fixed = 0;
1574 
1575  slice_type = ff_h264_golomb_to_pict_type[slice_type];
1576  sl->slice_type = slice_type;
1577  sl->slice_type_nos = slice_type & 3;
1578 
1579  if (nal->type == H264_NAL_IDR_SLICE &&
1581  av_log(h->avctx, AV_LOG_ERROR, "A non-intra slice in an IDR NAL unit.\n");
1582  return AVERROR_INVALIDDATA;
1583  }
1584 
1585  sl->pps_id = get_ue_golomb(&sl->gb);
1586  if (sl->pps_id >= MAX_PPS_COUNT) {
1587  av_log(h->avctx, AV_LOG_ERROR, "pps_id %u out of range\n", sl->pps_id);
1588  return AVERROR_INVALIDDATA;
1589  }
1590  if (!h->ps.pps_list[sl->pps_id]) {
1592  "non-existing PPS %u referenced\n",
1593  sl->pps_id);
1594  return AVERROR_INVALIDDATA;
1595  }
1596  pps = (const PPS*)h->ps.pps_list[sl->pps_id]->data;
1597 
1598  if (!h->ps.sps_list[pps->sps_id]) {
1600  "non-existing SPS %u referenced\n", pps->sps_id);
1601  return AVERROR_INVALIDDATA;
1602  }
1603  sps = (const SPS*)h->ps.sps_list[pps->sps_id]->data;
1604 
1605  sl->frame_num = get_bits(&sl->gb, sps->log2_max_frame_num);
1606  if (!first_slice) {
1607  if (h->poc.frame_num != sl->frame_num) {
1608  av_log(h->avctx, AV_LOG_ERROR, "Frame num change from %d to %d\n",
1609  h->poc.frame_num, sl->frame_num);
1610  return AVERROR_INVALIDDATA;
1611  }
1612  }
1613 
1614  sl->mb_mbaff = 0;
1615 
1616  if (sps->frame_mbs_only_flag) {
1617  picture_structure = PICT_FRAME;
1618  } else {
1619  if (!sps->direct_8x8_inference_flag && slice_type == AV_PICTURE_TYPE_B) {
1620  av_log(h->avctx, AV_LOG_ERROR, "This stream was generated by a broken encoder, invalid 8x8 inference\n");
1621  return -1;
1622  }
1623  field_pic_flag = get_bits1(&sl->gb);
1624  if (field_pic_flag) {
1625  bottom_field_flag = get_bits1(&sl->gb);
1626  picture_structure = PICT_TOP_FIELD + bottom_field_flag;
1627  } else {
1628  picture_structure = PICT_FRAME;
1629  }
1630  }
1631  sl->picture_structure = picture_structure;
1632  sl->mb_field_decoding_flag = picture_structure != PICT_FRAME;
1633 
1634  if (picture_structure == PICT_FRAME) {
1635  sl->curr_pic_num = sl->frame_num;
1636  sl->max_pic_num = 1 << sps->log2_max_frame_num;
1637  } else {
1638  sl->curr_pic_num = 2 * sl->frame_num + 1;
1639  sl->max_pic_num = 1 << (sps->log2_max_frame_num + 1);
1640  }
1641 
1642  if (nal->type == H264_NAL_IDR_SLICE)
1643  get_ue_golomb_long(&sl->gb); /* idr_pic_id */
1644 
1645  if (sps->poc_type == 0) {
1646  sl->poc_lsb = get_bits(&sl->gb, sps->log2_max_poc_lsb);
1647 
1648  if (pps->pic_order_present == 1 && picture_structure == PICT_FRAME)
1649  sl->delta_poc_bottom = get_se_golomb(&sl->gb);
1650  }
1651 
1652  if (sps->poc_type == 1 && !sps->delta_pic_order_always_zero_flag) {
1653  sl->delta_poc[0] = get_se_golomb(&sl->gb);
1654 
1655  if (pps->pic_order_present == 1 && picture_structure == PICT_FRAME)
1656  sl->delta_poc[1] = get_se_golomb(&sl->gb);
1657  }
1658 
1659  sl->redundant_pic_count = 0;
1660  if (pps->redundant_pic_cnt_present)
1661  sl->redundant_pic_count = get_ue_golomb(&sl->gb);
1662 
1663  if (sl->slice_type_nos == AV_PICTURE_TYPE_B)
1664  sl->direct_spatial_mv_pred = get_bits1(&sl->gb);
1665 
1667  &sl->gb, pps, sl->slice_type_nos,
1668  picture_structure, h->avctx);
1669  if (ret < 0)
1670  return ret;
1671 
1672  if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
1674  if (ret < 0) {
1675  sl->ref_count[1] = sl->ref_count[0] = 0;
1676  return ret;
1677  }
1678  }
1679 
1680  sl->pwt.use_weight = 0;
1681  for (i = 0; i < 2; i++) {
1682  sl->pwt.luma_weight_flag[i] = 0;
1683  sl->pwt.chroma_weight_flag[i] = 0;
1684  }
1685  if ((pps->weighted_pred && sl->slice_type_nos == AV_PICTURE_TYPE_P) ||
1686  (pps->weighted_bipred_idc == 1 &&
1688  ff_h264_pred_weight_table(&sl->gb, sps, sl->ref_count,
1689  sl->slice_type_nos, &sl->pwt, h->avctx);
1690 
1691  sl->explicit_ref_marking = 0;
1692  if (nal->ref_idc) {
1693  ret = ff_h264_decode_ref_pic_marking(sl, &sl->gb, nal, h->avctx);
1694  if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
1695  return AVERROR_INVALIDDATA;
1696  }
1697 
1698  if (sl->slice_type_nos != AV_PICTURE_TYPE_I && pps->cabac) {
1699  tmp = get_ue_golomb_31(&sl->gb);
1700  if (tmp > 2) {
1701  av_log(h->avctx, AV_LOG_ERROR, "cabac_init_idc %u overflow\n", tmp);
1702  return AVERROR_INVALIDDATA;
1703  }
1704  sl->cabac_init_idc = tmp;
1705  }
1706 
1707  sl->last_qscale_diff = 0;
1708  tmp = pps->init_qp + get_se_golomb(&sl->gb);
1709  if (tmp > 51 + 6 * (sps->bit_depth_luma - 8)) {
1710  av_log(h->avctx, AV_LOG_ERROR, "QP %u out of range\n", tmp);
1711  return AVERROR_INVALIDDATA;
1712  }
1713  sl->qscale = tmp;
1714  sl->chroma_qp[0] = get_chroma_qp(pps, 0, sl->qscale);
1715  sl->chroma_qp[1] = get_chroma_qp(pps, 1, sl->qscale);
1716  // FIXME qscale / qp ... stuff
1717  if (sl->slice_type == AV_PICTURE_TYPE_SP)
1718  get_bits1(&sl->gb); /* sp_for_switch_flag */
1719  if (sl->slice_type == AV_PICTURE_TYPE_SP ||
1721  get_se_golomb(&sl->gb); /* slice_qs_delta */
1722 
1723  sl->deblocking_filter = 1;
1724  sl->slice_alpha_c0_offset = 0;
1725  sl->slice_beta_offset = 0;
1727  tmp = get_ue_golomb_31(&sl->gb);
1728  if (tmp > 2) {
1730  "deblocking_filter_idc %u out of range\n", tmp);
1731  return AVERROR_INVALIDDATA;
1732  }
1733  sl->deblocking_filter = tmp;
1734  if (sl->deblocking_filter < 2)
1735  sl->deblocking_filter ^= 1; // 1<->0
1736 
1737  if (sl->deblocking_filter) {
1738  sl->slice_alpha_c0_offset = get_se_golomb(&sl->gb) * 2;
1739  sl->slice_beta_offset = get_se_golomb(&sl->gb) * 2;
1740  if (sl->slice_alpha_c0_offset > 12 ||
1741  sl->slice_alpha_c0_offset < -12 ||
1742  sl->slice_beta_offset > 12 ||
1743  sl->slice_beta_offset < -12) {
1745  "deblocking filter parameters %d %d out of range\n",
1747  return AVERROR_INVALIDDATA;
1748  }
1749  }
1750  }
1751 
1752  return 0;
1753 }
1754 
1755 /**
1756  * Decode a slice header.
1757  * This will (re)initialize the decoder and call h264_frame_start() as needed.
1758  *
1759  * @param h h264context
1760  *
1761  * @return 0 if okay, <0 if an error occurred
1762  */
1764  const H2645NAL *nal)
1765 {
1766  int i, j, ret = 0;
1767  int first_slice = sl == h->slice_ctx && !h->current_slice;
1768 
1769  ret = h264_slice_header_parse(h, sl, nal);
1770  if (ret < 0)
1771  return ret;
1772 
1773  // discard redundant pictures
1774  if (sl->redundant_pic_count > 0)
1775  return 0;
1776 
1777  if (sl->first_mb_addr == 0 || !h->current_slice) {
1778  if (h->setup_finished) {
1779  av_log(h->avctx, AV_LOG_ERROR, "Too many fields\n");
1780  return AVERROR_INVALIDDATA;
1781  }
1782  }
1783 
1784  if (sl->first_mb_addr == 0) { // FIXME better field boundary detection
1785  if (h->current_slice) {
1786  if (h->max_contexts > 1) {
1787  if (!h->single_decode_warning) {
1788  av_log(h->avctx, AV_LOG_WARNING, "Cannot decode multiple access units as slice threads\n");
1789  h->single_decode_warning = 1;
1790  }
1791  h->max_contexts = 1;
1792  return SLICE_SINGLETHREAD;
1793  }
1794 
1795  if (h->cur_pic_ptr && FIELD_PICTURE(h) && h->first_field) {
1796  ret = ff_h264_field_end(h, h->slice_ctx, 1);
1797  h->current_slice = 0;
1798  if (ret < 0)
1799  return ret;
1800  } else if (h->cur_pic_ptr && !FIELD_PICTURE(h) && !h->first_field && h->nal_unit_type == H264_NAL_IDR_SLICE) {
1801  av_log(h, AV_LOG_WARNING, "Broken frame packetizing\n");
1802  ret = ff_h264_field_end(h, h->slice_ctx, 1);
1803  h->current_slice = 0;
1804  ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX, 0);
1805  ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX, 1);
1806  h->cur_pic_ptr = NULL;
1807  if (ret < 0)
1808  return ret;
1809  } else
1810  return AVERROR_INVALIDDATA;
1811  }
1812 
1813  if (!h->first_field) {
1814  if (h->cur_pic_ptr && !h->droppable) {
1817  }
1818  h->cur_pic_ptr = NULL;
1819  }
1820  }
1821 
1822  if (!h->current_slice)
1823  av_assert0(sl == h->slice_ctx);
1824 
1825  if (h->current_slice == 0 && !h->first_field) {
1826  if (
1827  (h->avctx->skip_frame >= AVDISCARD_NONREF && !h->nal_ref_idc) ||
1831  h->avctx->skip_frame >= AVDISCARD_ALL) {
1832  return SLICE_SKIPED;
1833  }
1834  }
1835 
1836  if (!first_slice) {
1837  const PPS *pps = (const PPS*)h->ps.pps_list[sl->pps_id]->data;
1838 
1839  if (h->ps.pps->sps_id != pps->sps_id ||
1840  h->ps.pps->transform_8x8_mode != pps->transform_8x8_mode /*||
1841  (h->setup_finished && h->ps.pps != pps)*/) {
1842  av_log(h->avctx, AV_LOG_ERROR, "PPS changed between slices\n");
1843  return AVERROR_INVALIDDATA;
1844  }
1845  if (h->ps.sps != (const SPS*)h->ps.sps_list[h->ps.pps->sps_id]->data) {
1847  "SPS changed in the middle of the frame\n");
1848  return AVERROR_INVALIDDATA;
1849  }
1850  }
1851 
1852  if (h->current_slice == 0) {
1853  ret = h264_field_start(h, sl, nal, first_slice);
1854  if (ret < 0)
1855  return ret;
1856  } else {
1857  if (h->picture_structure != sl->picture_structure ||
1858  h->droppable != (nal->ref_idc == 0)) {
1860  "Changing field mode (%d -> %d) between slices is not allowed\n",
1862  return AVERROR_INVALIDDATA;
1863  } else if (!h->cur_pic_ptr) {
1865  "unset cur_pic_ptr on slice %d\n",
1866  h->current_slice + 1);
1867  return AVERROR_INVALIDDATA;
1868  }
1869  }
1870 
1871  if (h->picture_idr && nal->type != H264_NAL_IDR_SLICE) {
1872  av_log(h->avctx, AV_LOG_ERROR, "Invalid mix of IDR and non-IDR slices\n");
1873  return AVERROR_INVALIDDATA;
1874  }
1875 
1876  av_assert1(h->mb_num == h->mb_width * h->mb_height);
1877  if (sl->first_mb_addr << FIELD_OR_MBAFF_PICTURE(h) >= h->mb_num ||
1878  sl->first_mb_addr >= h->mb_num) {
1879  av_log(h->avctx, AV_LOG_ERROR, "first_mb_in_slice overflow\n");
1880  return AVERROR_INVALIDDATA;
1881  }
1882  sl->resync_mb_x = sl->mb_x = sl->first_mb_addr % h->mb_width;
1883  sl->resync_mb_y = sl->mb_y = (sl->first_mb_addr / h->mb_width) <<
1886  sl->resync_mb_y = sl->mb_y = sl->mb_y + 1;
1887  av_assert1(sl->mb_y < h->mb_height);
1888 
1889  ret = ff_h264_build_ref_list(h, sl);
1890  if (ret < 0)
1891  return ret;
1892 
1893  if (h->ps.pps->weighted_bipred_idc == 2 &&
1895  implicit_weight_table(h, sl, -1);
1896  if (FRAME_MBAFF(h)) {
1897  implicit_weight_table(h, sl, 0);
1898  implicit_weight_table(h, sl, 1);
1899  }
1900  }
1901 
1905 
1906  if (h->avctx->skip_loop_filter >= AVDISCARD_ALL ||
1914  nal->ref_idc == 0))
1915  sl->deblocking_filter = 0;
1916 
1917  if (sl->deblocking_filter == 1 && h->max_contexts > 1) {
1918  if (h->avctx->flags2 & AV_CODEC_FLAG2_FAST) {
1919  /* Cheat slightly for speed:
1920  * Do not bother to deblock across slices. */
1921  sl->deblocking_filter = 2;
1922  } else {
1923  h->postpone_filter = 1;
1924  }
1925  }
1926  sl->qp_thresh = 15 -
1928  FFMAX3(0,
1929  h->ps.pps->chroma_qp_index_offset[0],
1930  h->ps.pps->chroma_qp_index_offset[1]) +
1931  6 * (h->ps.sps->bit_depth_luma - 8);
1932 
1933  sl->slice_num = ++h->current_slice;
1934 
1935  if (sl->slice_num)
1936  h->slice_row[(sl->slice_num-1)&(MAX_SLICES-1)]= sl->resync_mb_y;
1937  if ( h->slice_row[sl->slice_num&(MAX_SLICES-1)] + 3 >= sl->resync_mb_y
1938  && h->slice_row[sl->slice_num&(MAX_SLICES-1)] <= sl->resync_mb_y
1939  && sl->slice_num >= MAX_SLICES) {
1940  //in case of ASO this check needs to be updated depending on how we decide to assign slice numbers in this case
1941  av_log(h->avctx, AV_LOG_WARNING, "Possibly too many slices (%d >= %d), increase MAX_SLICES and recompile if there are artifacts\n", sl->slice_num, MAX_SLICES);
1942  }
1943 
1944  for (j = 0; j < 2; j++) {
1945  int id_list[16];
1946  int *ref2frm = h->ref2frm[sl->slice_num & (MAX_SLICES - 1)][j];
1947  for (i = 0; i < 16; i++) {
1948  id_list[i] = 60;
1949  if (j < sl->list_count && i < sl->ref_count[j] &&
1950  sl->ref_list[j][i].parent->f->buf[0]) {
1951  int k;
1952  AVBuffer *buf = sl->ref_list[j][i].parent->f->buf[0]->buffer;
1953  for (k = 0; k < h->short_ref_count; k++)
1954  if (h->short_ref[k]->f->buf[0]->buffer == buf) {
1955  id_list[i] = k;
1956  break;
1957  }
1958  for (k = 0; k < h->long_ref_count; k++)
1959  if (h->long_ref[k] && h->long_ref[k]->f->buf[0]->buffer == buf) {
1960  id_list[i] = h->short_ref_count + k;
1961  break;
1962  }
1963  }
1964  }
1965 
1966  ref2frm[0] =
1967  ref2frm[1] = -1;
1968  for (i = 0; i < 16; i++)
1969  ref2frm[i + 2] = 4 * id_list[i] + (sl->ref_list[j][i].reference & 3);
1970  ref2frm[18 + 0] =
1971  ref2frm[18 + 1] = -1;
1972  for (i = 16; i < 48; i++)
1973  ref2frm[i + 4] = 4 * id_list[(i - 16) >> 1] +
1974  (sl->ref_list[j][i].reference & 3);
1975  }
1976 
1977  if (h->avctx->debug & FF_DEBUG_PICT_INFO) {
1979  "slice:%d %s mb:%d %c%s%s frame:%d poc:%d/%d ref:%d/%d qp:%d loop:%d:%d:%d weight:%d%s %s\n",
1980  sl->slice_num,
1981  (h->picture_structure == PICT_FRAME ? "F" : h->picture_structure == PICT_TOP_FIELD ? "T" : "B"),
1982  sl->mb_y * h->mb_width + sl->mb_x,
1984  sl->slice_type_fixed ? " fix" : "",
1985  nal->type == H264_NAL_IDR_SLICE ? " IDR" : "",
1986  h->poc.frame_num,
1987  h->cur_pic_ptr->field_poc[0],
1988  h->cur_pic_ptr->field_poc[1],
1989  sl->ref_count[0], sl->ref_count[1],
1990  sl->qscale,
1991  sl->deblocking_filter,
1993  sl->pwt.use_weight,
1994  sl->pwt.use_weight == 1 && sl->pwt.use_weight_chroma ? "c" : "",
1995  sl->slice_type == AV_PICTURE_TYPE_B ? (sl->direct_spatial_mv_pred ? "SPAT" : "TEMP") : "");
1996  }
1997 
1998  return 0;
1999 }
2000 
2002 {
2003  switch (sl->slice_type) {
2004  case AV_PICTURE_TYPE_P:
2005  return 0;
2006  case AV_PICTURE_TYPE_B:
2007  return 1;
2008  case AV_PICTURE_TYPE_I:
2009  return 2;
2010  case AV_PICTURE_TYPE_SP:
2011  return 3;
2012  case AV_PICTURE_TYPE_SI:
2013  return 4;
2014  default:
2015  return AVERROR_INVALIDDATA;
2016  }
2017 }
2018 
2020  H264SliceContext *sl,
2021  int mb_type, int top_xy,
2022  int left_xy[LEFT_MBS],
2023  int top_type,
2024  int left_type[LEFT_MBS],
2025  int mb_xy, int list)
2026 {
2027  int b_stride = h->b_stride;
2028  int16_t(*mv_dst)[2] = &sl->mv_cache[list][scan8[0]];
2029  int8_t *ref_cache = &sl->ref_cache[list][scan8[0]];
2030  if (IS_INTER(mb_type) || IS_DIRECT(mb_type)) {
2031  if (USES_LIST(top_type, list)) {
2032  const int b_xy = h->mb2b_xy[top_xy] + 3 * b_stride;
2033  const int b8_xy = 4 * top_xy + 2;
2034  const int *ref2frm = &h->ref2frm[h->slice_table[top_xy] & (MAX_SLICES - 1)][list][(MB_MBAFF(sl) ? 20 : 2)];
2035  AV_COPY128(mv_dst - 1 * 8, h->cur_pic.motion_val[list][b_xy + 0]);
2036  ref_cache[0 - 1 * 8] =
2037  ref_cache[1 - 1 * 8] = ref2frm[h->cur_pic.ref_index[list][b8_xy + 0]];
2038  ref_cache[2 - 1 * 8] =
2039  ref_cache[3 - 1 * 8] = ref2frm[h->cur_pic.ref_index[list][b8_xy + 1]];
2040  } else {
2041  AV_ZERO128(mv_dst - 1 * 8);
2042  AV_WN32A(&ref_cache[0 - 1 * 8], ((LIST_NOT_USED) & 0xFF) * 0x01010101u);
2043  }
2044 
2045  if (!IS_INTERLACED(mb_type ^ left_type[LTOP])) {
2046  if (USES_LIST(left_type[LTOP], list)) {
2047  const int b_xy = h->mb2b_xy[left_xy[LTOP]] + 3;
2048  const int b8_xy = 4 * left_xy[LTOP] + 1;
2049  const int *ref2frm = &h->ref2frm[h->slice_table[left_xy[LTOP]] & (MAX_SLICES - 1)][list][(MB_MBAFF(sl) ? 20 : 2)];
2050  AV_COPY32(mv_dst - 1 + 0, h->cur_pic.motion_val[list][b_xy + b_stride * 0]);
2051  AV_COPY32(mv_dst - 1 + 8, h->cur_pic.motion_val[list][b_xy + b_stride * 1]);
2052  AV_COPY32(mv_dst - 1 + 16, h->cur_pic.motion_val[list][b_xy + b_stride * 2]);
2053  AV_COPY32(mv_dst - 1 + 24, h->cur_pic.motion_val[list][b_xy + b_stride * 3]);
2054  ref_cache[-1 + 0] =
2055  ref_cache[-1 + 8] = ref2frm[h->cur_pic.ref_index[list][b8_xy + 2 * 0]];
2056  ref_cache[-1 + 16] =
2057  ref_cache[-1 + 24] = ref2frm[h->cur_pic.ref_index[list][b8_xy + 2 * 1]];
2058  } else {
2059  AV_ZERO32(mv_dst - 1 + 0);
2060  AV_ZERO32(mv_dst - 1 + 8);
2061  AV_ZERO32(mv_dst - 1 + 16);
2062  AV_ZERO32(mv_dst - 1 + 24);
2063  ref_cache[-1 + 0] =
2064  ref_cache[-1 + 8] =
2065  ref_cache[-1 + 16] =
2066  ref_cache[-1 + 24] = LIST_NOT_USED;
2067  }
2068  }
2069  }
2070 
2071  if (!USES_LIST(mb_type, list)) {
2072  fill_rectangle(mv_dst, 4, 4, 8, pack16to32(0, 0), 4);
2073  AV_WN32A(&ref_cache[0 * 8], ((LIST_NOT_USED) & 0xFF) * 0x01010101u);
2074  AV_WN32A(&ref_cache[1 * 8], ((LIST_NOT_USED) & 0xFF) * 0x01010101u);
2075  AV_WN32A(&ref_cache[2 * 8], ((LIST_NOT_USED) & 0xFF) * 0x01010101u);
2076  AV_WN32A(&ref_cache[3 * 8], ((LIST_NOT_USED) & 0xFF) * 0x01010101u);
2077  return;
2078  }
2079 
2080  {
2081  int8_t *ref = &h->cur_pic.ref_index[list][4 * mb_xy];
2082  const int *ref2frm = &h->ref2frm[sl->slice_num & (MAX_SLICES - 1)][list][(MB_MBAFF(sl) ? 20 : 2)];
2083  uint32_t ref01 = (pack16to32(ref2frm[ref[0]], ref2frm[ref[1]]) & 0x00FF00FF) * 0x0101;
2084  uint32_t ref23 = (pack16to32(ref2frm[ref[2]], ref2frm[ref[3]]) & 0x00FF00FF) * 0x0101;
2085  AV_WN32A(&ref_cache[0 * 8], ref01);
2086  AV_WN32A(&ref_cache[1 * 8], ref01);
2087  AV_WN32A(&ref_cache[2 * 8], ref23);
2088  AV_WN32A(&ref_cache[3 * 8], ref23);
2089  }
2090 
2091  {
2092  int16_t(*mv_src)[2] = &h->cur_pic.motion_val[list][4 * sl->mb_x + 4 * sl->mb_y * b_stride];
2093  AV_COPY128(mv_dst + 8 * 0, mv_src + 0 * b_stride);
2094  AV_COPY128(mv_dst + 8 * 1, mv_src + 1 * b_stride);
2095  AV_COPY128(mv_dst + 8 * 2, mv_src + 2 * b_stride);
2096  AV_COPY128(mv_dst + 8 * 3, mv_src + 3 * b_stride);
2097  }
2098 }
2099 
2100 /**
2101  * @return non zero if the loop filter can be skipped
2102  */
2103 static int fill_filter_caches(const H264Context *h, H264SliceContext *sl, int mb_type)
2104 {
2105  const int mb_xy = sl->mb_xy;
2106  int top_xy, left_xy[LEFT_MBS];
2107  int top_type, left_type[LEFT_MBS];
2108  uint8_t *nnz;
2109  uint8_t *nnz_cache;
2110 
2111  top_xy = mb_xy - (h->mb_stride << MB_FIELD(sl));
2112 
2113  left_xy[LBOT] = left_xy[LTOP] = mb_xy - 1;
2114  if (FRAME_MBAFF(h)) {
2115  const int left_mb_field_flag = IS_INTERLACED(h->cur_pic.mb_type[mb_xy - 1]);
2116  const int curr_mb_field_flag = IS_INTERLACED(mb_type);
2117  if (sl->mb_y & 1) {
2118  if (left_mb_field_flag != curr_mb_field_flag)
2119  left_xy[LTOP] -= h->mb_stride;
2120  } else {
2121  if (curr_mb_field_flag)
2122  top_xy += h->mb_stride &
2123  (((h->cur_pic.mb_type[top_xy] >> 7) & 1) - 1);
2124  if (left_mb_field_flag != curr_mb_field_flag)
2125  left_xy[LBOT] += h->mb_stride;
2126  }
2127  }
2128 
2129  sl->top_mb_xy = top_xy;
2130  sl->left_mb_xy[LTOP] = left_xy[LTOP];
2131  sl->left_mb_xy[LBOT] = left_xy[LBOT];
2132  {
2133  /* For sufficiently low qp, filtering wouldn't do anything.
2134  * This is a conservative estimate: could also check beta_offset
2135  * and more accurate chroma_qp. */
2136  int qp_thresh = sl->qp_thresh; // FIXME strictly we should store qp_thresh for each mb of a slice
2137  int qp = h->cur_pic.qscale_table[mb_xy];
2138  if (qp <= qp_thresh &&
2139  (left_xy[LTOP] < 0 ||
2140  ((qp + h->cur_pic.qscale_table[left_xy[LTOP]] + 1) >> 1) <= qp_thresh) &&
2141  (top_xy < 0 ||
2142  ((qp + h->cur_pic.qscale_table[top_xy] + 1) >> 1) <= qp_thresh)) {
2143  if (!FRAME_MBAFF(h))
2144  return 1;
2145  if ((left_xy[LTOP] < 0 ||
2146  ((qp + h->cur_pic.qscale_table[left_xy[LBOT]] + 1) >> 1) <= qp_thresh) &&
2147  (top_xy < h->mb_stride ||
2148  ((qp + h->cur_pic.qscale_table[top_xy - h->mb_stride] + 1) >> 1) <= qp_thresh))
2149  return 1;
2150  }
2151  }
2152 
2153  top_type = h->cur_pic.mb_type[top_xy];
2154  left_type[LTOP] = h->cur_pic.mb_type[left_xy[LTOP]];
2155  left_type[LBOT] = h->cur_pic.mb_type[left_xy[LBOT]];
2156  if (sl->deblocking_filter == 2) {
2157  if (h->slice_table[top_xy] != sl->slice_num)
2158  top_type = 0;
2159  if (h->slice_table[left_xy[LBOT]] != sl->slice_num)
2160  left_type[LTOP] = left_type[LBOT] = 0;
2161  } else {
2162  if (h->slice_table[top_xy] == 0xFFFF)
2163  top_type = 0;
2164  if (h->slice_table[left_xy[LBOT]] == 0xFFFF)
2165  left_type[LTOP] = left_type[LBOT] = 0;
2166  }
2167  sl->top_type = top_type;
2168  sl->left_type[LTOP] = left_type[LTOP];
2169  sl->left_type[LBOT] = left_type[LBOT];
2170 
2171  if (IS_INTRA(mb_type))
2172  return 0;
2173 
2174  fill_filter_caches_inter(h, sl, mb_type, top_xy, left_xy,
2175  top_type, left_type, mb_xy, 0);
2176  if (sl->list_count == 2)
2177  fill_filter_caches_inter(h, sl, mb_type, top_xy, left_xy,
2178  top_type, left_type, mb_xy, 1);
2179 
2180  nnz = h->non_zero_count[mb_xy];
2181  nnz_cache = sl->non_zero_count_cache;
2182  AV_COPY32(&nnz_cache[4 + 8 * 1], &nnz[0]);
2183  AV_COPY32(&nnz_cache[4 + 8 * 2], &nnz[4]);
2184  AV_COPY32(&nnz_cache[4 + 8 * 3], &nnz[8]);
2185  AV_COPY32(&nnz_cache[4 + 8 * 4], &nnz[12]);
2186  sl->cbp = h->cbp_table[mb_xy];
2187 
2188  if (top_type) {
2189  nnz = h->non_zero_count[top_xy];
2190  AV_COPY32(&nnz_cache[4 + 8 * 0], &nnz[3 * 4]);
2191  }
2192 
2193  if (left_type[LTOP]) {
2194  nnz = h->non_zero_count[left_xy[LTOP]];
2195  nnz_cache[3 + 8 * 1] = nnz[3 + 0 * 4];
2196  nnz_cache[3 + 8 * 2] = nnz[3 + 1 * 4];
2197  nnz_cache[3 + 8 * 3] = nnz[3 + 2 * 4];
2198  nnz_cache[3 + 8 * 4] = nnz[3 + 3 * 4];
2199  }
2200 
2201  /* CAVLC 8x8dct requires NNZ values for residual decoding that differ
2202  * from what the loop filter needs */
2203  if (!CABAC(h) && h->ps.pps->transform_8x8_mode) {
2204  if (IS_8x8DCT(top_type)) {
2205  nnz_cache[4 + 8 * 0] =
2206  nnz_cache[5 + 8 * 0] = (h->cbp_table[top_xy] & 0x4000) >> 12;
2207  nnz_cache[6 + 8 * 0] =
2208  nnz_cache[7 + 8 * 0] = (h->cbp_table[top_xy] & 0x8000) >> 12;
2209  }
2210  if (IS_8x8DCT(left_type[LTOP])) {
2211  nnz_cache[3 + 8 * 1] =
2212  nnz_cache[3 + 8 * 2] = (h->cbp_table[left_xy[LTOP]] & 0x2000) >> 12; // FIXME check MBAFF
2213  }
2214  if (IS_8x8DCT(left_type[LBOT])) {
2215  nnz_cache[3 + 8 * 3] =
2216  nnz_cache[3 + 8 * 4] = (h->cbp_table[left_xy[LBOT]] & 0x8000) >> 12; // FIXME check MBAFF
2217  }
2218 
2219  if (IS_8x8DCT(mb_type)) {
2220  nnz_cache[scan8[0]] =
2221  nnz_cache[scan8[1]] =
2222  nnz_cache[scan8[2]] =
2223  nnz_cache[scan8[3]] = (sl->cbp & 0x1000) >> 12;
2224 
2225  nnz_cache[scan8[0 + 4]] =
2226  nnz_cache[scan8[1 + 4]] =
2227  nnz_cache[scan8[2 + 4]] =
2228  nnz_cache[scan8[3 + 4]] = (sl->cbp & 0x2000) >> 12;
2229 
2230  nnz_cache[scan8[0 + 8]] =
2231  nnz_cache[scan8[1 + 8]] =
2232  nnz_cache[scan8[2 + 8]] =
2233  nnz_cache[scan8[3 + 8]] = (sl->cbp & 0x4000) >> 12;
2234 
2235  nnz_cache[scan8[0 + 12]] =
2236  nnz_cache[scan8[1 + 12]] =
2237  nnz_cache[scan8[2 + 12]] =
2238  nnz_cache[scan8[3 + 12]] = (sl->cbp & 0x8000) >> 12;
2239  }
2240  }
2241 
2242  return 0;
2243 }
2244 
2245 static void loop_filter(const H264Context *h, H264SliceContext *sl, int start_x, int end_x)
2246 {
2247  uint8_t *dest_y, *dest_cb, *dest_cr;
2248  int linesize, uvlinesize, mb_x, mb_y;
2249  const int end_mb_y = sl->mb_y + FRAME_MBAFF(h);
2250  const int old_slice_type = sl->slice_type;
2251  const int pixel_shift = h->pixel_shift;
2252  const int block_h = 16 >> h->chroma_y_shift;
2253 
2254  if (h->postpone_filter)
2255  return;
2256 
2257  if (sl->deblocking_filter) {
2258  for (mb_x = start_x; mb_x < end_x; mb_x++)
2259  for (mb_y = end_mb_y - FRAME_MBAFF(h); mb_y <= end_mb_y; mb_y++) {
2260  int mb_xy, mb_type;
2261  mb_xy = sl->mb_xy = mb_x + mb_y * h->mb_stride;
2262  mb_type = h->cur_pic.mb_type[mb_xy];
2263 
2264  if (FRAME_MBAFF(h))
2265  sl->mb_mbaff =
2266  sl->mb_field_decoding_flag = !!IS_INTERLACED(mb_type);
2267 
2268  sl->mb_x = mb_x;
2269  sl->mb_y = mb_y;
2270  dest_y = h->cur_pic.f->data[0] +
2271  ((mb_x << pixel_shift) + mb_y * sl->linesize) * 16;
2272  dest_cb = h->cur_pic.f->data[1] +
2273  (mb_x << pixel_shift) * (8 << CHROMA444(h)) +
2274  mb_y * sl->uvlinesize * block_h;
2275  dest_cr = h->cur_pic.f->data[2] +
2276  (mb_x << pixel_shift) * (8 << CHROMA444(h)) +
2277  mb_y * sl->uvlinesize * block_h;
2278  // FIXME simplify above
2279 
2280  if (MB_FIELD(sl)) {
2281  linesize = sl->mb_linesize = sl->linesize * 2;
2282  uvlinesize = sl->mb_uvlinesize = sl->uvlinesize * 2;
2283  if (mb_y & 1) { // FIXME move out of this function?
2284  dest_y -= sl->linesize * 15;
2285  dest_cb -= sl->uvlinesize * (block_h - 1);
2286  dest_cr -= sl->uvlinesize * (block_h - 1);
2287  }
2288  } else {
2289  linesize = sl->mb_linesize = sl->linesize;
2290  uvlinesize = sl->mb_uvlinesize = sl->uvlinesize;
2291  }
2292  backup_mb_border(h, sl, dest_y, dest_cb, dest_cr, linesize,
2293  uvlinesize, 0);
2294  if (fill_filter_caches(h, sl, mb_type))
2295  continue;
2296  sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, h->cur_pic.qscale_table[mb_xy]);
2297  sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, h->cur_pic.qscale_table[mb_xy]);
2298 
2299  if (FRAME_MBAFF(h)) {
2300  ff_h264_filter_mb(h, sl, mb_x, mb_y, dest_y, dest_cb, dest_cr,
2301  linesize, uvlinesize);
2302  } else {
2303  ff_h264_filter_mb_fast(h, sl, mb_x, mb_y, dest_y, dest_cb,
2304  dest_cr, linesize, uvlinesize);
2305  }
2306  }
2307  }
2308  sl->slice_type = old_slice_type;
2309  sl->mb_x = end_x;
2310  sl->mb_y = end_mb_y - FRAME_MBAFF(h);
2311  sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
2312  sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
2313 }
2314 
2316 {
2317  const int mb_xy = sl->mb_x + sl->mb_y * h->mb_stride;
2318  int mb_type = (h->slice_table[mb_xy - 1] == sl->slice_num) ?
2319  h->cur_pic.mb_type[mb_xy - 1] :
2320  (h->slice_table[mb_xy - h->mb_stride] == sl->slice_num) ?
2321  h->cur_pic.mb_type[mb_xy - h->mb_stride] : 0;
2322  sl->mb_mbaff = sl->mb_field_decoding_flag = IS_INTERLACED(mb_type) ? 1 : 0;
2323 }
2324 
2325 /**
2326  * Draw edges and report progress for the last MB row.
2327  */
2329 {
2330  int top = 16 * (sl->mb_y >> FIELD_PICTURE(h));
2331  int pic_height = 16 * h->mb_height >> FIELD_PICTURE(h);
2332  int height = 16 << FRAME_MBAFF(h);
2333  int deblock_border = (16 + 4) << FRAME_MBAFF(h);
2334 
2335  if (sl->deblocking_filter) {
2336  if ((top + height) >= pic_height)
2337  height += deblock_border;
2338  top -= deblock_border;
2339  }
2340 
2341  if (top >= pic_height || (top + height) < 0)
2342  return;
2343 
2344  height = FFMIN(height, pic_height - top);
2345  if (top < 0) {
2346  height = top + height;
2347  top = 0;
2348  }
2349 
2350  ff_h264_draw_horiz_band(h, sl, top, height);
2351 
2352  if (h->droppable || sl->h264->slice_ctx[0].er.error_occurred)
2353  return;
2354 
2355  ff_thread_report_progress(&h->cur_pic_ptr->tf, top + height - 1,
2357 }
2358 
2360  int startx, int starty,
2361  int endx, int endy, int status)
2362 {
2363  if (!sl->h264->enable_er)
2364  return;
2365 
2366  if (CONFIG_ERROR_RESILIENCE) {
2367  ERContext *er = &sl->h264->slice_ctx[0].er;
2368 
2369  ff_er_add_slice(er, startx, starty, endx, endy, status);
2370  }
2371 }
2372 
2373 static int decode_slice(struct AVCodecContext *avctx, void *arg)
2374 {
2375  H264SliceContext *sl = arg;
2376  const H264Context *h = sl->h264;
2377  int lf_x_start = sl->mb_x;
2378  int orig_deblock = sl->deblocking_filter;
2379  int ret;
2380 
2381  sl->linesize = h->cur_pic_ptr->f->linesize[0];
2382  sl->uvlinesize = h->cur_pic_ptr->f->linesize[1];
2383 
2384  ret = alloc_scratch_buffers(sl, sl->linesize);
2385  if (ret < 0)
2386  return ret;
2387 
2388  sl->mb_skip_run = -1;
2389 
2390  av_assert0(h->block_offset[15] == (4 * ((scan8[15] - scan8[0]) & 7) << h->pixel_shift) + 4 * sl->linesize * ((scan8[15] - scan8[0]) >> 3));
2391 
2392  if (h->postpone_filter)
2393  sl->deblocking_filter = 0;
2394 
2395  sl->is_complex = FRAME_MBAFF(h) || h->picture_structure != PICT_FRAME ||
2396  (CONFIG_GRAY && (h->flags & AV_CODEC_FLAG_GRAY));
2397 
2399  const int start_i = av_clip(sl->resync_mb_x + sl->resync_mb_y * h->mb_width, 0, h->mb_num - 1);
2400  if (start_i) {
2401  int prev_status = h->slice_ctx[0].er.error_status_table[h->slice_ctx[0].er.mb_index2xy[start_i - 1]];
2402  prev_status &= ~ VP_START;
2403  if (prev_status != (ER_MV_END | ER_DC_END | ER_AC_END))
2404  h->slice_ctx[0].er.error_occurred = 1;
2405  }
2406  }
2407 
2408  if (h->ps.pps->cabac) {
2409  /* realign */
2410  align_get_bits(&sl->gb);
2411 
2412  /* init cabac */
2413  ret = ff_init_cabac_decoder(&sl->cabac,
2414  sl->gb.buffer + get_bits_count(&sl->gb) / 8,
2415  (get_bits_left(&sl->gb) + 7) / 8);
2416  if (ret < 0)
2417  return ret;
2418 
2420 
2421  for (;;) {
2422  // START_TIMER
2423  int ret, eos;
2424  if (sl->mb_x + sl->mb_y * h->mb_width >= sl->next_slice_idx) {
2425  av_log(h->avctx, AV_LOG_ERROR, "Slice overlaps with next at %d\n",
2426  sl->next_slice_idx);
2427  er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x,
2428  sl->mb_y, ER_MB_ERROR);
2429  return AVERROR_INVALIDDATA;
2430  }
2431 
2432  ret = ff_h264_decode_mb_cabac(h, sl);
2433  // STOP_TIMER("decode_mb_cabac")
2434 
2435  if (ret >= 0)
2436  ff_h264_hl_decode_mb(h, sl);
2437 
2438  // FIXME optimal? or let mb_decode decode 16x32 ?
2439  if (ret >= 0 && FRAME_MBAFF(h)) {
2440  sl->mb_y++;
2441 
2442  ret = ff_h264_decode_mb_cabac(h, sl);
2443 
2444  if (ret >= 0)
2445  ff_h264_hl_decode_mb(h, sl);
2446  sl->mb_y--;
2447  }
2448  eos = get_cabac_terminate(&sl->cabac);
2449 
2450  if ((h->workaround_bugs & FF_BUG_TRUNCATED) &&
2451  sl->cabac.bytestream > sl->cabac.bytestream_end + 2) {
2452  er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x - 1,
2453  sl->mb_y, ER_MB_END);
2454  if (sl->mb_x >= lf_x_start)
2455  loop_filter(h, sl, lf_x_start, sl->mb_x + 1);
2456  goto finish;
2457  }
2458  if (sl->cabac.bytestream > sl->cabac.bytestream_end + 2 )
2459  av_log(h->avctx, AV_LOG_DEBUG, "bytestream overread %"PTRDIFF_SPECIFIER"\n", sl->cabac.bytestream_end - sl->cabac.bytestream);
2460  if (ret < 0 || sl->cabac.bytestream > sl->cabac.bytestream_end + 4) {
2462  "error while decoding MB %d %d, bytestream %"PTRDIFF_SPECIFIER"\n",
2463  sl->mb_x, sl->mb_y,
2464  sl->cabac.bytestream_end - sl->cabac.bytestream);
2465  er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x,
2466  sl->mb_y, ER_MB_ERROR);
2467  return AVERROR_INVALIDDATA;
2468  }
2469 
2470  if (++sl->mb_x >= h->mb_width) {
2471  loop_filter(h, sl, lf_x_start, sl->mb_x);
2472  sl->mb_x = lf_x_start = 0;
2473  decode_finish_row(h, sl);
2474  ++sl->mb_y;
2475  if (FIELD_OR_MBAFF_PICTURE(h)) {
2476  ++sl->mb_y;
2477  if (FRAME_MBAFF(h) && sl->mb_y < h->mb_height)
2479  }
2480  }
2481 
2482  if (eos || sl->mb_y >= h->mb_height) {
2483  ff_tlog(h->avctx, "slice end %d %d\n",
2484  get_bits_count(&sl->gb), sl->gb.size_in_bits);
2485  er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x - 1,
2486  sl->mb_y, ER_MB_END);
2487  if (sl->mb_x > lf_x_start)
2488  loop_filter(h, sl, lf_x_start, sl->mb_x);
2489  goto finish;
2490  }
2491  }
2492  } else {
2493  for (;;) {
2494  int ret;
2495 
2496  if (sl->mb_x + sl->mb_y * h->mb_width >= sl->next_slice_idx) {
2497  av_log(h->avctx, AV_LOG_ERROR, "Slice overlaps with next at %d\n",
2498  sl->next_slice_idx);
2499  er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x,
2500  sl->mb_y, ER_MB_ERROR);
2501  return AVERROR_INVALIDDATA;
2502  }
2503 
2504  ret = ff_h264_decode_mb_cavlc(h, sl);
2505 
2506  if (ret >= 0)
2507  ff_h264_hl_decode_mb(h, sl);
2508 
2509  // FIXME optimal? or let mb_decode decode 16x32 ?
2510  if (ret >= 0 && FRAME_MBAFF(h)) {
2511  sl->mb_y++;
2512  ret = ff_h264_decode_mb_cavlc(h, sl);
2513 
2514  if (ret >= 0)
2515  ff_h264_hl_decode_mb(h, sl);
2516  sl->mb_y--;
2517  }
2518 
2519  if (ret < 0) {
2521  "error while decoding MB %d %d\n", sl->mb_x, sl->mb_y);
2522  er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x,
2523  sl->mb_y, ER_MB_ERROR);
2524  return ret;
2525  }
2526 
2527  if (++sl->mb_x >= h->mb_width) {
2528  loop_filter(h, sl, lf_x_start, sl->mb_x);
2529  sl->mb_x = lf_x_start = 0;
2530  decode_finish_row(h, sl);
2531  ++sl->mb_y;
2532  if (FIELD_OR_MBAFF_PICTURE(h)) {
2533  ++sl->mb_y;
2534  if (FRAME_MBAFF(h) && sl->mb_y < h->mb_height)
2536  }
2537  if (sl->mb_y >= h->mb_height) {
2538  ff_tlog(h->avctx, "slice end %d %d\n",
2539  get_bits_count(&sl->gb), sl->gb.size_in_bits);
2540 
2541  if ( get_bits_left(&sl->gb) == 0
2542  || get_bits_left(&sl->gb) > 0 && !(h->avctx->err_recognition & AV_EF_AGGRESSIVE)) {
2543  er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y,
2544  sl->mb_x - 1, sl->mb_y, ER_MB_END);
2545 
2546  goto finish;
2547  } else {
2548  er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y,
2549  sl->mb_x, sl->mb_y, ER_MB_END);
2550 
2551  return AVERROR_INVALIDDATA;
2552  }
2553  }
2554  }
2555 
2556  if (get_bits_left(&sl->gb) <= 0 && sl->mb_skip_run <= 0) {
2557  ff_tlog(h->avctx, "slice end %d %d\n",
2558  get_bits_count(&sl->gb), sl->gb.size_in_bits);
2559 
2560  if (get_bits_left(&sl->gb) == 0) {
2561  er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y,
2562  sl->mb_x - 1, sl->mb_y, ER_MB_END);
2563  if (sl->mb_x > lf_x_start)
2564  loop_filter(h, sl, lf_x_start, sl->mb_x);
2565 
2566  goto finish;
2567  } else {
2568  er_add_slice(sl, sl->resync_mb_x, sl->resync_mb_y, sl->mb_x,
2569  sl->mb_y, ER_MB_ERROR);
2570 
2571  return AVERROR_INVALIDDATA;
2572  }
2573  }
2574  }
2575  }
2576 
2577 finish:
2578  sl->deblocking_filter = orig_deblock;
2579  return 0;
2580 }
2581 
2582 /**
2583  * Call decode_slice() for each context.
2584  *
2585  * @param h h264 master context
2586  * @param context_count number of contexts to execute
2587  */
2588 int ff_h264_execute_decode_slices(H264Context *h, unsigned context_count)
2589 {
2590  AVCodecContext *const avctx = h->avctx;
2591  H264SliceContext *sl;
2592  int i, j;
2593 
2594  av_assert0(context_count && h->slice_ctx[context_count - 1].mb_y < h->mb_height);
2595 
2596  h->slice_ctx[0].next_slice_idx = INT_MAX;
2597 
2598  if (h->avctx->hwaccel
2599 #if FF_API_CAP_VDPAU
2601 #endif
2602  )
2603  return 0;
2604  if (context_count == 1) {
2605  int ret;
2606 
2607  h->slice_ctx[0].next_slice_idx = h->mb_width * h->mb_height;
2608  h->postpone_filter = 0;
2609 
2610  ret = decode_slice(avctx, &h->slice_ctx[0]);
2611  h->mb_y = h->slice_ctx[0].mb_y;
2612  return ret;
2613  } else {
2614  av_assert0(context_count > 0);
2615  for (i = 0; i < context_count; i++) {
2616  int next_slice_idx = h->mb_width * h->mb_height;
2617  int slice_idx;
2618 
2619  sl = &h->slice_ctx[i];
2620  if (CONFIG_ERROR_RESILIENCE) {
2621  sl->er.error_count = 0;
2622  }
2623 
2624  /* make sure none of those slices overlap */
2625  slice_idx = sl->mb_y * h->mb_width + sl->mb_x;
2626  for (j = 0; j < context_count; j++) {
2627  H264SliceContext *sl2 = &h->slice_ctx[j];
2628  int slice_idx2 = sl2->mb_y * h->mb_width + sl2->mb_x;
2629 
2630  if (i == j || slice_idx2 < slice_idx)
2631  continue;
2632  next_slice_idx = FFMIN(next_slice_idx, slice_idx2);
2633  }
2634  sl->next_slice_idx = next_slice_idx;
2635  }
2636 
2637  avctx->execute(avctx, decode_slice, h->slice_ctx,
2638  NULL, context_count, sizeof(h->slice_ctx[0]));
2639 
2640  /* pull back stuff from slices to master context */
2641  sl = &h->slice_ctx[context_count - 1];
2642  h->mb_y = sl->mb_y;
2643  if (CONFIG_ERROR_RESILIENCE) {
2644  for (i = 1; i < context_count; i++)
2646  }
2647 
2648  if (h->postpone_filter) {
2649  h->postpone_filter = 0;
2650 
2651  for (i = 0; i < context_count; i++) {
2652  int y_end, x_end;
2653 
2654  sl = &h->slice_ctx[i];
2655  y_end = FFMIN(sl->mb_y + 1, h->mb_height);
2656  x_end = (sl->mb_y >= h->mb_height) ? h->mb_width : sl->mb_x;
2657 
2658  for (j = sl->resync_mb_y; j < y_end; j += 1 + FIELD_OR_MBAFF_PICTURE(h)) {
2659  sl->mb_y = j;
2660  loop_filter(h, sl, j > sl->resync_mb_y ? 0 : sl->resync_mb_x,
2661  j == y_end - 1 ? x_end : h->mb_width);
2662  }
2663  }
2664  }
2665  }
2666 
2667  return 0;
2668 }
int chroma_format_idc
Definition: h264_ps.h:47
int video_signal_type_present_flag
Definition: h264_ps.h:72
struct H264Context * h264
Definition: h264dec.h:182
#define AV_EF_AGGRESSIVE
consider things that a sane encoder should not do as an error
Definition: avcodec.h:2980
int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl, const H2645NAL *nal)
Decode a slice header.
Definition: h264_slice.c:1763
#define ff_tlog(ctx,...)
Definition: internal.h:65
av_cold void ff_videodsp_init(VideoDSPContext *ctx, int bpc)
Definition: videodsp.c:38
#define NULL
Definition: coverity.c:32
int ff_thread_can_start_frame(AVCodecContext *avctx)
const struct AVCodec * codec
Definition: avcodec.h:1685
AVRational framerate
Definition: avcodec.h:3375
discard all frames except keyframes
Definition: avcodec.h:786
int nb_mmco
Definition: h264dec.h:476
int workaround_bugs
Definition: h264dec.h:378
int long_ref
1->long term reference 0->short term reference
Definition: h264dec.h:154
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
int single_decode_warning
1 if the single thread fallback warning has already been displayed, 0 otherwise.
Definition: h264dec.h:504
int sei_recovery_frame_cnt
Definition: h264dec.h:163
enum AVPixelFormat backup_pix_fmt
Definition: h264dec.h:371
H264POCContext poc
Definition: h264dec.h:462
int mb_num
Definition: h264dec.h:441
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it...
Definition: buffer.c:124
int mb_aff_frame
Definition: h264dec.h:411
int recovery_frame_cnt
recovery_frame_cnt
Definition: h264_sei.h:109
int16_t mv_cache[2][5 *8][2]
Motion vector cache.
Definition: h264dec.h:303
#define AV_PIX_FMT_YUV444P14
Definition: pixfmt.h:351
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
Definition: golomb.h:183
int edge_emu_buffer_allocated
Definition: h264dec.h:291
int coded_width
Bitstream width / height, may be different from width/height e.g.
Definition: avcodec.h:1878
static void decode_finish_row(const H264Context *h, H264SliceContext *sl)
Draw edges and report progress for the last MB row.
Definition: h264_slice.c:2328
const char * fmt
Definition: avisynth_c.h:769
int first_field
Definition: h264dec.h:413
uint8_t field_scan8x8_q0[64]
Definition: h264dec.h:435
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:67
misc image utilities
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:247
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
#define ER_MB_END
AVFrame * f
Definition: thread.h:36
int weighted_bipred_idc
Definition: h264_ps.h:115
int ff_h264_build_ref_list(H264Context *h, H264SliceContext *sl)
Definition: h264_refs.c:299
int left_mb_xy[LEFT_MBS]
Definition: h264dec.h:215
int chroma_qp_index_offset[2]
Definition: h264_ps.h:118
AVBufferRef * sps_list[MAX_SPS_COUNT]
Definition: h264_ps.h:137
const uint8_t * bytestream_end
Definition: cabac.h:49
static av_always_inline int get_chroma_qp(const PPS *pps, int t, int qscale)
Get the chroma qp.
Definition: h264dec.h:693
AVBufferRef * buf[AV_NUM_DATA_POINTERS]
AVBuffer references backing the data for this frame.
Definition: frame.h:367
hardware decoding through Videotoolbox
Definition: pixfmt.h:296
H264ChromaContext h264chroma
Definition: h264dec.h:346
uint16_t * cbp_table
Definition: h264dec.h:418
int luma_weight_flag[2]
7.4.3.2 luma_weight_lX_flag
Definition: h264_parse.h:35
MMCO mmco[MAX_MMCO_COUNT]
memory management control operations buffer.
Definition: h264dec.h:475
static void implicit_weight_table(const H264Context *h, H264SliceContext *sl, int field)
Initialize implicit_weight table.
Definition: h264_slice.c:669
Sequence parameter set.
Definition: h264_ps.h:43
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition: avcodec.h:2413
int mb_y
Definition: h264dec.h:438
int coded_picture_number
Definition: h264dec.h:374
planar GBR 4:4:4 24bpp
Definition: pixfmt.h:180
int num
Numerator.
Definition: rational.h:59
AVBufferRef * mb_type_buf
Definition: h264dec.h:138
int repeat_pict
When decoding, this signals how much the picture must be delayed.
Definition: frame.h:317
int bipred_scratchpad_allocated
Definition: h264dec.h:290
#define DELAYED_PIC_REF
Value of Picture.reference when Picture is not a reference picture, but is held for delayed output...
Definition: diracdec.c:65
#define AV_PIX_FMT_GBRP10
Definition: pixfmt.h:357
#define VP_START
< current MB is the first after a resync marker
AVBufferPool * mb_type_pool
Definition: h264dec.h:561
int ff_h264_init_poc(int pic_field_poc[2], int *pic_poc, const SPS *sps, H264POCContext *pc, int picture_structure, int nal_ref_idc)
Definition: h264_parse.c:254
int chroma_x_shift
Definition: h264dec.h:363
const uint8_t * buffer
Definition: get_bits.h:56
Picture parameter set.
Definition: h264_ps.h:107
int crop
Definition: h264dec.h:165
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
Definition: avcodec.h:2087
#define SLICE_SINGLETHREAD
Definition: h264dec.h:849
int16_t(*[2] motion_val)[2]
Definition: h264dec.h:136
int flags
Definition: h264dec.h:377
void ff_h264_flush_change(H264Context *h)
Definition: h264dec.c:609
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:1904
int frame_mbs_only_flag
Definition: h264_ps.h:60
int mb_height
Definition: h264dec.h:439
H264Picture * delayed_pic[MAX_DELAYED_PIC_COUNT+2]
Definition: h264dec.h:467
int is_avc
Used to parse AVC variant of H.264.
Definition: h264dec.h:452
3: top field, bottom field, in that order
Definition: h264_sei.h:45
H264Ref default_ref[2]
Definition: h264dec.h:464
av_cold void ff_h264_pred_init(H264PredContext *h, int codec_id, const int bit_depth, int chroma_format_idc)
Set the intra prediction function pointers.
Definition: h264pred.c:411
AVBufferPool * ref_index_pool
Definition: h264dec.h:563
uint8_t zigzag_scan8x8_cavlc[64]
Definition: h264dec.h:427
#define AV_PIX_FMT_YUV420P12
Definition: pixfmt.h:345
av_cold void ff_h264chroma_init(H264ChromaContext *c, int bit_depth)
Definition: h264chroma.c:41
ERPicture last_pic
H264SEIDisplayOrientation display_orientation
Definition: h264_sei.h:154
int next_slice_idx
Definition: h264dec.h:240
static const uint8_t zigzag_scan8x8_cavlc[64+1]
Definition: h264_slice.c:96
H264Context.
Definition: h264dec.h:341
discard all non intra frames
Definition: avcodec.h:785
discard all
Definition: avcodec.h:787
AVFrame * f
Definition: h264dec.h:129
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
Definition: avcodec.h:3077
uint32_t num_units_in_tick
Definition: h264_ps.h:79
static const uint8_t field_scan[16+1]
Definition: h264_slice.c:50
H264Picture * long_ref[32]
Definition: h264dec.h:466
8: frame tripling
Definition: h264_sei.h:50
int profile
profile
Definition: avcodec.h:3181
Views are next to each other.
Definition: stereo3d.h:45
int picture_structure
Definition: h264dec.h:412
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB)
Definition: pixfmt.h:437
#define AV_WN32A(p, v)
Definition: intreadwrite.h:538
#define AV_COPY32(d, s)
Definition: intreadwrite.h:586
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition: h264dec.h:271
#define IN_RANGE(a, b, size)
Definition: h264_slice.c:278
#define REBASE_PICTURE(pic, new_ctx, old_ctx)
Definition: h264_slice.c:280
MMCO mmco[MAX_MMCO_COUNT]
Definition: h264dec.h:326
int ff_h264_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
Definition: h264_slice.c:301
Switching Intra.
Definition: avutil.h:272
int setup_finished
Definition: h264dec.h:550
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition: avcodec.h:3301
H264SEIContext sei
Definition: h264dec.h:558
struct AVHWAccel * hwaccel
Hardware accelerator in use.
Definition: avcodec.h:2996
unsigned int crop_top
frame_cropping_rect_top_offset
Definition: h264_ps.h:68
#define USES_LIST(a, list)
Definition: mpegutils.h:101
void ff_color_frame(AVFrame *frame, const int color[4])
Definition: utils.c:700
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
const uint8_t * bytestream
Definition: cabac.h:48
int ref2frm[MAX_SLICES][2][64]
reference to frame number lists, used in the loop filter, the first 2 are for -2,-1 ...
Definition: h264dec.h:564
int deblocking_filter_parameters_present
deblocking_filter_parameters_present_flag
Definition: h264_ps.h:119
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
const PPS * pps
Definition: h264_ps.h:143
static enum AVPixelFormat non_j_pixfmt(enum AVPixelFormat a)
Definition: h264_slice.c:1001
uint8_t
int full_range
Definition: h264_ps.h:73
unsigned int crop_left
frame_cropping_rect_left_offset
Definition: h264_ps.h:66
int gaps_in_frame_num_allowed_flag
Definition: h264_ps.h:57
#define MB_MBAFF(h)
Definition: h264dec.h:71
int slice_alpha_c0_offset
Definition: h264dec.h:198
Stereo 3D type: this structure describes how two videos are packed within a single video surface...
Definition: stereo3d.h:123
int poc
Definition: h264dec.h:175
void ff_h264_set_erpic(ERPicture *dst, H264Picture *src)
Definition: h264_picture.c:130
int field_picture
whether or not picture was encoded in separate fields
Definition: h264dec.h:158
int bit_depth_chroma
bit_depth_chroma_minus8 + 8
Definition: h264_ps.h:97
void ff_h264_hl_decode_mb(const H264Context *h, H264SliceContext *sl)
Definition: h264_mb.c:799
#define FF_DEBUG_PICT_INFO
Definition: avcodec.h:2917
enum AVColorPrimaries color_primaries
Definition: h264_ps.h:75
int poc
frame POC
Definition: h264dec.h:148
int frame_num_offset
for POC type 2
Definition: h264_parse.h:51
int chroma_weight_flag[2]
7.4.3.2 chroma_weight_lX_flag
Definition: h264_parse.h:36
Multithreading support functions.
#define ER_MB_ERROR
int cabac
entropy_coding_mode_flag
Definition: h264_ps.h:109
#define MB_FIELD(sl)
Definition: h264dec.h:72
const char * from
Definition: jacosubdec.c:65
unsigned int crop_right
frame_cropping_rect_right_offset
Definition: h264_ps.h:67
#define SLICE_SKIPED
Definition: h264dec.h:850
#define AV_PIX_FMT_GBRP9
Definition: pixfmt.h:356
uint8_t(*[2] top_borders)[(16 *3)*2]
Definition: h264dec.h:289
int invalid_gap
Definition: h264dec.h:162
#define FF_API_CAP_VDPAU
Definition: version.h:73
ERPicture cur_pic
int frame_recovered
Initial frame has been completely recovered.
Definition: h264dec.h:540
Structure to hold side data for an AVFrame.
Definition: frame.h:143
int height
Definition: h264dec.h:362
#define PICT_BOTTOM_FIELD
Definition: mpegutils.h:38
#define height
#define MAX_PPS_COUNT
Definition: h264_ps.h:38
int pt
Definition: rtp.c:35
int transform_bypass
qpprime_y_zero_transform_bypass_flag
Definition: h264_ps.h:48
static void finish(void)
Definition: movenc.c:344
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:199
void ff_h264_filter_mb(const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize)
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
Definition: utils.c:91
#define AV_CODEC_CAP_HWACCEL_VDPAU
Codec can export data for HW decoding (VDPAU).
Definition: avcodec.h:995
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
Definition: pixfmt.h:75
#define ER_MV_END
int ff_set_sar(AVCodecContext *avctx, AVRational sar)
Check that the provided sample aspect ratio is valid and set it on the codec context.
Definition: utils.c:225
int redundant_pic_cnt_present
redundant_pic_cnt_present_flag
Definition: h264_ps.h:121
int picture_structure
Definition: h264dec.h:244
int chroma_y_shift
Definition: h264dec.h:363
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:192
int interlaced_frame
The content of the picture is interlaced.
Definition: frame.h:322
AVBufferRef * qscale_table_buf
Definition: h264dec.h:132
static int h264_export_frame_props(H264Context *h)
Definition: h264_slice.c:1131
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
Definition: rational.c:35
#define AV_PIX_FMT_YUV422P12
Definition: pixfmt.h:346
H264Picture * parent
Definition: h264dec.h:178
H264SEIAFD afd
Definition: h264_sei.h:148
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale.
Definition: avcodec.h:861
high precision timer, useful to profile code
Views are alternated temporally.
Definition: stereo3d.h:66
int recovered
picture at IDR or recovery point + recovery count
Definition: h264dec.h:161
Active Format Description data consisting of a single byte as specified in ETSI TS 101 154 using AVAc...
Definition: frame.h:88
#define AV_COPY64(d, s)
Definition: intreadwrite.h:590
int ff_h264_decode_ref_pic_list_reordering(H264SliceContext *sl, void *logctx)
Definition: h264_refs.c:421
#define FFALIGN(x, a)
Definition: macros.h:48
int chroma_qp[2]
Definition: h264dec.h:192
7: frame doubling
Definition: h264_sei.h:49
#define av_log(a,...)
AVCodecContext * owner
Definition: thread.h:37
int last_pocs[MAX_DELAYED_PIC_COUNT]
Definition: h264dec.h:468
const char * to
Definition: webvttdec.c:34
void ff_h264_direct_ref_list_init(const H264Context *const h, H264SliceContext *sl)
Definition: h264_direct.c:111
SEI_FpaType frame_packing_arrangement_type
Definition: h264_sei.h:121
int width
Definition: h264dec.h:362
static int h264_frame_start(H264Context *h)
Definition: h264_slice.c:464
int a53_caption_size
Definition: h264_sei.h:93
H.264 common definitions.
void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height)
Definition: h264dec.c:104
#define U(x)
Definition: vp56_arith.h:37
#define HWACCEL_MAX
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:568
H.264 parameter set handling.
H264Picture DPB[H264_MAX_PICTURE_COUNT]
Definition: h264dec.h:349
enum AVColorTransferCharacteristic color_trc
Definition: h264_ps.h:76
int mb_aff
mb_adaptive_frame_field_flag
Definition: h264_ps.h:61
H264PredContext hpc
Definition: h264dec.h:391
AVBufferRef * sps_ref
Definition: h264_ps.h:141
int chroma_log2_weight_denom
Definition: h264_parse.h:34
int width
width and height of the video frame
Definition: frame.h:236
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
#define td
Definition: regdef.h:70
int flags
Additional information about the frame packing.
Definition: stereo3d.h:132
static int get_ue_golomb(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to 8190.
Definition: golomb.h:53
static int alloc_scratch_buffers(H264SliceContext *sl, int linesize)
Definition: h264_slice.c:128
int poc_type
pic_order_cnt_type
Definition: h264_ps.h:50
void ff_er_add_slice(ERContext *s, int startx, int starty, int endx, int endy, int status)
Add a slice.
int context_initialized
Definition: h264dec.h:376
#define PTRDIFF_SPECIFIER
Definition: internal.h:251
ERContext er
Definition: h264dec.h:184
int nal_unit_type
Definition: h264dec.h:447
int ff_h264_decode_ref_pic_marking(H264SliceContext *sl, GetBitContext *gb, const H2645NAL *nal, void *logctx)
Definition: h264_refs.c:824
int ff_h264_get_profile(const SPS *sps)
Compute profile from profile_idc and constraint_set?_flags.
Definition: h264_parse.c:489
discard all bidirectional frames
Definition: avcodec.h:784
#define AVERROR(e)
Definition: error.h:43
void * hwaccel_picture_private
hardware accelerator private data
Definition: h264dec.h:142
int backup_height
Definition: h264dec.h:370
int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift)
Utility function to access log2_chroma_w log2_chroma_h from the pixel format AVPixFmtDescriptor.
Definition: pixdesc.c:2294
int active_thread_type
Which multithreading methods are in use by the codec.
Definition: avcodec.h:3126
static const uint8_t field_scan8x8[64+1]
Definition: h264_slice.c:57
int backup_width
Backup frame properties: needed, because they can be different between returned frame and last decode...
Definition: h264dec.h:369
int capabilities
Codec capabilities.
Definition: avcodec.h:3619
const uint8_t ff_zigzag_scan[16+1]
Definition: mathtables.c:109
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:197
ATSC A53 Part 4 Closed Captions.
Definition: frame.h:57
#define FIELD_PICTURE(h)
Definition: h264dec.h:74
int picture_idr
Definition: h264dec.h:388
static int init_dimensions(H264Context *h)
Definition: h264_slice.c:880
const char * arg
Definition: jacosubdec.c:66
int deblocking_filter
disable_deblocking_filter_idc with 1 <-> 0
Definition: h264dec.h:197
uint8_t(*[2] mvd_table)[2]
Definition: h264dec.h:422
int prev_interlaced_frame
Complement sei_pic_struct SEI_PIC_STRUCT_TOP_BOTTOM and SEI_PIC_STRUCT_BOTTOM_TOP indicate interlaced...
Definition: h264dec.h:514
static int fill_filter_caches(const H264Context *h, H264SliceContext *sl, int mb_type)
Definition: h264_slice.c:2103
ThreadFrame tf
Definition: h264dec.h:130
simple assert() macros that are a bit more flexible than ISO C assert().
int weighted_pred
weighted_pred_flag
Definition: h264_ps.h:114
#define PICT_TOP_FIELD
Definition: mpegutils.h:37
H264QpelContext h264qpel
Definition: h264dec.h:347
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:344
int direct_spatial_mv_pred
Definition: h264dec.h:255
H264SEIUnregistered unregistered
Definition: h264_sei.h:150
HW acceleration through VDA, data[3] contains a CVPixelBufferRef.
Definition: pixfmt.h:224
int frame_num
frame_num (raw frame_num from slice header)
Definition: h264dec.h:149
const uint8_t ff_h264_golomb_to_pict_type[5]
Definition: h264data.c:37
#define MAX_SLICES
Definition: dxva2_hevc.c:32
int valid_recovery_point
Are the SEI recovery points looking valid.
Definition: h264dec.h:519
GLsizei count
Definition: opengl_enc.c:109
int ff_h264_get_slice_type(const H264SliceContext *sl)
Reconstruct bitstream slice_type.
Definition: h264_slice.c:2001
#define fail()
Definition: checkasm.h:83
uint8_t active_format_description
Definition: h264_sei.h:89
int delta_pic_order_always_zero_flag
Definition: h264_ps.h:52
void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], const uint8_t *src_data[4], const int src_linesizes[4], enum AVPixelFormat pix_fmt, int width, int height)
Copy image in src_data to dst_data.
Definition: imgutils.c:302
int * mb_index2xy
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
Definition: h264dec.h:188
uint8_t zigzag_scan8x8[64]
Definition: h264dec.h:426
AVBufferRef * hwaccel_priv_buf
Definition: h264dec.h:141
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:66
int crop_left
Definition: h264dec.h:166
int crop
frame_cropping_flag
Definition: h264_ps.h:63
uint8_t * error_status_table
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
Definition: mem.c:499
int ff_h264_parse_ref_count(int *plist_count, int ref_count[2], GetBitContext *gb, const PPS *pps, int slice_type_nos, int picture_structure, void *logctx)
Definition: h264_parse.c:201
int nal_length_size
Number of bytes used for nal length (1, 2 or 4)
Definition: h264dec.h:453
int ff_h264_pred_weight_table(GetBitContext *gb, const SPS *sps, const int *ref_count, int slice_type_nos, H264PredWeightTable *pwt, void *logctx)
Definition: h264_parse.c:27
useful rectangle filling function
#define AV_PIX_FMT_YUV422P9
Definition: pixfmt.h:339
int refs
number of reference frames
Definition: avcodec.h:2357
int prev_poc_msb
poc_msb of the last reference pic for POC type 0
Definition: h264_parse.h:49
AVBufferRef * motion_val_buf[2]
Definition: h264dec.h:135
Views are packed per line, as if interlaced.
Definition: stereo3d.h:97
int ref_frame_count
num_ref_frames
Definition: h264_ps.h:56
enum AVPixelFormat * pix_fmts
array of supported pixel formats, or NULL if unknown, array is terminated by -1
Definition: avcodec.h:3621
enum AVPictureType pict_type
Picture type of the frame.
Definition: frame.h:258
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:2964
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:53
int ct_type
Bit set of clock types for fields/frames in picture timing SEI message.
Definition: h264_sei.h:74
void av_fast_mallocz(void *ptr, unsigned int *size, size_t min_size)
Allocate and clear a buffer, reusing the given one if large enough.
Definition: mem.c:504
#define FFMIN(a, b)
Definition: common.h:96
uint16_t * slice_table
slice_table_base + 2*mb_stride + 1
Definition: h264dec.h:408
static void copy_picture_range(H264Picture **to, H264Picture **from, int count, H264Context *new_base, H264Context *old_base)
Definition: h264_slice.c:285
static int h264_field_start(H264Context *h, const H264SliceContext *sl, const H2645NAL *nal, int first_slice)
Definition: h264_slice.c:1290
uint8_t field_scan8x8_cavlc[64]
Definition: h264dec.h:430
#define IS_DIRECT(a)
Definition: mpegutils.h:86
CABACContext cabac
Cabac.
Definition: h264dec.h:322
int colour_description_present_flag
Definition: h264_ps.h:74
unsigned int first_mb_addr
Definition: h264dec.h:238
int reference
Definition: h264dec.h:160
static void er_add_slice(H264SliceContext *sl, int startx, int starty, int endx, int endy, int status)
Definition: h264_slice.c:2359
#define LEFT_MBS
Definition: h264dec.h:75
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
Definition: pixfmt.h:74
AVRational sar
Definition: h264_ps.h:71
#define width
int width
picture width / height.
Definition: avcodec.h:1863
int redundant_pic_count
Definition: h264dec.h:248
int nb_slice_ctx
Definition: h264dec.h:355
H264PredWeightTable pwt
Definition: h264dec.h:201
int long_ref_count
number of actual long term references
Definition: h264dec.h:480
#define ER_DC_END
uint32_t * mb_type
Definition: h264dec.h:139
void ff_thread_report_progress(ThreadFrame *f, int n, int field)
Notify later decoding threads when part of their reference picture is ready.
static int h264_init_ps(H264Context *h, const H264SliceContext *sl, int first_slice)
Definition: h264_slice.c:1012
int size_in_bits
Definition: get_bits.h:58
int32_t
int ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size)
Definition: cabac.c:177
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:2392
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
Definition: common.h:72
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
Definition: avcodec.h:3119
Context Adaptive Binary Arithmetic Coder inline functions.
int level
level
Definition: avcodec.h:3279
int init_qp
pic_init_qp_minus26 + 26
Definition: h264_ps.h:116
H.264 / AVC / MPEG-4 part10 codec.
int mmco_reset
Definition: h264dec.h:477
H264SliceContext * slice_ctx
Definition: h264dec.h:354
int direct_8x8_inference_flag
Definition: h264_ps.h:62
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: avcodec.h:2975
int reference
Definition: h264dec.h:174
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
Definition: avcodec.h:1822
int top_borders_allocated[2]
Definition: h264dec.h:292
static int pic_is_unused(H264Context *h, H264Picture *pic)
Definition: h264_slice.c:256
static void fill_rectangle(int x, int y, int w, int h)
Definition: ffplay.c:788
#define FIELD_OR_MBAFF_PICTURE(h)
Definition: h264dec.h:91
uint8_t * a53_caption
Definition: h264_sei.h:94
int ref_idc
H.264 only, nal_ref_idc.
Definition: h2645_parse.h:65
#define src
Definition: vp9dsp.c:530
static void init_scan_tables(H264Context *h)
initialize scan tables
Definition: h264_slice.c:733
static int av_unused get_cabac_terminate(CABACContext *c)
int quincunx_sampling_flag
Definition: h264_sei.h:124
#define AV_PIX_FMT_YUV444P9
Definition: pixfmt.h:340
#define AV_STEREO3D_FLAG_INVERT
Inverted views, Right/Bottom represents the left view.
Definition: stereo3d.h:114
#define AV_PIX_FMT_GBRP14
Definition: pixfmt.h:359
int type
NAL unit type.
Definition: h2645_parse.h:52
2: bottom field
Definition: h264_sei.h:44
void av_display_rotation_set(int32_t matrix[9], double angle)
Initialize a transformation matrix describing a pure counterclockwise rotation by the specified angle...
Definition: display.c:50
#define FF_ARRAY_ELEMS(a)
the normal 2^n-1 "JPEG" YUV ranges
Definition: pixfmt.h:460
static int init_table_pools(H264Context *h)
Definition: h264_slice.c:160
uint8_t * edge_emu_buffer
Definition: h264dec.h:288
Views are packed per column.
Definition: stereo3d.h:107
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
Definition: golomb.h:85
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:62
int pic_order_present
pic_order_present_flag
Definition: h264_ps.h:110
uint8_t zigzag_scan_q0[16]
Definition: h264dec.h:431
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
Definition: frame.h:248
int bit_depth_luma
luma bit depth from sps to detect changes
Definition: h264dec.h:455
int chroma_format_idc
chroma format from sps to detect changes
Definition: h264dec.h:456
VideoDSPContext vdsp
Definition: h264dec.h:344
int timing_info_present_flag
Definition: h264_ps.h:78
int coded_picture_number
picture number in bitstream order
Definition: frame.h:289
enum AVStereo3DType type
How views are packed within the video.
Definition: stereo3d.h:127
int mb_stride
Definition: h264dec.h:440
int postpone_filter
Definition: h264dec.h:383
#define IS_INTERLACED(a)
Definition: mpegutils.h:85
AVCodecContext * avctx
Definition: h264dec.h:343
uint8_t zigzag_scan8x8_q0[64]
Definition: h264dec.h:432
#define AV_PIX_FMT_YUV420P14
Definition: pixfmt.h:349
Libavcodec external API header.
#define MAX_DELAYED_PIC_COUNT
Definition: h264dec.h:56
int last_qscale_diff
Definition: h264dec.h:194
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition: frame.h:83
AVBufferRef * pps_list[MAX_PPS_COUNT]
Definition: h264_ps.h:138
enum AVCodecID codec_id
Definition: avcodec.h:1693
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
Definition: golomb.h:100
int delta_poc_bottom
Definition: h264_parse.h:46
ERPicture next_pic
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
Definition: frame.h:215
H264Picture * short_ref[32]
Definition: h264dec.h:465
int next_outputed_poc
Definition: h264dec.h:470
int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
Decode a macroblock.
Definition: h264_cabac.c:1914
int explicit_ref_marking
Definition: h264dec.h:478
Views are next to each other, but when upscaling apply a checkerboard pattern.
Definition: stereo3d.h:87
#define AV_CODEC_FLAG2_FAST
Allow non spec compliant speedup tricks.
Definition: avcodec.h:901
int field_poc[2]
top/bottom POC
Definition: h264dec.h:147
SEI_PicStructType pic_struct
Definition: h264_sei.h:67
int debug
debug
Definition: avcodec.h:2916
int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
Wrapper around get_buffer() for frame-multithreaded codecs.
int max_contexts
Max number of threads / contexts.
Definition: h264dec.h:498
int recovery_frame
recovery_frame is the frame_num at which the next frame should be fully constructed.
Definition: h264dec.h:527
main external API structure.
Definition: avcodec.h:1676
void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip)
Flip the input matrix horizontally and/or vertically.
Definition: display.c:65
int qp_thresh
QP threshold to skip loopfilter.
Definition: h264dec.h:193
int explicit_ref_marking
Definition: h264dec.h:328
uint8_t * data
The data buffer.
Definition: buffer.h:89
#define fp
Definition: regdef.h:44
uint8_t * data
Definition: frame.h:145
static int h264_slice_header_parse(const H264Context *h, H264SliceContext *sl, const H2645NAL *nal)
Definition: h264_slice.c:1546
H264SEIA53Caption a53_caption
Definition: h264_sei.h:149
void * buf
Definition: avisynth_c.h:690
int implicit_weight[48][48][2]
Definition: h264_parse.h:40
int8_t * qscale_table
Definition: h264dec.h:133
static const uint8_t scan8[16 *3+3]
Definition: h264dec.h:656
#define CABAC(h)
Definition: h264_cabac.c:28
AVBufferRef * av_buffer_allocz(int size)
Same as av_buffer_alloc(), except the returned buffer will be initialized to zero.
Definition: buffer.c:82
AVBuffer * buffer
Definition: buffer.h:82
static const uint8_t field_scan8x8_cavlc[64+1]
Definition: h264_slice.c:76
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:299
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:341
int coded_height
Definition: avcodec.h:1878
Switching Predicted.
Definition: avutil.h:273
int prev_frame_num
frame_num of the last pic for POC type 1/2
Definition: h264_parse.h:53
#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS
Definition: avcodec.h:3510
AVFrameSideData * av_frame_new_side_data(AVFrame *frame, enum AVFrameSideDataType type, int size)
Add a new side data to a frame.
Definition: frame.c:625
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
Definition: h264dec.h:298
5: top field, bottom field, top field repeated, in that order
Definition: h264_sei.h:47
void av_buffer_pool_uninit(AVBufferPool **ppool)
Mark the pool as being available for freeing.
Definition: buffer.c:274
#define FRAME_MBAFF(h)
Definition: h264dec.h:73
enum AVColorSpace colorspace
YUV colorspace type.
Definition: avcodec.h:2406
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:2399
#define LBOT
Definition: h264dec.h:77
HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface.
Definition: pixfmt.h:209
static av_always_inline uint32_t pack16to32(unsigned a, unsigned b)
Definition: h264dec.h:672
int8_t * ref_index[2]
Definition: h264dec.h:145
int ff_h264_ref_picture(H264Context *h, H264Picture *dst, H264Picture *src)
Definition: h264_picture.c:67
A reference counted buffer type.
int pixel_shift
0 for 8-bit H.264, 1 for high-bit-depth H.264
Definition: h264dec.h:359
int mmco_reset
MMCO_RESET set this 1.
Definition: h264dec.h:150
int content_interpretation_type
Definition: h264_sei.h:123
H264Picture * cur_pic_ptr
Definition: h264dec.h:350
#define LIST_NOT_USED
Definition: h264dec.h:395
const uint8_t ff_zigzag_direct[64]
Definition: mathtables.c:98
ptrdiff_t mb_uvlinesize
Definition: h264dec.h:232
static int h264_slice_header_init(H264Context *h)
Definition: h264_slice.c:906
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition: h264dec.h:246
enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Wrapper around get_format() for frame-multithreaded codecs.
int enable_er
Definition: h264dec.h:556
#define AV_PIX_FMT_YUV420P9
Definition: pixfmt.h:338
#define IS_INTER(a)
Definition: mpegutils.h:81
const SPS * sps
Definition: h264_ps.h:144
unsigned int sps_id
Definition: h264_ps.h:108
#define TRANSPOSE(x)
H264SEIPictureTiming picture_timing
Definition: h264_sei.h:147
int log2_max_poc_lsb
log2_max_pic_order_cnt_lsb_minus4
Definition: h264_ps.h:51
H264SEIRecoveryPoint recovery_point
Definition: h264_sei.h:151
ptrdiff_t mb_linesize
may be equal to s->linesize or s->linesize * 2, for mbaff
Definition: h264dec.h:231
HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer. ...
Definition: pixfmt.h:148
int16_t slice_row[MAX_SLICES]
to detect when MAX_SLICES is too low
Definition: h264dec.h:554
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:262
static int alloc_picture(H264Context *h, H264Picture *pic)
Definition: h264_slice.c:187
ptrdiff_t linesize
Definition: h264dec.h:230
int block_offset[2 *(16 *3)]
block_offset[ 0..23] for frame macroblocks block_offset[24..47] for field macroblocks ...
Definition: h264dec.h:402
uint32_t time_scale
Definition: h264_ps.h:80
#define AV_PIX_FMT_YUV422P14
Definition: pixfmt.h:350
#define AV_PIX_FMT_GBRP12
Definition: pixfmt.h:358
int transform_8x8_mode
transform_8x8_mode_flag
Definition: h264_ps.h:122
ptrdiff_t uvlinesize
Definition: h264dec.h:230
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:342
int pic_struct_present_flag
Definition: h264_ps.h:90
#define CHROMA444(h)
Definition: h264dec.h:99
AVStereo3D * av_stereo3d_create_side_data(AVFrame *frame)
Allocate a complete AVFrameSideData and add it to the frame.
Definition: stereo3d.c:33
unsigned int list_count
Definition: h264dec.h:272
uint8_t zigzag_scan[16]
Definition: h264dec.h:425
#define AV_PIX_FMT_YUV444P12
Definition: pixfmt.h:348
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:198
int prev_poc_lsb
poc_lsb of the last reference pic for POC type 0
Definition: h264_parse.h:50
static void release_unused_pictures(H264Context *h, int remove_current)
Definition: h264_slice.c:115
int ff_h264_alloc_tables(H264Context *h)
Allocate tables.
Definition: h264dec.c:182
#define AV_ZERO128(d)
Definition: intreadwrite.h:622
the normal 219*2^(n-8) "MPEG" YUV ranges
Definition: pixfmt.h:459
int left_type[LEFT_MBS]
Definition: h264dec.h:220
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
Definition: rational.h:89
hardware decoding through VDA
Definition: pixfmt.h:179
discard all non reference
Definition: avcodec.h:783
int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup)
Definition: h264_picture.c:153
AVBufferPool * qscale_table_pool
Definition: h264dec.h:560
H264Picture * next_output_pic
Definition: h264dec.h:469
volatile int error_count
int mb_height
pic_height_in_map_units_minus1 + 1
Definition: h264_ps.h:59
AVBufferPool * motion_val_pool
Definition: h264dec.h:562
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:62
int delta_poc_bottom
Definition: h264dec.h:332
#define IS_8x8DCT(a)
Definition: h264dec.h:104
common internal api header.
if(ret< 0)
Definition: vf_mcdeint.c:282
AVBufferPool * av_buffer_pool_init(int size, AVBufferRef *(*alloc)(int size))
Allocate and initialize a buffer pool.
Definition: buffer.c:237
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:107
#define AV_COPY128(d, s)
Definition: intreadwrite.h:594
static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback)
Definition: h264_slice.c:767
AVBufferRef * pps_ref
Definition: h264_ps.h:140
Video is not stereoscopic (and metadata has to be there).
Definition: stereo3d.h:35
int log2_max_frame_num
log2_max_frame_num_minus4 + 4
Definition: h264_ps.h:49
int missing_fields
Definition: h264dec.h:544
Views are packed in a checkerboard-like structure per pixel.
Definition: stereo3d.h:76
static double c[64]
H264ParamSets ps
Definition: h264dec.h:458
H264SEIFramePacking frame_packing
Definition: h264_sei.h:153
H.264 / AVC / MPEG-4 part10 motion vector prediction.
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
Definition: buffer.c:92
Bi-dir predicted.
Definition: avutil.h:270
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
Definition: pixfmt.h:76
int cur_chroma_format_idc
Definition: h264dec.h:552
int8_t * intra4x4_pred_mode
Definition: h264dec.h:210
unsigned properties
Definition: avcodec.h:3508
enum AVDiscard skip_loop_filter
Skip loop filtering for selected frames.
Definition: avcodec.h:3287
int den
Denominator.
Definition: rational.h:60
static void predict_field_decoding_flag(const H264Context *h, H264SliceContext *sl)
Definition: h264_slice.c:2315
int ff_h264_decode_mb_cavlc(const H264Context *h, H264SliceContext *sl)
Decode a macroblock.
Definition: h264_cavlc.c:702
int bit_depth_luma
bit_depth_luma_minus8 + 8
Definition: h264_ps.h:96
#define IS_INTRA(x, y)
int present
Definition: h264_sei.h:88
int delta_poc[2]
Definition: h264_parse.h:47
void ff_h264_free_tables(H264Context *h)
Definition: h264dec.c:139
void * priv_data
Definition: avcodec.h:1718
#define LTOP
Definition: h264dec.h:76
#define PICT_FRAME
Definition: mpegutils.h:39
int ff_h264_execute_decode_slices(H264Context *h, unsigned context_count)
Call decode_slice() for each context.
Definition: h264_slice.c:2588
4: bottom field, top field, in that order
Definition: h264_sei.h:46
static av_always_inline void backup_mb_border(const H264Context *h, H264SliceContext *sl, uint8_t *src_y, uint8_t *src_cb, uint8_t *src_cr, int linesize, int uvlinesize, int simple)
Definition: h264_slice.c:567
uint8_t zigzag_scan8x8_cavlc_q0[64]
Definition: h264dec.h:433
int8_t ref_cache[2][5 *8]
Definition: h264dec.h:304
unsigned int pps_id
Definition: h264dec.h:282
int(* execute)(struct AVCodecContext *c, int(*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size)
The codec may call this to execute several independent things.
Definition: avcodec.h:3147
int top_field_first
If the content is interlaced, is top field displayed first.
Definition: frame.h:327
int frame_priv_data_size
Size of per-frame hardware accelerator private data.
Definition: avcodec.h:3817
#define CHROMA422(h)
Definition: h264dec.h:98
#define FF_BUG_TRUNCATED
Definition: avcodec.h:2880
static uint8_t tmp[8]
Definition: des.c:38
H264Picture cur_pic
Definition: h264dec.h:351
Views are on top of each other.
Definition: stereo3d.h:55
int key_frame
1 -> keyframe, 0-> not
Definition: frame.h:253
#define AV_ZERO32(d)
Definition: intreadwrite.h:614
int mb_width
Definition: h264dec.h:439
static int find_unused_picture(H264Context *h)
Definition: h264_slice.c:263
int current_slice
current slice number, used to initialize slice_num of each thread/context
Definition: h264dec.h:490
int ff_h264_execute_ref_pic_marking(H264Context *h)
Execute the reference picture marking (memory management control operations).
Definition: h264_refs.c:609
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:445
int mb_width
pic_width_in_mbs_minus1 + 1
Definition: h264_ps.h:58
int flags2
AV_CODEC_FLAG2_*.
Definition: avcodec.h:1778
uint32_t * mb2b_xy
Definition: h264dec.h:404
H264Ref ref_list[2][48]
0..15: frame refs, 16..47: mbaff field refs.
Definition: h264dec.h:273
uint8_t field_scan8x8_cavlc_q0[64]
Definition: h264dec.h:436
int cur_bit_depth_luma
Definition: h264dec.h:553
AVBufferRef * ref_index_buf[2]
Definition: h264dec.h:144
av_cold void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
Definition: h264dsp.c:67
H264DSPContext h264dsp
Definition: h264dec.h:345
void ff_er_frame_start(ERContext *s)
int height
Definition: frame.h:236
int crop_top
Definition: h264dec.h:167
1: top field
Definition: h264_sei.h:43
uint8_t(*[2] mvd_table)[2]
Definition: h264dec.h:317
uint8_t field_scan8x8[64]
Definition: h264dec.h:429
int slice_type_fixed
Definition: h264dec.h:189
static av_always_inline void fill_filter_caches_inter(const H264Context *h, H264SliceContext *sl, int mb_type, int top_xy, int left_xy[LEFT_MBS], int top_type, int left_type[LEFT_MBS], int mb_xy, int list)
Definition: h264_slice.c:2019
#define av_freep(p)
int prev_frame_num_offset
for POC type 2
Definition: h264_parse.h:52
#define av_always_inline
Definition: attributes.h:39
HW decoding through Direct3D11, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer...
Definition: pixfmt.h:243
int slice_beta_offset
Definition: h264dec.h:199
int8_t * intra4x4_pred_mode
Definition: h264dec.h:390
AVBufferRef * av_buffer_pool_get(AVBufferPool *pool)
Allocate a new AVBuffer, reusing an old buffer from the pool when available.
Definition: buffer.c:380
#define ER_AC_END
static int decode_slice(struct AVCodecContext *avctx, void *arg)
Definition: h264_slice.c:2373
int delta_poc[2]
Definition: h264dec.h:333
void ff_h264_direct_dist_scale_factor(const H264Context *const h, H264SliceContext *sl)
Definition: h264_direct.c:52
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
Definition: pixdesc.c:2182
int ff_h264_slice_context_init(H264Context *h, H264SliceContext *sl)
Init context Allocate buffers which are not shared amongst multiple threads.
Definition: h264dec.c:240
uint8_t field_scan_q0[16]
Definition: h264dec.h:434
int mb_field_decoding_flag
Definition: h264dec.h:245
uint8_t(* non_zero_count)[48]
Definition: h264dec.h:393
static void loop_filter(const H264Context *h, H264SliceContext *sl, int start_x, int end_x)
Definition: h264_slice.c:2245
unsigned int crop_bottom
frame_cropping_rect_bottom_offset
Definition: h264_ps.h:69
exp golomb vlc stuff
uint8_t * bipred_scratchpad
Definition: h264dec.h:287
void ff_h264_unref_picture(H264Context *h, H264Picture *pic)
Definition: h264_picture.c:46
AVPixelFormat
Pixel format.
Definition: pixfmt.h:60
av_cold void ff_h264qpel_init(H264QpelContext *c, int bit_depth)
Definition: h264qpel.c:49
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later.
Definition: avcodec.h:1354
int droppable
Definition: h264dec.h:373
int level_idc
Definition: h264_ps.h:46
void ff_h264_filter_mb_fast(const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize)
int nal_ref_idc
Definition: h264dec.h:446
GetBitContext gb
Definition: h264dec.h:183
uint8_t field_scan[16]
Definition: h264dec.h:428
int cabac_init_idc
Definition: h264dec.h:324
#define FRAME_RECOVERED_IDR
We have seen an IDR, so all the following frames in coded order are correctly decodable.
Definition: h264dec.h:533
for(j=16;j >0;--j)
#define FFMAX3(a, b, c)
Definition: common.h:95
int b_stride
Definition: h264dec.h:406
6: bottom field, top field, bottom field repeated, in that order
Definition: h264_sei.h:48
Predicted.
Definition: avutil.h:269
#define tb
Definition: regdef.h:68
Context Adaptive Binary Arithmetic Coder.
#define H264_MAX_PICTURE_COUNT
Definition: h264dec.h:52
#define AV_CEIL_RSHIFT(a, b)
Definition: common.h:58
void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
Definition: h264_cabac.c:1263
int short_ref_count
number of actual short term references
Definition: h264dec.h:481
enum AVColorSpace colorspace
Definition: h264_ps.h:77