Merge commit '113aeee6aed35cb786a9f6d69b0cb210f498b9da'
authorClément Bœsch <u@pkh.me>
Sun, 12 Jun 2016 13:37:58 +0000 (15:37 +0200)
committerClément Bœsch <u@pkh.me>
Sun, 12 Jun 2016 13:43:28 +0000 (15:43 +0200)
* commit '113aeee6aed35cb786a9f6d69b0cb210f498b9da':
  h264_parser: move the H264DSPContext to the parser context

H264Context is kept locally as it is currently needed for logging
(h->avctx as log context) and for is_avc and nal_length_size. These
later fields will later be obtained when the extradata parsing is
decoupled from the decoder. This code will be updated accordingly when
that commit is merged.

Merged-by: Clément Bœsch <u@pkh.me>
1  2 
libavcodec/h264_parser.c

@@@ -66,26 -62,10 +67,26 @@@ static int h264_find_frame_end(H264Pars
      if (state > 13)
          state = 7;
  
 +    if (h->is_avc && !h->nal_length_size)
 +        av_log(h->avctx, AV_LOG_ERROR, "AVC-parser: nal length size invalid\n");
 +
      for (i = 0; i < buf_size; i++) {
 +        if (i >= next_avc) {
 +            int nalsize = 0;
 +            i = next_avc;
 +            for (j = 0; j < h->nal_length_size; j++)
 +                nalsize = (nalsize << 8) | buf[i++];
 +            if (nalsize <= 0 || nalsize > buf_size - i) {
 +                av_log(h->avctx, AV_LOG_ERROR, "AVC-parser: nal size %d remaining %d\n", nalsize, buf_size - i);
 +                return buf_size;
 +            }
 +            next_avc = i + nalsize;
 +            state    = 5;
 +        }
 +
          if (state == 7) {
-             i += h->h264dsp.startcode_find_candidate(buf + i, next_avc - i);
 -            i += p->h264dsp.startcode_find_candidate(buf + i, buf_size - i);
 -            if (i < buf_size)
++            i += p->h264dsp.startcode_find_candidate(buf + i, next_avc - i);
 +            if (i < next_avc)
                  state = 2;
          } else if (state <= 2) {
              if (buf[i] == 1)