ref: acd90b71657b2e8810c71321a057063fbb18fd28
parent: f4ad2720ec05bb9e58bc90fd9aecdf1727d4cd41
author: Luc Trudeau <ltrudeau@twoorioles.com>
date: Wed Oct 10 11:29:00 EDT 2018
Small clean up in loop filter code
--- a/src/lf_apply.c
+++ b/src/lf_apply.c
@@ -124,13 +124,12 @@
const int starty4, const int endy4)
{
const Dav1dDSPContext *const dsp = f->dsp;
- int y;
- ptrdiff_t off_l;
+ ptrdiff_t off_l = 0;
// block1
// filter edges between rows (e.g. ------)
// block2
- for (off_l = 0, y = starty4; y < endy4;
+ for (int y = starty4; y < endy4;
y++, off_l += 4 * PXSTRIDE(ls), lvl += b4_stride)
{
if (!have_top && !y) continue;
@@ -158,7 +157,7 @@
const int halign = (f->bh + 31) & ~31;
const int ss_ver = f->cur.p.p.layout == DAV1D_PIXEL_LAYOUT_I420;
const int ss_hor = f->cur.p.p.layout != DAV1D_PIXEL_LAYOUT_I444;
- const int endy4 = starty4 + imin(hy4 - sby * f->sb_step, sbsz);
+ const int endy4 = starty4 + imin(hy4 - sby * sbsz, sbsz);
const int uv_endy4 = (endy4 + ss_ver) >> ss_ver;
// fix lpf strength at tile col boundaries
--- a/src/lf_mask.c
+++ b/src/lf_mask.c
@@ -36,7 +36,7 @@
#include "src/lf_mask.h"
#include "src/tables.h"
-static void decomp_tx(uint8_t (*txa)[2 /* txsz, step */][32 /* y */][32 /* x */],
+static void decomp_tx(uint8_t (*const txa)[2 /* txsz, step */][32 /* y */][32 /* x */],
const enum RectTxfmSize from,
const int depth,
const int y_off, const int x_off,
@@ -43,15 +43,9 @@
const uint16_t *const tx_masks)
{
const TxfmInfo *const t_dim = &dav1d_txfm_dimensions[from];
- int is_split;
+ const int is_split =
+ depth > 1 ? 0 : (tx_masks[depth] >> (y_off * 4 + x_off)) & 1;
- if (depth > 1) {
- is_split = 0;
- } else {
- const int off = y_off * 4 + x_off;
- is_split = (tx_masks[depth] >> off) & 1;
- }
-
if (is_split) {
const enum RectTxfmSize sub = t_dim->sub;
const int htw4 = t_dim->w >> 1, hth4 = t_dim->h >> 1;
@@ -69,9 +63,8 @@
}
} else {
const int lw = imin(2, t_dim->lw), lh = imin(2, t_dim->lh);
- int y;
- for (y = 0; y < t_dim->h; y++) {
+ for (int y = 0; y < t_dim->h; y++) {
memset(txa[0][0][y], lw, t_dim->w);
memset(txa[1][0][y], lh, t_dim->w);
txa[0][1][y][0] = t_dim->w;
@@ -80,7 +73,7 @@
}
}
-static inline void mask_edges_inter(uint32_t (*masks)[32][3],
+static inline void mask_edges_inter(uint32_t (*const masks)[32][3],
const int by4, const int bx4,
const int w4, const int h4, const int skip,
const enum RectTxfmSize max_tx,
@@ -91,9 +84,8 @@
int y, x;
uint8_t txa[2 /* edge */][2 /* txsz, step */][32 /* y */][32 /* x */];
- int y_off, x_off;
- for (y_off = 0, y = 0; y < h4; y += t_dim->h, y_off++)
- for (x_off = 0, x = 0; x < w4; x += t_dim->w, x_off++)
+ for (int y_off = 0, y = 0; y < h4; y += t_dim->h, y_off++)
+ for (int x_off = 0, x = 0; x < w4; x += t_dim->w, x_off++)
decomp_tx((uint8_t(*)[2][32][32]) &txa[0][0][y][x],
max_tx, 0, y_off, x_off, tx_masks);
@@ -103,7 +95,7 @@
masks[0][bx4][imin(txa[0][0][y][0], l[y])] |= mask;
// top block edge
- for (mask = 1U << bx4, x = 0; x < w4; x++, mask <<= 1)
+ for (x = 0, mask = 1U << bx4; x < w4; x++, mask <<= 1)
masks[1][by4][imin(txa[1][0][0][x], a[x])] |= mask;
if (!skip) {
@@ -156,7 +148,7 @@
masks[0][bx4][imin(twl4c, l[y])] |= mask;
// top block edge
- for (mask = 1U << bx4, x = 0; x < w4; x++, mask <<= 1)
+ for (x = 0, mask = 1U << bx4; x < w4; x++, mask <<= 1)
masks[1][by4][imin(thl4c, a[x])] |= mask;
// inner (tx) left|right edges
@@ -197,7 +189,7 @@
masks[0][cbx4][imin(twl4c, l[y])] |= mask;
// top block edge
- for (mask = 1U << cbx4, x = 0; x < cw4; x++, mask <<= 1)
+ for (x = 0, mask = 1U << cbx4; x < cw4; x++, mask <<= 1)
masks[1][cby4][imin(thl4c, a[x])] |= mask;
if (!skip_inter) {
@@ -344,11 +336,9 @@
}
void dav1d_calc_eih(Av1FilterLUT *const lim_lut, const int filter_sharpness) {
- int level;
-
// set E/I/H values from loopfilter level
const int sharp = filter_sharpness;
- for (level = 0; level < 64; level++) {
+ for (int level = 0; level < 64; level++) {
int limit = level;
if (sharp > 0) {
@@ -364,10 +354,10 @@
lim_lut->sharp[1] = sharp ? 9 - sharp : 0xff;
}
-static void dav1d_calc_lf_value(uint8_t (*const lflvl_values)[2],
- const int is_chroma, const int base_lvl,
- const int lf_delta, const int seg_delta,
- const Av1LoopfilterModeRefDeltas *const mr_delta)
+static inline void calc_lf_value(uint8_t (*const lflvl_values)[2],
+ const int is_chroma, const int base_lvl,
+ const int lf_delta, const int seg_delta,
+ const Av1LoopfilterModeRefDeltas *const mr_delta)
{
const int base = iclip(iclip(base_lvl + lf_delta, 0, 63) + seg_delta, 0, 63);
@@ -407,16 +397,16 @@
const Av1SegmentationData *const segd =
hdr->segmentation.enabled ? &hdr->segmentation.seg_data.d[s] : NULL;
- dav1d_calc_lf_value(lflvl_values[s][0], 0, hdr->loopfilter.level_y[0],
- lf_delta[0], segd ? segd->delta_lf_y_v : 0, mr_deltas);
- dav1d_calc_lf_value(lflvl_values[s][1], 0, hdr->loopfilter.level_y[1],
- lf_delta[hdr->delta.lf.multi ? 1 : 0],
- segd ? segd->delta_lf_y_h : 0, mr_deltas);
- dav1d_calc_lf_value(lflvl_values[s][2], 1, hdr->loopfilter.level_u,
- lf_delta[hdr->delta.lf.multi ? 2 : 0],
- segd ? segd->delta_lf_u : 0, mr_deltas);
- dav1d_calc_lf_value(lflvl_values[s][3], 1, hdr->loopfilter.level_v,
- lf_delta[hdr->delta.lf.multi ? 3 : 0],
- segd ? segd->delta_lf_v : 0, mr_deltas);
+ calc_lf_value(lflvl_values[s][0], 0, hdr->loopfilter.level_y[0],
+ lf_delta[0], segd ? segd->delta_lf_y_v : 0, mr_deltas);
+ calc_lf_value(lflvl_values[s][1], 0, hdr->loopfilter.level_y[1],
+ lf_delta[hdr->delta.lf.multi ? 1 : 0],
+ segd ? segd->delta_lf_y_h : 0, mr_deltas);
+ calc_lf_value(lflvl_values[s][2], 1, hdr->loopfilter.level_u,
+ lf_delta[hdr->delta.lf.multi ? 2 : 0],
+ segd ? segd->delta_lf_u : 0, mr_deltas);
+ calc_lf_value(lflvl_values[s][3], 1, hdr->loopfilter.level_v,
+ lf_delta[hdr->delta.lf.multi ? 3 : 0],
+ segd ? segd->delta_lf_v : 0, mr_deltas);
}
}
--- a/src/loopfilter.c
+++ b/src/loopfilter.c
@@ -38,13 +38,12 @@
loop_filter(pixel *dst, int E, int I, int H,
const ptrdiff_t stridea, const ptrdiff_t strideb, const int wd)
{
- int i, F = 1 << (BITDEPTH - 8);
-
+ const int F = 1 << (BITDEPTH - 8);
E <<= BITDEPTH - 8;
I <<= BITDEPTH - 8;
H <<= BITDEPTH - 8;
- for (i = 0; i < 4; i++, dst += stridea) {
+ for (int i = 0; i < 4; i++, dst += stridea) {
int p6, p5, p4, p3, p2;
int p1 = dst[strideb * -2], p0 = dst[strideb * -1];
int q0 = dst[strideb * +0], q1 = dst[strideb * +1];
@@ -127,7 +126,7 @@
dst[strideb * +0] = (p1 + 2 * p0 + 2 * q0 + 2 * q1 + q2 + 4) >> 3;
dst[strideb * +1] = (p0 + 2 * q0 + 2 * q1 + 2 * q2 + q2 + 4) >> 3;
} else {
- int hev = abs(p1 - p0) > H || abs(q1 - q0) > H;
+ const int hev = abs(p1 - p0) > H || abs(q1 - q0) > H;
#define iclip_diff(v) iclip(v, -128 * (1 << (BITDEPTH - 8)), \
128 * (1 << (BITDEPTH - 8)) - 1)