FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
h264_parser.c
Go to the documentation of this file.
1 /*
2  * H.26L/H.264/AVC/JVT/14496-10/... parser
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 / MPEG4 part10 parser.
25  * @author Michael Niedermayer <michaelni@gmx.at>
26  */
27 
28 #define UNCHECKED_BITSTREAM_READER 1
29 
30 #include <assert.h>
31 #include <stdint.h>
32 
33 #include "libavutil/avutil.h"
34 #include "libavutil/error.h"
35 #include "libavutil/log.h"
36 #include "libavutil/mem.h"
37 #include "libavutil/pixfmt.h"
38 
39 #include "get_bits.h"
40 #include "golomb.h"
41 #include "h264.h"
42 #include "h264data.h"
43 #include "internal.h"
44 #include "mpegutils.h"
45 #include "parser.h"
46 
47 typedef struct H264ParseContext {
50  int got_first;
52 
53 
55  int buf_size)
56 {
57  H264Context *h = &p->h;
58  int i, j;
59  uint32_t state;
60  ParseContext *pc = &p->pc;
61 
62  int next_avc= h->is_avc ? 0 : buf_size;
63 // mb_addr= pc->mb_addr - 1;
64  state = pc->state;
65  if (state > 13)
66  state = 7;
67 
68  if (h->is_avc && !h->nal_length_size)
69  av_log(h->avctx, AV_LOG_ERROR, "AVC-parser: nal length size invalid\n");
70 
71  for (i = 0; i < buf_size; i++) {
72  if (i >= next_avc) {
73  int nalsize = 0;
74  i = next_avc;
75  for (j = 0; j < h->nal_length_size; j++)
76  nalsize = (nalsize << 8) | buf[i++];
77  if (nalsize <= 0 || nalsize > buf_size - i) {
78  av_log(h->avctx, AV_LOG_ERROR, "AVC-parser: nal size %d remaining %d\n", nalsize, buf_size - i);
79  return buf_size;
80  }
81  next_avc = i + nalsize;
82  state = 5;
83  }
84 
85  if (state == 7) {
86  i += h->h264dsp.startcode_find_candidate(buf + i, next_avc - i);
87  if (i < next_avc)
88  state = 2;
89  } else if (state <= 2) {
90  if (buf[i] == 1)
91  state ^= 5; // 2->7, 1->4, 0->5
92  else if (buf[i])
93  state = 7;
94  else
95  state >>= 1; // 2->1, 1->0, 0->0
96  } else if (state <= 5) {
97  int nalu_type = buf[i] & 0x1F;
98  if (nalu_type == NAL_SEI || nalu_type == NAL_SPS ||
99  nalu_type == NAL_PPS || nalu_type == NAL_AUD) {
100  if (pc->frame_start_found) {
101  i++;
102  goto found;
103  }
104  } else if (nalu_type == NAL_SLICE || nalu_type == NAL_DPA ||
105  nalu_type == NAL_IDR_SLICE) {
106  state += 8;
107  continue;
108  }
109  state = 7;
110  } else {
111  h->parse_history[h->parse_history_count++]= buf[i];
112  if (h->parse_history_count>5) {
113  unsigned int mb, last_mb= h->parse_last_mb;
114  GetBitContext gb;
115 
117  h->parse_history_count=0;
118  mb= get_ue_golomb_long(&gb);
119  h->parse_last_mb= mb;
120  if (pc->frame_start_found) {
121  if (mb <= last_mb)
122  goto found;
123  } else
124  pc->frame_start_found = 1;
125  state = 7;
126  }
127  }
128  }
129  pc->state = state;
130  if (h->is_avc)
131  return next_avc;
132  return END_NOT_FOUND;
133 
134 found:
135  pc->state = 7;
136  pc->frame_start_found = 0;
137  if (h->is_avc)
138  return next_avc;
139  return i - (state & 5) - 5 * (state > 7);
140 }
141 
143 {
145  int slice_type_nos = s->pict_type & 3;
146  H264ParseContext *p = s->priv_data;
147  H264Context *h = &p->h;
148  int list_count, ref_count[2];
149 
150 
152  get_ue_golomb(gb); // redundant_pic_count
153 
154  if (slice_type_nos == AV_PICTURE_TYPE_B)
155  get_bits1(gb); // direct_spatial_mv_pred
156 
157  if (ff_h264_parse_ref_count(&list_count, ref_count, gb, &h->pps,
158  slice_type_nos, h->picture_structure, h->avctx) < 0)
159  return AVERROR_INVALIDDATA;
160 
161  if (slice_type_nos != AV_PICTURE_TYPE_I) {
162  int list;
163  for (list = 0; list < list_count; list++) {
164  if (get_bits1(gb)) {
165  int index;
166  for (index = 0; ; index++) {
167  unsigned int reordering_of_pic_nums_idc = get_ue_golomb_31(gb);
168 
169  if (reordering_of_pic_nums_idc < 3)
170  get_ue_golomb_long(gb);
171  else if (reordering_of_pic_nums_idc > 3) {
173  "illegal reordering_of_pic_nums_idc %d\n",
174  reordering_of_pic_nums_idc);
175  return AVERROR_INVALIDDATA;
176  } else
177  break;
178 
179  if (index >= ref_count[list]) {
181  "reference count %d overflow\n", index);
182  return AVERROR_INVALIDDATA;
183  }
184  }
185  }
186  }
187  }
188 
189  if ((h->pps.weighted_pred && slice_type_nos == AV_PICTURE_TYPE_P) ||
190  (h->pps.weighted_bipred_idc == 1 && slice_type_nos == AV_PICTURE_TYPE_B))
191  ff_h264_pred_weight_table(gb, &h->sps, ref_count, slice_type_nos,
192  &pwt);
193 
194  if (get_bits1(gb)) { // adaptive_ref_pic_marking_mode_flag
195  int i;
196  for (i = 0; i < MAX_MMCO_COUNT; i++) {
197  MMCOOpcode opcode = get_ue_golomb_31(gb);
198  if (opcode > (unsigned) MMCO_LONG) {
200  "illegal memory management control operation %d\n",
201  opcode);
202  return AVERROR_INVALIDDATA;
203  }
204  if (opcode == MMCO_END)
205  return 0;
206  else if (opcode == MMCO_RESET)
207  return 1;
208 
209  if (opcode == MMCO_SHORT2UNUSED || opcode == MMCO_SHORT2LONG)
210  get_ue_golomb_long(gb); // difference_of_pic_nums_minus1
211  if (opcode == MMCO_SHORT2LONG || opcode == MMCO_LONG2UNUSED ||
212  opcode == MMCO_LONG || opcode == MMCO_SET_MAX_LONG)
213  get_ue_golomb_31(gb);
214  }
215  }
216 
217  return 0;
218 }
219 
220 /**
221  * Parse NAL units of found picture and decode some basic information.
222  *
223  * @param s parser context.
224  * @param avctx codec context.
225  * @param buf buffer with field/frame data.
226  * @param buf_size size of the buffer.
227  */
229  AVCodecContext *avctx,
230  const uint8_t * const buf, int buf_size)
231 {
232  H264ParseContext *p = s->priv_data;
233  H264Context *h = &p->h;
234  H2645NAL nal = { NULL };
235  int buf_index, next_avc;
236  unsigned int pps_id;
237  unsigned int slice_type;
238  int state = -1, got_reset = 0;
239  int q264 = buf_size >=4 && !memcmp("Q264", buf, 4);
240  int field_poc[2];
241  int ret;
242 
243  /* set some sane default values */
245  s->key_frame = 0;
247 
248  h->avctx = avctx;
251 
252  if (!buf_size)
253  return 0;
254 
255  buf_index = 0;
256  next_avc = h->is_avc ? 0 : buf_size;
257  for (;;) {
258  int src_length, consumed, nalsize = 0;
259 
260  if (buf_index >= next_avc) {
261  nalsize = get_avc_nalsize(h, buf, buf_size, &buf_index);
262  if (nalsize < 0)
263  break;
264  next_avc = buf_index + nalsize;
265  } else {
266  buf_index = find_start_code(buf, buf_size, buf_index, next_avc);
267  if (buf_index >= buf_size)
268  break;
269  if (buf_index >= next_avc)
270  continue;
271  }
272  src_length = next_avc - buf_index;
273 
274  state = buf[buf_index];
275  switch (state & 0x1f) {
276  case NAL_SLICE:
277  case NAL_IDR_SLICE:
278  // Do not walk the whole buffer just to decode slice header
279  if ((state & 0x1f) == NAL_IDR_SLICE || ((state >> 5) & 0x3) == 0) {
280  /* IDR or disposable slice
281  * No need to decode many bytes because MMCOs shall not be present. */
282  if (src_length > 60)
283  src_length = 60;
284  } else {
285  /* To decode up to MMCOs */
286  if (src_length > 1000)
287  src_length = 1000;
288  }
289  break;
290  }
291  consumed = ff_h2645_extract_rbsp(buf + buf_index, src_length, &nal);
292  if (consumed < 0)
293  break;
294 
295  buf_index += consumed;
296 
297  ret = init_get_bits8(&nal.gb, nal.data, nal.size);
298  if (ret < 0)
299  goto fail;
300  get_bits1(&nal.gb);
301  nal.ref_idc = get_bits(&nal.gb, 2);
302  nal.type = get_bits(&nal.gb, 5);
303 
304  h->gb = nal.gb;
305  h->nal_ref_idc = nal.ref_idc;
306  h->nal_unit_type = nal.type;
307 
308  switch (h->nal_unit_type) {
309  case NAL_SPS:
311  break;
312  case NAL_PPS:
314  break;
315  case NAL_SEI:
317  break;
318  case NAL_IDR_SLICE:
319  s->key_frame = 1;
320 
321  h->prev_frame_num = 0;
322  h->prev_frame_num_offset = 0;
323  h->prev_poc_msb =
324  h->prev_poc_lsb = 0;
325  /* fall through */
326  case NAL_SLICE:
327  get_ue_golomb_long(&nal.gb); // skip first_mb_in_slice
328  slice_type = get_ue_golomb_31(&nal.gb);
329  s->pict_type = ff_h264_golomb_to_pict_type[slice_type % 5];
330  if (h->sei_recovery_frame_cnt >= 0) {
331  /* key frame, since recovery_frame_cnt is set */
332  s->key_frame = 1;
333  }
334  pps_id = get_ue_golomb(&nal.gb);
335  if (pps_id >= MAX_PPS_COUNT) {
337  "pps_id %u out of range\n", pps_id);
338  goto fail;
339  }
340  if (!h->pps_buffers[pps_id]) {
342  "non-existing PPS %u referenced\n", pps_id);
343  goto fail;
344  }
345  h->pps = *h->pps_buffers[pps_id];
346  if (!h->sps_buffers[h->pps.sps_id]) {
348  "non-existing SPS %u referenced\n", h->pps.sps_id);
349  goto fail;
350  }
351  h->sps = *h->sps_buffers[h->pps.sps_id];
352  h->frame_num = get_bits(&nal.gb, h->sps.log2_max_frame_num);
353 
354  if(h->sps.ref_frame_count <= 1 && h->pps.ref_count[0] <= 1 && s->pict_type == AV_PICTURE_TYPE_I)
355  s->key_frame = 1;
356 
357  s->coded_width = 16 * h->sps.mb_width;
358  s->coded_height = 16 * h->sps.mb_height;
359  s->width = s->coded_width - (h->sps.crop_right + h->sps.crop_left);
360  s->height = s->coded_height - (h->sps.crop_top + h->sps.crop_bottom);
361  if (s->width <= 0 || s->height <= 0) {
362  s->width = s->coded_width;
363  s->height = s->coded_height;
364  }
365 
366  switch (h->sps.bit_depth_luma) {
367  case 9:
368  if (CHROMA444(h)) s->format = AV_PIX_FMT_YUV444P9;
369  else if (CHROMA422(h)) s->format = AV_PIX_FMT_YUV422P9;
370  else s->format = AV_PIX_FMT_YUV420P9;
371  break;
372  case 10:
374  else if (CHROMA422(h)) s->format = AV_PIX_FMT_YUV422P10;
375  else s->format = AV_PIX_FMT_YUV420P10;
376  break;
377  case 8:
379  else if (CHROMA422(h)) s->format = AV_PIX_FMT_YUV422P;
380  else s->format = AV_PIX_FMT_YUV420P;
381  break;
382  default:
383  s->format = AV_PIX_FMT_NONE;
384  }
385 
386  avctx->profile = ff_h264_get_profile(&h->sps);
387  avctx->level = h->sps.level_idc;
388 
389  if (h->sps.frame_mbs_only_flag) {
391  } else {
392  if (get_bits1(&nal.gb)) { // field_pic_flag
393  h->picture_structure = PICT_TOP_FIELD + get_bits1(&nal.gb); // bottom_field_flag
394  } else {
396  }
397  }
398 
399  if (h->nal_unit_type == NAL_IDR_SLICE)
400  get_ue_golomb_long(&nal.gb); /* idr_pic_id */
401  if (h->sps.poc_type == 0) {
402  h->poc_lsb = get_bits(&nal.gb, h->sps.log2_max_poc_lsb);
403 
404  if (h->pps.pic_order_present == 1 &&
406  h->delta_poc_bottom = get_se_golomb(&nal.gb);
407  }
408 
409  if (h->sps.poc_type == 1 &&
411  h->delta_poc[0] = get_se_golomb(&nal.gb);
412 
413  if (h->pps.pic_order_present == 1 &&
415  h->delta_poc[1] = get_se_golomb(&nal.gb);
416  }
417 
418  /* Decode POC of this picture.
419  * The prev_ values needed for decoding POC of the next picture are not set here. */
420  field_poc[0] = field_poc[1] = INT_MAX;
421  ff_init_poc(h, field_poc, &s->output_picture_number);
422 
423  /* Continue parsing to check if MMCO_RESET is present.
424  * FIXME: MMCO_RESET could appear in non-first slice.
425  * Maybe, we should parse all undisposable non-IDR slice of this
426  * picture until encountering MMCO_RESET in a slice of it. */
427  if (h->nal_ref_idc && h->nal_unit_type != NAL_IDR_SLICE) {
428  got_reset = scan_mmco_reset(s, &nal.gb);
429  if (got_reset < 0)
430  goto fail;
431  }
432 
433  /* Set up the prev_ values for decoding POC of the next picture. */
434  h->prev_frame_num = got_reset ? 0 : h->frame_num;
435  h->prev_frame_num_offset = got_reset ? 0 : h->frame_num_offset;
436  if (h->nal_ref_idc != 0) {
437  if (!got_reset) {
438  h->prev_poc_msb = h->poc_msb;
439  h->prev_poc_lsb = h->poc_lsb;
440  } else {
441  h->prev_poc_msb = 0;
442  h->prev_poc_lsb =
443  h->picture_structure == PICT_BOTTOM_FIELD ? 0 : field_poc[0];
444  }
445  }
446 
447  if (h->sps.pic_struct_present_flag) {
448  switch (h->sei_pic_struct) {
451  s->repeat_pict = 0;
452  break;
456  s->repeat_pict = 1;
457  break;
460  s->repeat_pict = 2;
461  break;
463  s->repeat_pict = 3;
464  break;
466  s->repeat_pict = 5;
467  break;
468  default:
469  s->repeat_pict = h->picture_structure == PICT_FRAME ? 1 : 0;
470  break;
471  }
472  } else {
473  s->repeat_pict = h->picture_structure == PICT_FRAME ? 1 : 0;
474  }
475 
476  if (h->picture_structure == PICT_FRAME) {
478  if (h->sps.pic_struct_present_flag) {
479  switch (h->sei_pic_struct) {
483  break;
487  break;
488  default:
490  break;
491  }
492  } else {
493  if (field_poc[0] < field_poc[1])
495  else if (field_poc[0] > field_poc[1])
497  else
499  }
500  } else {
503  else
506  }
507 
508  av_freep(&nal.rbsp_buffer);
509  return 0; /* no need to evaluate the rest */
510  }
511  }
512  if (q264) {
513  av_freep(&nal.rbsp_buffer);
514  return 0;
515  }
516  /* didn't find a picture! */
517  av_log(h->avctx, AV_LOG_ERROR, "missing picture in access unit with size %d\n", buf_size);
518 fail:
519  av_freep(&nal.rbsp_buffer);
520  return -1;
521 }
522 
524  AVCodecContext *avctx,
525  const uint8_t **poutbuf, int *poutbuf_size,
526  const uint8_t *buf, int buf_size)
527 {
528  H264ParseContext *p = s->priv_data;
529  H264Context *h = &p->h;
530  ParseContext *pc = &p->pc;
531  int next;
532 
533  if (!p->got_first) {
534  p->got_first = 1;
535  if (avctx->extradata_size) {
536  h->avctx = avctx;
537  // must be done like in decoder, otherwise opening the parser,
538  // letting it create extradata and then closing and opening again
539  // will cause has_b_frames to be always set.
540  // Note that estimate_timings_from_pts does exactly this.
541  if (!avctx->has_b_frames)
542  h->low_delay = 1;
544  }
545  }
546 
548  next = buf_size;
549  } else {
550  next = h264_find_frame_end(p, buf, buf_size);
551 
552  if (ff_combine_frame(pc, next, &buf, &buf_size) < 0) {
553  *poutbuf = NULL;
554  *poutbuf_size = 0;
555  return buf_size;
556  }
557 
558  if (next < 0 && next != END_NOT_FOUND) {
559  av_assert1(pc->last_index + next >= 0);
560  h264_find_frame_end(p, &pc->buffer[pc->last_index + next], -next); // update state
561  }
562  }
563 
564  parse_nal_units(s, avctx, buf, buf_size);
565 
566  if (avctx->framerate.num)
567  avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1}));
568  if (h->sei_cpb_removal_delay >= 0) {
569  s->dts_sync_point = h->sei_buffering_period_present;
570  s->dts_ref_dts_delta = h->sei_cpb_removal_delay;
571  s->pts_dts_delta = h->sei_dpb_output_delay;
572  } else {
573  s->dts_sync_point = INT_MIN;
574  s->dts_ref_dts_delta = INT_MIN;
575  s->pts_dts_delta = INT_MIN;
576  }
577 
578  if (s->flags & PARSER_FLAG_ONCE) {
579  s->flags &= PARSER_FLAG_COMPLETE_FRAMES;
580  }
581 
582  *poutbuf = buf;
583  *poutbuf_size = buf_size;
584  return next;
585 }
586 
587 static int h264_split(AVCodecContext *avctx,
588  const uint8_t *buf, int buf_size)
589 {
590  uint32_t state = -1;
591  int has_sps = 0;
592  int has_pps = 0;
593  const uint8_t *ptr = buf, *end = buf + buf_size;
594  int nalu_type;
595 
596  while (ptr < end) {
597  ptr = avpriv_find_start_code(ptr, end, &state);
598  if ((state & 0xFFFFFF00) != 0x100)
599  break;
600  nalu_type = state & 0x1F;
601  if (nalu_type == NAL_SPS) {
602  has_sps = 1;
603  } else if (nalu_type == NAL_PPS)
604  has_pps = 1;
605  /* else if (nalu_type == 0x01 ||
606  * nalu_type == 0x02 ||
607  * nalu_type == 0x05) {
608  * }
609  */
610  else if ((nalu_type != NAL_SEI || has_pps) &&
611  nalu_type != NAL_AUD && nalu_type != NAL_SPS_EXT &&
612  nalu_type != 0x0f) {
613  if (has_sps) {
614  while (ptr - 4 > buf && ptr[-5] == 0)
615  ptr--;
616  return ptr - 4 - buf;
617  }
618  }
619  }
620 
621  return 0;
622 }
623 
625 {
626  H264ParseContext *p = s->priv_data;
627  H264Context *h = &p->h;
628  ParseContext *pc = &p->pc;
629 
630  av_freep(&pc->buffer);
632 }
633 
635 {
636  H264ParseContext *p = s->priv_data;
637  H264Context *h = &p->h;
638 
639  h->slice_ctx = av_mallocz(sizeof(*h->slice_ctx));
640  if (!h->slice_ctx)
641  return 0;
642  h->nb_slice_ctx = 1;
643 
644  h->slice_context_count = 1;
645  ff_h264dsp_init(&h->h264dsp, 8, 1);
646  return 0;
647 }
648 
651  .priv_data_size = sizeof(H264ParseContext),
652  .parser_init = init,
653  .parser_parse = h264_parse,
654  .parser_close = h264_close,
655  .split = h264_split,
656 };
#define NULL
Definition: coverity.c:32
AVRational framerate
Definition: avcodec.h:3331
const char * s
Definition: avisynth_c.h:631
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
GetBitContext gb
Definition: h264.h:521
5: top field, bottom field, top field repeated, in that order
Definition: h264.h:155
int low_delay
Definition: h264.h:549
uint8_t parse_history[6]
Definition: h264.h:821
int delta_poc[2]
Definition: h264.h:648
int size
Definition: h2645_parse.h:33
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
Definition: golomb.h:183
#define CHROMA444(h)
Definition: h264.h:102
3: top field, bottom field, in that order
Definition: h264.h:153
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:67
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:260
int weighted_bipred_idc
Definition: h264.h:250
memory handling functions
ParseContext pc
Definition: h264_parser.c:49
int width
Dimensions of the decoded video intended for presentation.
Definition: avcodec.h:5054
7: frame doubling
Definition: h264.h:157
#define MAX_PPS_COUNT
Definition: h264.h:53
int ff_h264_pred_weight_table(GetBitContext *gb, const SPS *sps, const int *ref_count, int slice_type_nos, H264PredWeightTable *pwt)
Definition: h264_parse.c:24
enum AVFieldOrder field_order
Definition: avcodec.h:5031
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition: h264.h:248
int num
numerator
Definition: rational.h:44
int codec_ids[5]
Definition: avcodec.h:5075
int coded_width
Dimensions of the coded video.
Definition: avcodec.h:5060
external API header
int frame_mbs_only_flag
Definition: h264.h:194
int is_avc
Used to parse AVC variant of h264.
Definition: h264.h:631
MMCOOpcode
Memory management control operation opcode.
Definition: h264.h:297
int ff_h264_get_profile(SPS *sps)
Compute profile from profile_idc and constraint_set?_flags.
Definition: h264.c:980
H264Context.
Definition: h264.h:514
int prev_poc_msb
poc_msb of the last reference pic for POC type 0
Definition: h264.h:650
4: bottom field, top field, in that order
Definition: h264.h:154
static int parse_nal_units(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t *const buf, int buf_size)
Parse NAL units of found picture and decode some basic information.
Definition: h264_parser.c:228
static struct @224 state
int profile
profile
Definition: avcodec.h:3146
int frame_start_found
Definition: parser.h:34
int picture_structure
Definition: h264.h:589
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
Definition: avcodec.h:1779
unsigned int crop_top
frame_cropping_rect_top_offset
Definition: h264.h:202
int parse_history_count
Definition: h264.h:822
enum AVPictureStructure picture_structure
Indicate whether a picture is coded as a frame, top field or bottom field.
Definition: avcodec.h:5041
H264Context h
Definition: h264_parser.c:48
uint8_t
#define av_cold
Definition: attributes.h:82
int prev_frame_num_offset
for POC type 2
Definition: h264.h:653
#define mb
unsigned int crop_left
frame_cropping_rect_left_offset
Definition: h264.h:200
void ff_h264_reset_sei(H264Context *h)
Reset SEI values at the beginning of the frame.
Definition: h264_sei.c:37
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:90
static int find_start_code(const uint8_t *buf, int buf_size, int buf_index, int next_avc)
Definition: h264.h:1146
unsigned int crop_right
frame_cropping_rect_right_offset
Definition: h264.h:201
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:1757
#define PICT_BOTTOM_FIELD
Definition: mpegutils.h:38
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
Definition: rational.c:80
int redundant_pic_cnt_present
redundant_pic_cnt_present_flag
Definition: h264.h:256
bitstream reader API header.
#define av_log(a,...)
Definition: h264.h:122
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
H.264 / AVC / MPEG4 part10 codec.
int frame_num
Definition: h264.h:649
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:1964
static int get_ue_golomb(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to 8190.
Definition: golomb.h:53
error code definitions
int poc_type
pic_order_cnt_type
Definition: h264.h:184
int nal_unit_type
Definition: h264.h:626
int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_size)
Combine the (truncated) bitstream to a complete frame.
Definition: parser.c:245
int ff_init_poc(H264Context *h, int pic_field_poc[2], int *pic_poc)
Definition: h264.c:895
int parse_last_mb
Definition: h264.h:823
PPS pps
current pps
Definition: h264.h:576
0: frame
Definition: h264.h:150
int weighted_pred
weighted_pred_flag
Definition: h264.h:249
#define PICT_TOP_FIELD
Definition: mpegutils.h:37
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:341
const uint8_t ff_h264_golomb_to_pict_type[5]
Definition: h264data.c:37
#define fail()
Definition: checkasm.h:81
int delta_pic_order_always_zero_flag
Definition: h264.h:186
static char * split(char *message, char delim)
Definition: af_channelmap.c:81
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:66
int ff_h264_parse_ref_count(int *plist_count, int ref_count[2], GetBitContext *gb, const PPS *pps, int slice_type_nos, int picture_structure, void *logctx)
Definition: h264_parse.c:190
int nal_length_size
Number of bytes used for nal length (1, 2 or 4)
Definition: h264.h:632
#define AV_PIX_FMT_YUV422P9
Definition: pixfmt.h:336
int ref_frame_count
num_ref_frames
Definition: h264.h:190
int frame_num_offset
for POC type 2
Definition: h264.h:652
FPA sei_fpa
Definition: h264.h:780
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:53
av_cold void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
Definition: h264dsp.c:67
int last_index
Definition: parser.h:31
int nb_slice_ctx
Definition: h264.h:529
int(* startcode_find_candidate)(const uint8_t *buf, int size)
Search buf from the start for up to size bytes.
Definition: h264dsp.h:116
int size_in_bits
Definition: get_bits.h:57
SPS sps
current sps
Definition: h264.h:575
PPS * pps_buffers[MAX_PPS_COUNT]
Definition: h264.h:638
Definition: h264.h:123
int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length)
Decode PPS.
Definition: h264_ps.c:587
int level
level
Definition: avcodec.h:3235
H264SliceContext * slice_ctx
Definition: h264.h:528
int poc_lsb
Definition: h264.h:645
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
Definition: avcodec.h:1788
static int h264_find_frame_end(H264ParseContext *p, const uint8_t *buf, int buf_size)
Definition: h264_parser.c:54
int ref_idc
H264 only, nal_ref_idc.
Definition: h2645_parse.h:63
#define AV_PIX_FMT_YUV444P9
Definition: pixfmt.h:337
int type
NAL unit type.
Definition: h2645_parse.h:50
AVCodecParser ff_h264_parser
Definition: h264_parser.c:649
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
Definition: golomb.h:85
int pic_order_present
pic_order_present_flag
Definition: h264.h:245
SPS * sps_buffers[MAX_SPS_COUNT]
Definition: h264.h:637
static void h264_close(AVCodecParserContext *s)
Definition: h264_parser.c:624
Definition: h264.h:120
AVCodecContext * avctx
Definition: h264.h:516
uint8_t * buffer
Definition: parser.h:29
1: top field
Definition: h264.h:151
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
Definition: golomb.h:100
int prev_frame_num
frame_num of the last pic for POC type 1/2
Definition: h264.h:654
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:449
int ff_h264_decode_sei(H264Context *h)
Decode SEI.
Definition: h264_sei.c:421
int poc_msb
Definition: h264.h:646
main external API structure.
Definition: avcodec.h:1642
Definition: h264.h:298
2: bottom field
Definition: h264.h:152
const uint8_t * data
Definition: h2645_parse.h:34
void * buf
Definition: avisynth_c.h:553
uint32_t state
contains the last few bytes in MSB order
Definition: parser.h:33
int extradata_size
Definition: avcodec.h:1758
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:312
SEI_PicStructType sei_pic_struct
pic_struct in picture timing SEI message
Definition: h264.h:716
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:338
static int get_avc_nalsize(H264Context *h, const uint8_t *buf, int buf_size, int *buf_index)
Definition: h264.h:1156
static int h264_split(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
Definition: h264_parser.c:587
#define CHROMA422(h)
Definition: h264.h:101
int index
Definition: gxfenc.c:89
rational number numerator/denominator
Definition: rational.h:43
Definition: h264.h:116
#define MAX_MMCO_COUNT
Definition: h264.h:55
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:418
#define AV_PIX_FMT_YUV420P9
Definition: pixfmt.h:335
#define END_NOT_FOUND
Definition: parser.h:40
unsigned int sps_id
Definition: h264.h:243
int frame_packing_arrangement_cancel_flag
is previous arrangement canceled, -1 if never received
Definition: h264.h:271
int log2_max_poc_lsb
log2_max_pic_order_cnt_lsb_minus4
Definition: h264.h:185
6: bottom field, top field, bottom field repeated, in that order
Definition: h264.h:156
int output_picture_number
Picture number incremented in presentation or output order.
Definition: avcodec.h:5049
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:339
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
Definition: rational.h:133
int pic_struct_present_flag
Definition: h264.h:224
av_cold void ff_h264_free_context(H264Context *h)
Free any data that may have been allocated in the H264 context like SPS, PPS etc. ...
Definition: h264.c:1565
#define PARSER_FLAG_ONCE
Definition: avcodec.h:4942
int ff_h264_decode_seq_parameter_set(H264Context *h, int ignore_truncation)
Decode SPS.
Definition: h264_ps.c:280
int slice_context_count
Definition: h264.h:701
int mb_height
pic_height_in_map_units_minus1 + 1
Definition: h264.h:193
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:62
common internal api header.
if(ret< 0)
Definition: vf_mcdeint.c:282
int ff_h264_decode_extradata(H264Context *h, const uint8_t *buf, int size)
Definition: h264.c:358
int log2_max_frame_num
log2_max_frame_num_minus4 + 4
Definition: h264.h:183
static int scan_mmco_reset(AVCodecParserContext *s, GetBitContext *gb)
Definition: h264_parser.c:142
Bi-dir predicted.
Definition: avutil.h:268
#define PARSER_FLAG_COMPLETE_FRAMES
Definition: avcodec.h:4941
static av_cold int init(AVCodecParserContext *s)
Definition: h264_parser.c:634
GetBitContext gb
Definition: h2645_parse.h:45
int bit_depth_luma
bit_depth_luma_minus8 + 8
Definition: h264.h:230
#define PICT_FRAME
Definition: mpegutils.h:39
int prev_poc_lsb
poc_lsb of the last reference pic for POC type 0
Definition: h264.h:651
pixel format definitions
int format
The format of the coded data, corresponds to enum AVPixelFormat for video and for enum AVSampleFormat...
Definition: avcodec.h:5071
int mb_width
pic_width_in_mbs_minus1 + 1
Definition: h264.h:192
int delta_poc_bottom
Definition: h264.h:647
int repeat_pict
This field is used for proper frame duration computation in lavf.
Definition: avcodec.h:4925
H264DSPContext h264dsp
Definition: h264.h:518
uint8_t * rbsp_buffer
Definition: h2645_parse.h:30
#define av_freep(p)
int ff_h2645_extract_rbsp(const uint8_t *src, int length, H2645NAL *nal)
Extract the raw (unescaped) bitstream.
Definition: h2645_parse.c:32
static int h264_parse(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size)
Definition: h264_parser.c:523
8: frame tripling
Definition: h264.h:158
unsigned int crop_bottom
frame_cropping_rect_bottom_offset
Definition: h264.h:203
exp golomb vlc stuff
Definition: h264.h:121
int key_frame
Set by parser to 1 for key frames and 0 for non-key frames.
Definition: avcodec.h:4956
int sei_recovery_frame_cnt
recovery_frame_cnt from SEI message
Definition: h264.h:773
int level_idc
Definition: h264.h:180
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:252
int nal_ref_idc
Definition: h264.h:625
Predicted.
Definition: avutil.h:267