Merge commit '0352ff102d62ee94e79e0baaf64d5ad4e66f907b'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 6 Jan 2015 21:03:57 +0000 (22:03 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 6 Jan 2015 21:05:06 +0000 (22:05 +0100)
* commit '0352ff102d62ee94e79e0baaf64d5ad4e66f907b':
  ffv1: const correctness for encode_rgb_frame()

Conflicts:
libavcodec/ffv1enc.c

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

@@@ -402,10 -291,10 +402,11 @@@ static int encode_plane(FFV1Context *s
          }
  // STOP_TIMER("encode line") }
      }
 +    return 0;
  }
  
- static int encode_rgb_frame(FFV1Context *s, uint8_t *src[3], int w, int h, const int stride[3])
 -static void encode_rgb_frame(FFV1Context *s, const uint8_t *src[3],
++static int encode_rgb_frame(FFV1Context *s, const uint8_t *src[3],
+                              int w, int h, const int stride[3])
  {
      int x, y, p, i;
      const int ring_size = s->avctx->context_model ? 3 : 2;
          for (x = 0; x < w; x++) {
              int b, g, r, av_uninit(a);
              if (lbd) {
-                 unsigned v = *((uint32_t*)(src[0] + x*4 + stride[0]*y));
 -                unsigned v = *((const uint32_t *)(src[0] + x * 4 + stride[0] * y));
 -                b = v & 0xFF;
 -                g = (v >> 8) & 0xFF;
++                unsigned v = *((const uint32_t*)(src[0] + x*4 + stride[0]*y));
 +                b =  v        & 0xFF;
 +                g = (v >>  8) & 0xFF;
                  r = (v >> 16) & 0xFF;
 -                a = v >> 24;
 +                a =  v >> 24;
              } else {
-                 b = *((uint16_t*)(src[0] + x*2 + stride[0]*y));
-                 g = *((uint16_t*)(src[1] + x*2 + stride[1]*y));
-                 r = *((uint16_t*)(src[2] + x*2 + stride[2]*y));
 -                b = *((const uint16_t *)(src[0] + x * 2 + stride[0] * y));
 -                g = *((const uint16_t *)(src[1] + x * 2 + stride[1] * y));
 -                r = *((const uint16_t *)(src[2] + x * 2 + stride[2] * y));
++                b = *((const uint16_t *)(src[0] + x*2 + stride[0]*y));
++                g = *((const uint16_t *)(src[1] + x*2 + stride[1]*y));
++                r = *((const uint16_t *)(src[2] + x*2 + stride[2]*y));
              }
  
 -            b -= g;
 -            r -= g;
 -            g += (b + r) >> 2;
 -            b += offset;
 -            r += offset;
 +            if (s->slice_coding_mode != 1) {
 +                b -= g;
 +                r -= g;
 +                g += (b * s->slice_rct_by_coef + r * s->slice_rct_ry_coef) >> 2;
 +                b += offset;
 +                r += offset;
 +            }
  
              sample[0][0][x] = g;
              sample[1][0][x] = b;
@@@ -1106,23 -879,11 +1107,23 @@@ static int encode_slice(AVCodecContext 
      int height       = fs->slice_height;
      int x            = fs->slice_x;
      int y            = fs->slice_y;
 -    const AVFrame *const p = f->frame;
 -    const int ps     = (av_pix_fmt_desc_get(c->pix_fmt)->flags & AV_PIX_FMT_FLAG_PLANAR)
 -                       ? (f->bits_per_raw_sample > 8) + 1
 -                       : 4;
 +    const AVFrame *const p = f->picture.f;
 +    const int ps     = av_pix_fmt_desc_get(c->pix_fmt)->comp[0].step_minus1 + 1;
 +    int ret;
 +    RangeCoder c_bak = fs->c;
-     uint8_t *planes[3] = {p->data[0] + ps*x + y*p->linesize[0],
-                           p->data[1] + ps*x + y*p->linesize[1],
-                           p->data[2] + ps*x + y*p->linesize[2]};
++    const uint8_t *planes[3] = {p->data[0] + ps*x + y*p->linesize[0],
++                                p->data[1] + ps*x + y*p->linesize[1],
++                                p->data[2] + ps*x + y*p->linesize[2]};
 +
 +    fs->slice_coding_mode = 0;
 +    if (f->version > 3) {
 +        choose_rct_params(fs, planes, p->linesize, width, height);
 +    } else {
 +        fs->slice_rct_by_coef = 1;
 +        fs->slice_rct_ry_coef = 1;
 +    }
  
 +retry:
      if (c->coded_frame->key_frame)
          ffv1_clear_slice_state(f, fs);
      if (f->version > 2) {