FFmpeg
h264dec.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 #define UNCHECKED_BITSTREAM_READER 1
29 
30 #include "config_components.h"
31 
32 #include "libavutil/attributes.h"
33 #include "libavutil/avassert.h"
34 #include "libavutil/emms.h"
35 #include "libavutil/imgutils.h"
36 #include "libavutil/mem.h"
37 #include "libavutil/opt.h"
38 #include "libavutil/thread.h"
40 
41 #include "codec_internal.h"
42 #include "internal.h"
43 #include "error_resilience.h"
44 #include "avcodec.h"
45 #include "h264.h"
46 #include "h264dec.h"
47 #include "h2645_parse.h"
48 #include "h264data.h"
49 #include "h264_ps.h"
50 #include "golomb.h"
51 #include "hwaccel_internal.h"
52 #include "hwconfig.h"
53 #include "mpegutils.h"
54 #include "profiles.h"
55 #include "rectangle.h"
56 #include "libavutil/refstruct.h"
57 #include "thread.h"
58 #include "threadframe.h"
59 
60 const uint16_t ff_h264_mb_sizes[4] = { 256, 384, 512, 768 };
61 
63 {
64  H264Context *h = avctx->priv_data;
65  return h && h->ps.sps ? h->ps.sps->num_reorder_frames : 0;
66 }
67 
68 static void h264_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type,
69  int (*mv)[2][4][2],
70  int mb_x, int mb_y, int mb_intra, int mb_skipped)
71 {
72  const H264Context *h = opaque;
73  H264SliceContext *sl = &h->slice_ctx[0];
74 
75  sl->mb_x = mb_x;
76  sl->mb_y = mb_y;
77  sl->mb_xy = mb_x + mb_y * h->mb_stride;
78  memset(sl->non_zero_count_cache, 0, sizeof(sl->non_zero_count_cache));
79  av_assert1(ref >= 0);
80  /* FIXME: It is possible albeit uncommon that slice references
81  * differ between slices. We take the easy approach and ignore
82  * it for now. If this turns out to have any relevance in
83  * practice then correct remapping should be added. */
84  if (ref >= sl->ref_count[0])
85  ref = 0;
86  if (!sl->ref_list[0][ref].data[0]) {
87  av_log(h->avctx, AV_LOG_DEBUG, "Reference not available for error concealing\n");
88  ref = 0;
89  }
90  if ((sl->ref_list[0][ref].reference&3) != 3) {
91  av_log(h->avctx, AV_LOG_DEBUG, "Reference invalid\n");
92  return;
93  }
94  fill_rectangle(&h->cur_pic.ref_index[0][4 * sl->mb_xy],
95  2, 2, 2, ref, 1);
96  fill_rectangle(&sl->ref_cache[0][scan8[0]], 4, 4, 8, ref, 1);
97  fill_rectangle(sl->mv_cache[0][scan8[0]], 4, 4, 8,
98  pack16to32((*mv)[0][0][0], (*mv)[0][0][1]), 4);
99  sl->mb_mbaff =
100  sl->mb_field_decoding_flag = 0;
101  ff_h264_hl_decode_mb(h, &h->slice_ctx[0]);
102 }
103 
105  int y, int height)
106 {
107  AVCodecContext *avctx = h->avctx;
108  const AVFrame *src = h->cur_pic.f;
109  const AVPixFmtDescriptor *desc;
111  int vshift;
112  const int field_pic = h->picture_structure != PICT_FRAME;
113 
114  if (!avctx->draw_horiz_band)
115  return;
116 
117  if (field_pic && h->first_field && !(avctx->slice_flags & SLICE_FLAG_ALLOW_FIELD))
118  return;
119 
120  if (field_pic) {
121  height <<= 1;
122  y <<= 1;
123  }
124 
125  height = FFMIN(height, avctx->height - y);
126 
127  desc = av_pix_fmt_desc_get(avctx->pix_fmt);
128  vshift = desc->log2_chroma_h;
129 
130  offset[0] = y * src->linesize[0];
131  offset[1] =
132  offset[2] = (y >> vshift) * src->linesize[1];
133  for (int i = 3; i < AV_NUM_DATA_POINTERS; i++)
134  offset[i] = 0;
135 
136  emms_c();
137 
138  avctx->draw_horiz_band(avctx, src, offset,
139  y, h->picture_structure, height);
140 }
141 
143 {
144  int i;
145 
146  av_freep(&h->intra4x4_pred_mode);
147  av_freep(&h->chroma_pred_mode_table);
148  av_freep(&h->cbp_table);
149  av_freep(&h->mvd_table[0]);
150  av_freep(&h->mvd_table[1]);
151  av_freep(&h->direct_table);
152  av_freep(&h->non_zero_count);
153  av_freep(&h->slice_table_base);
154  h->slice_table = NULL;
155  av_freep(&h->list_counts);
156 
157  av_freep(&h->mb2b_xy);
158  av_freep(&h->mb2br_xy);
159 
160  av_refstruct_pool_uninit(&h->qscale_table_pool);
161  av_refstruct_pool_uninit(&h->mb_type_pool);
162  av_refstruct_pool_uninit(&h->motion_val_pool);
163  av_refstruct_pool_uninit(&h->ref_index_pool);
164 
165 #if CONFIG_ERROR_RESILIENCE
166  av_freep(&h->er.mb_index2xy);
167  av_freep(&h->er.error_status_table);
168  av_freep(&h->er.er_temp_buffer);
169  av_freep(&h->dc_val_base);
170 #endif
171 
172  for (i = 0; i < h->nb_slice_ctx; i++) {
173  H264SliceContext *sl = &h->slice_ctx[i];
174 
177  av_freep(&sl->top_borders[0]);
178  av_freep(&sl->top_borders[1]);
179 
182  sl->top_borders_allocated[0] = 0;
183  sl->top_borders_allocated[1] = 0;
184  }
185 }
186 
188 {
189  ERContext *const er = &h->er;
190  const int big_mb_num = h->mb_stride * (h->mb_height + 1);
191  const int row_mb_num = 2*h->mb_stride*FFMAX(h->nb_slice_ctx, 1);
192  const int st_size = big_mb_num + h->mb_stride;
193  int x, y;
194 
195  if (!FF_ALLOCZ_TYPED_ARRAY(h->intra4x4_pred_mode, row_mb_num * 8) ||
196  !FF_ALLOCZ_TYPED_ARRAY(h->non_zero_count, big_mb_num) ||
197  !FF_ALLOCZ_TYPED_ARRAY(h->slice_table_base, st_size) ||
198  !FF_ALLOCZ_TYPED_ARRAY(h->cbp_table, big_mb_num) ||
199  !FF_ALLOCZ_TYPED_ARRAY(h->chroma_pred_mode_table, big_mb_num) ||
200  !FF_ALLOCZ_TYPED_ARRAY(h->mvd_table[0], row_mb_num * 8) ||
201  !FF_ALLOCZ_TYPED_ARRAY(h->mvd_table[1], row_mb_num * 8) ||
202  !FF_ALLOCZ_TYPED_ARRAY(h->direct_table, big_mb_num * 4) ||
203  !FF_ALLOCZ_TYPED_ARRAY(h->list_counts, big_mb_num) ||
204  !FF_ALLOCZ_TYPED_ARRAY(h->mb2b_xy, big_mb_num) ||
205  !FF_ALLOCZ_TYPED_ARRAY(h->mb2br_xy, big_mb_num))
206  return AVERROR(ENOMEM);
207  h->slice_ctx[0].intra4x4_pred_mode = h->intra4x4_pred_mode;
208  h->slice_ctx[0].mvd_table[0] = h->mvd_table[0];
209  h->slice_ctx[0].mvd_table[1] = h->mvd_table[1];
210  memset(h->slice_table_base, -1,
211  st_size * sizeof(*h->slice_table_base));
212  h->slice_table = h->slice_table_base + h->mb_stride * 2 + 1;
213  for (y = 0; y < h->mb_height; y++)
214  for (x = 0; x < h->mb_width; x++) {
215  const int mb_xy = x + y * h->mb_stride;
216  const int b_xy = 4 * x + 4 * y * h->b_stride;
217 
218  h->mb2b_xy[mb_xy] = b_xy;
219  h->mb2br_xy[mb_xy] = 8 * (FMO ? mb_xy : (mb_xy % (2 * h->mb_stride)));
220  }
221 
222  if (CONFIG_ERROR_RESILIENCE) {
223  int y_size = (2 * h->mb_width + 1) * (2 * h->mb_height + 1);
224  int yc_size = y_size + 2 * big_mb_num;
225 
226  /* init ER */
227  er->avctx = h->avctx;
229  er->opaque = h;
230  er->quarter_sample = 1;
231 
232  er->mb_num = h->mb_num;
233  er->mb_width = h->mb_width;
234  er->mb_height = h->mb_height;
235  er->mb_stride = h->mb_stride;
236  er->b8_stride = h->mb_width * 2 + 1;
237 
238  // error resilience code looks cleaner with this
239  if (!FF_ALLOCZ_TYPED_ARRAY(er->mb_index2xy, h->mb_num + 1) ||
240  !FF_ALLOCZ_TYPED_ARRAY(h->dc_val_base, yc_size))
241  return AVERROR(ENOMEM); // ff_h264_free_tables will clean up for us
242 
243  for (y = 0; y < h->mb_height; y++)
244  for (x = 0; x < h->mb_width; x++)
245  er->mb_index2xy[x + y * h->mb_width] = x + y * h->mb_stride;
246 
247  er->mb_index2xy[h->mb_height * h->mb_width] = (h->mb_height - 1) *
248  h->mb_stride + h->mb_width;
249  er->dc_val[0] = h->dc_val_base + h->mb_width * 2 + 2;
250  er->dc_val[1] = h->dc_val_base + y_size + h->mb_stride + 1;
251  er->dc_val[2] = er->dc_val[1] + big_mb_num;
252  for (int i = 0; i < yc_size; i++)
253  h->dc_val_base[i] = 1024;
254 
255  return ff_er_init(er);
256  }
257 
258  return 0;
259 }
260 
261 /**
262  * Init slice context
263  */
265 {
266  sl->ref_cache[0][scan8[5] + 1] =
267  sl->ref_cache[0][scan8[7] + 1] =
268  sl->ref_cache[0][scan8[13] + 1] =
269  sl->ref_cache[1][scan8[5] + 1] =
270  sl->ref_cache[1][scan8[7] + 1] =
271  sl->ref_cache[1][scan8[13] + 1] = PART_NOT_AVAILABLE;
272 
273  sl->er = &h->er;
274 }
275 
276 static int h264_init_pic(H264Picture *pic)
277 {
278  pic->f = av_frame_alloc();
279  if (!pic->f)
280  return AVERROR(ENOMEM);
281 
282  pic->f_grain = av_frame_alloc();
283  if (!pic->f_grain)
284  return AVERROR(ENOMEM);
285 
286  return 0;
287 }
288 
290 {
291  int i, ret;
292 
293  h->avctx = avctx;
294  h->cur_chroma_format_idc = -1;
295 
296  h->width_from_caller = avctx->width;
297  h->height_from_caller = avctx->height;
298 
299  h->workaround_bugs = avctx->workaround_bugs;
300  h->flags = avctx->flags;
301  h->poc.prev_poc_msb = 1 << 16;
302  h->recovery_frame = -1;
303  h->frame_recovered = 0;
304  h->poc.prev_frame_num = -1;
305  h->sei.common.frame_packing.arrangement_cancel_flag = -1;
306  h->sei.common.unregistered.x264_build = -1;
307 
308  h->next_outputed_poc = INT_MIN;
309  for (i = 0; i < FF_ARRAY_ELEMS(h->last_pocs); i++)
310  h->last_pocs[i] = INT_MIN;
311 
312  ff_h264_sei_uninit(&h->sei);
313 
314  if (avctx->active_thread_type & FF_THREAD_FRAME) {
315  h->decode_error_flags_pool = av_refstruct_pool_alloc(sizeof(atomic_int), 0);
316  if (!h->decode_error_flags_pool)
317  return AVERROR(ENOMEM);
318  }
319 
320  h->nb_slice_ctx = (avctx->active_thread_type & FF_THREAD_SLICE) ? avctx->thread_count : 1;
321  h->slice_ctx = av_calloc(h->nb_slice_ctx, sizeof(*h->slice_ctx));
322  if (!h->slice_ctx) {
323  h->nb_slice_ctx = 0;
324  return AVERROR(ENOMEM);
325  }
326 
327  for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
328  if ((ret = h264_init_pic(&h->DPB[i])) < 0)
329  return ret;
330  }
331 
332  if ((ret = h264_init_pic(&h->cur_pic)) < 0)
333  return ret;
334 
335  if ((ret = h264_init_pic(&h->last_pic_for_ec)) < 0)
336  return ret;
337 
338  for (i = 0; i < h->nb_slice_ctx; i++)
339  h->slice_ctx[i].h264 = h;
340 
341  return 0;
342 }
343 
345 {
347  av_frame_free(&pic->f);
348  av_frame_free(&pic->f_grain);
349 }
350 
352 {
353  H264Context *h = avctx->priv_data;
354  int i;
355 
358 
359  for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
360  h264_free_pic(h, &h->DPB[i]);
361  }
362  memset(h->delayed_pic, 0, sizeof(h->delayed_pic));
363 
364  h->cur_pic_ptr = NULL;
365 
366  av_refstruct_pool_uninit(&h->decode_error_flags_pool);
367 
368  av_freep(&h->slice_ctx);
369  h->nb_slice_ctx = 0;
370 
371  ff_h264_sei_uninit(&h->sei);
372  ff_h264_ps_uninit(&h->ps);
373 
374  ff_h2645_packet_uninit(&h->pkt);
375 
376  h264_free_pic(h, &h->cur_pic);
377  h264_free_pic(h, &h->last_pic_for_ec);
378 
379  return 0;
380 }
381 
383 
385 {
386  H264Context *h = avctx->priv_data;
387  int ret;
388 
389  ret = h264_init_context(avctx, h);
390  if (ret < 0)
391  return ret;
392 
394  if (ret != 0) {
395  av_log(avctx, AV_LOG_ERROR, "pthread_once has failed.");
396  return AVERROR_UNKNOWN;
397  }
398 
399  if (!avctx->internal->is_copy) {
400  if (avctx->extradata_size > 0 && avctx->extradata) {
402  &h->ps, &h->is_avc, &h->nal_length_size,
403  avctx->err_recognition, avctx);
404  if (ret < 0) {
405  int explode = avctx->err_recognition & AV_EF_EXPLODE;
406  av_log(avctx, explode ? AV_LOG_ERROR: AV_LOG_WARNING,
407  "Error decoding the extradata\n");
408  if (explode) {
409  return ret;
410  }
411  ret = 0;
412  }
413  }
414  }
415 
416  if (h->ps.sps && h->ps.sps->bitstream_restriction_flag &&
417  h->avctx->has_b_frames < h->ps.sps->num_reorder_frames) {
418  h->avctx->has_b_frames = h->ps.sps->num_reorder_frames;
419  }
420 
422 
423  if (h->enable_er < 0 && (avctx->active_thread_type & FF_THREAD_SLICE))
424  h->enable_er = 0;
425 
426  if (h->enable_er && (avctx->active_thread_type & FF_THREAD_SLICE)) {
427  av_log(avctx, AV_LOG_WARNING,
428  "Error resilience with slice threads is enabled. It is unsafe and unsupported and may crash. "
429  "Use it at your own risk\n");
430  }
431 
432  return 0;
433 }
434 
435 /**
436  * instantaneous decoder refresh.
437  */
438 static void idr(H264Context *h)
439 {
440  int i;
442  h->poc.prev_frame_num =
443  h->poc.prev_frame_num_offset = 0;
444  h->poc.prev_poc_msb = 1<<16;
445  h->poc.prev_poc_lsb = -1;
446  for (i = 0; i < FF_ARRAY_ELEMS(h->last_pocs); i++)
447  h->last_pocs[i] = INT_MIN;
448 }
449 
450 /* forget old pics after a seek */
452 {
453  int i, j;
454 
455  h->next_outputed_poc = INT_MIN;
456  h->prev_interlaced_frame = 1;
457  idr(h);
458 
459  h->poc.prev_frame_num = -1;
460  if (h->cur_pic_ptr) {
461  h->cur_pic_ptr->reference = 0;
462  for (j=i=0; h->delayed_pic[i]; i++)
463  if (h->delayed_pic[i] != h->cur_pic_ptr)
464  h->delayed_pic[j++] = h->delayed_pic[i];
465  h->delayed_pic[j] = NULL;
466  }
467  ff_h264_unref_picture(&h->last_pic_for_ec);
468 
469  h->first_field = 0;
470  h->recovery_frame = -1;
471  h->frame_recovered = 0;
472  h->current_slice = 0;
473  h->mmco_reset = 1;
474 }
475 
477 {
478  H264Context *h = avctx->priv_data;
479  int i;
480 
481  memset(h->delayed_pic, 0, sizeof(h->delayed_pic));
482 
484  ff_h264_sei_uninit(&h->sei);
485 
486  for (i = 0; i < H264_MAX_PICTURE_COUNT; i++)
487  ff_h264_unref_picture(&h->DPB[i]);
488  h->cur_pic_ptr = NULL;
489  ff_h264_unref_picture(&h->cur_pic);
490 
491  h->mb_y = 0;
492  h->non_gray = 0;
493 
495  h->context_initialized = 0;
496 
497  if (FF_HW_HAS_CB(avctx, flush))
498  FF_HW_SIMPLE_CALL(avctx, flush);
499 }
500 
502 {
503  int nals_needed = 0;
504  int slice_type = 0;
505  int picture_intra_only = 1;
506  int first_slice = 0;
507  int i, ret;
508 
509  for (i = 0; i < h->pkt.nb_nals; i++) {
510  H2645NAL *nal = &h->pkt.nals[i];
511  GetBitContext gb;
512 
513  /* packets can sometimes contain multiple PPS/SPS,
514  * e.g. two PAFF field pictures in one packet, or a demuxer
515  * which splits NALs strangely if so, when frame threading we
516  * can't start the next thread until we've read all of them */
517  switch (nal->type) {
518  case H264_NAL_SPS:
519  case H264_NAL_PPS:
520  nals_needed = i;
521  break;
522  case H264_NAL_DPA:
523  case H264_NAL_IDR_SLICE:
524  case H264_NAL_SLICE:
525  ret = init_get_bits8(&gb, nal->data + 1, nal->size - 1);
526  if (ret < 0) {
527  av_log(h->avctx, AV_LOG_ERROR, "Invalid zero-sized VCL NAL unit\n");
528  if (h->avctx->err_recognition & AV_EF_EXPLODE)
529  return ret;
530 
531  break;
532  }
533  if (!get_ue_golomb_long(&gb) || // first_mb_in_slice
534  !first_slice ||
535  first_slice != nal->type)
536  nals_needed = i;
537  slice_type = get_ue_golomb_31(&gb);
538  if (slice_type > 9)
539  slice_type = 0;
540  if (slice_type > 4)
541  slice_type -= 5;
542 
543  slice_type = ff_h264_golomb_to_pict_type[slice_type];
544  picture_intra_only &= (slice_type & 3) == AV_PICTURE_TYPE_I;
545  if (!first_slice)
546  first_slice = nal->type;
547  }
548  }
549 
550  h->picture_intra_only = picture_intra_only;
551 
552  return nals_needed;
553 }
554 
555 static void debug_green_metadata(const H264SEIGreenMetaData *gm, void *logctx)
556 {
557  av_log(logctx, AV_LOG_DEBUG, "Green Metadata Info SEI message\n");
558  av_log(logctx, AV_LOG_DEBUG, " green_metadata_type: %d\n", gm->green_metadata_type);
559 
560  if (gm->green_metadata_type == 0) {
561  av_log(logctx, AV_LOG_DEBUG, " green_metadata_period_type: %d\n", gm->period_type);
562 
563  if (gm->period_type == 2)
564  av_log(logctx, AV_LOG_DEBUG, " green_metadata_num_seconds: %d\n", gm->num_seconds);
565  else if (gm->period_type == 3)
566  av_log(logctx, AV_LOG_DEBUG, " green_metadata_num_pictures: %d\n", gm->num_pictures);
567 
568  av_log(logctx, AV_LOG_DEBUG, " SEI GREEN Complexity Metrics: %f %f %f %f\n",
569  (float)gm->percent_non_zero_macroblocks/255,
570  (float)gm->percent_intra_coded_macroblocks/255,
571  (float)gm->percent_six_tap_filtering/255,
573 
574  } else if (gm->green_metadata_type == 1) {
575  av_log(logctx, AV_LOG_DEBUG, " xsd_metric_type: %d\n", gm->xsd_metric_type);
576 
577  if (gm->xsd_metric_type == 0)
578  av_log(logctx, AV_LOG_DEBUG, " xsd_metric_value: %f\n",
579  (float)gm->xsd_metric_value/100);
580  }
581 }
582 
584  const uint8_t *buf, int buf_size)
585 {
586  AVCodecContext *const avctx = h->avctx;
587  int nals_needed = 0; ///< number of NALs that need decoding before the next frame thread starts
588  int idr_cleared=0;
589  int i, ret = 0;
590 
591  h->has_slice = 0;
592  h->nal_unit_type= 0;
593 
594  if (!(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS)) {
595  h->current_slice = 0;
596  if (!h->first_field) {
597  h->cur_pic_ptr = NULL;
598  ff_h264_sei_uninit(&h->sei);
599  }
600  }
601 
602  if (h->nal_length_size == 4) {
603  if (buf_size > 8 && AV_RB32(buf) == 1 && AV_RB32(buf+5) > (unsigned)buf_size) {
604  h->is_avc = 0;
605  }else if(buf_size > 3 && AV_RB32(buf) > 1 && AV_RB32(buf) <= (unsigned)buf_size)
606  h->is_avc = 1;
607  }
608 
609  ret = ff_h2645_packet_split(&h->pkt, buf, buf_size, avctx, h->nal_length_size,
610  avctx->codec_id, !!h->is_avc * H2645_FLAG_IS_NALFF);
611  if (ret < 0) {
612  av_log(avctx, AV_LOG_ERROR,
613  "Error splitting the input into NAL units.\n");
614  return ret;
615  }
616 
617  if (avctx->active_thread_type & FF_THREAD_FRAME)
618  nals_needed = get_last_needed_nal(h);
619  if (nals_needed < 0)
620  return nals_needed;
621 
622  for (i = 0; i < h->pkt.nb_nals; i++) {
623  H2645NAL *nal = &h->pkt.nals[i];
624  int max_slice_ctx, err;
625 
626  if (avctx->skip_frame >= AVDISCARD_NONREF &&
627  nal->ref_idc == 0 && nal->type != H264_NAL_SEI)
628  continue;
629 
630  // FIXME these should stop being context-global variables
631  h->nal_ref_idc = nal->ref_idc;
632  h->nal_unit_type = nal->type;
633 
634  err = 0;
635  switch (nal->type) {
636  case H264_NAL_IDR_SLICE:
637  if ((nal->data[1] & 0xFC) == 0x98) {
638  av_log(h->avctx, AV_LOG_ERROR, "Invalid inter IDR frame\n");
639  h->next_outputed_poc = INT_MIN;
640  ret = -1;
641  goto end;
642  }
643  if(!idr_cleared) {
644  idr(h); // FIXME ensure we don't lose some frames if there is reordering
645  }
646  idr_cleared = 1;
647  h->has_recovery_point = 1;
648  case H264_NAL_SLICE:
649  h->has_slice = 1;
650 
651  if ((err = ff_h264_queue_decode_slice(h, nal))) {
652  H264SliceContext *sl = h->slice_ctx + h->nb_slice_ctx_queued;
653  sl->ref_count[0] = sl->ref_count[1] = 0;
654  break;
655  }
656 
657  if (h->current_slice == 1) {
658  if (avctx->active_thread_type & FF_THREAD_FRAME &&
659  i >= nals_needed && !h->setup_finished && h->cur_pic_ptr) {
660  ff_thread_finish_setup(avctx);
661  h->setup_finished = 1;
662  }
663 
664  if (h->avctx->hwaccel &&
665  (ret = FF_HW_CALL(h->avctx, start_frame, buf_ref,
666  buf, buf_size)) < 0)
667  goto end;
668  }
669 
670  max_slice_ctx = avctx->hwaccel ? 1 : h->nb_slice_ctx;
671  if (h->nb_slice_ctx_queued == max_slice_ctx) {
672  if (h->avctx->hwaccel) {
673  ret = FF_HW_CALL(avctx, decode_slice, nal->raw_data, nal->raw_size);
674  h->nb_slice_ctx_queued = 0;
675  } else
677  if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
678  goto end;
679  }
680  break;
681  case H264_NAL_DPA:
682  case H264_NAL_DPB:
683  case H264_NAL_DPC:
684  avpriv_request_sample(avctx, "data partitioning");
685  break;
686  case H264_NAL_SEI:
687  if (h->setup_finished) {
688  avpriv_request_sample(avctx, "Late SEI");
689  break;
690  }
691  ret = ff_h264_sei_decode(&h->sei, &nal->gb, &h->ps, avctx);
692  h->has_recovery_point = h->has_recovery_point || h->sei.recovery_point.recovery_frame_cnt != -1;
693  if (avctx->debug & FF_DEBUG_GREEN_MD)
694  debug_green_metadata(&h->sei.green_metadata, h->avctx);
695  if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
696  goto end;
697  break;
698  case H264_NAL_SPS: {
699  GetBitContext tmp_gb = nal->gb;
700  if (FF_HW_HAS_CB(avctx, decode_params)) {
701  ret = FF_HW_CALL(avctx, decode_params,
702  nal->type, nal->raw_data, nal->raw_size);
703  if (ret < 0)
704  goto end;
705  }
706  if (ff_h264_decode_seq_parameter_set(&tmp_gb, avctx, &h->ps, 0) >= 0)
707  break;
708  av_log(h->avctx, AV_LOG_DEBUG,
709  "SPS decoding failure, trying again with the complete NAL\n");
710  init_get_bits8(&tmp_gb, nal->raw_data + 1, nal->raw_size - 1);
711  if (ff_h264_decode_seq_parameter_set(&tmp_gb, avctx, &h->ps, 0) >= 0)
712  break;
713  ff_h264_decode_seq_parameter_set(&nal->gb, avctx, &h->ps, 1);
714  break;
715  }
716  case H264_NAL_PPS:
717  if (FF_HW_HAS_CB(avctx, decode_params)) {
718  ret = FF_HW_CALL(avctx, decode_params,
719  nal->type, nal->raw_data, nal->raw_size);
720  if (ret < 0)
721  goto end;
722  }
723  ret = ff_h264_decode_picture_parameter_set(&nal->gb, avctx, &h->ps,
724  nal->size_bits);
725  if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
726  goto end;
727  break;
728  case H264_NAL_AUD:
730  case H264_NAL_END_STREAM:
732  case H264_NAL_SPS_EXT:
734  break;
735  default:
736  av_log(avctx, AV_LOG_DEBUG, "Unknown NAL code: %d (%d bits)\n",
737  nal->type, nal->size_bits);
738  }
739 
740  if (err < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE)) {
741  av_log(h->avctx, AV_LOG_ERROR, "decode_slice_header error\n");
742  ret = err;
743  goto end;
744  }
745  }
746 
748  if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
749  goto end;
750 
751  // set decode_error_flags to allow users to detect concealed decoding errors
752  if ((ret < 0 || h->er.error_occurred) && h->cur_pic_ptr) {
753  if (h->cur_pic_ptr->decode_error_flags) {
754  /* Frame-threading in use */
755  atomic_int *decode_error = h->cur_pic_ptr->decode_error_flags;
756  /* Using atomics here is not supposed to provide synchronisation;
757  * they are merely used to allow to set decode_error from both
758  * decoding threads in case of coded slices. */
760  memory_order_relaxed);
761  } else
762  h->cur_pic_ptr->f->decode_error_flags |= FF_DECODE_ERROR_DECODE_SLICES;
763  }
764 
765  ret = 0;
766 end:
767 
768 #if CONFIG_ERROR_RESILIENCE
769  /*
770  * FIXME: Error handling code does not seem to support interlaced
771  * when slices span multiple rows
772  * The ff_er_add_slice calls don't work right for bottom
773  * fields; they cause massive erroneous error concealing
774  * Error marking covers both fields (top and bottom).
775  * This causes a mismatched s->error_count
776  * and a bad error table. Further, the error count goes to
777  * INT_MAX when called for bottom field, because mb_y is
778  * past end by one (callers fault) and resync_mb_y != 0
779  * causes problems for the first MB line, too.
780  */
781  if (!FIELD_PICTURE(h) && h->current_slice && h->enable_er) {
782 
783  H264SliceContext *sl = h->slice_ctx;
784  int use_last_pic = h->last_pic_for_ec.f->buf[0] && !sl->ref_count[0];
785  int decode_error_flags = 0;
786 
787  ff_h264_set_erpic(&h->er.cur_pic, h->cur_pic_ptr);
788 
789  if (use_last_pic) {
790  ff_h264_set_erpic(&h->er.last_pic, &h->last_pic_for_ec);
791  sl->ref_list[0][0].parent = &h->last_pic_for_ec;
792  memcpy(sl->ref_list[0][0].data, h->last_pic_for_ec.f->data, sizeof(sl->ref_list[0][0].data));
793  memcpy(sl->ref_list[0][0].linesize, h->last_pic_for_ec.f->linesize, sizeof(sl->ref_list[0][0].linesize));
794  sl->ref_list[0][0].reference = h->last_pic_for_ec.reference;
795  } else if (sl->ref_count[0]) {
796  ff_h264_set_erpic(&h->er.last_pic, sl->ref_list[0][0].parent);
797  } else
798  ff_h264_set_erpic(&h->er.last_pic, NULL);
799 
800  if (sl->ref_count[1])
801  ff_h264_set_erpic(&h->er.next_pic, sl->ref_list[1][0].parent);
802 
803  ff_er_frame_end(&h->er, &decode_error_flags);
804  if (decode_error_flags) {
805  if (h->cur_pic_ptr->decode_error_flags) {
806  atomic_int *decode_error = h->cur_pic_ptr->decode_error_flags;
807  atomic_fetch_or_explicit(decode_error, decode_error_flags,
808  memory_order_relaxed);
809  } else
810  h->cur_pic_ptr->f->decode_error_flags |= decode_error_flags;
811  }
812  if (use_last_pic)
813  memset(&sl->ref_list[0][0], 0, sizeof(sl->ref_list[0][0]));
814  }
815 #endif /* CONFIG_ERROR_RESILIENCE */
816  /* clean up */
817  if (h->cur_pic_ptr && !h->droppable && h->has_slice) {
818  ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX,
819  h->picture_structure == PICT_BOTTOM_FIELD);
820  }
821 
822  return (ret < 0) ? ret : buf_size;
823 }
824 
826 {
827  AVVideoEncParams *par;
828  unsigned int nb_mb = p->mb_height * p->mb_width;
829  unsigned int x, y;
830 
832  if (!par)
833  return AVERROR(ENOMEM);
834 
835  par->qp = p->pps->init_qp;
836 
837  par->delta_qp[1][0] = p->pps->chroma_qp_index_offset[0];
838  par->delta_qp[1][1] = p->pps->chroma_qp_index_offset[0];
839  par->delta_qp[2][0] = p->pps->chroma_qp_index_offset[1];
840  par->delta_qp[2][1] = p->pps->chroma_qp_index_offset[1];
841 
842  for (y = 0; y < p->mb_height; y++)
843  for (x = 0; x < p->mb_width; x++) {
844  const unsigned int block_idx = y * p->mb_width + x;
845  const unsigned int mb_xy = y * p->mb_stride + x;
847 
848  b->src_x = x * 16;
849  b->src_y = y * 16;
850  b->w = 16;
851  b->h = 16;
852 
853  b->delta_qp = p->qscale_table[mb_xy] - par->qp;
854  }
855 
856  return 0;
857 }
858 
860 {
861  int ret;
862 
863  ret = av_frame_ref(dst, srcp->needs_fg ? srcp->f_grain : srcp->f);
864  if (ret < 0)
865  return ret;
866 
867  if (srcp->needs_fg && (ret = av_frame_copy_props(dst, srcp->f)) < 0)
868  return ret;
869 
870  if (srcp->decode_error_flags) {
871  atomic_int *decode_error = srcp->decode_error_flags;
872  /* The following is not supposed to provide synchronisation at all:
873  * given that srcp has already finished decoding, decode_error
874  * has already been set to its final value. */
875  dst->decode_error_flags |= atomic_load_explicit(decode_error, memory_order_relaxed);
876  }
877 
878  av_dict_set(&dst->metadata, "stereo_mode", ff_h264_sei_stereo_mode(&h->sei.common.frame_packing), 0);
879 
880  if (srcp->sei_recovery_frame_cnt == 0)
881  dst->flags |= AV_FRAME_FLAG_KEY;
882 
883  if (h->avctx->export_side_data & AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS) {
884  ret = h264_export_enc_params(dst, srcp);
885  if (ret < 0)
886  goto fail;
887  }
888 
889  if (!(h->avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN))
891 
892  return 0;
893 fail:
895  return ret;
896 }
897 
898 static int is_avcc_extradata(const uint8_t *buf, int buf_size)
899 {
900  int cnt= buf[5]&0x1f;
901  const uint8_t *p= buf+6;
902  if (!cnt)
903  return 0;
904  while(cnt--){
905  int nalsize= AV_RB16(p) + 2;
906  if(nalsize > buf_size - (p-buf) || (p[2] & 0x9F) != 7)
907  return 0;
908  p += nalsize;
909  }
910  cnt = *(p++);
911  if(!cnt)
912  return 0;
913  while(cnt--){
914  int nalsize= AV_RB16(p) + 2;
915  if(nalsize > buf_size - (p-buf) || (p[2] & 0x9F) != 8)
916  return 0;
917  p += nalsize;
918  }
919  return 1;
920 }
921 
922 static int finalize_frame(H264Context *h, AVFrame *dst, H264Picture *out, int *got_frame)
923 {
924  int ret;
925 
926  if (((h->avctx->flags & AV_CODEC_FLAG_OUTPUT_CORRUPT) ||
927  (h->avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL) ||
928  out->recovered)) {
929 
930  if (h->skip_gray > 0 &&
931  h->non_gray && out->gray &&
932  !(h->avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL)
933  )
934  return 0;
935 
936  if (!h->avctx->hwaccel &&
937  (out->field_poc[0] == INT_MAX ||
938  out->field_poc[1] == INT_MAX)
939  ) {
940  int p;
941  AVFrame *f = out->f;
942  int field = out->field_poc[0] == INT_MAX;
943  uint8_t *dst_data[4];
944  int linesizes[4];
945  const uint8_t *src_data[4];
946 
947  av_log(h->avctx, AV_LOG_DEBUG, "Duplicating field %d to fill missing\n", field);
948 
949  for (p = 0; p<4; p++) {
950  dst_data[p] = f->data[p] + (field^1)*f->linesize[p];
951  src_data[p] = f->data[p] + field *f->linesize[p];
952  linesizes[p] = 2*f->linesize[p];
953  }
954 
955  av_image_copy(dst_data, linesizes, src_data, linesizes,
956  f->format, f->width, f->height>>1);
957  }
958 
959  ret = output_frame(h, dst, out);
960  if (ret < 0)
961  return ret;
962 
963  *got_frame = 1;
964 
965  if (CONFIG_MPEGVIDEODEC) {
966  ff_print_debug_info2(h->avctx, dst,
967  out->mb_type,
968  out->qscale_table,
969  out->motion_val,
970  out->mb_width, out->mb_height, out->mb_stride, 1);
971  }
972  }
973 
974  return 0;
975 }
976 
978  int *got_frame, int buf_index)
979 {
980  int ret, i, out_idx;
981  H264Picture *out;
982 
983  h->cur_pic_ptr = NULL;
984  h->first_field = 0;
985 
986  while (h->delayed_pic[0]) {
987  out = h->delayed_pic[0];
988  out_idx = 0;
989  for (i = 1;
990  h->delayed_pic[i] &&
991  !(h->delayed_pic[i]->f->flags & AV_FRAME_FLAG_KEY) &&
992  !h->delayed_pic[i]->mmco_reset;
993  i++)
994  if (h->delayed_pic[i]->poc < out->poc) {
995  out = h->delayed_pic[i];
996  out_idx = i;
997  }
998 
999  for (i = out_idx; h->delayed_pic[i]; i++)
1000  h->delayed_pic[i] = h->delayed_pic[i + 1];
1001 
1002  if (out) {
1003  h->frame_recovered |= out->recovered;
1004  out->recovered |= h->frame_recovered & FRAME_RECOVERED_SEI;
1005 
1006  out->reference &= ~DELAYED_PIC_REF;
1007  ret = finalize_frame(h, dst_frame, out, got_frame);
1008  if (ret < 0)
1009  return ret;
1010  if (*got_frame)
1011  break;
1012  }
1013  }
1014 
1015  return buf_index;
1016 }
1017 
1018 static int h264_decode_frame(AVCodecContext *avctx, AVFrame *pict,
1019  int *got_frame, AVPacket *avpkt)
1020 {
1021  const uint8_t *buf = avpkt->data;
1022  int buf_size = avpkt->size;
1023  H264Context *h = avctx->priv_data;
1024  int buf_index;
1025  int ret;
1026 
1027  h->flags = avctx->flags;
1028  h->setup_finished = 0;
1029  h->nb_slice_ctx_queued = 0;
1030 
1031  ff_h264_unref_picture(&h->last_pic_for_ec);
1032 
1033  /* end of stream, output what is still in the buffers */
1034  if (buf_size == 0)
1035  return send_next_delayed_frame(h, pict, got_frame, 0);
1036 
1038  size_t side_size;
1039  uint8_t *side = av_packet_get_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA, &side_size);
1040  ff_h264_decode_extradata(side, side_size,
1041  &h->ps, &h->is_avc, &h->nal_length_size,
1042  avctx->err_recognition, avctx);
1043  }
1044  if (h->is_avc && buf_size >= 9 && buf[0]==1 && buf[2]==0 && (buf[4]&0xFC)==0xFC) {
1045  if (is_avcc_extradata(buf, buf_size))
1046  return ff_h264_decode_extradata(buf, buf_size,
1047  &h->ps, &h->is_avc, &h->nal_length_size,
1048  avctx->err_recognition, avctx);
1049  }
1050 
1051  buf_index = decode_nal_units(h, avpkt->buf, buf, buf_size);
1052  if (buf_index < 0)
1053  return AVERROR_INVALIDDATA;
1054 
1055  if (!h->cur_pic_ptr && h->nal_unit_type == H264_NAL_END_SEQUENCE) {
1056  av_assert0(buf_index <= buf_size);
1057  return send_next_delayed_frame(h, pict, got_frame, buf_index);
1058  }
1059 
1060  if (!(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS) && (!h->cur_pic_ptr || !h->has_slice)) {
1061  if (avctx->skip_frame >= AVDISCARD_NONREF ||
1062  buf_size >= 4 && !memcmp("Q264", buf, 4))
1063  return buf_size;
1064  av_log(avctx, AV_LOG_ERROR, "no frame!\n");
1065  return AVERROR_INVALIDDATA;
1066  }
1067 
1068  if (!(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS) ||
1069  (h->mb_y >= h->mb_height && h->mb_height)) {
1070  if ((ret = ff_h264_field_end(h, &h->slice_ctx[0], 0)) < 0)
1071  return ret;
1072 
1073  /* Wait for second field. */
1074  if (h->next_output_pic) {
1075  ret = finalize_frame(h, pict, h->next_output_pic, got_frame);
1076  if (ret < 0)
1077  return ret;
1078  }
1079  }
1080 
1081  av_assert0(pict->buf[0] || !*got_frame);
1082 
1083  ff_h264_unref_picture(&h->last_pic_for_ec);
1084 
1085  return buf_size;
1086 }
1087 
1088 #define OFFSET(x) offsetof(H264Context, x)
1089 #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
1090 #define VDX VD | AV_OPT_FLAG_EXPORT
1091 static const AVOption h264_options[] = {
1092  { "is_avc", "is avc", OFFSET(is_avc), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, VDX },
1093  { "nal_length_size", "nal_length_size", OFFSET(nal_length_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 4, VDX },
1094  { "enable_er", "Enable error resilience on damaged frames (unsafe)", OFFSET(enable_er), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VD },
1095  { "x264_build", "Assume this x264 version if no x264 version found in any SEI", OFFSET(x264_build), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VD },
1096  { "skip_gray", "Do not return gray gap frames", OFFSET(skip_gray), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, VD },
1097  { "noref_gray", "Avoid using gray gap frames as references", OFFSET(noref_gray), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, VD },
1098  { NULL },
1099 };
1100 
1101 static const AVClass h264_class = {
1102  .class_name = "H264 Decoder",
1103  .item_name = av_default_item_name,
1104  .option = h264_options,
1105  .version = LIBAVUTIL_VERSION_INT,
1106 };
1107 
1109  .p.name = "h264",
1110  CODEC_LONG_NAME("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
1111  .p.type = AVMEDIA_TYPE_VIDEO,
1112  .p.id = AV_CODEC_ID_H264,
1113  .priv_data_size = sizeof(H264Context),
1117  .p.capabilities = AV_CODEC_CAP_DR1 |
1120  .hw_configs = (const AVCodecHWConfigInternal *const []) {
1121 #if CONFIG_H264_DXVA2_HWACCEL
1122  HWACCEL_DXVA2(h264),
1123 #endif
1124 #if CONFIG_H264_D3D11VA_HWACCEL
1125  HWACCEL_D3D11VA(h264),
1126 #endif
1127 #if CONFIG_H264_D3D11VA2_HWACCEL
1128  HWACCEL_D3D11VA2(h264),
1129 #endif
1130 #if CONFIG_H264_D3D12VA_HWACCEL
1131  HWACCEL_D3D12VA(h264),
1132 #endif
1133 #if CONFIG_H264_NVDEC_HWACCEL
1134  HWACCEL_NVDEC(h264),
1135 #endif
1136 #if CONFIG_H264_VAAPI_HWACCEL
1137  HWACCEL_VAAPI(h264),
1138 #endif
1139 #if CONFIG_H264_VDPAU_HWACCEL
1140  HWACCEL_VDPAU(h264),
1141 #endif
1142 #if CONFIG_H264_VIDEOTOOLBOX_HWACCEL
1143  HWACCEL_VIDEOTOOLBOX(h264),
1144 #endif
1145 #if CONFIG_H264_VULKAN_HWACCEL
1146  HWACCEL_VULKAN(h264),
1147 #endif
1148  NULL
1149  },
1150  .caps_internal = FF_CODEC_CAP_EXPORTS_CROPPING |
1152  .flush = h264_decode_flush,
1155  .p.profiles = NULL_IF_CONFIG_SMALL(ff_h264_profiles),
1156  .p.priv_class = &h264_class,
1157 };
FF_ALLOCZ_TYPED_ARRAY
#define FF_ALLOCZ_TYPED_ARRAY(p, nelem)
Definition: internal.h:78
H264_NAL_PPS
@ H264_NAL_PPS
Definition: h264.h:42
PICT_FRAME
#define PICT_FRAME
Definition: mpegutils.h:33
HWACCEL_D3D12VA
#define HWACCEL_D3D12VA(codec)
Definition: hwconfig.h:80
AVVideoEncParams::qp
int32_t qp
Base quantisation parameter for the frame.
Definition: video_enc_params.h:103
hwconfig.h
AVCodecContext::hwaccel
const struct AVHWAccel * hwaccel
Hardware accelerator in use.
Definition: avcodec.h:1413
H264SliceContext::mb_xy
int mb_xy
Definition: h264dec.h:232
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
H264SliceContext::ref_cache
int8_t ref_cache[2][5 *8]
Definition: h264dec.h:300
ff_h264_free_tables
void ff_h264_free_tables(H264Context *h)
Definition: h264dec.c:142
AV_EF_EXPLODE
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: defs.h:51
ff_h264_sei_uninit
void ff_h264_sei_uninit(H264SEIContext *h)
Reset SEI values at the beginning of the frame.
Definition: h264_sei.c:48
FF_CODEC_CAP_INIT_CLEANUP
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: codec_internal.h:42
h2645_parse.h
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
decode_slice
static int decode_slice(AVCodecContext *c, void *arg)
Definition: ffv1dec.c:360
AVCodecContext::workaround_bugs
int workaround_bugs
Work around bugs in encoders which sometimes cannot be detected automatically.
Definition: avcodec.h:1335
opt.h
ff_h264_mb_sizes
const uint16_t ff_h264_mb_sizes[4]
Definition: h264dec.c:60
H264Picture::f
AVFrame * f
Definition: h264dec.h:113
ff_h264_ps_uninit
void ff_h264_ps_uninit(H264ParamSets *ps)
Uninit H264 param sets structure.
Definition: h264_ps.c:270
idr
static void idr(H264Context *h)
instantaneous decoder refresh.
Definition: h264dec.c:438
out
static FILE * out
Definition: movenc.c:55
thread.h
AV_PKT_DATA_NEW_EXTRADATA
@ AV_PKT_DATA_NEW_EXTRADATA
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
Definition: packet.h:56
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:3456
h264_decode_init
static av_cold int h264_decode_init(AVCodecContext *avctx)
Definition: h264dec.c:384
SLICE_FLAG_ALLOW_FIELD
#define SLICE_FLAG_ALLOW_FIELD
allow draw_horiz_band() with field slices (MPEG-2 field pics)
Definition: avcodec.h:714
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:1406
mv
static const int8_t mv[256][2]
Definition: 4xm.c:81
AV_FRAME_DATA_FILM_GRAIN_PARAMS
@ AV_FRAME_DATA_FILM_GRAIN_PARAMS
Film grain parameters for a frame, described by AVFilmGrainParams.
Definition: frame.h:188
av_frame_free
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition: frame.c:64
ff_h264_slice_context_init
void ff_h264_slice_context_init(H264Context *h, H264SliceContext *sl)
Init slice context.
Definition: h264dec.c:264
ERContext::mb_index2xy
int * mb_index2xy
Definition: error_resilience.h:60
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:427
HWACCEL_DXVA2
#define HWACCEL_DXVA2(codec)
Definition: hwconfig.h:64
ff_h264_update_thread_context
int ff_h264_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
Definition: h264_slice.c:337
AVPacket::data
uint8_t * data
Definition: packet.h:588
AVOption
AVOption.
Definition: opt.h:429
HWACCEL_D3D11VA2
#define HWACCEL_D3D11VA2(codec)
Definition: hwconfig.h:66
ff_h2645_packet_uninit
void ff_h2645_packet_uninit(H2645Packet *pkt)
Free all the allocated memory in the packet.
Definition: h2645_parse.c:667
b
#define b
Definition: input.c:42
H264SliceContext::ref_count
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition: h264dec.h:268
atomic_int
intptr_t atomic_int
Definition: stdatomic.h:55
H264SEIGreenMetaData::xsd_metric_value
uint16_t xsd_metric_value
Definition: h264_sei.h:116
H264SEIGreenMetaData::period_type
uint8_t period_type
Definition: h264_sei.h:108
FFCodec
Definition: codec_internal.h:127
ERContext
Definition: error_resilience.h:54
PICT_BOTTOM_FIELD
#define PICT_BOTTOM_FIELD
Definition: mpegutils.h:32
ff_h264_update_thread_context_for_user
int ff_h264_update_thread_context_for_user(AVCodecContext *dst, const AVCodecContext *src)
Definition: h264_slice.c:470
FF_HW_SIMPLE_CALL
#define FF_HW_SIMPLE_CALL(avctx, function)
Definition: hwaccel_internal.h:176
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
FRAME_RECOVERED_SEI
#define FRAME_RECOVERED_SEI
Sufficient number of frames have been decoded since a SEI recovery point, so all the following frames...
Definition: h264dec.h:527
AVERROR_UNKNOWN
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
Definition: error.h:73
mpegutils.h
AVFrame::buf
AVBufferRef * buf[AV_NUM_DATA_POINTERS]
AVBuffer references backing the data for this frame.
Definition: frame.h:604
H264_NAL_FILLER_DATA
@ H264_NAL_FILLER_DATA
Definition: h264.h:46
H264SliceContext::mb_x
int mb_x
Definition: h264dec.h:231
ff_h264_decode_picture_parameter_set
int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avctx, H264ParamSets *ps, int bit_length)
Decode PPS.
Definition: h264_ps.c:696
FF_DECODE_ERROR_DECODE_SLICES
#define FF_DECODE_ERROR_DECODE_SLICES
Definition: frame.h:718
H264SliceContext
Definition: h264dec.h:178
golomb.h
exp golomb vlc stuff
close
static av_cold void close(AVCodecParserContext *s)
Definition: apv_parser.c:197
AVCodecInternal::is_copy
int is_copy
When using frame-threaded decoding, this field is set for the first worker thread (e....
Definition: internal.h:54
H264SliceContext::mv_cache
int16_t mv_cache[2][5 *8][2]
Motion vector cache.
Definition: h264dec.h:299
AV_CODEC_FLAG_OUTPUT_CORRUPT
#define AV_CODEC_FLAG_OUTPUT_CORRUPT
Output even those frames that might be corrupted.
Definition: avcodec.h:221
debug_green_metadata
static void debug_green_metadata(const H264SEIGreenMetaData *gm, void *logctx)
Definition: h264dec.c:555
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
H264SEIGreenMetaData::percent_non_zero_macroblocks
uint8_t percent_non_zero_macroblocks
Definition: h264_sei.h:111
AVVideoEncParams::delta_qp
int32_t delta_qp[4][2]
Quantisation parameter offset from the base (per-frame) qp for a given plane (first index) and AC/DC ...
Definition: video_enc_params.h:109
AVCodecContext::skip_frame
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition: avcodec.h:1670
fail
#define fail()
Definition: checkasm.h:219
AVCodecContext::thread_count
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
Definition: avcodec.h:1569
ff_h264_sei_decode
int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
Definition: h264_sei.c:230
GetBitContext
Definition: get_bits.h:109
AV_VIDEO_ENC_PARAMS_H264
@ AV_VIDEO_ENC_PARAMS_H264
H.264 stores:
Definition: video_enc_params.h:57
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:496
HWACCEL_VDPAU
#define HWACCEL_VDPAU(codec)
Definition: hwconfig.h:72
scan8
static const uint8_t scan8[16 *3+3]
Definition: h264_parse.h:40
ff_h264_flush_change
void ff_h264_flush_change(H264Context *h)
Definition: h264dec.c:451
finalize_frame
static int finalize_frame(H264Context *h, AVFrame *dst, H264Picture *out, int *got_frame)
Definition: h264dec.c:922
H264Picture::f_grain
AVFrame * f_grain
Definition: h264dec.h:116
ff_h264_golomb_to_pict_type
const uint8_t ff_h264_golomb_to_pict_type[5]
Definition: h264data.c:37
H264Ref::data
uint8_t * data[3]
Definition: h264dec.h:168
pack16to32
static av_always_inline uint32_t pack16to32(unsigned a, unsigned b)
Definition: h264_parse.h:127
refstruct.h
AVVideoEncParams
Video encoding parameters for a given frame.
Definition: video_enc_params.h:73
ERContext::mb_num
int mb_num
Definition: error_resilience.h:61
av_frame_alloc
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition: frame.c:52
ERContext::avctx
AVCodecContext * avctx
Definition: error_resilience.h:55
ff_h264_hl_decode_mb
void ff_h264_hl_decode_mb(const H264Context *h, H264SliceContext *sl)
Definition: h264_mb.c:800
avassert.h
ff_thread_once
static int ff_thread_once(char *control, void(*routine)(void))
Definition: thread.h:205
H264_NAL_DPA
@ H264_NAL_DPA
Definition: h264.h:36
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
h264_decode_frame
static int h264_decode_frame(AVCodecContext *avctx, AVFrame *pict, int *got_frame, AVPacket *avpkt)
Definition: h264dec.c:1018
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
h264_free_pic
static void h264_free_pic(H264Context *h, H264Picture *pic)
Definition: h264dec.c:344
av_cold
#define av_cold
Definition: attributes.h:106
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:544
ff_er_init
av_cold int ff_er_init(ERContext *const s)
Definition: error_resilience.c:42
AV_FRAME_FLAG_KEY
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
Definition: frame.h:642
ff_thread_report_progress
void ff_thread_report_progress(ThreadFrame *f, int n, int field)
Notify later decoding threads when part of their reference picture is ready.
Definition: pthread_frame.c:628
emms_c
#define emms_c()
Definition: emms.h:89
get_last_needed_nal
static int get_last_needed_nal(H264Context *h)
Definition: h264dec.c:501
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:523
ff_er_frame_end
void ff_er_frame_end(ERContext *s, int *decode_error_flags)
Indicate that a frame has finished decoding and perform error concealment in case it has been enabled...
Definition: error_resilience.c:910
ff_h264_queue_decode_slice
int ff_h264_queue_decode_slice(H264Context *h, const H2645NAL *nal)
Submit a slice for decoding.
Definition: h264_slice.c:2063
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:347
h264_init_pic
static int h264_init_pic(H264Picture *pic)
Definition: h264dec.c:276
h264_decode_end
static av_cold int h264_decode_end(AVCodecContext *avctx)
Definition: h264dec.c:351
ff_h264_decode_extradata
int ff_h264_decode_extradata(const uint8_t *data, int size, H264ParamSets *ps, int *is_avc, int *nal_length_size, int err_recognition, void *logctx)
Definition: h264_parse.c:466
FIELD_PICTURE
#define FIELD_PICTURE(h)
Definition: h264dec.h:65
avpriv_h264_has_num_reorder_frames
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
Definition: h264dec.c:62
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:42
h264data.h
ff_h264_remove_all_refs
void ff_h264_remove_all_refs(H264Context *h)
Definition: h264_refs.c:570
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
ERContext::dc_val
int16_t * dc_val[3]
Definition: error_resilience.h:70
field
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this field
Definition: writing_filters.txt:78
ff_h264_decoder
const FFCodec ff_h264_decoder
Definition: h264dec.c:1108
h264_decode_flush
static av_cold void h264_decode_flush(AVCodecContext *avctx)
Definition: h264dec.c:476
H264Picture::sei_recovery_frame_cnt
int sei_recovery_frame_cnt
Definition: h264dec.h:153
AV_CODEC_ID_H264
@ AV_CODEC_ID_H264
Definition: codec_id.h:79
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:332
AVCodecContext::codec_id
enum AVCodecID codec_id
Definition: avcodec.h:449
ff_h264_draw_horiz_band
void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height)
Definition: h264dec.c:104
if
if(ret)
Definition: filter_design.txt:179
AV_CODEC_CAP_FRAME_THREADS
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: codec.h:95
threadframe.h
H264SEIGreenMetaData::percent_alpha_point_deblocking_instance
uint8_t percent_alpha_point_deblocking_instance
Definition: h264_sei.h:114
AVPacket::buf
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
Definition: packet.h:571
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AV_ONCE_INIT
#define AV_ONCE_INIT
Definition: thread.h:203
h264_class
static const AVClass h264_class
Definition: h264dec.c:1101
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
h264_er_decode_mb
static void h264_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type, int(*mv)[2][4][2], int mb_x, int mb_y, int mb_intra, int mb_skipped)
Definition: h264dec.c:68
NULL
#define NULL
Definition: coverity.c:32
av_frame_copy_props
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
Definition: frame.c:599
H264SliceContext::edge_emu_buffer
uint8_t * edge_emu_buffer
Definition: h264dec.h:284
hwaccel_internal.h
AVCodecContext::slice_flags
int slice_flags
slice flags
Definition: avcodec.h:712
h264_init_context
static int h264_init_context(AVCodecContext *avctx, H264Context *h)
Definition: h264dec.c:289
H264Ref::parent
const H264Picture * parent
Definition: h264dec.h:175
H264Ref::linesize
int linesize[3]
Definition: h264dec.h:169
AVCodecContext::internal
struct AVCodecInternal * internal
Private context used for internal data.
Definition: avcodec.h:474
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:242
H264_NAL_IDR_SLICE
@ H264_NAL_IDR_SLICE
Definition: h264.h:39
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:278
H264_NAL_END_SEQUENCE
@ H264_NAL_END_SEQUENCE
Definition: h264.h:44
profiles.h
ff_h264_profiles
const AVProfile ff_h264_profiles[]
Definition: profiles.c:72
flush
void(* flush)(AVBSFContext *ctx)
Definition: dts2pts.c:552
H264SEIGreenMetaData
Definition: h264_sei.h:106
UPDATE_THREAD_CONTEXT
#define UPDATE_THREAD_CONTEXT(func)
Definition: codec_internal.h:341
FF_HW_HAS_CB
#define FF_HW_HAS_CB(avctx, function)
Definition: hwaccel_internal.h:179
H264SliceContext::top_borders_allocated
int top_borders_allocated[2]
Definition: h264dec.h:288
atomic_load_explicit
#define atomic_load_explicit(object, order)
Definition: stdatomic.h:96
AVOnce
#define AVOnce
Definition: thread.h:202
H264SEIGreenMetaData::percent_intra_coded_macroblocks
uint8_t percent_intra_coded_macroblocks
Definition: h264_sei.h:112
h264_ps.h
h264_vlc_init
static AVOnce h264_vlc_init
Definition: h264dec.c:382
DELAYED_PIC_REF
#define DELAYED_PIC_REF
Value of Picture.reference when Picture is not a reference picture, but is held for delayed output.
Definition: diracdec.c:69
av_video_enc_params_create_side_data
AVVideoEncParams * av_video_enc_params_create_side_data(AVFrame *frame, enum AVVideoEncParamsType type, unsigned int nb_blocks)
Allocates memory for AVEncodeInfoFrame plus an array of.
Definition: video_enc_params.c:58
ERContext::opaque
void * opaque
Definition: error_resilience.h:90
f
f
Definition: af_crystalizer.c:122
ff_print_debug_info2
void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, const uint32_t *mbtype_table, const int8_t *qscale_table, int16_t(*const motion_val[2])[2], int mb_width, int mb_height, int mb_stride, int quarter_sample)
Print debugging info for the given picture.
Definition: mpegutils.c:155
H264SEIGreenMetaData::percent_six_tap_filtering
uint8_t percent_six_tap_filtering
Definition: h264_sei.h:113
AVCodecContext::flags2
int flags2
AV_CODEC_FLAG2_*.
Definition: avcodec.h:503
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:550
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AVPacket::size
int size
Definition: packet.h:589
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:94
height
#define height
Definition: dsp.h:89
av_frame_ref
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
Definition: frame.c:278
h264_options
static const AVOption h264_options[]
Definition: h264dec.c:1091
codec_internal.h
H264SEIGreenMetaData::num_seconds
uint16_t num_seconds
Definition: h264_sei.h:109
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:87
rectangle.h
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:424
FF_CODEC_CAP_EXPORTS_CROPPING
#define FF_CODEC_CAP_EXPORTS_CROPPING
The decoder sets the cropping fields in the output frames manually.
Definition: codec_internal.h:60
AV_NUM_DATA_POINTERS
#define AV_NUM_DATA_POINTERS
Definition: frame.h:428
ERContext::b8_stride
ptrdiff_t b8_stride
Definition: error_resilience.h:64
H264Picture::decode_error_flags
atomic_int * decode_error_flags
RefStruct reference; its pointee is shared between decoding threads.
Definition: h264dec.h:162
H264_NAL_AUXILIARY_SLICE
@ H264_NAL_AUXILIARY_SLICE
Definition: h264.h:53
AV_RB32
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
Definition: bytestream.h:96
H2645NAL
Definition: h2645_parse.h:34
H264SliceContext::top_borders
uint8_t(*[2] top_borders)[(16 *3) *2]
Definition: h264dec.h:285
H264SEIGreenMetaData::green_metadata_type
uint8_t green_metadata_type
Definition: h264_sei.h:107
ERContext::mb_stride
ptrdiff_t mb_stride
Definition: error_resilience.h:63
FF_THREAD_SLICE
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
Definition: avcodec.h:1581
AVCodecHWConfigInternal
Definition: hwconfig.h:25
H264SliceContext::mb_y
int mb_y
Definition: h264dec.h:231
av_frame_remove_side_data
void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type)
Remove and free all side data instances of the given type.
Definition: frame.c:725
ERContext::decode_mb
void(* decode_mb)(void *opaque, int ref, int mv_dir, int mv_type, int(*mv)[2][4][2], int mb_x, int mb_y, int mb_intra, int mb_skipped)
Definition: error_resilience.h:87
output_frame
static int output_frame(H264Context *h, AVFrame *dst, H264Picture *srcp)
Definition: h264dec.c:859
AV_CODEC_CAP_SLICE_THREADS
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: codec.h:99
HWACCEL_D3D11VA
#define HWACCEL_D3D11VA(codec)
Definition: hwconfig.h:78
offset
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Definition: writing_filters.txt:86
attributes.h
HWACCEL_NVDEC
#define HWACCEL_NVDEC(codec)
Definition: hwconfig.h:68
H264_NAL_DPC
@ H264_NAL_DPC
Definition: h264.h:38
FF_THREAD_FRAME
#define FF_THREAD_FRAME
Decode more than one frame at once.
Definition: avcodec.h:1580
H264SliceContext::mb_mbaff
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition: h264dec.h:243
emms.h
H264_NAL_SPS_EXT
@ H264_NAL_SPS_EXT
Definition: h264.h:47
h264dec.h
ff_h264_decode_seq_parameter_set
int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, H264ParamSets *ps, int ignore_truncation)
Decode SPS.
Definition: h264_ps.c:284
H264Picture::needs_fg
int needs_fg
whether picture needs film grain synthesis (see f_grain)
Definition: h264dec.h:154
is_avcc_extradata
static int is_avcc_extradata(const uint8_t *buf, int buf_size)
Definition: h264dec.c:898
H264Context
H264Context.
Definition: h264dec.h:338
AV_CODEC_FLAG2_SHOW_ALL
#define AV_CODEC_FLAG2_SHOW_ALL
Show all frames before the first keyframe.
Definition: avcodec.h:360
nal
static int FUNC() nal(CodedBitstreamContext *ctx, RWContext *rw, LCEVCRawNAL *current, int nal_unit_type)
Definition: cbs_lcevc_syntax_template.c:655
AVCodecContext::extradata
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition: avcodec.h:522
av_packet_get_side_data
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, size_t *size)
Get side information from packet.
Definition: packet.c:252
VD
#define VD
Definition: amfdec.c:664
ff_h264_execute_decode_slices
int ff_h264_execute_decode_slices(H264Context *h)
Call decode_slice() for each context.
Definition: h264_slice.c:2770
av_assert1
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:58
ERContext::mb_width
int mb_width
Definition: error_resilience.h:62
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
av_frame_unref
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition: frame.c:496
AVVideoBlockParams
Data structure for storing block-level encoding information.
Definition: video_enc_params.h:120
ff_h264_decode_init_vlc
av_cold void ff_h264_decode_init_vlc(void)
Definition: h264_cavlc.c:315
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:179
AVCodecContext::height
int height
Definition: avcodec.h:600
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:639
ff_h264_alloc_tables
int ff_h264_alloc_tables(H264Context *h)
Allocate tables.
Definition: h264dec.c:187
av_calloc
void * av_calloc(size_t nmemb, size_t size)
Definition: mem.c:264
HWACCEL_VIDEOTOOLBOX
#define HWACCEL_VIDEOTOOLBOX(codec)
Definition: hwconfig.h:74
decode_nal_units
static int decode_nal_units(H264Context *h, AVBufferRef *buf_ref, const uint8_t *buf, int buf_size)
Definition: h264dec.c:583
avcodec.h
h264_export_enc_params
static int h264_export_enc_params(AVFrame *f, const H264Picture *p)
Definition: h264dec.c:825
ret
ret
Definition: filter_design.txt:187
ERContext::mb_height
int mb_height
Definition: error_resilience.h:62
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:81
H264_NAL_SLICE
@ H264_NAL_SLICE
Definition: h264.h:35
FMO
#define FMO
Definition: h264dec.h:53
FF_DEBUG_GREEN_MD
#define FF_DEBUG_GREEN_MD
Definition: avcodec.h:1396
av_refstruct_pool_alloc
AVRefStructPool * av_refstruct_pool_alloc(size_t size, unsigned flags)
Equivalent to av_refstruct_pool_alloc(size, flags, NULL, NULL, NULL, NULL, NULL)
Definition: refstruct.c:335
ff_thread_finish_setup
the pkt_dts and pkt_pts fields in AVFrame will work as usual Restrictions on codec whose streams don t reset across will not work because their bitstreams cannot be decoded in parallel *The contents of buffers must not be read before as well as code calling up to before the decode process starts Call ff_thread_finish_setup() afterwards. If some code can 't be moved
AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS
#define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS
Decoding only.
Definition: avcodec.h:395
AV_CODEC_FLAG2_CHUNKS
#define AV_CODEC_FLAG2_CHUNKS
Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
Definition: avcodec.h:351
H264_NAL_SEI
@ H264_NAL_SEI
Definition: h264.h:40
AVCodecContext::draw_horiz_band
void(* draw_horiz_band)(struct AVCodecContext *s, const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], int y, int type, int height)
If non NULL, 'draw_horiz_band' is called by the libavcodec decoder to draw a horizontal band.
Definition: avcodec.h:740
HWACCEL_VULKAN
#define HWACCEL_VULKAN(codec)
Definition: hwconfig.h:76
H264_NAL_SPS
@ H264_NAL_SPS
Definition: h264.h:41
OFFSET
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option keep it simple and lowercase description are in without and describe what they for example set the foo of the bar offset is the offset of the field in your see the OFFSET() macro
AVCodecContext
main external API structure.
Definition: avcodec.h:439
AVCodecContext::active_thread_type
int active_thread_type
Which multithreading methods are in use by the codec.
Definition: avcodec.h:1588
get_ue_golomb_31
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
Definition: golomb.h:120
H264SliceContext::bipred_scratchpad
uint8_t * bipred_scratchpad
Definition: h264dec.h:283
error_resilience.h
FF_HW_CALL
#define FF_HW_CALL(avctx, function,...)
Definition: hwaccel_internal.h:173
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition: opt.h:259
ff_h264_unref_picture
void ff_h264_unref_picture(H264Picture *pic)
Definition: h264_picture.c:39
atomic_fetch_or_explicit
#define atomic_fetch_or_explicit(object, operand, order)
Definition: stdatomic.h:155
fill_rectangle
static void fill_rectangle(int x, int y, int w, int h)
Definition: ffplay.c:828
H264Picture
Definition: h264dec.h:112
ERContext::quarter_sample
int quarter_sample
Definition: error_resilience.h:84
ref
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:117
AV_CODEC_CAP_DELAY
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: codec.h:76
Windows::Graphics::DirectX::Direct3D11::p
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
Definition: vsrc_gfxcapture_winrt.hpp:53
PART_NOT_AVAILABLE
#define PART_NOT_AVAILABLE
Definition: h264pred.h:89
ff_h264_field_end
int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup)
Definition: h264_picture.c:189
AVCodecContext::debug
int debug
debug
Definition: avcodec.h:1382
H264SliceContext::ref_list
H264Ref ref_list[2][48]
0..15: frame refs, 16..47: mbaff field refs.
Definition: h264dec.h:270
H264SliceContext::non_zero_count_cache
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
Definition: h264dec.h:294
desc
const char * desc
Definition: libsvtav1.c:82
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
mem.h
H264_NAL_DPB
@ H264_NAL_DPB
Definition: h264.h:37
H264_NAL_END_STREAM
@ H264_NAL_END_STREAM
Definition: h264.h:45
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
get_ue_golomb_long
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:104
ff_h264_sei_stereo_mode
const char * ff_h264_sei_stereo_mode(const H2645SEIFramePacking *h)
Get stereo_mode string from the h264 frame_packing_arrangement.
Definition: h264_sei.c:305
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:37
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
H264SliceContext::er
ERContext * er
Definition: h264dec.h:181
av_refstruct_pool_uninit
static void av_refstruct_pool_uninit(AVRefStructPool **poolp)
Mark the pool as being available for freeing.
Definition: refstruct.h:292
AVPacket
This structure stores compressed data.
Definition: packet.h:565
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:466
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
Definition: opt.h:327
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
av_dict_set
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Definition: dict.c:86
HWACCEL_VAAPI
#define HWACCEL_VAAPI(codec)
Definition: hwconfig.h:70
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:600
h264.h
imgutils.h
H264SliceContext::edge_emu_buffer_allocated
int edge_emu_buffer_allocated
Definition: h264dec.h:287
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
UPDATE_THREAD_CONTEXT_FOR_USER
#define UPDATE_THREAD_CONTEXT_FOR_USER(func)
Definition: codec_internal.h:343
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
H264_NAL_AUD
@ H264_NAL_AUD
Definition: h264.h:43
av_video_enc_params_block
static av_always_inline AVVideoBlockParams * av_video_enc_params_block(AVVideoEncParams *par, unsigned int idx)
Get the block at the specified.
Definition: video_enc_params.h:143
H2645_FLAG_IS_NALFF
@ H2645_FLAG_IS_NALFF
Definition: h2645_parse.h:97
h
h
Definition: vp9dsp_template.c:2070
H264_MAX_PICTURE_COUNT
#define H264_MAX_PICTURE_COUNT
Definition: h264dec.h:47
H264SEIGreenMetaData::num_pictures
uint16_t num_pictures
Definition: h264_sei.h:110
ff_h2645_packet_split
int ff_h2645_packet_split(H2645Packet *pkt, const uint8_t *buf, int length, void *logctx, int nal_length_size, enum AVCodecID codec_id, int flags)
Split an input packet into NAL units.
Definition: h2645_parse.c:527
H264SliceContext::bipred_scratchpad_allocated
int bipred_scratchpad_allocated
Definition: h264dec.h:286
av_image_copy
void av_image_copy(uint8_t *const dst_data[4], const int dst_linesizes[4], const uint8_t *const 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:422
AVDISCARD_NONREF
@ AVDISCARD_NONREF
discard all non reference
Definition: defs.h:228
send_next_delayed_frame
static int send_next_delayed_frame(H264Context *h, AVFrame *dst_frame, int *got_frame, int buf_index)
Definition: h264dec.c:977
H264Ref::reference
int reference
Definition: h264dec.h:171
src
#define src
Definition: vp8dsp.c:248
AV_CODEC_EXPORT_DATA_FILM_GRAIN
#define AV_CODEC_EXPORT_DATA_FILM_GRAIN
Decoding only.
Definition: avcodec.h:400
video_enc_params.h
AV_RB16
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
Definition: bytestream.h:98
H264SliceContext::mb_field_decoding_flag
int mb_field_decoding_flag
Definition: h264dec.h:242
ff_h264_set_erpic
void ff_h264_set_erpic(ERPicture *dst, const H264Picture *src)
Definition: h264_picture.c:166
H264SEIGreenMetaData::xsd_metric_type
uint8_t xsd_metric_type
Definition: h264_sei.h:115