Merge commit 'efc618aff9d68d2ddc323a5c5f892ac71951f162'
authorMichael Niedermayer <michael@niedermayer.cc>
Mon, 20 Jul 2015 20:14:29 +0000 (22:14 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Mon, 20 Jul 2015 20:14:29 +0000 (22:14 +0200)
* commit 'efc618aff9d68d2ddc323a5c5f892ac71951f162':
  qtrleenc: Keep coded_frame.key_frame a write-only variable

Conflicts:
libavcodec/qtrleenc.c

Merged-by: Michael Niedermayer <michael@niedermayer.cc>
1  2 
libavcodec/qtrleenc.c

@@@ -168,58 -160,9 +171,58 @@@ static void qtrle_encode_line(QtrleEncC
      s->length_table[width] = 0;
      skipcount = 0;
  
 +    /* Initial values */
 +    lowest_bulk_cost = INT_MAX / 2;
 +    lowest_bulk_cost_index = width;
 +    sec_lowest_bulk_cost = INT_MAX / 2;
 +    sec_lowest_bulk_cost_index = width;
 +
 +    base_bulk_cost = 1 + s->pixel_size;
 +
      for (i = width - 1; i >= 0; i--) {
  
-         if (!s->avctx->coded_frame->key_frame && !memcmp(this_line, prev_line, s->pixel_size))
 +        int prev_bulk_cost;
 +
 +        /* If our lowest bulk cost index is too far away, replace it
 +         * with the next lowest bulk cost */
 +        if (FFMIN(width, i + MAX_RLE_BULK) < lowest_bulk_cost_index) {
 +            lowest_bulk_cost = sec_lowest_bulk_cost;
 +            lowest_bulk_cost_index = sec_lowest_bulk_cost_index;
 +
 +            sec_lowest_bulk_cost = INT_MAX / 2;
 +            sec_lowest_bulk_cost_index = width;
 +        }
 +
 +        /* Deal with the first pixel's bulk cost */
 +        if (!i) {
 +            base_bulk_cost++;
 +            lowest_bulk_cost++;
 +            sec_lowest_bulk_cost++;
 +        }
 +
 +        /* Look at the bulk cost of the previous loop and see if it is
 +         * a new lower bulk cost */
 +        prev_bulk_cost = s->length_table[i + 1] + base_bulk_cost;
 +        if (prev_bulk_cost <= sec_lowest_bulk_cost) {
 +            /* If it's lower than the 2nd lowest, then it may be lower
 +             * than the lowest */
 +            if (prev_bulk_cost <= lowest_bulk_cost) {
 +
 +                /* If we have found a new lowest bulk cost,
 +                 * then the 2nd lowest bulk cost is now farther than the
 +                 * lowest bulk cost, and will never be used */
 +                sec_lowest_bulk_cost = INT_MAX / 2;
 +
 +                lowest_bulk_cost = prev_bulk_cost;
 +                lowest_bulk_cost_index = i + 1;
 +            } else {
 +                /* Then it must be the 2nd lowest bulk cost */
 +                sec_lowest_bulk_cost = prev_bulk_cost;
 +                sec_lowest_bulk_cost_index = i + 1;
 +            }
 +        }
 +
+         if (!s->key_frame && !memcmp(this_line, prev_line, s->pixel_size))
              skipcount = FFMIN(skipcount + 1, MAX_RLE_SKIP);
          else
              skipcount = 0;
@@@ -330,8 -266,8 +333,8 @@@ static int encode_frame(QtrleEncContex
      int end_line = s->avctx->height;
      uint8_t *orig_buf = buf;
  
-     if (!s->avctx->coded_frame->key_frame) {
+     if (!s->key_frame) {
 -        unsigned line_size = s->avctx->width * s->pixel_size;
 +        unsigned line_size = s->logical_width * s->pixel_size;
          for (start_line = 0; start_line < s->avctx->height; start_line++)
              if (memcmp(p->data[0] + start_line*p->linesize[0],
                         s->previous_frame.data[0] + start_line*s->previous_frame.linesize[0],
@@@ -368,11 -304,14 +371,11 @@@ static int qtrle_encode_frame(AVCodecCo
                                const AVFrame *pict, int *got_packet)
  {
      QtrleEncContext * const s = avctx->priv_data;
-     AVFrame * const p = avctx->coded_frame;
+     enum AVPictureType pict_type;
      int ret;
  
 -    if ((ret = ff_alloc_packet(pkt, s->max_buf_size)) < 0) {
 -        /* Upper bound check for compressed data */
 -        av_log(avctx, AV_LOG_ERROR, "Error getting output packet of size %d.\n", s->max_buf_size);
 +    if ((ret = ff_alloc_packet2(avctx, pkt, s->max_buf_size)) < 0)
          return ret;
 -    }
  
      if (avctx->gop_size == 0 || (s->avctx->frame_number % avctx->gop_size) == 0) {
          /* I-Frame */