mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-09 16:57:30 +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
73
third_party/aom/av1/encoder/pickrst.c
vendored
73
third_party/aom/av1/encoder/pickrst.c
vendored
|
|
@ -437,8 +437,8 @@ static double search_sgrproj(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
int width, height, src_stride, dgd_stride;
|
||||
uint8_t *dgd_buffer, *src_buffer;
|
||||
if (plane == AOM_PLANE_Y) {
|
||||
width = cm->width;
|
||||
height = cm->height;
|
||||
width = src->y_crop_width;
|
||||
height = src->y_crop_height;
|
||||
src_buffer = src->y_buffer;
|
||||
src_stride = src->y_stride;
|
||||
dgd_buffer = dgd->y_buffer;
|
||||
|
|
@ -478,7 +478,7 @@ static double search_sgrproj(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
(1 << plane));
|
||||
// #bits when a tile is not restored
|
||||
bits = av1_cost_bit(RESTORE_NONE_SGRPROJ_PROB, 0);
|
||||
cost_norestore = RDCOST_DBL(x->rdmult, x->rddiv, (bits >> 4), err);
|
||||
cost_norestore = RDCOST_DBL(x->rdmult, (bits >> 4), err);
|
||||
best_tile_cost[tile_idx] = DBL_MAX;
|
||||
search_selfguided_restoration(
|
||||
dgd_buffer + v_start * dgd_stride + h_start, h_end - h_start,
|
||||
|
|
@ -498,7 +498,7 @@ static double search_sgrproj(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
&ref_sgrproj_info)
|
||||
<< AV1_PROB_COST_SHIFT;
|
||||
bits += av1_cost_bit(RESTORE_NONE_SGRPROJ_PROB, 1);
|
||||
cost_sgrproj = RDCOST_DBL(x->rdmult, x->rddiv, (bits >> 4), err);
|
||||
cost_sgrproj = RDCOST_DBL(x->rdmult, (bits >> 4), err);
|
||||
if (cost_sgrproj >= cost_norestore) {
|
||||
type[tile_idx] = RESTORE_NONE;
|
||||
} else {
|
||||
|
|
@ -531,7 +531,7 @@ static double search_sgrproj(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
}
|
||||
err = try_restoration_frame(src, cpi, rsi, (1 << plane), partial_frame,
|
||||
dst_frame);
|
||||
cost_sgrproj = RDCOST_DBL(x->rdmult, x->rddiv, (bits >> 4), err);
|
||||
cost_sgrproj = RDCOST_DBL(x->rdmult, (bits >> 4), err);
|
||||
|
||||
return cost_sgrproj;
|
||||
}
|
||||
|
|
@ -985,8 +985,8 @@ static double search_wiener(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
int width, height, src_stride, dgd_stride;
|
||||
uint8_t *dgd_buffer, *src_buffer;
|
||||
if (plane == AOM_PLANE_Y) {
|
||||
width = cm->width;
|
||||
height = cm->height;
|
||||
width = src->y_crop_width;
|
||||
height = src->y_crop_height;
|
||||
src_buffer = src->y_buffer;
|
||||
src_stride = src->y_stride;
|
||||
dgd_buffer = dgd->y_buffer;
|
||||
|
|
@ -1039,7 +1039,7 @@ static double search_wiener(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
(1 << plane));
|
||||
// #bits when a tile is not restored
|
||||
bits = av1_cost_bit(RESTORE_NONE_WIENER_PROB, 0);
|
||||
cost_norestore = RDCOST_DBL(x->rdmult, x->rddiv, (bits >> 4), err);
|
||||
cost_norestore = RDCOST_DBL(x->rdmult, (bits >> 4), err);
|
||||
best_tile_cost[tile_idx] = DBL_MAX;
|
||||
|
||||
av1_get_rest_tile_limits(tile_idx, 0, 0, nhtiles, nvtiles, tile_width,
|
||||
|
|
@ -1081,7 +1081,7 @@ static double search_wiener(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
count_wiener_bits(&rsi[plane].wiener_info[tile_idx], &ref_wiener_info)
|
||||
<< AV1_PROB_COST_SHIFT;
|
||||
bits += av1_cost_bit(RESTORE_NONE_WIENER_PROB, 1);
|
||||
cost_wiener = RDCOST_DBL(x->rdmult, x->rddiv, (bits >> 4), err);
|
||||
cost_wiener = RDCOST_DBL(x->rdmult, (bits >> 4), err);
|
||||
if (cost_wiener >= cost_norestore) {
|
||||
type[tile_idx] = RESTORE_NONE;
|
||||
} else {
|
||||
|
|
@ -1114,7 +1114,7 @@ static double search_wiener(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
}
|
||||
err = try_restoration_frame(src, cpi, rsi, 1 << plane, partial_frame,
|
||||
dst_frame);
|
||||
cost_wiener = RDCOST_DBL(x->rdmult, x->rddiv, (bits >> 4), err);
|
||||
cost_wiener = RDCOST_DBL(x->rdmult, (bits >> 4), err);
|
||||
|
||||
return cost_wiener;
|
||||
}
|
||||
|
|
@ -1133,8 +1133,8 @@ static double search_norestore(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
int h_start, h_end, v_start, v_end;
|
||||
int width, height;
|
||||
if (plane == AOM_PLANE_Y) {
|
||||
width = cm->width;
|
||||
height = cm->height;
|
||||
width = src->y_crop_width;
|
||||
height = src->y_crop_height;
|
||||
} else {
|
||||
width = src->uv_crop_width;
|
||||
height = src->uv_crop_height;
|
||||
|
|
@ -1160,13 +1160,14 @@ static double search_norestore(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
// RD cost associated with no restoration
|
||||
err = sse_restoration_frame(cm, src, cm->frame_to_show, (1 << plane));
|
||||
bits = frame_level_restore_bits[RESTORE_NONE] << AV1_PROB_COST_SHIFT;
|
||||
cost_norestore = RDCOST_DBL(x->rdmult, x->rddiv, (bits >> 4), err);
|
||||
cost_norestore = RDCOST_DBL(x->rdmult, (bits >> 4), err);
|
||||
return cost_norestore;
|
||||
}
|
||||
|
||||
static double search_switchable_restoration(
|
||||
AV1_COMP *cpi, int partial_frame, int plane, RestorationInfo *rsi,
|
||||
double *tile_cost[RESTORE_SWITCHABLE_TYPES]) {
|
||||
const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi, int partial_frame, int plane,
|
||||
RestorationType *const restore_types[RESTORE_SWITCHABLE_TYPES],
|
||||
double *const tile_cost[RESTORE_SWITCHABLE_TYPES], RestorationInfo *rsi) {
|
||||
AV1_COMMON *const cm = &cpi->common;
|
||||
MACROBLOCK *x = &cpi->td.mb;
|
||||
double cost_switchable = 0;
|
||||
|
|
@ -1174,11 +1175,11 @@ static double search_switchable_restoration(
|
|||
RestorationType r;
|
||||
int width, height;
|
||||
if (plane == AOM_PLANE_Y) {
|
||||
width = cm->width;
|
||||
height = cm->height;
|
||||
width = src->y_crop_width;
|
||||
height = src->y_crop_height;
|
||||
} else {
|
||||
width = ROUND_POWER_OF_TWO(cm->width, cm->subsampling_x);
|
||||
height = ROUND_POWER_OF_TWO(cm->height, cm->subsampling_y);
|
||||
width = src->uv_crop_width;
|
||||
height = src->uv_crop_height;
|
||||
}
|
||||
const int ntiles = av1_get_rest_ntiles(
|
||||
width, height, cm->rst_info[plane].restoration_tilesize, NULL, NULL, NULL,
|
||||
|
|
@ -1192,16 +1193,17 @@ static double search_switchable_restoration(
|
|||
rsi->frame_restoration_type = RESTORE_SWITCHABLE;
|
||||
bits = frame_level_restore_bits[rsi->frame_restoration_type]
|
||||
<< AV1_PROB_COST_SHIFT;
|
||||
cost_switchable = RDCOST_DBL(x->rdmult, x->rddiv, bits >> 4, 0);
|
||||
cost_switchable = RDCOST_DBL(x->rdmult, bits >> 4, 0);
|
||||
for (tile_idx = 0; tile_idx < ntiles; ++tile_idx) {
|
||||
double best_cost = RDCOST_DBL(
|
||||
x->rdmult, x->rddiv, (cpi->switchable_restore_cost[RESTORE_NONE] >> 4),
|
||||
tile_cost[RESTORE_NONE][tile_idx]);
|
||||
double best_cost =
|
||||
RDCOST_DBL(x->rdmult, (cpi->switchable_restore_cost[RESTORE_NONE] >> 4),
|
||||
tile_cost[RESTORE_NONE][tile_idx]);
|
||||
rsi->restoration_type[tile_idx] = RESTORE_NONE;
|
||||
for (r = 1; r < RESTORE_SWITCHABLE_TYPES; r++) {
|
||||
if (force_restore_type != 0)
|
||||
if (r != force_restore_type) continue;
|
||||
int tilebits = 0;
|
||||
if (restore_types[r][tile_idx] != r) continue;
|
||||
if (r == RESTORE_WIENER)
|
||||
tilebits +=
|
||||
count_wiener_bits(&rsi->wiener_info[tile_idx], &ref_wiener_info);
|
||||
|
|
@ -1210,8 +1212,8 @@ static double search_switchable_restoration(
|
|||
count_sgrproj_bits(&rsi->sgrproj_info[tile_idx], &ref_sgrproj_info);
|
||||
tilebits <<= AV1_PROB_COST_SHIFT;
|
||||
tilebits += cpi->switchable_restore_cost[r];
|
||||
double cost = RDCOST_DBL(x->rdmult, x->rddiv, tilebits >> 4,
|
||||
tile_cost[r][tile_idx]);
|
||||
double cost =
|
||||
RDCOST_DBL(x->rdmult, tilebits >> 4, tile_cost[r][tile_idx]);
|
||||
|
||||
if (cost < best_cost) {
|
||||
rsi->restoration_type[tile_idx] = r;
|
||||
|
|
@ -1243,14 +1245,17 @@ void av1_pick_filter_restoration(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
RestorationType *restore_types[RESTORE_SWITCHABLE_TYPES];
|
||||
double best_cost_restore;
|
||||
RestorationType r, best_restore;
|
||||
const int ywidth = src->y_crop_width;
|
||||
const int yheight = src->y_crop_height;
|
||||
const int uvwidth = src->uv_crop_width;
|
||||
const int uvheight = src->uv_crop_height;
|
||||
|
||||
const int ntiles_y = av1_get_rest_ntiles(cm->width, cm->height,
|
||||
cm->rst_info[0].restoration_tilesize,
|
||||
NULL, NULL, NULL, NULL);
|
||||
const int ntiles_y =
|
||||
av1_get_rest_ntiles(ywidth, yheight, cm->rst_info[0].restoration_tilesize,
|
||||
NULL, NULL, NULL, NULL);
|
||||
const int ntiles_uv = av1_get_rest_ntiles(
|
||||
ROUND_POWER_OF_TWO(cm->width, cm->subsampling_x),
|
||||
ROUND_POWER_OF_TWO(cm->height, cm->subsampling_y),
|
||||
cm->rst_info[1].restoration_tilesize, NULL, NULL, NULL, NULL);
|
||||
uvwidth, uvheight, cm->rst_info[1].restoration_tilesize, NULL, NULL, NULL,
|
||||
NULL);
|
||||
|
||||
// Assume ntiles_uv is never larger that ntiles_y and so the same arrays work.
|
||||
for (r = 0; r < RESTORE_SWITCHABLE_TYPES; r++) {
|
||||
|
|
@ -1270,9 +1275,9 @@ void av1_pick_filter_restoration(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
|
|||
tile_cost[r], &cpi->trial_frame_rst);
|
||||
}
|
||||
if (plane == AOM_PLANE_Y)
|
||||
cost_restore[RESTORE_SWITCHABLE] =
|
||||
search_switchable_restoration(cpi, method == LPF_PICK_FROM_SUBIMAGE,
|
||||
plane, &cm->rst_info[plane], tile_cost);
|
||||
cost_restore[RESTORE_SWITCHABLE] = search_switchable_restoration(
|
||||
src, cpi, method == LPF_PICK_FROM_SUBIMAGE, plane, restore_types,
|
||||
tile_cost, &cm->rst_info[plane]);
|
||||
else
|
||||
cost_restore[RESTORE_SWITCHABLE] = DBL_MAX;
|
||||
best_cost_restore = DBL_MAX;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue