Example #1
0
static void peak__frame(filter *filt, const y4m2_parameters *parms,
                        y4m2_frame *frame) {
  peak__work *wrk = filt->ctx;

  if (!wrk->acc) {
    wrk->acc = jd_alloc(frame->i.size * sizeof(double));
    for (unsigned p = 0; p < Y4M2_N_PLANE; p++)
      wrk->scale[p] = 1;
  }

  uint8_t *fp = frame->buf;
  double *ap = wrk->acc;
  double *sp = wrk->scale;

  for (unsigned p = 0; p < Y4M2_N_PLANE; p++) {
    if (model_get_int(&filt->config, 0, "$.options.%s.disabled",
                      plane_key[p])) {
      ap += frame->i.plane[p].size;
      fp += frame->i.plane[p].size;
      sp++;
    } else {
      double decay =
          model_get_real(&filt->config, 0, "$.options.%s.decay", plane_key[p]);
      double scale = *sp;
      for (unsigned i = 0; i < frame->i.plane[p].size; i++) {
        double sample = *fp;
        double next = (*ap = *ap * decay + sample) / scale;
        ap++;
        *fp++ = (uint8_t)(sample > next ? sample : next);
      }
      *sp++ = scale * decay + 1;
    }
  }

  y4m2_emit_frame(filt->out, parms, frame);
}
Example #2
0
void average_config(average *avg, jd_var *v, const char *ns) {
  average_init(avg,
               model_get_real(v, 0, "$.%s_decay", ns),
               model_get_real(v, 1, "$.%s_ow", ns),
               model_get_real(v, 1, "$.%s_nw", ns));
}