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 "libavutil/attributes.h"
31 #include "parser.h"
32 #include "h264data.h"
33 #include "golomb.h"
34 #include "internal.h"
35 
36 
37 static int h264_find_frame_end(H264Context *h, const uint8_t *buf, int buf_size)
38 {
39  int i, j;
40  uint32_t state;
41  ParseContext *pc = &h->parse_context;
42  int next_avc= h->is_avc ? 0 : buf_size;
43 
44 // mb_addr= pc->mb_addr - 1;
45  state= pc->state;
46  if(state>13)
47  state= 7;
48 
49  if(h->is_avc && !h->nal_length_size)
50  av_log(h->avctx, AV_LOG_ERROR, "AVC-parser: nal length size invalid\n");
51 
52  for(i=0; i<buf_size; i++){
53  if(i >= next_avc) {
54  int nalsize = 0;
55  i = next_avc;
56  for(j = 0; j < h->nal_length_size; j++)
57  nalsize = (nalsize << 8) | buf[i++];
58  if(nalsize <= 0 || nalsize > buf_size - i){
59  av_log(h->avctx, AV_LOG_ERROR, "AVC-parser: nal size %d remaining %d\n", nalsize, buf_size - i);
60  return buf_size;
61  }
62  next_avc= i + nalsize;
63  state= 5;
64  }
65 
66  if(state==7){
67 #if HAVE_FAST_UNALIGNED
68  /* we check i<buf_size instead of i+3/7 because its simpler
69  * and there should be FF_INPUT_BUFFER_PADDING_SIZE bytes at the end
70  */
71 # if HAVE_FAST_64BIT
72  while(i<next_avc && !((~*(const uint64_t*)(buf+i) & (*(const uint64_t*)(buf+i) - 0x0101010101010101ULL)) & 0x8080808080808080ULL))
73  i+=8;
74 # else
75  while(i<next_avc && !((~*(const uint32_t*)(buf+i) & (*(const uint32_t*)(buf+i) - 0x01010101U)) & 0x80808080U))
76  i+=4;
77 # endif
78 #endif
79  for(; i<next_avc; i++){
80  if(!buf[i]){
81  state=2;
82  break;
83  }
84  }
85  }else if(state<=2){
86  if(buf[i]==1) state^= 5; //2->7, 1->4, 0->5
87  else if(buf[i]) state = 7;
88  else state>>=1; //2->1, 1->0, 0->0
89  }else if(state<=5){
90  int v= buf[i] & 0x1F;
91  if(v==6 || v==7 || v==8 || v==9){
92  if(pc->frame_start_found){
93  i++;
94  goto found;
95  }
96  }else if(v==1 || v==2 || v==5){
97  state+=8;
98  continue;
99  }
100  state= 7;
101  }else{
102  h->parse_history[h->parse_history_count++]= buf[i];
103  if(h->parse_history_count>3){
104  unsigned int mb, last_mb= h->parse_last_mb;
105  GetBitContext gb;
106 
108  h->parse_history_count=0;
109  mb= get_ue_golomb_long(&gb);
110  last_mb= h->parse_last_mb;
111  h->parse_last_mb= mb;
112  if(pc->frame_start_found){
113  if(mb <= last_mb)
114  goto found;
115  }else
116  pc->frame_start_found = 1;
117  state= 7;
118  }
119  }
120  }
121  pc->state= state;
122  if(h->is_avc)
123  return next_avc;
124  return END_NOT_FOUND;
125 
126 found:
127  pc->state=7;
128  pc->frame_start_found= 0;
129  if(h->is_avc)
130  return next_avc;
131  return i-(state&5) - 3*(state>7);
132 }
133 
134 /**
135  * Parse NAL units of found picture and decode some basic information.
136  *
137  * @param s parser context.
138  * @param avctx codec context.
139  * @param buf buffer with field/frame data.
140  * @param buf_size size of the buffer.
141  */
143  AVCodecContext *avctx,
144  const uint8_t *buf, int buf_size)
145 {
146  H264Context *h = s->priv_data;
147  const uint8_t *buf_end = buf + buf_size;
148  unsigned int pps_id;
149  unsigned int slice_type;
150  int state = -1;
151  const uint8_t *ptr;
152  int q264 = buf_size >=4 && !memcmp("Q264", buf, 4);
153  int field_poc[2];
154 
155  /* set some sane default values */
157  s->key_frame = 0;
159 
160  h->avctx= avctx;
161  h->sei_recovery_frame_cnt = -1;
162  h->sei_dpb_output_delay = 0;
163  h->sei_cpb_removal_delay = -1;
165 
166  if (!buf_size)
167  return 0;
168 
169  for(;;) {
170  int src_length, dst_length, consumed, nalsize = 0;
171  if (h->is_avc) {
172  int i;
173  if (h->nal_length_size >= buf_end - buf) break;
174  nalsize = 0;
175  for (i = 0; i < h->nal_length_size; i++)
176  nalsize = (nalsize << 8) | *buf++;
177  if (nalsize <= 0 || nalsize > buf_end - buf) {
178  av_log(h->avctx, AV_LOG_ERROR, "AVC: nal size %d\n", nalsize);
179  break;
180  }
181  src_length = nalsize;
182  } else {
183  buf = avpriv_find_start_code(buf, buf_end, &state);
184  if(buf >= buf_end)
185  break;
186  --buf;
187  src_length = buf_end - buf;
188  }
189  switch (state & 0x1f) {
190  case NAL_SLICE:
191  case NAL_IDR_SLICE:
192  // Do not walk the whole buffer just to decode slice header
193  if (src_length > 20)
194  src_length = 20;
195  break;
196  }
197  ptr= ff_h264_decode_nal(h, buf, &dst_length, &consumed, src_length);
198  if (ptr==NULL || dst_length < 0)
199  break;
200 
201  init_get_bits(&h->gb, ptr, 8*dst_length);
202  switch(h->nal_unit_type) {
203  case NAL_SPS:
205  break;
206  case NAL_PPS:
208  break;
209  case NAL_SEI:
211  break;
212  case NAL_IDR_SLICE:
213  s->key_frame = 1;
214 
215  h->prev_frame_num = 0;
216  h->prev_frame_num_offset = 0;
217  h->prev_poc_msb =
218  h->prev_poc_lsb = 0;
219  /* fall through */
220  case NAL_SLICE:
221  get_ue_golomb_long(&h->gb); // skip first_mb_in_slice
222  slice_type = get_ue_golomb_31(&h->gb);
223  s->pict_type = golomb_to_pict_type[slice_type % 5];
224  if (h->sei_recovery_frame_cnt >= 0) {
225  /* key frame, since recovery_frame_cnt is set */
226  s->key_frame = 1;
227  }
228  pps_id= get_ue_golomb(&h->gb);
229  if(pps_id>=MAX_PPS_COUNT) {
230  av_log(h->avctx, AV_LOG_ERROR, "pps_id out of range\n");
231  return -1;
232  }
233  if(!h->pps_buffers[pps_id]) {
234  av_log(h->avctx, AV_LOG_ERROR, "non-existing PPS referenced\n");
235  return -1;
236  }
237  h->pps= *h->pps_buffers[pps_id];
238  if(!h->sps_buffers[h->pps.sps_id]) {
239  av_log(h->avctx, AV_LOG_ERROR, "non-existing SPS referenced\n");
240  return -1;
241  }
242  h->sps = *h->sps_buffers[h->pps.sps_id];
244 
245  avctx->profile = ff_h264_get_profile(&h->sps);
246  avctx->level = h->sps.level_idc;
247 
248  if(h->sps.frame_mbs_only_flag){
250  }else{
251  if(get_bits1(&h->gb)) { //field_pic_flag
252  h->picture_structure= PICT_TOP_FIELD + get_bits1(&h->gb); //bottom_field_flag
253  } else {
255  }
256  }
257 
258  if (h->nal_unit_type == NAL_IDR_SLICE)
259  get_ue_golomb(&h->gb); /* idr_pic_id */
260  if (h->sps.poc_type == 0) {
261  h->poc_lsb = get_bits(&h->gb, h->sps.log2_max_poc_lsb);
262 
263  if (h->pps.pic_order_present == 1 && h->picture_structure == PICT_FRAME)
265  }
266 
267  if (h->sps.poc_type == 1 && !h->sps.delta_pic_order_always_zero_flag) {
268  h->delta_poc[0] = get_se_golomb(&h->gb);
269 
270  if (h->pps.pic_order_present == 1 && h->picture_structure == PICT_FRAME)
271  h->delta_poc[1] = get_se_golomb(&h->gb);
272  }
273 
274  ff_init_poc(h, field_poc, NULL);
275 
277  switch (h->sei_pic_struct) {
280  s->repeat_pict = 0;
281  break;
285  s->repeat_pict = 1;
286  break;
289  s->repeat_pict = 2;
290  break;
292  s->repeat_pict = 3;
293  break;
295  s->repeat_pict = 5;
296  break;
297  default:
298  s->repeat_pict = h->picture_structure == PICT_FRAME ? 1 : 0;
299  break;
300  }
301  } else {
302  s->repeat_pict = h->picture_structure == PICT_FRAME ? 1 : 0;
303  }
304 
305  if (h->picture_structure == PICT_FRAME) {
307  if (h->sps.pic_struct_present_flag) {
308  switch (h->sei_pic_struct) {
312  break;
316  break;
317  default:
319  break;
320  }
321  } else {
322  if (field_poc[0] < field_poc[1])
324  else if (field_poc[0] > field_poc[1])
326  else
328  }
329  } else {
332  else
335  }
336 
337  return 0; /* no need to evaluate the rest */
338  }
339  buf += h->is_avc ? nalsize : consumed;
340  }
341  if (q264)
342  return 0;
343  /* didn't find a picture! */
344  av_log(h->avctx, AV_LOG_ERROR, "missing picture in access unit with size %d\n", buf_size);
345  return -1;
346 }
347 
349  AVCodecContext *avctx,
350  const uint8_t **poutbuf, int *poutbuf_size,
351  const uint8_t *buf, int buf_size)
352 {
353  H264Context *h = s->priv_data;
354  ParseContext *pc = &h->parse_context;
355  int next;
356 
357  if (!h->got_first) {
358  h->got_first = 1;
359  if (avctx->extradata_size) {
360  h->avctx = avctx;
361  // must be done like in decoder, otherwise opening the parser,
362  // letting it create extradata and then closing and opening again
363  // will cause has_b_frames to be always set.
364  // Note that estimate_timings_from_pts does exactly this.
365  if (!avctx->has_b_frames)
366  h->low_delay = 1;
368  }
369  }
370 
372  next= buf_size;
373  }else{
374  next = h264_find_frame_end(h, buf, buf_size);
375 
376  if (ff_combine_frame(pc, next, &buf, &buf_size) < 0) {
377  *poutbuf = NULL;
378  *poutbuf_size = 0;
379  return buf_size;
380  }
381 
382  if(next<0 && next != END_NOT_FOUND){
383  av_assert1(pc->last_index + next >= 0 );
384  h264_find_frame_end(h, &pc->buffer[pc->last_index + next], -next); // update state
385  }
386  }
387 
388  parse_nal_units(s, avctx, buf, buf_size);
389 
390  if (h->sei_cpb_removal_delay >= 0) {
394  } else {
395  s->dts_sync_point = INT_MIN;
396  s->dts_ref_dts_delta = INT_MIN;
397  s->pts_dts_delta = INT_MIN;
398  }
399 
400  if (s->flags & PARSER_FLAG_ONCE) {
402  }
403 
404  *poutbuf = buf;
405  *poutbuf_size = buf_size;
406  return next;
407 }
408 
409 static int h264_split(AVCodecContext *avctx,
410  const uint8_t *buf, int buf_size)
411 {
412  int i;
413  uint32_t state = -1;
414  int has_sps= 0;
415 
416  for(i=0; i<=buf_size; i++){
417  if((state&0xFFFFFF1F) == 0x107)
418  has_sps=1;
419 /* if((state&0xFFFFFF1F) == 0x101 || (state&0xFFFFFF1F) == 0x102 || (state&0xFFFFFF1F) == 0x105){
420  }*/
421  if((state&0xFFFFFF00) == 0x100 && (state&0xFFFFFF1F) != 0x107 && (state&0xFFFFFF1F) != 0x108 && (state&0xFFFFFF1F) != 0x109){
422  if(has_sps){
423  while(i>4 && buf[i-5]==0) i--;
424  return i-4;
425  }
426  }
427  if (i<buf_size)
428  state= (state<<8) | buf[i];
429  }
430  return 0;
431 }
432 
434 {
435  H264Context *h = s->priv_data;
436  ParseContext *pc = &h->parse_context;
437 
438  av_free(pc->buffer);
440 }
441 
443 {
444  H264Context *h = s->priv_data;
445  h->thread_context[0] = h;
446  h->slice_context_count = 1;
447  return 0;
448 }
449 
452  .priv_data_size = sizeof(H264Context),
453  .parser_init = init,
454  .parser_parse = h264_parse,
455  .parser_close = close,
456  .split = h264_split,
457 };