Commit b3c43bc0 authored by Debargha Mukherjee's avatar Debargha Mukherjee

Add a macro to control use of domain txfm filter

Allows DomainTxfm filters to be turned off for experimentation.
Also expands the parameter set for the Self guided filters.

Change-Id: I68fdb8e079a2464d80b3a4a990005c49baaaf0b8
parent 0be0aa13
......@@ -1072,6 +1072,7 @@ static const aom_prob default_tx_size_prob[MAX_TX_DEPTH][TX_SIZE_CONTEXTS]
};
#if CONFIG_LOOP_RESTORATION
#if USE_DOMAINTXFMRF
const aom_tree_index av1_switchable_restore_tree[TREE_SIZE(
RESTORE_SWITCHABLE_TYPES)] = {
-RESTORE_NONE, 2, -RESTORE_WIENER, 4, -RESTORE_SGRPROJ, -RESTORE_DOMAINTXFMRF,
......@@ -1081,6 +1082,17 @@ static const aom_prob
default_switchable_restore_prob[RESTORE_SWITCHABLE_TYPES - 1] = {
32, 128, 128,
};
#else
const aom_tree_index
av1_switchable_restore_tree[TREE_SIZE(RESTORE_SWITCHABLE_TYPES)] = {
-RESTORE_NONE, 2, -RESTORE_WIENER, -RESTORE_SGRPROJ,
};
static const aom_prob
default_switchable_restore_prob[RESTORE_SWITCHABLE_TYPES - 1] = {
32, 128,
};
#endif // USE_DOMAINTXFMRF
#endif // CONFIG_LOOP_RESTORATION
#if CONFIG_PALETTE
......
......@@ -504,12 +504,15 @@ typedef uint8_t TXFM_CONTEXT;
#endif // CONFIG_SUPERTX
#if CONFIG_LOOP_RESTORATION
#define USE_DOMAINTXFMRF 1
typedef enum {
RESTORE_NONE = 0,
RESTORE_WIENER = 1,
RESTORE_SGRPROJ = 2,
#if USE_DOMAINTXFMRF
RESTORE_DOMAINTXFMRF = 3,
RESTORE_SWITCHABLE = 4,
#endif // USE_DOMAINTXFMRF
RESTORE_SWITCHABLE,
RESTORE_SWITCHABLE_TYPES = RESTORE_SWITCHABLE,
RESTORE_TYPES,
} RestorationType;
......
......@@ -21,6 +21,7 @@
#include "aom_mem/aom_mem.h"
#include "aom_ports/mem.h"
#if USE_DOMAINTXFMRF
static int domaintxfmrf_vtable[DOMAINTXFMRF_ITERS][DOMAINTXFMRF_PARAMS][256];
static const int domaintxfmrf_params[DOMAINTXFMRF_PARAMS] = {
......@@ -30,11 +31,19 @@ static const int domaintxfmrf_params[DOMAINTXFMRF_PARAMS] = {
119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 130, 132, 134,
136, 138, 140, 142, 146, 150, 154, 158, 162, 166, 170, 174
};
#endif // USE_DOMAINTXFMRF
const sgr_params_type sgr_params[SGRPROJ_PARAMS] = {
// r1, eps1, r2, eps2
// r1, eps1, r2, eps2
#if SGRPROJ_PARAMS_BITS == 3
{ 2, 25, 1, 11 }, { 2, 35, 1, 12 }, { 2, 45, 1, 13 }, { 2, 55, 1, 14 },
{ 2, 65, 1, 15 }, { 3, 50, 2, 25 }, { 3, 60, 2, 35 }, { 3, 70, 2, 45 },
#elif SGRPROJ_PARAMS_BITS == 4
{ 2, 12, 1, 4 }, { 2, 15, 1, 6 }, { 2, 18, 1, 8 }, { 2, 20, 1, 9 },
{ 2, 22, 1, 10 }, { 2, 25, 1, 11 }, { 2, 35, 1, 12 }, { 2, 45, 1, 13 },
{ 2, 55, 1, 14 }, { 2, 65, 1, 15 }, { 2, 75, 1, 16 }, { 3, 30, 1, 10 },
{ 3, 50, 1, 12 }, { 3, 50, 2, 25 }, { 3, 60, 2, 35 }, { 3, 70, 2, 45 },
#endif // SGRPROJ_PARAMS_BITS == 3
};
typedef void (*restore_func_type)(uint8_t *data8, int width, int height,
......@@ -61,6 +70,7 @@ int av1_alloc_restoration_struct(AV1_COMMON *cm, RestorationInfo *rst_info,
cm, rst_info->sgrproj_info,
(SgrprojInfo *)aom_realloc(rst_info->sgrproj_info,
sizeof(*rst_info->sgrproj_info) * ntiles));
#if USE_DOMAINTXFMRF
rst_info->domaintxfmrf_info = (DomaintxfmrfInfo *)aom_realloc(
rst_info->domaintxfmrf_info,
sizeof(*rst_info->domaintxfmrf_info) * ntiles);
......@@ -68,6 +78,7 @@ int av1_alloc_restoration_struct(AV1_COMMON *cm, RestorationInfo *rst_info,
(DomaintxfmrfInfo *)aom_realloc(
rst_info->domaintxfmrf_info,
sizeof(*rst_info->domaintxfmrf_info) * ntiles));
#endif // USE_DOMAINTXFMRF
return ntiles;
}
......@@ -78,10 +89,13 @@ void av1_free_restoration_struct(RestorationInfo *rst_info) {
rst_info->wiener_info = NULL;
aom_free(rst_info->sgrproj_info);
rst_info->sgrproj_info = NULL;
#if USE_DOMAINTXFMRF
aom_free(rst_info->domaintxfmrf_info);
rst_info->domaintxfmrf_info = NULL;
#endif // USE_DOMAINTXFMRF
}
#if USE_DOMAINTXFMRF
static void GenDomainTxfmRFVtable() {
int i, j;
const double sigma_s = sqrt(2.0);
......@@ -100,8 +114,13 @@ static void GenDomainTxfmRFVtable() {
}
}
}
#endif // USE_DOMAINTXFMRF
void av1_loop_restoration_precal() { GenDomainTxfmRFVtable(); }
void av1_loop_restoration_precal() {
#if USE_DOMAINTXFMRF
GenDomainTxfmRFVtable();
#endif // USE_DOMAINTXFMRF
}
static void loop_restoration_init(RestorationInternal *rst, int kf) {
rst->keyframe = kf;
......@@ -796,6 +815,7 @@ static void loop_sgrproj_filter(uint8_t *data, int width, int height,
}
}
#if USE_DOMAINTXFMRF
static void apply_domaintxfmrf(int iter, int param, uint8_t *diff_right,
uint8_t *diff_down, int width, int height,
int32_t *dat, int dat_stride) {
......@@ -952,6 +972,7 @@ static void loop_domaintxfmrf_filter(uint8_t *data, int width, int height,
dst, dst_stride);
}
}
#endif // USE_DOMAINTXFMRF
static void loop_switchable_filter(uint8_t *data, int width, int height,
int stride, RestorationInternal *rst,
......@@ -968,9 +989,11 @@ static void loop_switchable_filter(uint8_t *data, int width, int height,
} else if (rst->rsi->restoration_type[tile_idx] == RESTORE_SGRPROJ) {
loop_sgrproj_filter_tile(data, tile_idx, width, height, stride, rst, dst,
dst_stride);
#if USE_DOMAINTXFMRF
} else if (rst->rsi->restoration_type[tile_idx] == RESTORE_DOMAINTXFMRF) {
loop_domaintxfmrf_filter_tile(data, tile_idx, width, height, stride, rst,
dst, dst_stride);
#endif // USE_DOMAINTXFMRF
}
}
}
......@@ -1134,6 +1157,7 @@ static void loop_sgrproj_filter_highbd(uint8_t *data8, int width, int height,
}
}
#if USE_DOMAINTXFMRF
void av1_domaintxfmrf_restoration_highbd(uint16_t *dgd, int width, int height,
int stride, int param, int bit_depth,
uint16_t *dst, int dst_stride,
......@@ -1212,6 +1236,7 @@ static void loop_domaintxfmrf_filter_highbd(uint8_t *data8, int width,
rst, bit_depth, dst, dst_stride);
}
}
#endif // USE_DOMAINTXFMRF
static void loop_switchable_filter_highbd(uint8_t *data8, int width, int height,
int stride, RestorationInternal *rst,
......@@ -1231,10 +1256,12 @@ static void loop_switchable_filter_highbd(uint8_t *data8, int width, int height,
} else if (rst->rsi->restoration_type[tile_idx] == RESTORE_SGRPROJ) {
loop_sgrproj_filter_tile_highbd(data, tile_idx, width, height, stride,
rst, bit_depth, dst, dst_stride);
#if USE_DOMAINTXFMRF
} else if (rst->rsi->restoration_type[tile_idx] == RESTORE_DOMAINTXFMRF) {
loop_domaintxfmrf_filter_tile_highbd(data, tile_idx, width, height,
stride, rst, bit_depth, dst,
dst_stride);
#endif // USE_DOMAINTXFMRF
}
}
}
......@@ -1252,14 +1279,24 @@ static void loop_restoration_rows(YV12_BUFFER_CONFIG *frame, AV1_COMMON *cm,
const int uvstart = ystart >> cm->subsampling_y;
int yend = end_mi_row << MI_SIZE_LOG2;
int uvend = yend >> cm->subsampling_y;
restore_func_type restore_funcs[RESTORE_TYPES] = { NULL, loop_wiener_filter,
loop_sgrproj_filter,
loop_domaintxfmrf_filter,
loop_switchable_filter };
restore_func_type restore_funcs[RESTORE_TYPES] = {
NULL,
loop_wiener_filter,
loop_sgrproj_filter,
#if USE_DOMAINTXFMRF
loop_domaintxfmrf_filter,
#endif // USE_DOMAINTXFMRF
loop_switchable_filter
};
#if CONFIG_AOM_HIGHBITDEPTH
restore_func_highbd_type restore_funcs_highbd[RESTORE_TYPES] = {
NULL, loop_wiener_filter_highbd, loop_sgrproj_filter_highbd,
loop_domaintxfmrf_filter_highbd, loop_switchable_filter_highbd
NULL,
loop_wiener_filter_highbd,
loop_sgrproj_filter_highbd,
#if USE_DOMAINTXFMRF
loop_domaintxfmrf_filter_highbd,
#endif // USE_DOMAINTXFMRF
loop_switchable_filter_highbd
};
#endif // CONFIG_AOM_HIGHBITDEPTH
restore_func_type restore_func;
......
......@@ -29,6 +29,7 @@ extern "C" {
#define RESTORATION_TILEPELS_MAX \
(RESTORATION_TILESIZE_BIG * RESTORATION_TILESIZE_BIG * 9 / 4)
#if USE_DOMAINTXFMRF
#define DOMAINTXFMRF_PARAMS_BITS 6
#define DOMAINTXFMRF_PARAMS (1 << DOMAINTXFMRF_PARAMS_BITS)
#define DOMAINTXFMRF_SIGMA_SCALEBITS 4
......@@ -49,13 +50,14 @@ extern "C" {
#define DOMAINTXFMRF_EXTBUF_SIZE (RESTORATION_TILEPELS_MAX * sizeof(uint8_t))
#endif
#define DOMAINTXFMRF_BITS (DOMAINTXFMRF_PARAMS_BITS)
#endif // USE_DOMAINTXFMRF
// 4 32-bit buffers needed for the filter:
// 2 for the restored versions of the frame and
// 2 for each restoration operation
#define SGRPROJ_TMPBUF_SIZE (RESTORATION_TILEPELS_MAX * 4 * sizeof(int32_t))
#define SGRPROJ_EXTBUF_SIZE (0)
#define SGRPROJ_PARAMS_BITS 3
#define SGRPROJ_PARAMS_BITS 4
#define SGRPROJ_PARAMS (1 << SGRPROJ_PARAMS_BITS)
// Precision bits for projection
......@@ -111,8 +113,13 @@ extern "C" {
// Max of SGRPROJ_TMPBUF_SIZE, DOMAINTXFMRF_TMPBUF_SIZE, WIENER_TMPBUF_SIZE
#define RESTORATION_TMPBUF_SIZE (SGRPROJ_TMPBUF_SIZE)
#if USE_DOMAINTXFMRF
// Max of SGRPROJ_EXTBUF_SIZE, DOMAINTXFMRF_EXTBUF_SIZE, WIENER_EXTBUF_SIZE
#define RESTORATION_EXTBUF_SIZE (DOMAINTXFMRF_EXTBUF_SIZE)
#else
#define RESTORATION_EXTBUF_SIZE (WIENER_EXTBUF_SIZE)
#endif // USE_DOMAINTXFMRF
// Check the assumptions of the existing code
#if SUBPEL_TAPS != WIENER_WIN + 1
......@@ -138,7 +145,9 @@ typedef struct {
int xqd[2];
} SgrprojInfo;
#if USE_DOMAINTXFMRF
typedef struct { int sigma_r; } DomaintxfmrfInfo;
#endif // USE_DOMAINTXFMRF
typedef struct {
RestorationType frame_restoration_type;
......@@ -147,8 +156,10 @@ typedef struct {
WienerInfo *wiener_info;
// Selfguided proj filter
SgrprojInfo *sgrproj_info;
#if USE_DOMAINTXFMRF
// Domain transform filter
DomaintxfmrfInfo *domaintxfmrf_info;
#endif // USE_DOMAINTXFMRF
} RestorationInfo;
typedef struct {
......@@ -227,15 +238,19 @@ void av1_free_restoration_struct(RestorationInfo *rst_info);
void extend_frame(uint8_t *data, int width, int height, int stride);
void av1_selfguided_restoration(int32_t *dgd, int width, int height, int stride,
int bit_depth, int r, int eps, int32_t *tmpbuf);
#if USE_DOMAINTXFMRF
void av1_domaintxfmrf_restoration(uint8_t *dgd, int width, int height,
int stride, int param, uint8_t *dst,
int dst_stride, int32_t *tmpbuf);
#endif // USE_DOMAINTXFMRF
#if CONFIG_AOM_HIGHBITDEPTH
void extend_frame_highbd(uint16_t *data, int width, int height, int stride);
#if USE_DOMAINTXFMRF
void av1_domaintxfmrf_restoration_highbd(uint16_t *dgd, int width, int height,
int stride, int param, int bit_depth,
uint16_t *dst, int dst_stride,
int32_t *tmpbuf);
#endif // USE_DOMAINTXFMRF
#endif // CONFIG_AOM_HIGHBITDEPTH
void decode_xq(int *xqd, int *xq);
void av1_loop_restoration_frame(YV12_BUFFER_CONFIG *frame, struct AV1Common *cm,
......
......@@ -2525,11 +2525,16 @@ static void decode_restoration_mode(AV1_COMMON *cm,
int p;
RestorationInfo *rsi = &cm->rst_info[0];
if (aom_rb_read_bit(rb)) {
#if USE_DOMAINTXFMRF
if (aom_rb_read_bit(rb))
rsi->frame_restoration_type =
(aom_rb_read_bit(rb) ? RESTORE_DOMAINTXFMRF : RESTORE_SGRPROJ);
else
rsi->frame_restoration_type = RESTORE_WIENER;
#else
rsi->frame_restoration_type =
aom_rb_read_bit(rb) ? RESTORE_SGRPROJ : RESTORE_WIENER;
#endif // USE_DOMAINTXFMRF
} else {
rsi->frame_restoration_type =
aom_rb_read_bit(rb) ? RESTORE_SWITCHABLE : RESTORE_NONE;
......@@ -2578,11 +2583,13 @@ static void read_sgrproj_filter(SgrprojInfo *sgrproj_info, aom_reader *rb) {
aom_read_literal(rb, SGRPROJ_PRJ_BITS, ACCT_STR) + SGRPROJ_PRJ_MIN1;
}
#if USE_DOMAINTXFMRF
static void read_domaintxfmrf_filter(DomaintxfmrfInfo *domaintxfmrf_info,
aom_reader *rb) {
domaintxfmrf_info->sigma_r =
aom_read_literal(rb, DOMAINTXFMRF_PARAMS_BITS, ACCT_STR);
}
#endif // USE_DOMAINTXFMRF
static void decode_restoration(AV1_COMMON *cm, aom_reader *rb) {
int i, p;
......@@ -2603,8 +2610,10 @@ static void decode_restoration(AV1_COMMON *cm, aom_reader *rb) {
read_wiener_filter(&rsi->wiener_info[i], rb);
} else if (rsi->restoration_type[i] == RESTORE_SGRPROJ) {
read_sgrproj_filter(&rsi->sgrproj_info[i], rb);
#if USE_DOMAINTXFMRF
} else if (rsi->restoration_type[i] == RESTORE_DOMAINTXFMRF) {
read_domaintxfmrf_filter(&rsi->domaintxfmrf_info[i], rb);
#endif // USE_DOMAINTXFMRF
}
}
} else if (rsi->frame_restoration_type == RESTORE_WIENER) {
......@@ -2625,6 +2634,7 @@ static void decode_restoration(AV1_COMMON *cm, aom_reader *rb) {
rsi->restoration_type[i] = RESTORE_NONE;
}
}
#if USE_DOMAINTXFMRF
} else if (rsi->frame_restoration_type == RESTORE_DOMAINTXFMRF) {
for (i = 0; i < ntiles; ++i) {
if (aom_read(rb, RESTORE_NONE_DOMAINTXFMRF_PROB, ACCT_STR)) {
......@@ -2634,6 +2644,7 @@ static void decode_restoration(AV1_COMMON *cm, aom_reader *rb) {
rsi->restoration_type[i] = RESTORE_NONE;
}
}
#endif // USE_DOMAINTXFMRF
}
}
for (p = 1; p < MAX_MB_PLANE; ++p) {
......
......@@ -3324,6 +3324,7 @@ static void encode_restoration_mode(AV1_COMMON *cm,
aom_wb_write_bit(wb, 1);
aom_wb_write_bit(wb, 0);
break;
#if USE_DOMAINTXFMRF
case RESTORE_SGRPROJ:
aom_wb_write_bit(wb, 1);
aom_wb_write_bit(wb, 1);
......@@ -3334,6 +3335,12 @@ static void encode_restoration_mode(AV1_COMMON *cm,
aom_wb_write_bit(wb, 1);
aom_wb_write_bit(wb, 1);
break;
#else
case RESTORE_SGRPROJ:
aom_wb_write_bit(wb, 1);
aom_wb_write_bit(wb, 1);
break;
#endif // USE_DOMAINTXFMRF
case RESTORE_SWITCHABLE:
aom_wb_write_bit(wb, 0);
aom_wb_write_bit(wb, 1);
......@@ -3373,10 +3380,12 @@ static void write_sgrproj_filter(SgrprojInfo *sgrproj_info, aom_writer *wb) {
SGRPROJ_PRJ_BITS);
}
#if USE_DOMAINTXFMRF
static void write_domaintxfmrf_filter(DomaintxfmrfInfo *domaintxfmrf_info,
aom_writer *wb) {
aom_write_literal(wb, domaintxfmrf_info->sigma_r, DOMAINTXFMRF_PARAMS_BITS);
}
#endif // USE_DOMAINTXFMRF
static void encode_restoration(AV1_COMMON *cm, aom_writer *wb) {
int i, p;
......@@ -3398,8 +3407,10 @@ static void encode_restoration(AV1_COMMON *cm, aom_writer *wb) {
write_wiener_filter(&rsi->wiener_info[i], wb);
} else if (rsi->restoration_type[i] == RESTORE_SGRPROJ) {
write_sgrproj_filter(&rsi->sgrproj_info[i], wb);
#if USE_DOMAINTXFMRF
} else if (rsi->restoration_type[i] == RESTORE_DOMAINTXFMRF) {
write_domaintxfmrf_filter(&rsi->domaintxfmrf_info[i], wb);
#endif // USE_DOMAINTXFMRF
}
}
} else if (rsi->frame_restoration_type == RESTORE_WIENER) {
......@@ -3418,6 +3429,7 @@ static void encode_restoration(AV1_COMMON *cm, aom_writer *wb) {
write_sgrproj_filter(&rsi->sgrproj_info[i], wb);
}
}
#if USE_DOMAINTXFMRF
} else if (rsi->frame_restoration_type == RESTORE_DOMAINTXFMRF) {
for (i = 0; i < ntiles; ++i) {
aom_write(wb, rsi->restoration_type[i] != RESTORE_NONE,
......@@ -3426,6 +3438,7 @@ static void encode_restoration(AV1_COMMON *cm, aom_writer *wb) {
write_domaintxfmrf_filter(&rsi->domaintxfmrf_info[i], wb);
}
}
#endif // USE_DOMAINTXFMRF
}
}
for (p = 1; p < MAX_MB_PLANE; ++p) {
......
......@@ -714,7 +714,7 @@ static void alloc_raw_frame_buffers(AV1_COMP *cpi) {
static void alloc_util_frame_buffers(AV1_COMP *cpi) {
#if CONFIG_LOOP_RESTORATION
int i;
int i, extra_rstbuf_sz;
#endif // CONFIG_LOOP_RESTORATION
AV1_COMMON *const cm = &cpi->common;
if (aom_realloc_frame_buffer(&cpi->last_frame_uf, cm->width, cm->height,
......@@ -746,11 +746,16 @@ static void alloc_util_frame_buffers(AV1_COMP *cpi) {
NULL, NULL))
aom_internal_error(&cm->error, AOM_CODEC_MEM_ERROR,
"Failed to allocate trial restored frame buffer");
cpi->extra_rstbuf =
(uint8_t *)aom_realloc(cpi->extra_rstbuf, RESTORATION_EXTBUF_SIZE);
if (!cpi->extra_rstbuf)
aom_internal_error(&cm->error, AOM_CODEC_MEM_ERROR,
"Failed to allocate extra rstbuf for restoration");
extra_rstbuf_sz = RESTORATION_EXTBUF_SIZE;
if (extra_rstbuf_sz > 0) {
cpi->extra_rstbuf =
(uint8_t *)aom_realloc(cpi->extra_rstbuf, extra_rstbuf_sz);
if (!cpi->extra_rstbuf)
aom_internal_error(&cm->error, AOM_CODEC_MEM_ERROR,
"Failed to allocate extra rstbuf for restoration");
} else {
cpi->extra_rstbuf = NULL;
}
for (i = 0; i < MAX_MB_PLANE; ++i)
av1_alloc_restoration_struct(cm, &cpi->rst_search[i], cm->width,
cm->height);
......
......@@ -37,7 +37,11 @@ typedef double (*search_restore_type)(const YV12_BUFFER_CONFIG *src,
double *best_tile_cost,
YV12_BUFFER_CONFIG *dst_frame);
#if USE_DOMAINTXFMRF
const int frame_level_restore_bits[RESTORE_TYPES] = { 2, 2, 3, 3, 2 };
#else
const int frame_level_restore_bits[RESTORE_TYPES] = { 2, 2, 2, 2 };
#endif // USE_DOMAINTXFMRF
static int64_t sse_restoration_tile(const YV12_BUFFER_CONFIG *src,
const YV12_BUFFER_CONFIG *dst,
......@@ -418,6 +422,7 @@ static double search_sgrproj(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
return cost_sgrproj;
}
#if USE_DOMAINTXFMRF
static int64_t compute_sse(uint8_t *dgd, int width, int height, int dgd_stride,
uint8_t *src, int src_stride) {
int64_t sse = 0;
......@@ -640,6 +645,7 @@ static double search_domaintxfmrf(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
aom_yv12_copy_y(&cpi->last_frame_uf, cm->frame_to_show);
return cost_domaintxfmrf;
}
#endif // USE_DOMAINTXFMRF
static double find_average(uint8_t *src, int h_start, int h_end, int v_start,
int v_end, int stride) {
......@@ -1318,7 +1324,12 @@ static double search_switchable_restoration(
void av1_pick_filter_restoration(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
LPF_PICK_METHOD method) {
static search_restore_type search_restore_fun[RESTORE_SWITCHABLE_TYPES] = {
search_norestore, search_wiener, search_sgrproj, search_domaintxfmrf,
search_norestore,
search_wiener,
search_sgrproj,
#if USE_DOMAINTXFMRF
search_domaintxfmrf,
#endif // USE_DOMAINTXFMRF
};
AV1_COMMON *const cm = &cpi->common;
struct loopfilter *const lf = &cm->lf;
......@@ -1417,11 +1428,17 @@ void av1_pick_filter_restoration(const YV12_BUFFER_CONFIG *src, AV1_COMP *cpi,
cm->rst_info[2].frame_restoration_type);
*/
/*
#if USE_DOMAINTXFMRF
printf("Frame %d/%d frame_restore_type %d : %f %f %f %f %f\n",
cm->current_video_frame, cm->show_frame,
cm->rst_info[0].frame_restoration_type, cost_restore[0],
cost_restore[1],
cost_restore[2], cost_restore[3], cost_restore[4]);
cost_restore[1], cost_restore[2], cost_restore[3], cost_restore[4]);
#else
printf("Frame %d/%d frame_restore_type %d : %f %f %f %f\n",
cm->current_video_frame, cm->show_frame,
cm->rst_info[0].frame_restoration_type, cost_restore[0],
cost_restore[1], cost_restore[2], cost_restore[3]);
#endif // USE_DOMAINTXFMRF
*/
for (r = 0; r < RESTORE_SWITCHABLE_TYPES; r++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment