Merge commit '9404a47a2d1df418946a338938eb6cdb3afed474'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 27 Jan 2015 14:08:17 +0000 (15:08 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 27 Jan 2015 14:08:17 +0000 (15:08 +0100)
* commit '9404a47a2d1df418946a338938eb6cdb3afed474':
  h264: move parser-only variables to their own context

Conflicts:
libavcodec/h264_parser.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/h264.c
libavcodec/h264.h
libavcodec/h264_parser.c

Simple merge
Simple merge
  #include "internal.h"
  #include "mpegutils.h"
  
 -#include <assert.h>
 -
+ typedef struct H264ParseContext {
+     H264Context h;
+     ParseContext pc;
+     int got_first;
+ } H264ParseContext;
  
- static int h264_find_frame_end(H264Context *h, const uint8_t *buf,
+ static int h264_find_frame_end(H264ParseContext *p, const uint8_t *buf,
                                 int buf_size)
  {
 -    int i;
+     H264Context *h = &p->h;
 +    int i, j;
      uint32_t state;
-     ParseContext *pc = &h->parse_context;
-     int next_avc= h->is_avc ? 0 : buf_size;
+     ParseContext *pc = &p->pc;
 +
++    int next_avc= h->is_avc ? 0 : buf_size;
  //    mb_addr= pc->mb_addr - 1;
      state = pc->state;
      if (state > 13)
@@@ -202,10 -178,11 +210,11 @@@ static int scan_mmco_reset(AVCodecParse
   */
  static inline int parse_nal_units(AVCodecParserContext *s,
                                    AVCodecContext *avctx,
 -                                  const uint8_t *buf, int buf_size)
 +                                  const uint8_t * const buf, int buf_size)
  {
-     H264Context *h         = s->priv_data;
+     H264ParseContext *p = s->priv_data;
+     H264Context      *h = &p->h;
 -    const uint8_t *buf_end = buf + buf_size;
 +    int buf_index, next_avc;
      unsigned int pps_id;
      unsigned int slice_type;
      int state = -1, got_reset = 0;
@@@ -455,21 -410,23 +464,22 @@@ static int h264_parse(AVCodecParserCont
                        const uint8_t **poutbuf, int *poutbuf_size,
                        const uint8_t *buf, int buf_size)
  {
-     H264Context *h   = s->priv_data;
-     ParseContext *pc = &h->parse_context;
+     H264ParseContext *p = s->priv_data;
+     H264Context      *h = &p->h;
+     ParseContext *pc = &p->pc;
      int next;
  
-     if (!h->got_first) {
-         h->got_first = 1;
+     if (!p->got_first) {
+         p->got_first = 1;
          if (avctx->extradata_size) {
              h->avctx = avctx;
 -            // must be done like in the decoder.
 -            // otherwise opening the parser, creating extradata,
 -            // and then closing and opening again
 +            // must be done like in decoder, otherwise opening the parser,
 +            // letting it create extradata and then closing and opening again
              // will cause has_b_frames to be always set.
 -            // NB: estimate_timings_from_pts behaves exactly like this.
 +            // Note that estimate_timings_from_pts does exactly this.
              if (!avctx->has_b_frames)
                  h->low_delay = 1;
 -            ff_h264_decode_extradata(h);
 +            ff_h264_decode_extradata(h, avctx->extradata, avctx->extradata_size);
          }
      }
  
          }
  
          if (next < 0 && next != END_NOT_FOUND) {
 -            assert(pc->last_index + next >= 0);
 +            av_assert1(pc->last_index + next >= 0);
-             h264_find_frame_end(h, &pc->buffer[pc->last_index + next], -next); // update state
+             h264_find_frame_end(p, &pc->buffer[pc->last_index + next], -next); // update state
          }
      }
  
@@@ -549,10 -501,11 +559,11 @@@ static int h264_split(AVCodecContext *a
  
  static void close(AVCodecParserContext *s)
  {
-     H264Context *h   = s->priv_data;
-     ParseContext *pc = &h->parse_context;
+     H264ParseContext *p = s->priv_data;
+     H264Context      *h = &p->h;
+     ParseContext *pc = &p->pc;
  
 -    av_free(pc->buffer);
 +    av_freep(&pc->buffer);
      ff_h264_free_context(h);
  }