mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-12 18:27:32 +09:00
Update aom to commit id f5bdeac22930ff4c6b219be49c843db35970b918
This commit is contained in:
parent
e329bc4331
commit
2ab8fcbfd1
370 changed files with 56185 additions and 32026 deletions
102
third_party/aom/av1/encoder/pickcdef.c
vendored
102
third_party/aom/av1/encoder/pickcdef.c
vendored
|
|
@ -19,13 +19,19 @@
|
|||
#include "av1/common/reconinter.h"
|
||||
#include "av1/encoder/encoder.h"
|
||||
|
||||
#define REDUCED_STRENGTHS 8
|
||||
#define REDUCED_TOTAL_STRENGTHS (REDUCED_STRENGTHS * CLPF_STRENGTHS)
|
||||
#define TOTAL_STRENGTHS (DERING_STRENGTHS * CLPF_STRENGTHS)
|
||||
|
||||
static int priconv[REDUCED_STRENGTHS] = { 0, 1, 2, 3, 4, 7, 12, 25 };
|
||||
|
||||
/* Search for the best strength to add as an option, knowing we
|
||||
already selected nb_strengths options. */
|
||||
static uint64_t search_one(int *lev, int nb_strengths,
|
||||
uint64_t mse[][TOTAL_STRENGTHS], int sb_count) {
|
||||
uint64_t mse[][TOTAL_STRENGTHS], int sb_count,
|
||||
int fast) {
|
||||
uint64_t tot_mse[TOTAL_STRENGTHS];
|
||||
const int total_strengths = fast ? REDUCED_TOTAL_STRENGTHS : TOTAL_STRENGTHS;
|
||||
int i, j;
|
||||
uint64_t best_tot_mse = (uint64_t)1 << 63;
|
||||
int best_id = 0;
|
||||
|
|
@ -40,13 +46,13 @@ static uint64_t search_one(int *lev, int nb_strengths,
|
|||
}
|
||||
}
|
||||
/* Find best mse when adding each possible new option. */
|
||||
for (j = 0; j < TOTAL_STRENGTHS; j++) {
|
||||
for (j = 0; j < total_strengths; j++) {
|
||||
uint64_t best = best_mse;
|
||||
if (mse[i][j] < best) best = mse[i][j];
|
||||
tot_mse[j] += best;
|
||||
}
|
||||
}
|
||||
for (j = 0; j < TOTAL_STRENGTHS; j++) {
|
||||
for (j = 0; j < total_strengths; j++) {
|
||||
if (tot_mse[j] < best_tot_mse) {
|
||||
best_tot_mse = tot_mse[j];
|
||||
best_id = j;
|
||||
|
|
@ -59,9 +65,10 @@ static uint64_t search_one(int *lev, int nb_strengths,
|
|||
/* Search for the best luma+chroma strength to add as an option, knowing we
|
||||
already selected nb_strengths options. */
|
||||
static uint64_t search_one_dual(int *lev0, int *lev1, int nb_strengths,
|
||||
uint64_t (**mse)[TOTAL_STRENGTHS],
|
||||
int sb_count) {
|
||||
uint64_t (**mse)[TOTAL_STRENGTHS], int sb_count,
|
||||
int fast) {
|
||||
uint64_t tot_mse[TOTAL_STRENGTHS][TOTAL_STRENGTHS];
|
||||
const int total_strengths = fast ? REDUCED_TOTAL_STRENGTHS : TOTAL_STRENGTHS;
|
||||
int i, j;
|
||||
uint64_t best_tot_mse = (uint64_t)1 << 63;
|
||||
int best_id0 = 0;
|
||||
|
|
@ -79,9 +86,9 @@ static uint64_t search_one_dual(int *lev0, int *lev1, int nb_strengths,
|
|||
}
|
||||
}
|
||||
/* Find best mse when adding each possible new option. */
|
||||
for (j = 0; j < TOTAL_STRENGTHS; j++) {
|
||||
for (j = 0; j < total_strengths; j++) {
|
||||
int k;
|
||||
for (k = 0; k < TOTAL_STRENGTHS; k++) {
|
||||
for (k = 0; k < total_strengths; k++) {
|
||||
uint64_t best = best_mse;
|
||||
uint64_t curr = mse[0][i][j];
|
||||
curr += mse[1][i][k];
|
||||
|
|
@ -90,9 +97,9 @@ static uint64_t search_one_dual(int *lev0, int *lev1, int nb_strengths,
|
|||
}
|
||||
}
|
||||
}
|
||||
for (j = 0; j < TOTAL_STRENGTHS; j++) {
|
||||
for (j = 0; j < total_strengths; j++) {
|
||||
int k;
|
||||
for (k = 0; k < TOTAL_STRENGTHS; k++) {
|
||||
for (k = 0; k < total_strengths; k++) {
|
||||
if (tot_mse[j][k] < best_tot_mse) {
|
||||
best_tot_mse = tot_mse[j][k];
|
||||
best_id0 = j;
|
||||
|
|
@ -108,20 +115,23 @@ static uint64_t search_one_dual(int *lev0, int *lev1, int nb_strengths,
|
|||
/* Search for the set of strengths that minimizes mse. */
|
||||
static uint64_t joint_strength_search(int *best_lev, int nb_strengths,
|
||||
uint64_t mse[][TOTAL_STRENGTHS],
|
||||
int sb_count) {
|
||||
int sb_count, int fast) {
|
||||
uint64_t best_tot_mse;
|
||||
int i;
|
||||
best_tot_mse = (uint64_t)1 << 63;
|
||||
/* Greedy search: add one strength options at a time. */
|
||||
for (i = 0; i < nb_strengths; i++) {
|
||||
best_tot_mse = search_one(best_lev, i, mse, sb_count);
|
||||
best_tot_mse = search_one(best_lev, i, mse, sb_count, fast);
|
||||
}
|
||||
/* Trying to refine the greedy search by reconsidering each
|
||||
already-selected option. */
|
||||
for (i = 0; i < 4 * nb_strengths; i++) {
|
||||
int j;
|
||||
for (j = 0; j < nb_strengths - 1; j++) best_lev[j] = best_lev[j + 1];
|
||||
best_tot_mse = search_one(best_lev, nb_strengths - 1, mse, sb_count);
|
||||
if (!fast) {
|
||||
for (i = 0; i < 4 * nb_strengths; i++) {
|
||||
int j;
|
||||
for (j = 0; j < nb_strengths - 1; j++) best_lev[j] = best_lev[j + 1];
|
||||
best_tot_mse =
|
||||
search_one(best_lev, nb_strengths - 1, mse, sb_count, fast);
|
||||
}
|
||||
}
|
||||
return best_tot_mse;
|
||||
}
|
||||
|
|
@ -130,13 +140,14 @@ static uint64_t joint_strength_search(int *best_lev, int nb_strengths,
|
|||
static uint64_t joint_strength_search_dual(int *best_lev0, int *best_lev1,
|
||||
int nb_strengths,
|
||||
uint64_t (**mse)[TOTAL_STRENGTHS],
|
||||
int sb_count) {
|
||||
int sb_count, int fast) {
|
||||
uint64_t best_tot_mse;
|
||||
int i;
|
||||
best_tot_mse = (uint64_t)1 << 63;
|
||||
/* Greedy search: add one strength options at a time. */
|
||||
for (i = 0; i < nb_strengths; i++) {
|
||||
best_tot_mse = search_one_dual(best_lev0, best_lev1, i, mse, sb_count);
|
||||
best_tot_mse =
|
||||
search_one_dual(best_lev0, best_lev1, i, mse, sb_count, fast);
|
||||
}
|
||||
/* Trying to refine the greedy search by reconsidering each
|
||||
already-selected option. */
|
||||
|
|
@ -146,8 +157,8 @@ static uint64_t joint_strength_search_dual(int *best_lev0, int *best_lev1,
|
|||
best_lev0[j] = best_lev0[j + 1];
|
||||
best_lev1[j] = best_lev1[j + 1];
|
||||
}
|
||||
best_tot_mse =
|
||||
search_one_dual(best_lev0, best_lev1, nb_strengths - 1, mse, sb_count);
|
||||
best_tot_mse = search_one_dual(best_lev0, best_lev1, nb_strengths - 1, mse,
|
||||
sb_count, fast);
|
||||
}
|
||||
return best_tot_mse;
|
||||
}
|
||||
|
|
@ -269,12 +280,12 @@ uint64_t compute_dering_dist(uint16_t *dst, int dstride, uint16_t *src,
|
|||
}
|
||||
|
||||
void av1_cdef_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
|
||||
AV1_COMMON *cm, MACROBLOCKD *xd) {
|
||||
AV1_COMMON *cm, MACROBLOCKD *xd, int fast) {
|
||||
int r, c;
|
||||
int sbr, sbc;
|
||||
uint16_t *src[3];
|
||||
uint16_t *ref_coeff[3];
|
||||
dering_list dlist[MAX_MIB_SIZE * MAX_MIB_SIZE];
|
||||
dering_list dlist[MI_SIZE_64X64 * MI_SIZE_64X64];
|
||||
int dir[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS] = { { 0 } };
|
||||
int var[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS] = { { 0 } };
|
||||
int stride[3];
|
||||
|
|
@ -289,8 +300,8 @@ void av1_cdef_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
|
|||
uint64_t best_tot_mse = (uint64_t)1 << 63;
|
||||
uint64_t tot_mse;
|
||||
int sb_count;
|
||||
int nvsb = (cm->mi_rows + MAX_MIB_SIZE - 1) / MAX_MIB_SIZE;
|
||||
int nhsb = (cm->mi_cols + MAX_MIB_SIZE - 1) / MAX_MIB_SIZE;
|
||||
int nvsb = (cm->mi_rows + MI_SIZE_64X64 - 1) / MI_SIZE_64X64;
|
||||
int nhsb = (cm->mi_cols + MI_SIZE_64X64 - 1) / MI_SIZE_64X64;
|
||||
int *sb_index = aom_malloc(nvsb * nhsb * sizeof(*sb_index));
|
||||
int *selected_strength = aom_malloc(nvsb * nhsb * sizeof(*sb_index));
|
||||
uint64_t(*mse[2])[TOTAL_STRENGTHS];
|
||||
|
|
@ -302,6 +313,7 @@ void av1_cdef_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
|
|||
int quantizer;
|
||||
double lambda;
|
||||
int nplanes = 3;
|
||||
const int total_strengths = fast ? REDUCED_TOTAL_STRENGTHS : TOTAL_STRENGTHS;
|
||||
DECLARE_ALIGNED(32, uint16_t, inbuf[OD_DERING_INBUF_SIZE]);
|
||||
uint16_t *in;
|
||||
DECLARE_ALIGNED(32, uint16_t, tmp_dst[MAX_SB_SQUARE]);
|
||||
|
|
@ -375,22 +387,23 @@ void av1_cdef_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
|
|||
int nvb, nhb;
|
||||
int gi;
|
||||
int dirinit = 0;
|
||||
nhb = AOMMIN(MAX_MIB_SIZE, cm->mi_cols - MAX_MIB_SIZE * sbc);
|
||||
nvb = AOMMIN(MAX_MIB_SIZE, cm->mi_rows - MAX_MIB_SIZE * sbr);
|
||||
cm->mi_grid_visible[MAX_MIB_SIZE * sbr * cm->mi_stride +
|
||||
MAX_MIB_SIZE * sbc]
|
||||
nhb = AOMMIN(MI_SIZE_64X64, cm->mi_cols - MI_SIZE_64X64 * sbc);
|
||||
nvb = AOMMIN(MI_SIZE_64X64, cm->mi_rows - MI_SIZE_64X64 * sbr);
|
||||
cm->mi_grid_visible[MI_SIZE_64X64 * sbr * cm->mi_stride +
|
||||
MI_SIZE_64X64 * sbc]
|
||||
->mbmi.cdef_strength = -1;
|
||||
if (sb_all_skip(cm, sbr * MAX_MIB_SIZE, sbc * MAX_MIB_SIZE)) continue;
|
||||
dering_count = sb_compute_dering_list(cm, sbr * MAX_MIB_SIZE,
|
||||
sbc * MAX_MIB_SIZE, dlist, 1);
|
||||
if (sb_all_skip(cm, sbr * MI_SIZE_64X64, sbc * MI_SIZE_64X64)) continue;
|
||||
dering_count = sb_compute_dering_list(cm, sbr * MI_SIZE_64X64,
|
||||
sbc * MI_SIZE_64X64, dlist, 1);
|
||||
for (pli = 0; pli < nplanes; pli++) {
|
||||
for (i = 0; i < OD_DERING_INBUF_SIZE; i++)
|
||||
inbuf[i] = OD_DERING_VERY_LARGE;
|
||||
for (gi = 0; gi < TOTAL_STRENGTHS; gi++) {
|
||||
for (gi = 0; gi < total_strengths; gi++) {
|
||||
int threshold;
|
||||
uint64_t curr_mse;
|
||||
int clpf_strength;
|
||||
threshold = gi / CLPF_STRENGTHS;
|
||||
if (fast) threshold = priconv[threshold];
|
||||
if (pli > 0 && !chroma_dering) threshold = 0;
|
||||
/* We avoid filtering the pixels for which some of the pixels to
|
||||
average
|
||||
|
|
@ -406,8 +419,8 @@ void av1_cdef_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
|
|||
if (clpf_strength == 0)
|
||||
copy_sb16_16(&in[(-yoff * OD_FILT_BSTRIDE - xoff)], OD_FILT_BSTRIDE,
|
||||
src[pli],
|
||||
(sbr * MAX_MIB_SIZE << mi_high_l2[pli]) - yoff,
|
||||
(sbc * MAX_MIB_SIZE << mi_wide_l2[pli]) - xoff,
|
||||
(sbr * MI_SIZE_64X64 << mi_high_l2[pli]) - yoff,
|
||||
(sbc * MI_SIZE_64X64 << mi_wide_l2[pli]) - xoff,
|
||||
stride[pli], ysize, xsize);
|
||||
od_dering(clpf_strength ? NULL : (uint8_t *)in, OD_FILT_BSTRIDE,
|
||||
tmp_dst, in, xdec[pli], ydec[pli], dir, &dirinit, var, pli,
|
||||
|
|
@ -416,8 +429,8 @@ void av1_cdef_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
|
|||
dering_damping, coeff_shift, clpf_strength != 0, 1);
|
||||
curr_mse = compute_dering_dist(
|
||||
ref_coeff[pli] +
|
||||
(sbr * MAX_MIB_SIZE << mi_high_l2[pli]) * stride[pli] +
|
||||
(sbc * MAX_MIB_SIZE << mi_wide_l2[pli]),
|
||||
(sbr * MI_SIZE_64X64 << mi_high_l2[pli]) * stride[pli] +
|
||||
(sbc * MI_SIZE_64X64 << mi_wide_l2[pli]),
|
||||
stride[pli], tmp_dst, dlist, dering_count, bsize[pli],
|
||||
coeff_shift, pli);
|
||||
if (pli < 2)
|
||||
|
|
@ -425,7 +438,7 @@ void av1_cdef_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
|
|||
else
|
||||
mse[1][sb_count][gi] += curr_mse;
|
||||
sb_index[sb_count] =
|
||||
MAX_MIB_SIZE * sbr * cm->mi_stride + MAX_MIB_SIZE * sbc;
|
||||
MI_SIZE_64X64 * sbr * cm->mi_stride + MI_SIZE_64X64 * sbc;
|
||||
}
|
||||
}
|
||||
sb_count++;
|
||||
|
|
@ -440,10 +453,10 @@ void av1_cdef_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
|
|||
nb_strengths = 1 << i;
|
||||
if (nplanes >= 3)
|
||||
tot_mse = joint_strength_search_dual(best_lev0, best_lev1, nb_strengths,
|
||||
mse, sb_count);
|
||||
mse, sb_count, fast);
|
||||
else
|
||||
tot_mse =
|
||||
joint_strength_search(best_lev0, nb_strengths, mse[0], sb_count);
|
||||
tot_mse = joint_strength_search(best_lev0, nb_strengths, mse[0], sb_count,
|
||||
fast);
|
||||
/* Count superblock signalling cost. */
|
||||
tot_mse += (uint64_t)(sb_count * lambda * i);
|
||||
/* Count header signalling cost. */
|
||||
|
|
@ -477,6 +490,17 @@ void av1_cdef_search(YV12_BUFFER_CONFIG *frame, const YV12_BUFFER_CONFIG *ref,
|
|||
selected_strength[i] = best_gi;
|
||||
cm->mi_grid_visible[sb_index[i]]->mbmi.cdef_strength = best_gi;
|
||||
}
|
||||
|
||||
if (fast) {
|
||||
for (int j = 0; j < nb_strengths; j++) {
|
||||
cm->cdef_strengths[j] =
|
||||
priconv[cm->cdef_strengths[j] / CLPF_STRENGTHS] * CLPF_STRENGTHS +
|
||||
(cm->cdef_strengths[j] % CLPF_STRENGTHS);
|
||||
cm->cdef_uv_strengths[j] =
|
||||
priconv[cm->cdef_uv_strengths[j] / CLPF_STRENGTHS] * CLPF_STRENGTHS +
|
||||
(cm->cdef_uv_strengths[j] % CLPF_STRENGTHS);
|
||||
}
|
||||
}
|
||||
cm->cdef_dering_damping = dering_damping;
|
||||
cm->cdef_clpf_damping = clpf_damping;
|
||||
aom_free(mse[0]);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue