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 "libavutil/avassert.h"
31 #include "libavutil/display.h"
32 #include "libavutil/imgutils.h"
33 #include "libavutil/opt.h"
34 #include "libavutil/stereo3d.h"
35 #include "libavutil/timer.h"
36 #include "internal.h"
37 #include "bytestream.h"
38 #include "cabac.h"
39 #include "cabac_functions.h"
40 #include "error_resilience.h"
41 #include "avcodec.h"
42 #include "h264.h"
43 #include "h264dec.h"
44 #include "h2645_parse.h"
45 #include "h264data.h"
46 #include "h264chroma.h"
47 #include "h264_mvpred.h"
48 #include "h264_ps.h"
49 #include "golomb.h"
50 #include "hwaccel.h"
51 #include "mathops.h"
52 #include "me_cmp.h"
53 #include "mpegutils.h"
54 #include "profiles.h"
55 #include "rectangle.h"
56 #include "thread.h"
57 
58 const uint16_t ff_h264_mb_sizes[4] = { 256, 384, 512, 768 };
59 
61 {
62  H264Context *h = avctx->priv_data;
63  return h && h->ps.sps ? h->ps.sps->num_reorder_frames : 0;
64 }
65 
66 static void h264_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type,
67  int (*mv)[2][4][2],
68  int mb_x, int mb_y, int mb_intra, int mb_skipped)
69 {
70  H264Context *h = opaque;
71  H264SliceContext *sl = &h->slice_ctx[0];
72 
73  sl->mb_x = mb_x;
74  sl->mb_y = mb_y;
75  sl->mb_xy = mb_x + mb_y * h->mb_stride;
76  memset(sl->non_zero_count_cache, 0, sizeof(sl->non_zero_count_cache));
77  av_assert1(ref >= 0);
78  /* FIXME: It is possible albeit uncommon that slice references
79  * differ between slices. We take the easy approach and ignore
80  * it for now. If this turns out to have any relevance in
81  * practice then correct remapping should be added. */
82  if (ref >= sl->ref_count[0])
83  ref = 0;
84  if (!sl->ref_list[0][ref].data[0]) {
85  av_log(h->avctx, AV_LOG_DEBUG, "Reference not available for error concealing\n");
86  ref = 0;
87  }
88  if ((sl->ref_list[0][ref].reference&3) != 3) {
89  av_log(h->avctx, AV_LOG_DEBUG, "Reference invalid\n");
90  return;
91  }
92  fill_rectangle(&h->cur_pic.ref_index[0][4 * sl->mb_xy],
93  2, 2, 2, ref, 1);
94  fill_rectangle(&sl->ref_cache[0][scan8[0]], 4, 4, 8, ref, 1);
95  fill_rectangle(sl->mv_cache[0][scan8[0]], 4, 4, 8,
96  pack16to32((*mv)[0][0][0], (*mv)[0][0][1]), 4);
97  sl->mb_mbaff =
98  sl->mb_field_decoding_flag = 0;
99  ff_h264_hl_decode_mb(h, &h->slice_ctx[0]);
100 }
101 
103  int y, int height)
104 {
105  AVCodecContext *avctx = h->avctx;
106  const AVFrame *src = h->cur_pic.f;
108  int vshift = desc->log2_chroma_h;
109  const int field_pic = h->picture_structure != PICT_FRAME;
110  if (field_pic) {
111  height <<= 1;
112  y <<= 1;
113  }
114 
115  height = FFMIN(height, avctx->height - y);
116 
117  if (field_pic && h->first_field && !(avctx->slice_flags & SLICE_FLAG_ALLOW_FIELD))
118  return;
119 
120  if (avctx->draw_horiz_band) {
122  int i;
123 
124  offset[0] = y * src->linesize[0];
125  offset[1] =
126  offset[2] = (y >> vshift) * src->linesize[1];
127  for (i = 3; i < AV_NUM_DATA_POINTERS; i++)
128  offset[i] = 0;
129 
130  emms_c();
131 
132  avctx->draw_horiz_band(avctx, src, offset,
133  y, h->picture_structure, height);
134  }
135 }
136 
138 {
139  int i;
140 
141  av_freep(&h->intra4x4_pred_mode);
142  av_freep(&h->chroma_pred_mode_table);
143  av_freep(&h->cbp_table);
144  av_freep(&h->mvd_table[0]);
145  av_freep(&h->mvd_table[1]);
146  av_freep(&h->direct_table);
147  av_freep(&h->non_zero_count);
148  av_freep(&h->slice_table_base);
149  h->slice_table = NULL;
150  av_freep(&h->list_counts);
151 
152  av_freep(&h->mb2b_xy);
153  av_freep(&h->mb2br_xy);
154 
155  av_buffer_pool_uninit(&h->qscale_table_pool);
156  av_buffer_pool_uninit(&h->mb_type_pool);
157  av_buffer_pool_uninit(&h->motion_val_pool);
158  av_buffer_pool_uninit(&h->ref_index_pool);
159 
160  for (i = 0; i < h->nb_slice_ctx; i++) {
161  H264SliceContext *sl = &h->slice_ctx[i];
162 
163  av_freep(&sl->dc_val_base);
164  av_freep(&sl->er.mb_index2xy);
166  av_freep(&sl->er.er_temp_buffer);
167 
170  av_freep(&sl->top_borders[0]);
171  av_freep(&sl->top_borders[1]);
172 
175  sl->top_borders_allocated[0] = 0;
176  sl->top_borders_allocated[1] = 0;
177  }
178 }
179 
181 {
182  const int big_mb_num = h->mb_stride * (h->mb_height + 1);
183  const int row_mb_num = 2*h->mb_stride*FFMAX(h->nb_slice_ctx, 1);
184  int x, y;
185 
186  FF_ALLOCZ_ARRAY_OR_GOTO(h->avctx, h->intra4x4_pred_mode,
187  row_mb_num, 8 * sizeof(uint8_t), fail)
188  h->slice_ctx[0].intra4x4_pred_mode = h->intra4x4_pred_mode;
189 
190  FF_ALLOCZ_OR_GOTO(h->avctx, h->non_zero_count,
191  big_mb_num * 48 * sizeof(uint8_t), fail)
192  FF_ALLOCZ_OR_GOTO(h->avctx, h->slice_table_base,
193  (big_mb_num + h->mb_stride) * sizeof(*h->slice_table_base), fail)
194  FF_ALLOCZ_OR_GOTO(h->avctx, h->cbp_table,
195  big_mb_num * sizeof(uint16_t), fail)
196  FF_ALLOCZ_OR_GOTO(h->avctx, h->chroma_pred_mode_table,
197  big_mb_num * sizeof(uint8_t), fail)
198  FF_ALLOCZ_ARRAY_OR_GOTO(h->avctx, h->mvd_table[0],
199  row_mb_num, 16 * sizeof(uint8_t), fail);
200  FF_ALLOCZ_ARRAY_OR_GOTO(h->avctx, h->mvd_table[1],
201  row_mb_num, 16 * sizeof(uint8_t), fail);
202  h->slice_ctx[0].mvd_table[0] = h->mvd_table[0];
203  h->slice_ctx[0].mvd_table[1] = h->mvd_table[1];
204 
205  FF_ALLOCZ_OR_GOTO(h->avctx, h->direct_table,
206  4 * big_mb_num * sizeof(uint8_t), fail);
207  FF_ALLOCZ_OR_GOTO(h->avctx, h->list_counts,
208  big_mb_num * sizeof(uint8_t), fail)
209 
210  memset(h->slice_table_base, -1,
211  (big_mb_num + h->mb_stride) * sizeof(*h->slice_table_base));
212  h->slice_table = h->slice_table_base + h->mb_stride * 2 + 1;
213 
214  FF_ALLOCZ_OR_GOTO(h->avctx, h->mb2b_xy,
215  big_mb_num * sizeof(uint32_t), fail);
216  FF_ALLOCZ_OR_GOTO(h->avctx, h->mb2br_xy,
217  big_mb_num * sizeof(uint32_t), fail);
218  for (y = 0; y < h->mb_height; y++)
219  for (x = 0; x < h->mb_width; x++) {
220  const int mb_xy = x + y * h->mb_stride;
221  const int b_xy = 4 * x + 4 * y * h->b_stride;
222 
223  h->mb2b_xy[mb_xy] = b_xy;
224  h->mb2br_xy[mb_xy] = 8 * (FMO ? mb_xy : (mb_xy % (2 * h->mb_stride)));
225  }
226 
227  return 0;
228 
229 fail:
231  return AVERROR(ENOMEM);
232 }
233 
234 /**
235  * Init context
236  * Allocate buffers which are not shared amongst multiple threads.
237  */
239 {
240  ERContext *er = &sl->er;
241  int mb_array_size = h->mb_height * h->mb_stride;
242  int y_size = (2 * h->mb_width + 1) * (2 * h->mb_height + 1);
243  int c_size = h->mb_stride * (h->mb_height + 1);
244  int yc_size = y_size + 2 * c_size;
245  int x, y, i;
246 
247  sl->ref_cache[0][scan8[5] + 1] =
248  sl->ref_cache[0][scan8[7] + 1] =
249  sl->ref_cache[0][scan8[13] + 1] =
250  sl->ref_cache[1][scan8[5] + 1] =
251  sl->ref_cache[1][scan8[7] + 1] =
252  sl->ref_cache[1][scan8[13] + 1] = PART_NOT_AVAILABLE;
253 
254  if (sl != h->slice_ctx) {
255  memset(er, 0, sizeof(*er));
256  } else
257  if (CONFIG_ERROR_RESILIENCE) {
258 
259  /* init ER */
260  er->avctx = h->avctx;
262  er->opaque = h;
263  er->quarter_sample = 1;
264 
265  er->mb_num = h->mb_num;
266  er->mb_width = h->mb_width;
267  er->mb_height = h->mb_height;
268  er->mb_stride = h->mb_stride;
269  er->b8_stride = h->mb_width * 2 + 1;
270 
271  // error resilience code looks cleaner with this
272  FF_ALLOCZ_OR_GOTO(h->avctx, er->mb_index2xy,
273  (h->mb_num + 1) * sizeof(int), fail);
274 
275  for (y = 0; y < h->mb_height; y++)
276  for (x = 0; x < h->mb_width; x++)
277  er->mb_index2xy[x + y * h->mb_width] = x + y * h->mb_stride;
278 
279  er->mb_index2xy[h->mb_height * h->mb_width] = (h->mb_height - 1) *
280  h->mb_stride + h->mb_width;
281 
283  mb_array_size * sizeof(uint8_t), fail);
284 
285  FF_ALLOC_OR_GOTO(h->avctx, er->er_temp_buffer,
286  h->mb_height * h->mb_stride * (4*sizeof(int) + 1), fail);
287 
288  FF_ALLOCZ_OR_GOTO(h->avctx, sl->dc_val_base,
289  yc_size * sizeof(int16_t), fail);
290  er->dc_val[0] = sl->dc_val_base + h->mb_width * 2 + 2;
291  er->dc_val[1] = sl->dc_val_base + y_size + h->mb_stride + 1;
292  er->dc_val[2] = er->dc_val[1] + c_size;
293  for (i = 0; i < yc_size; i++)
294  sl->dc_val_base[i] = 1024;
295  }
296 
297  return 0;
298 
299 fail:
300  return AVERROR(ENOMEM); // ff_h264_free_tables will clean up for us
301 }
302 
304 {
305  int i;
306 
307  h->avctx = avctx;
308  h->cur_chroma_format_idc = -1;
309 
310  h->width_from_caller = avctx->width;
311  h->height_from_caller = avctx->height;
312 
313  h->picture_structure = PICT_FRAME;
314  h->workaround_bugs = avctx->workaround_bugs;
315  h->flags = avctx->flags;
316  h->poc.prev_poc_msb = 1 << 16;
317  h->recovery_frame = -1;
318  h->frame_recovered = 0;
319  h->poc.prev_frame_num = -1;
320  h->sei.frame_packing.arrangement_cancel_flag = -1;
321  h->sei.unregistered.x264_build = -1;
322 
323  h->next_outputed_poc = INT_MIN;
324  for (i = 0; i < MAX_DELAYED_PIC_COUNT; i++)
325  h->last_pocs[i] = INT_MIN;
326 
327  ff_h264_sei_uninit(&h->sei);
328 
330 
331  h->nb_slice_ctx = (avctx->active_thread_type & FF_THREAD_SLICE) ? avctx->thread_count : 1;
332  h->slice_ctx = av_mallocz_array(h->nb_slice_ctx, sizeof(*h->slice_ctx));
333  if (!h->slice_ctx) {
334  h->nb_slice_ctx = 0;
335  return AVERROR(ENOMEM);
336  }
337 
338  for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
339  h->DPB[i].f = av_frame_alloc();
340  if (!h->DPB[i].f)
341  return AVERROR(ENOMEM);
342  }
343 
344  h->cur_pic.f = av_frame_alloc();
345  if (!h->cur_pic.f)
346  return AVERROR(ENOMEM);
347 
348  h->last_pic_for_ec.f = av_frame_alloc();
349  if (!h->last_pic_for_ec.f)
350  return AVERROR(ENOMEM);
351 
352  for (i = 0; i < h->nb_slice_ctx; i++)
353  h->slice_ctx[i].h264 = h;
354 
355  return 0;
356 }
357 
359 {
360  H264Context *h = avctx->priv_data;
361  int i;
362 
365 
366  for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
367  ff_h264_unref_picture(h, &h->DPB[i]);
368  av_frame_free(&h->DPB[i].f);
369  }
370  memset(h->delayed_pic, 0, sizeof(h->delayed_pic));
371 
372  h->cur_pic_ptr = NULL;
373 
374  av_freep(&h->slice_ctx);
375  h->nb_slice_ctx = 0;
376 
377  ff_h264_sei_uninit(&h->sei);
378  ff_h264_ps_uninit(&h->ps);
379 
380  ff_h2645_packet_uninit(&h->pkt);
381 
382  ff_h264_unref_picture(h, &h->cur_pic);
383  av_frame_free(&h->cur_pic.f);
384  ff_h264_unref_picture(h, &h->last_pic_for_ec);
385  av_frame_free(&h->last_pic_for_ec.f);
386 
387  return 0;
388 }
389 
391 
393 {
394  H264Context *h = avctx->priv_data;
395  int ret;
396 
397  ret = h264_init_context(avctx, h);
398  if (ret < 0)
399  return ret;
400 
402  if (ret != 0) {
403  av_log(avctx, AV_LOG_ERROR, "pthread_once has failed.");
404  return AVERROR_UNKNOWN;
405  }
406 
407  if (avctx->ticks_per_frame == 1) {
408  if(h->avctx->time_base.den < INT_MAX/2) {
409  h->avctx->time_base.den *= 2;
410  } else
411  h->avctx->time_base.num /= 2;
412  }
413  avctx->ticks_per_frame = 2;
414 
415  if (avctx->extradata_size > 0 && avctx->extradata) {
417  &h->ps, &h->is_avc, &h->nal_length_size,
418  avctx->err_recognition, avctx);
419  if (ret < 0) {
420  h264_decode_end(avctx);
421  return ret;
422  }
423  }
424 
425  if (h->ps.sps && h->ps.sps->bitstream_restriction_flag &&
426  h->avctx->has_b_frames < h->ps.sps->num_reorder_frames) {
427  h->avctx->has_b_frames = h->ps.sps->num_reorder_frames;
428  }
429 
430  avctx->internal->allocate_progress = 1;
431 
433 
434  if (h->enable_er < 0 && (avctx->active_thread_type & FF_THREAD_SLICE))
435  h->enable_er = 0;
436 
437  if (h->enable_er && (avctx->active_thread_type & FF_THREAD_SLICE)) {
438  av_log(avctx, AV_LOG_WARNING,
439  "Error resilience with slice threads is enabled. It is unsafe and unsupported and may crash. "
440  "Use it at your own risk\n");
441  }
442 
443  return 0;
444 }
445 
446 #if HAVE_THREADS
447 static int decode_init_thread_copy(AVCodecContext *avctx)
448 {
449  H264Context *h = avctx->priv_data;
450  int ret;
451 
452  if (!avctx->internal->is_copy)
453  return 0;
454 
455  memset(h, 0, sizeof(*h));
456 
457  ret = h264_init_context(avctx, h);
458  if (ret < 0)
459  return ret;
460 
461  h->context_initialized = 0;
462 
463  return 0;
464 }
465 #endif
466 
467 /**
468  * instantaneous decoder refresh.
469  */
470 static void idr(H264Context *h)
471 {
472  int i;
474  h->poc.prev_frame_num =
475  h->poc.prev_frame_num_offset = 0;
476  h->poc.prev_poc_msb = 1<<16;
477  h->poc.prev_poc_lsb = 0;
478  for (i = 0; i < MAX_DELAYED_PIC_COUNT; i++)
479  h->last_pocs[i] = INT_MIN;
480 }
481 
482 /* forget old pics after a seek */
484 {
485  int i, j;
486 
487  h->next_outputed_poc = INT_MIN;
488  h->prev_interlaced_frame = 1;
489  idr(h);
490 
491  h->poc.prev_frame_num = -1;
492  if (h->cur_pic_ptr) {
493  h->cur_pic_ptr->reference = 0;
494  for (j=i=0; h->delayed_pic[i]; i++)
495  if (h->delayed_pic[i] != h->cur_pic_ptr)
496  h->delayed_pic[j++] = h->delayed_pic[i];
497  h->delayed_pic[j] = NULL;
498  }
499  ff_h264_unref_picture(h, &h->last_pic_for_ec);
500 
501  h->first_field = 0;
502  h->recovery_frame = -1;
503  h->frame_recovered = 0;
504  h->current_slice = 0;
505  h->mmco_reset = 1;
506 }
507 
508 /* forget old pics after a seek */
509 static void flush_dpb(AVCodecContext *avctx)
510 {
511  H264Context *h = avctx->priv_data;
512  int i;
513 
514  memset(h->delayed_pic, 0, sizeof(h->delayed_pic));
515 
517  ff_h264_sei_uninit(&h->sei);
518 
519  for (i = 0; i < H264_MAX_PICTURE_COUNT; i++)
520  ff_h264_unref_picture(h, &h->DPB[i]);
521  h->cur_pic_ptr = NULL;
522  ff_h264_unref_picture(h, &h->cur_pic);
523 
524  h->mb_y = 0;
525 
527  h->context_initialized = 0;
528 }
529 
531 {
532  int nals_needed = 0;
533  int first_slice = 0;
534  int i, ret;
535 
536  for (i = 0; i < h->pkt.nb_nals; i++) {
537  H2645NAL *nal = &h->pkt.nals[i];
538  GetBitContext gb;
539 
540  /* packets can sometimes contain multiple PPS/SPS,
541  * e.g. two PAFF field pictures in one packet, or a demuxer
542  * which splits NALs strangely if so, when frame threading we
543  * can't start the next thread until we've read all of them */
544  switch (nal->type) {
545  case H264_NAL_SPS:
546  case H264_NAL_PPS:
547  nals_needed = i;
548  break;
549  case H264_NAL_DPA:
550  case H264_NAL_IDR_SLICE:
551  case H264_NAL_SLICE:
552  ret = init_get_bits8(&gb, nal->data + 1, nal->size - 1);
553  if (ret < 0) {
554  av_log(h->avctx, AV_LOG_ERROR, "Invalid zero-sized VCL NAL unit\n");
555  if (h->avctx->err_recognition & AV_EF_EXPLODE)
556  return ret;
557 
558  break;
559  }
560  if (!get_ue_golomb_long(&gb) || // first_mb_in_slice
561  !first_slice ||
562  first_slice != nal->type)
563  nals_needed = i;
564  if (!first_slice)
565  first_slice = nal->type;
566  }
567  }
568 
569  return nals_needed;
570 }
571 
572 static void debug_green_metadata(const H264SEIGreenMetaData *gm, void *logctx)
573 {
574  av_log(logctx, AV_LOG_DEBUG, "Green Metadata Info SEI message\n");
575  av_log(logctx, AV_LOG_DEBUG, " green_metadata_type: %d\n", gm->green_metadata_type);
576 
577  if (gm->green_metadata_type == 0) {
578  av_log(logctx, AV_LOG_DEBUG, " green_metadata_period_type: %d\n", gm->period_type);
579 
580  if (gm->period_type == 2)
581  av_log(logctx, AV_LOG_DEBUG, " green_metadata_num_seconds: %d\n", gm->num_seconds);
582  else if (gm->period_type == 3)
583  av_log(logctx, AV_LOG_DEBUG, " green_metadata_num_pictures: %d\n", gm->num_pictures);
584 
585  av_log(logctx, AV_LOG_DEBUG, " SEI GREEN Complexity Metrics: %f %f %f %f\n",
586  (float)gm->percent_non_zero_macroblocks/255,
587  (float)gm->percent_intra_coded_macroblocks/255,
588  (float)gm->percent_six_tap_filtering/255,
590 
591  } else if (gm->green_metadata_type == 1) {
592  av_log(logctx, AV_LOG_DEBUG, " xsd_metric_type: %d\n", gm->xsd_metric_type);
593 
594  if (gm->xsd_metric_type == 0)
595  av_log(logctx, AV_LOG_DEBUG, " xsd_metric_value: %f\n",
596  (float)gm->xsd_metric_value/100);
597  }
598 }
599 
600 static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size)
601 {
602  AVCodecContext *const avctx = h->avctx;
603  int nals_needed = 0; ///< number of NALs that need decoding before the next frame thread starts
604  int idr_cleared=0;
605  int i, ret = 0;
606 
607  h->has_slice = 0;
608  h->nal_unit_type= 0;
609 
610  if (!(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS)) {
611  h->current_slice = 0;
612  if (!h->first_field) {
613  h->cur_pic_ptr = NULL;
614  ff_h264_sei_uninit(&h->sei);
615  }
616  }
617 
618  if (h->nal_length_size == 4) {
619  if (buf_size > 8 && AV_RB32(buf) == 1 && AV_RB32(buf+5) > (unsigned)buf_size) {
620  h->is_avc = 0;
621  }else if(buf_size > 3 && AV_RB32(buf) > 1 && AV_RB32(buf) <= (unsigned)buf_size)
622  h->is_avc = 1;
623  }
624 
625  ret = ff_h2645_packet_split(&h->pkt, buf, buf_size, avctx, h->is_avc, h->nal_length_size,
626  avctx->codec_id, 0, 0);
627  if (ret < 0) {
628  av_log(avctx, AV_LOG_ERROR,
629  "Error splitting the input into NAL units.\n");
630  return ret;
631  }
632 
633  if (avctx->active_thread_type & FF_THREAD_FRAME)
634  nals_needed = get_last_needed_nal(h);
635  if (nals_needed < 0)
636  return nals_needed;
637 
638  for (i = 0; i < h->pkt.nb_nals; i++) {
639  H2645NAL *nal = &h->pkt.nals[i];
640  int max_slice_ctx, err;
641 
642  if (avctx->skip_frame >= AVDISCARD_NONREF &&
643  nal->ref_idc == 0 && nal->type != H264_NAL_SEI)
644  continue;
645 
646  // FIXME these should stop being context-global variables
647  h->nal_ref_idc = nal->ref_idc;
648  h->nal_unit_type = nal->type;
649 
650  err = 0;
651  switch (nal->type) {
652  case H264_NAL_IDR_SLICE:
653  if ((nal->data[1] & 0xFC) == 0x98) {
654  av_log(h->avctx, AV_LOG_ERROR, "Invalid inter IDR frame\n");
655  h->next_outputed_poc = INT_MIN;
656  ret = -1;
657  goto end;
658  }
659  if(!idr_cleared) {
660  idr(h); // FIXME ensure we don't lose some frames if there is reordering
661  }
662  idr_cleared = 1;
663  h->has_recovery_point = 1;
664  case H264_NAL_SLICE:
665  h->has_slice = 1;
666 
667  if ((err = ff_h264_queue_decode_slice(h, nal))) {
668  H264SliceContext *sl = h->slice_ctx + h->nb_slice_ctx_queued;
669  sl->ref_count[0] = sl->ref_count[1] = 0;
670  break;
671  }
672 
673  if (h->current_slice == 1) {
674  if (avctx->active_thread_type & FF_THREAD_FRAME &&
675  i >= nals_needed && !h->setup_finished && h->cur_pic_ptr) {
676  ff_thread_finish_setup(avctx);
677  h->setup_finished = 1;
678  }
679 
680  if (h->avctx->hwaccel &&
681  (ret = h->avctx->hwaccel->start_frame(h->avctx, buf, buf_size)) < 0)
682  goto end;
683  }
684 
685  max_slice_ctx = avctx->hwaccel ? 1 : h->nb_slice_ctx;
686  if (h->nb_slice_ctx_queued == max_slice_ctx) {
687  if (h->avctx->hwaccel) {
688  ret = avctx->hwaccel->decode_slice(avctx, nal->raw_data, nal->raw_size);
689  h->nb_slice_ctx_queued = 0;
690  } else
692  if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
693  goto end;
694  }
695  break;
696  case H264_NAL_DPA:
697  case H264_NAL_DPB:
698  case H264_NAL_DPC:
699  avpriv_request_sample(avctx, "data partitioning");
700  break;
701  case H264_NAL_SEI:
702  ret = ff_h264_sei_decode(&h->sei, &nal->gb, &h->ps, avctx);
703  h->has_recovery_point = h->has_recovery_point || h->sei.recovery_point.recovery_frame_cnt != -1;
704  if (avctx->debug & FF_DEBUG_GREEN_MD)
705  debug_green_metadata(&h->sei.green_metadata, h->avctx);
706  if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
707  goto end;
708  break;
709  case H264_NAL_SPS: {
710  GetBitContext tmp_gb = nal->gb;
711  if (avctx->hwaccel && avctx->hwaccel->decode_params) {
712  ret = avctx->hwaccel->decode_params(avctx,
713  nal->type,
714  nal->raw_data,
715  nal->raw_size);
716  if (ret < 0)
717  goto end;
718  }
719  if (ff_h264_decode_seq_parameter_set(&tmp_gb, avctx, &h->ps, 0) >= 0)
720  break;
721  av_log(h->avctx, AV_LOG_DEBUG,
722  "SPS decoding failure, trying again with the complete NAL\n");
723  init_get_bits8(&tmp_gb, nal->raw_data + 1, nal->raw_size - 1);
724  if (ff_h264_decode_seq_parameter_set(&tmp_gb, avctx, &h->ps, 0) >= 0)
725  break;
726  ff_h264_decode_seq_parameter_set(&nal->gb, avctx, &h->ps, 1);
727  break;
728  }
729  case H264_NAL_PPS:
730  if (avctx->hwaccel && avctx->hwaccel->decode_params) {
731  ret = avctx->hwaccel->decode_params(avctx,
732  nal->type,
733  nal->raw_data,
734  nal->raw_size);
735  if (ret < 0)
736  goto end;
737  }
738  ret = ff_h264_decode_picture_parameter_set(&nal->gb, avctx, &h->ps,
739  nal->size_bits);
740  if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
741  goto end;
742  break;
743  case H264_NAL_AUD:
745  case H264_NAL_END_STREAM:
747  case H264_NAL_SPS_EXT:
749  break;
750  default:
751  av_log(avctx, AV_LOG_DEBUG, "Unknown NAL code: %d (%d bits)\n",
752  nal->type, nal->size_bits);
753  }
754 
755  if (err < 0) {
756  av_log(h->avctx, AV_LOG_ERROR, "decode_slice_header error\n");
757  }
758  }
759 
761  if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))
762  goto end;
763 
764  // set decode_error_flags to allow users to detect concealed decoding errors
765  if ((ret < 0 || h->slice_ctx->er.error_occurred) && h->cur_pic_ptr) {
766  h->cur_pic_ptr->f->decode_error_flags |= FF_DECODE_ERROR_DECODE_SLICES;
767  }
768 
769  ret = 0;
770 end:
771 
772 #if CONFIG_ERROR_RESILIENCE
773  /*
774  * FIXME: Error handling code does not seem to support interlaced
775  * when slices span multiple rows
776  * The ff_er_add_slice calls don't work right for bottom
777  * fields; they cause massive erroneous error concealing
778  * Error marking covers both fields (top and bottom).
779  * This causes a mismatched s->error_count
780  * and a bad error table. Further, the error count goes to
781  * INT_MAX when called for bottom field, because mb_y is
782  * past end by one (callers fault) and resync_mb_y != 0
783  * causes problems for the first MB line, too.
784  */
785  if (!FIELD_PICTURE(h) && h->current_slice &&
786  h->ps.sps == (const SPS*)h->ps.sps_list[h->ps.pps->sps_id]->data &&
787  h->enable_er) {
788 
789  H264SliceContext *sl = h->slice_ctx;
790  int use_last_pic = h->last_pic_for_ec.f->buf[0] && !sl->ref_count[0];
791 
792  ff_h264_set_erpic(&sl->er.cur_pic, h->cur_pic_ptr);
793 
794  if (use_last_pic) {
795  ff_h264_set_erpic(&sl->er.last_pic, &h->last_pic_for_ec);
796  sl->ref_list[0][0].parent = &h->last_pic_for_ec;
797  memcpy(sl->ref_list[0][0].data, h->last_pic_for_ec.f->data, sizeof(sl->ref_list[0][0].data));
798  memcpy(sl->ref_list[0][0].linesize, h->last_pic_for_ec.f->linesize, sizeof(sl->ref_list[0][0].linesize));
799  sl->ref_list[0][0].reference = h->last_pic_for_ec.reference;
800  } else if (sl->ref_count[0]) {
801  ff_h264_set_erpic(&sl->er.last_pic, sl->ref_list[0][0].parent);
802  } else
804 
805  if (sl->ref_count[1])
806  ff_h264_set_erpic(&sl->er.next_pic, sl->ref_list[1][0].parent);
807 
808  sl->er.ref_count = sl->ref_count[0];
809 
810  ff_er_frame_end(&sl->er);
811  if (use_last_pic)
812  memset(&sl->ref_list[0][0], 0, sizeof(sl->ref_list[0][0]));
813  }
814 #endif /* CONFIG_ERROR_RESILIENCE */
815  /* clean up */
816  if (h->cur_pic_ptr && !h->droppable && h->has_slice) {
817  ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX,
818  h->picture_structure == PICT_BOTTOM_FIELD);
819  }
820 
821  return (ret < 0) ? ret : buf_size;
822 }
823 
824 /**
825  * Return the number of bytes consumed for building the current frame.
826  */
827 static int get_consumed_bytes(int pos, int buf_size)
828 {
829  if (pos == 0)
830  pos = 1; // avoid infinite loops (I doubt that is needed but...)
831  if (pos + 10 > buf_size)
832  pos = buf_size; // oops ;)
833 
834  return pos;
835 }
836 
838 {
839  AVFrame *src = srcp->f;
840  int ret;
841 
842  ret = av_frame_ref(dst, src);
843  if (ret < 0)
844  return ret;
845 
846  av_dict_set(&dst->metadata, "stereo_mode", ff_h264_sei_stereo_mode(&h->sei.frame_packing), 0);
847 
848  if (srcp->sei_recovery_frame_cnt == 0)
849  dst->key_frame = 1;
850 
851  return 0;
852 }
853 
854 static int is_extra(const uint8_t *buf, int buf_size)
855 {
856  int cnt= buf[5]&0x1f;
857  const uint8_t *p= buf+6;
858  if (!cnt)
859  return 0;
860  while(cnt--){
861  int nalsize= AV_RB16(p) + 2;
862  if(nalsize > buf_size - (p-buf) || (p[2] & 0x9F) != 7)
863  return 0;
864  p += nalsize;
865  }
866  cnt = *(p++);
867  if(!cnt)
868  return 0;
869  while(cnt--){
870  int nalsize= AV_RB16(p) + 2;
871  if(nalsize > buf_size - (p-buf) || (p[2] & 0x9F) != 8)
872  return 0;
873  p += nalsize;
874  }
875  return 1;
876 }
877 
878 static int finalize_frame(H264Context *h, AVFrame *dst, H264Picture *out, int *got_frame)
879 {
880  int ret;
881 
882  if (((h->avctx->flags & AV_CODEC_FLAG_OUTPUT_CORRUPT) ||
883  (h->avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL) ||
884  out->recovered)) {
885 
886  if (!h->avctx->hwaccel &&
887  (out->field_poc[0] == INT_MAX ||
888  out->field_poc[1] == INT_MAX)
889  ) {
890  int p;
891  AVFrame *f = out->f;
892  int field = out->field_poc[0] == INT_MAX;
893  uint8_t *dst_data[4];
894  int linesizes[4];
895  const uint8_t *src_data[4];
896 
897  av_log(h->avctx, AV_LOG_DEBUG, "Duplicating field %d to fill missing\n", field);
898 
899  for (p = 0; p<4; p++) {
900  dst_data[p] = f->data[p] + (field^1)*f->linesize[p];
901  src_data[p] = f->data[p] + field *f->linesize[p];
902  linesizes[p] = 2*f->linesize[p];
903  }
904 
905  av_image_copy(dst_data, linesizes, src_data, linesizes,
906  f->format, f->width, f->height>>1);
907  }
908 
909  ret = output_frame(h, dst, out);
910  if (ret < 0)
911  return ret;
912 
913  *got_frame = 1;
914 
915  if (CONFIG_MPEGVIDEO) {
916  ff_print_debug_info2(h->avctx, dst, NULL,
917  out->mb_type,
918  out->qscale_table,
919  out->motion_val,
920  NULL,
921  h->mb_width, h->mb_height, h->mb_stride, 1);
922  }
923  }
924 
925  return 0;
926 }
927 
929  int *got_frame, int buf_index)
930 {
931  int ret, i, out_idx;
932  H264Picture *out = h->delayed_pic[0];
933 
934  h->cur_pic_ptr = NULL;
935  h->first_field = 0;
936 
937  out_idx = 0;
938  for (i = 1;
939  h->delayed_pic[i] &&
940  !h->delayed_pic[i]->f->key_frame &&
941  !h->delayed_pic[i]->mmco_reset;
942  i++)
943  if (h->delayed_pic[i]->poc < out->poc) {
944  out = h->delayed_pic[i];
945  out_idx = i;
946  }
947 
948  for (i = out_idx; h->delayed_pic[i]; i++)
949  h->delayed_pic[i] = h->delayed_pic[i + 1];
950 
951  if (out) {
952  out->reference &= ~DELAYED_PIC_REF;
953  ret = finalize_frame(h, dst_frame, out, got_frame);
954  if (ret < 0)
955  return ret;
956  }
957 
958  return buf_index;
959 }
960 
961 static int h264_decode_frame(AVCodecContext *avctx, void *data,
962  int *got_frame, AVPacket *avpkt)
963 {
964  const uint8_t *buf = avpkt->data;
965  int buf_size = avpkt->size;
966  H264Context *h = avctx->priv_data;
967  AVFrame *pict = data;
968  int buf_index;
969  int ret;
970 
971  h->flags = avctx->flags;
972  h->setup_finished = 0;
973  h->nb_slice_ctx_queued = 0;
974 
975  ff_h264_unref_picture(h, &h->last_pic_for_ec);
976 
977  /* end of stream, output what is still in the buffers */
978  if (buf_size == 0)
979  return send_next_delayed_frame(h, pict, got_frame, 0);
980 
981  if (h->is_avc && av_packet_get_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA, NULL)) {
982  int side_size;
983  uint8_t *side = av_packet_get_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA, &side_size);
984  if (is_extra(side, side_size))
985  ff_h264_decode_extradata(side, side_size,
986  &h->ps, &h->is_avc, &h->nal_length_size,
987  avctx->err_recognition, avctx);
988  }
989  if (h->is_avc && buf_size >= 9 && buf[0]==1 && buf[2]==0 && (buf[4]&0xFC)==0xFC) {
990  if (is_extra(buf, buf_size))
991  return ff_h264_decode_extradata(buf, buf_size,
992  &h->ps, &h->is_avc, &h->nal_length_size,
993  avctx->err_recognition, avctx);
994  }
995 
996  buf_index = decode_nal_units(h, buf, buf_size);
997  if (buf_index < 0)
998  return AVERROR_INVALIDDATA;
999 
1000  if (!h->cur_pic_ptr && h->nal_unit_type == H264_NAL_END_SEQUENCE) {
1001  av_assert0(buf_index <= buf_size);
1002  return send_next_delayed_frame(h, pict, got_frame, buf_index);
1003  }
1004 
1005  if (!(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS) && (!h->cur_pic_ptr || !h->has_slice)) {
1006  if (avctx->skip_frame >= AVDISCARD_NONREF ||
1007  buf_size >= 4 && !memcmp("Q264", buf, 4))
1008  return buf_size;
1009  av_log(avctx, AV_LOG_ERROR, "no frame!\n");
1010  return AVERROR_INVALIDDATA;
1011  }
1012 
1013  if (!(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS) ||
1014  (h->mb_y >= h->mb_height && h->mb_height)) {
1015  if ((ret = ff_h264_field_end(h, &h->slice_ctx[0], 0)) < 0)
1016  return ret;
1017 
1018  /* Wait for second field. */
1019  if (h->next_output_pic) {
1020  ret = finalize_frame(h, pict, h->next_output_pic, got_frame);
1021  if (ret < 0)
1022  return ret;
1023  }
1024  }
1025 
1026  av_assert0(pict->buf[0] || !*got_frame);
1027 
1028  ff_h264_unref_picture(h, &h->last_pic_for_ec);
1029 
1030  return get_consumed_bytes(buf_index, buf_size);
1031 }
1032 
1033 #define OFFSET(x) offsetof(H264Context, x)
1034 #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
1035 static const AVOption h264_options[] = {
1036  { "is_avc", "is avc", OFFSET(is_avc), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, 0 },
1037  { "nal_length_size", "nal_length_size", OFFSET(nal_length_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 4, 0 },
1038  { "enable_er", "Enable error resilience on damaged frames (unsafe)", OFFSET(enable_er), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VD },
1039  { "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 },
1040  { NULL },
1041 };
1042 
1043 static const AVClass h264_class = {
1044  .class_name = "H264 Decoder",
1045  .item_name = av_default_item_name,
1046  .option = h264_options,
1047  .version = LIBAVUTIL_VERSION_INT,
1048 };
1049 
1051  .name = "h264",
1052  .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
1053  .type = AVMEDIA_TYPE_VIDEO,
1054  .id = AV_CODEC_ID_H264,
1055  .priv_data_size = sizeof(H264Context),
1057  .close = h264_decode_end,
1059  .capabilities = /*AV_CODEC_CAP_DRAW_HORIZ_BAND |*/ AV_CODEC_CAP_DR1 |
1062  .hw_configs = (const AVCodecHWConfigInternal*[]) {
1063 #if CONFIG_H264_DXVA2_HWACCEL
1064  HWACCEL_DXVA2(h264),
1065 #endif
1066 #if CONFIG_H264_D3D11VA_HWACCEL
1067  HWACCEL_D3D11VA(h264),
1068 #endif
1069 #if CONFIG_H264_D3D11VA2_HWACCEL
1070  HWACCEL_D3D11VA2(h264),
1071 #endif
1072 #if CONFIG_H264_NVDEC_HWACCEL
1073  HWACCEL_NVDEC(h264),
1074 #endif
1075 #if CONFIG_H264_VAAPI_HWACCEL
1076  HWACCEL_VAAPI(h264),
1077 #endif
1078 #if CONFIG_H264_VDPAU_HWACCEL
1079  HWACCEL_VDPAU(h264),
1080 #endif
1081 #if CONFIG_H264_VIDEOTOOLBOX_HWACCEL
1082  HWACCEL_VIDEOTOOLBOX(h264),
1083 #endif
1084  NULL
1085  },
1087  .flush = flush_dpb,
1088  .init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy),
1089  .update_thread_context = ONLY_IF_THREADS_ENABLED(ff_h264_update_thread_context),
1091  .priv_class = &h264_class,
1092 };
PICT_FRAME
#define PICT_FRAME
Definition: mpegutils.h:39
HWACCEL_NVDEC
#define HWACCEL_NVDEC(codec)
Definition: hwaccel.h:71
AVCodecContext::hwaccel
const struct AVHWAccel * hwaccel
Hardware accelerator in use.
Definition: avcodec.h:2729
AVCodec
AVCodec.
Definition: avcodec.h:3481
h264_decode_frame
static int h264_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: h264dec.c:961
H264SliceContext::mb_xy
int mb_xy
Definition: h264dec.h:231
ff_h264_unref_picture
void ff_h264_unref_picture(H264Context *h, H264Picture *pic)
Definition: h264_picture.c:45
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
FF_CODEC_CAP_INIT_THREADSAFE
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
Definition: internal.h:40
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:137
ff_h264_sei_uninit
void ff_h264_sei_uninit(H264SEIContext *h)
Reset SEI values at the beginning of the frame.
Definition: h264_sei.c:41
init
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
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
cabac.h
AVCodecContext::workaround_bugs
int workaround_bugs
Work around bugs in encoders which sometimes cannot be detected automatically.
Definition: avcodec.h:2599
opt.h
ff_h264_mb_sizes
const uint16_t ff_h264_mb_sizes[4]
Definition: h264dec.c:58
ff_h264_ps_uninit
void ff_h264_ps_uninit(H264ParamSets *ps)
Uninit H264 param sets structure.
Definition: h264_ps.c:316
idr
static void idr(H264Context *h)
instantaneous decoder refresh.
Definition: h264dec.c:470
out
FILE * out
Definition: movenc.c:54
H264_NAL_END_STREAM
@ H264_NAL_END_STREAM
Definition: h264.h:45
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2522
H264_NAL_PPS
@ H264_NAL_PPS
Definition: h264.h:42
h264_decode_init
static av_cold int h264_decode_init(AVCodecContext *avctx)
Definition: h264dec.c:392
H264_NAL_SPS
@ H264_NAL_SPS
Definition: h264.h:41
H264_NAL_FILLER_DATA
@ H264_NAL_FILLER_DATA
Definition: h264.h:46
SLICE_FLAG_ALLOW_FIELD
#define SLICE_FLAG_ALLOW_FIELD
allow draw_horiz_band() with field slices (MPEG-2 field pics)
Definition: avcodec.h:2045
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:2694
mv
static const int8_t mv[256][2]
Definition: 4xm.c:77
ff_h264_slice_context_init
int ff_h264_slice_context_init(H264Context *h, H264SliceContext *sl)
Init context Allocate buffers which are not shared amongst multiple threads.
Definition: h264dec.c:238
ff_h264_set_erpic
void ff_h264_set_erpic(ERPicture *dst, H264Picture *src)
Definition: h264_picture.c:131
H2645NAL::ref_idc
int ref_idc
H.264 only, nal_ref_idc.
Definition: h2645_parse.h:65
av_frame_free
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition: frame.c:202
ERContext::mb_index2xy
int * mb_index2xy
Definition: error_resilience.h:58
end
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:90
HWACCEL_D3D11VA
#define HWACCEL_D3D11VA(codec)
Definition: hwaccel.h:79
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:295
flush_dpb
static void flush_dpb(AVCodecContext *avctx)
Definition: h264dec.c:509
internal.h
ff_h264_update_thread_context
int ff_h264_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
Definition: h264_slice.c:288
AVPacket::data
uint8_t * data
Definition: avcodec.h:1477
AVOption
AVOption.
Definition: opt.h:246
ff_h2645_packet_uninit
void ff_h2645_packet_uninit(H2645Packet *pkt)
Free all the allocated memory in the packet.
Definition: h2645_parse.c:517
data
const char data[16]
Definition: mxf.c:91
H264SliceContext::ref_count
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition: h264dec.h:267
H264SEIGreenMetaData::xsd_metric_value
uint16_t xsd_metric_value
Definition: h264_sei.h:169
H264SEIGreenMetaData::period_type
uint8_t period_type
Definition: h264_sei.h:161
ERContext
Definition: error_resilience.h:53
av_mallocz_array
void * av_mallocz_array(size_t nmemb, size_t size)
Definition: mem.c:191
PICT_BOTTOM_FIELD
#define PICT_BOTTOM_FIELD
Definition: mpegutils.h:38
decode_nal_units
static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size)
Definition: h264dec.c:600
H264_NAL_AUXILIARY_SLICE
@ H264_NAL_AUXILIARY_SLICE
Definition: h264.h:53
AVERROR_UNKNOWN
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
Definition: error.h:71
mpegutils.h
AVFrame::buf
AVBufferRef * buf[AV_NUM_DATA_POINTERS]
AVBuffer references backing the data for this frame.
Definition: frame.h:486
srcp
BYTE int const BYTE * srcp
Definition: avisynth_c.h:908
H264_NAL_IDR_SLICE
@ H264_NAL_IDR_SLICE
Definition: h264.h:39
thread.h
H264SliceContext::mb_x
int mb_x
Definition: h264dec.h:230
h264_mvpred.h
H2645NAL::size_bits
int size_bits
Size, in bits, of just the data, excluding the stop bit and any trailing padding.
Definition: h2645_parse.h:42
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:739
FF_DECODE_ERROR_DECODE_SLICES
#define FF_DECODE_ERROR_DECODE_SLICES
Definition: frame.h:594
H264SliceContext
Definition: h264dec.h:177
golomb.h
exp golomb vlc stuff
AVCodecInternal::is_copy
int is_copy
Whether the parent AVCodecContext is a copy of the context which had init() called on it.
Definition: internal.h:136
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:858
debug_green_metadata
static void debug_green_metadata(const H264SEIGreenMetaData *gm, void *logctx)
Definition: h264dec.c:572
H264SEIGreenMetaData::percent_non_zero_macroblocks
uint8_t percent_non_zero_macroblocks
Definition: h264_sei.h:164
AVCodecContext::skip_frame
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition: avcodec.h:3040
fail
#define fail()
Definition: checkasm.h:120
AVCodecContext::thread_count
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
Definition: avcodec.h:2824
ff_h264_sei_decode
int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
Definition: h264_sei.c:404
GetBitContext
Definition: get_bits.h:61
H264SliceContext::er
ERContext er
Definition: h264dec.h:180
ff_print_debug_info2
void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, uint8_t *mbskip_table, uint32_t *mbtype_table, int8_t *qscale_table, int16_t(*motion_val[2])[2], int *low_delay, int mb_width, int mb_height, int mb_stride, int quarter_sample)
Print debugging info for the given picture.
Definition: mpegutils.c:103
AVFrame::key_frame
int key_frame
1 -> keyframe, 0-> not
Definition: frame.h:373
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:1645
ff_h264_flush_change
void ff_h264_flush_change(H264Context *h)
Definition: h264dec.c:483
finalize_frame
static int finalize_frame(H264Context *h, AVFrame *dst, H264Picture *out, int *got_frame)
Definition: h264dec.c:878
src
#define src
Definition: vp8dsp.c:254
H264Ref::data
uint8_t * data[3]
Definition: h264dec.h:167
HWACCEL_VIDEOTOOLBOX
@ HWACCEL_VIDEOTOOLBOX
Definition: ffmpeg.h:62
ERContext::mb_num
int mb_num
Definition: error_resilience.h:59
av_frame_alloc
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition: frame.c:189
ERContext::avctx
AVCodecContext * avctx
Definition: error_resilience.h:54
ff_h264_hl_decode_mb
void ff_h264_hl_decode_mb(const H264Context *h, H264SliceContext *sl)
Definition: h264_mb.c:799
avassert.h
ff_thread_once
static int ff_thread_once(char *control, void(*routine)(void))
Definition: thread.h:162
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
buf
void * buf
Definition: avisynth_c.h:766
av_cold
#define av_cold
Definition: attributes.h:84
H264SliceContext::dc_val_base
int16_t * dc_val_base
Definition: h264dec.h:281
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:677
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:557
H2645NAL::size
int size
Definition: h2645_parse.h:35
decode
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:42
get_last_needed_nal
static int get_last_needed_nal(H264Context *h)
Definition: h264dec.c:530
hwaccel.h
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:1667
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:2082
stereo3d.h
h264_decode_end
static av_cold int h264_decode_end(AVCodecContext *avctx)
Definition: h264dec.c:358
get_consumed_bytes
static int get_consumed_bytes(int pos, int buf_size)
Return the number of bytes consumed for building the current frame.
Definition: h264dec.c:827
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:449
FIELD_PICTURE
#define FIELD_PICTURE(h)
Definition: h264dec.h:74
AVCodecContext::ticks_per_frame
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
Definition: avcodec.h:1697
avpriv_h264_has_num_reorder_frames
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
Definition: h264dec.c:60
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
h264data.h
ff_h264_remove_all_refs
void ff_h264_remove_all_refs(H264Context *h)
Definition: h264_refs.c:565
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:197
H264Ref::parent
H264Picture * parent
Definition: h264dec.h:174
ERContext::dc_val
int16_t * dc_val[3]
Definition: error_resilience.h:68
H2645NAL::data
const uint8_t * data
Definition: h2645_parse.h:36
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
AVHWAccel::decode_params
int(* decode_params)(AVCodecContext *avctx, int type, const uint8_t *buf, uint32_t buf_size)
Callback for parameter data (SPS/PPS/VPS etc).
Definition: avcodec.h:3725
f
#define f(width, name)
Definition: cbs_vp9.c:255
AV_CODEC_ID_H264
@ AV_CODEC_ID_H264
Definition: avcodec.h:245
H2645NAL::type
int type
NAL unit type.
Definition: h2645_parse.h:52
AVCodecContext::codec_id
enum AVCodecID codec_id
Definition: avcodec.h:1575
ff_h264_draw_horiz_band
void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height)
Definition: h264dec.c:102
av_packet_get_side_data
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, int *size)
Get side information from packet.
Definition: avpacket.c:350
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: avcodec.h:1037
H264SEIGreenMetaData::percent_alpha_point_deblocking_instance
uint8_t percent_alpha_point_deblocking_instance
Definition: h264_sei.h:167
H2645NAL::raw_size
int raw_size
Definition: h2645_parse.h:44
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AV_ONCE_INIT
#define AV_ONCE_INIT
Definition: thread.h:160
h264_class
static const AVClass h264_class
Definition: h264dec.c:1043
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:67
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:66
NULL
#define NULL
Definition: coverity.c:32
HWACCEL_DXVA2
#define HWACCEL_DXVA2(codec)
Definition: hwaccel.h:67
is_extra
static int is_extra(const uint8_t *buf, int buf_size)
Definition: h264dec.c:854
H264SliceContext::edge_emu_buffer
uint8_t * edge_emu_buffer
Definition: h264dec.h:284
AVCodecContext::slice_flags
int slice_flags
slice flags
Definition: avcodec.h:2043
AVCHROMA_LOC_LEFT
@ AVCHROMA_LOC_LEFT
MPEG-2/4 4:2:0, H.264 default for 4:2:0.
Definition: pixfmt.h:543
h264_init_context
static int h264_init_context(AVCodecContext *avctx, H264Context *h)
Definition: h264dec.c:303
SPS
Sequence parameter set.
Definition: h264_ps.h:44
H264Ref::linesize
int linesize[3]
Definition: h264dec.h:168
AVCodecContext::internal
struct AVCodecInternal * internal
Private context used for internal data.
Definition: avcodec.h:1600
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
profiles.h
av_buffer_pool_uninit
void av_buffer_pool_uninit(AVBufferPool **ppool)
Mark the pool as being available for freeing.
Definition: buffer.c:275
ff_h264_profiles
const AVProfile ff_h264_profiles[]
Definition: profiles.c:58
mathops.h
timer.h
ONLY_IF_THREADS_ENABLED
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
Definition: internal.h:227
ff_h264_decoder
AVCodec ff_h264_decoder
Definition: h264dec.c:1050
H264SEIGreenMetaData
Definition: h264_sei.h:159
AV_EF_EXPLODE
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: avcodec.h:2705
H264SliceContext::top_borders_allocated
int top_borders_allocated[2]
Definition: h264dec.h:288
FF_CODEC_CAP_EXPORTS_CROPPING
#define FF_CODEC_CAP_EXPORTS_CROPPING
The decoder sets the cropping fields in the output frames manually.
Definition: internal.h:66
AVOnce
#define AVOnce
Definition: thread.h:159
H264SEIGreenMetaData::percent_intra_coded_macroblocks
uint8_t percent_intra_coded_macroblocks
Definition: h264_sei.h:165
h264_ps.h
for
for(j=16;j >0;--j)
Definition: h264pred_template.c:469
h264_vlc_init
static AVOnce h264_vlc_init
Definition: h264dec.c:390
ff_h264_sei_stereo_mode
const char * ff_h264_sei_stereo_mode(const H264SEIFramePacking *h)
Get stereo_mode string from the h264 frame_packing_arrangement.
Definition: h264_sei.c:479
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:67
ERContext::opaque
void * opaque
Definition: error_resilience.h:89
desc
const char * desc
Definition: nvenc.c:68
H264SEIGreenMetaData::percent_six_tap_filtering
uint8_t percent_six_tap_filtering
Definition: h264_sei.h:166
AVCodecContext::flags2
int flags2
AV_CODEC_FLAG2_*.
Definition: avcodec.h:1652
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:981
AVPacket::size
int size
Definition: avcodec.h:1478
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:188
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:443
h264_options
static const AVOption h264_options[]
Definition: h264dec.c:1035
H264SEIGreenMetaData::num_seconds
uint16_t num_seconds
Definition: h264_sei.h:162
AVCodecInternal::allocate_progress
int allocate_progress
Whether to allocate progress for frame threading.
Definition: internal.h:151
rectangle.h
FFMAX
#define FFMAX(a, b)
Definition: common.h:94
MAX_DELAYED_PIC_COUNT
#define MAX_DELAYED_PIC_COUNT
Definition: h264dec.h:56
AV_NUM_DATA_POINTERS
#define AV_NUM_DATA_POINTERS
Definition: frame.h:296
ERContext::b8_stride
ptrdiff_t b8_stride
Definition: error_resilience.h:62
H2645NAL::gb
GetBitContext gb
Definition: h2645_parse.h:47
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:92
H2645NAL
Definition: h2645_parse.h:32
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:160
ERContext::mb_stride
ptrdiff_t mb_stride
Definition: error_resilience.h:61
h264chroma.h
FF_THREAD_SLICE
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
Definition: avcodec.h:2836
H264_NAL_SLICE
@ H264_NAL_SLICE
Definition: h264.h:35
AVCodecHWConfigInternal
Definition: hwaccel.h:29
H264SliceContext::mb_y
int mb_y
Definition: h264dec.h:230
ff_h2645_packet_split
int ff_h2645_packet_split(H2645Packet *pkt, const uint8_t *buf, int length, void *logctx, int is_nalff, int nal_length_size, enum AVCodecID codec_id, int small_padding, int use_ref)
Split an input packet into NAL units.
Definition: h2645_parse.c:393
height
#define height
ERContext::ref_count
int ref_count
Definition: error_resilience.h:84
FFMIN
#define FFMIN(a, b)
Definition: common.h:96
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:86
output_frame
static int output_frame(H264Context *h, AVFrame *dst, H264Picture *srcp)
Definition: h264dec.c:837
AV_CODEC_CAP_SLICE_THREADS
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:1041
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
pack16to32
static av_always_inline uint32_t pack16to32(unsigned a, unsigned b)
Definition: h264dec.h:660
FF_THREAD_FRAME
#define FF_THREAD_FRAME
Decode more than one frame at once.
Definition: avcodec.h:2835
H264SliceContext::mb_mbaff
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition: h264dec.h:242
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:333
H264Context
H264Context.
Definition: h264dec.h:337
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:259
AV_CODEC_FLAG2_SHOW_ALL
#define AV_CODEC_FLAG2_SHOW_ALL
Show all frames before the first keyframe.
Definition: avcodec.h:951
AVCodecContext::extradata
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:1666
AVHWAccel::decode_slice
int(* decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size)
Callback for each slice.
Definition: avcodec.h:3739
display.h
ff_h264_execute_decode_slices
int ff_h264_execute_decode_slices(H264Context *h)
Call decode_slice() for each context.
Definition: h264_slice.c:2793
av_assert1
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:53
H264_NAL_SEI
@ H264_NAL_SEI
Definition: h264.h:40
ERContext::mb_width
int mb_width
Definition: error_resilience.h:60
uint8_t
uint8_t
Definition: audio_convert.c:194
cabac_functions.h
ff_h264_decode_init_vlc
av_cold void ff_h264_decode_init_vlc(void)
Definition: h264_cavlc.c:327
AVCodec::name
const char * name
Name of the codec implementation.
Definition: avcodec.h:3488
AVCodecContext::chroma_sample_location
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Definition: avcodec.h:2207
ERContext::cur_pic
ERPicture cur_pic
Definition: error_resilience.h:73
PART_NOT_AVAILABLE
#define PART_NOT_AVAILABLE
Definition: h264dec.h:391
AVCodecContext::height
int height
Definition: avcodec.h:1738
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:1775
ff_h264_alloc_tables
int ff_h264_alloc_tables(H264Context *h)
Allocate tables.
Definition: h264dec.c:180
avcodec.h
ret
ret
Definition: filter_design.txt:187
H2645NAL::raw_data
const uint8_t * raw_data
Definition: h2645_parse.h:45
ERContext::mb_height
int mb_height
Definition: error_resilience.h:60
OFFSET
#define OFFSET(x)
Definition: h264dec.c:1033
H264_NAL_AUD
@ H264_NAL_AUD
Definition: h264.h:43
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:72
FMO
#define FMO
Definition: h264dec.h:62
FF_DEBUG_GREEN_MD
#define FF_DEBUG_GREEN_MD
Definition: avcodec.h:2674
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
ERContext::last_pic
ERPicture last_pic
Definition: error_resilience.h:74
me_cmp.h
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:942
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:1800
VD
#define VD
Definition: h264dec.c:1034
AVCodecContext
main external API structure.
Definition: avcodec.h:1565
AVCodecContext::active_thread_type
int active_thread_type
Which multithreading methods are in use by the codec.
Definition: avcodec.h:2843
HWACCEL_VAAPI
#define HWACCEL_VAAPI(codec)
Definition: hwaccel.h:73
av_image_copy
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:387
H264SliceContext::bipred_scratchpad
uint8_t * bipred_scratchpad
Definition: h264dec.h:283
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: avcodec.h:1199
error_resilience.h
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:223
AVFrame::metadata
AVDictionary * metadata
metadata.
Definition: frame.h:581
fill_rectangle
static void fill_rectangle(int x, int y, int w, int h)
Definition: ffplay.c:827
H264Picture
Definition: h264dec.h:128
ERContext::error_status_table
uint8_t * error_status_table
Definition: error_resilience.h:66
H264_NAL_DPA
@ H264_NAL_DPA
Definition: h264.h:36
ERContext::quarter_sample
int quarter_sample
Definition: error_resilience.h:82
scan8
static const uint8_t scan8[16 *3+3]
Definition: h264dec.h:644
ref
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:107
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: avcodec.h:1006
ff_h264_field_end
int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup)
Definition: h264_picture.c:154
AVCodecContext::debug
int debug
debug
Definition: avcodec.h:2650
H264SliceContext::ref_list
H264Ref ref_list[2][48]
0..15: frame refs, 16..47: mbaff field refs.
Definition: h264dec.h:269
H264SliceContext::non_zero_count_cache
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
Definition: h264dec.h:294
ERContext::er_temp_buffer
uint8_t * er_temp_buffer
Definition: error_resilience.h:67
FF_ALLOC_OR_GOTO
#define FF_ALLOC_OR_GOTO(ctx, p, size, label)
Definition: internal.h:140
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
H264_NAL_DPC
@ H264_NAL_DPC
Definition: h264.h:38
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:105
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:39
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:81
H264_NAL_SPS_EXT
@ H264_NAL_SPS_EXT
Definition: h264.h:47
AVPacket
This structure stores compressed data.
Definition: avcodec.h:1454
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:1592
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:240
ff_er_frame_end
void ff_er_frame_end(ERContext *s)
Definition: error_resilience.c:900
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:70
H264_NAL_END_SEQUENCE
@ H264_NAL_END_SEQUENCE
Definition: h264.h:44
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:1738
bytestream.h
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:28
FF_ALLOCZ_OR_GOTO
#define FF_ALLOCZ_OR_GOTO(ctx, p, size, label)
Definition: internal.h:149
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
h
h
Definition: vp9dsp_template.c:2038
H264_MAX_PICTURE_COUNT
#define H264_MAX_PICTURE_COUNT
Definition: h264dec.h:52
H264SEIGreenMetaData::num_pictures
uint16_t num_pictures
Definition: h264_sei.h:163
H264SliceContext::bipred_scratchpad_allocated
int bipred_scratchpad_allocated
Definition: h264dec.h:286
AVDISCARD_NONREF
@ AVDISCARD_NONREF
discard all non reference
Definition: avcodec.h:807
HWACCEL_VDPAU
#define HWACCEL_VDPAU(codec)
Definition: hwaccel.h:75
send_next_delayed_frame
static int send_next_delayed_frame(H264Context *h, AVFrame *dst_frame, int *got_frame, int buf_index)
Definition: h264dec.c:928
FF_ALLOCZ_ARRAY_OR_GOTO
#define FF_ALLOCZ_ARRAY_OR_GOTO(ctx, p, nelem, elsize, label)
Definition: internal.h:167
H264Ref::reference
int reference
Definition: h264dec.h:170
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:94
H264SliceContext::mb_field_decoding_flag
int mb_field_decoding_flag
Definition: h264dec.h:241
H264_NAL_DPB
@ H264_NAL_DPB
Definition: h264.h:37
ERContext::next_pic
ERPicture next_pic
Definition: error_resilience.h:75
HWACCEL_D3D11VA2
#define HWACCEL_D3D11VA2(codec)
Definition: hwaccel.h:69
H264SEIGreenMetaData::xsd_metric_type
uint8_t xsd_metric_type
Definition: h264_sei.h:168