Merge "Vp9 denoiser MC bugfix"
This commit is contained in:
commit
3008da9dea
@ -190,12 +190,19 @@ static VP9_DENOISER_DECISION perform_motion_compensation(VP9_DENOISER *denoiser,
|
|||||||
MACROBLOCKD *filter_mbd = &mb->e_mbd;
|
MACROBLOCKD *filter_mbd = &mb->e_mbd;
|
||||||
MB_MODE_INFO *mbmi = &filter_mbd->mi[0]->mbmi;
|
MB_MODE_INFO *mbmi = &filter_mbd->mi[0]->mbmi;
|
||||||
|
|
||||||
|
MB_MODE_INFO saved_mbmi;
|
||||||
|
int i, j;
|
||||||
|
struct buf_2d saved_dst[MAX_MB_PLANE];
|
||||||
|
struct buf_2d saved_pre[MAX_MB_PLANE][2]; // 2 pre buffers
|
||||||
|
|
||||||
// We will restore these after motion compensation.
|
// We will restore these after motion compensation.
|
||||||
MB_MODE_INFO saved_mbmi = *mbmi;
|
saved_mbmi = *mbmi;
|
||||||
struct buf_2d saved_dst = filter_mbd->plane[0].dst;
|
for (i = 0; i < MAX_MB_PLANE; ++i) {
|
||||||
struct buf_2d saved_pre[2];
|
for (j = 0; j < 2; ++j) {
|
||||||
saved_pre[0] = filter_mbd->plane[0].pre[0];
|
saved_pre[i][j] = filter_mbd->plane[i].pre[j];
|
||||||
saved_pre[1] = filter_mbd->plane[0].pre[1];
|
}
|
||||||
|
saved_dst[i] = filter_mbd->plane[i].dst;
|
||||||
|
}
|
||||||
|
|
||||||
mv_col = denoiser->best_sse_mv.as_mv.col;
|
mv_col = denoiser->best_sse_mv.as_mv.col;
|
||||||
mv_row = denoiser->best_sse_mv.as_mv.row;
|
mv_row = denoiser->best_sse_mv.as_mv.row;
|
||||||
@ -224,67 +231,52 @@ static VP9_DENOISER_DECISION perform_motion_compensation(VP9_DENOISER *denoiser,
|
|||||||
|
|
||||||
// Set the pointers in the MACROBLOCKD to point to the buffers in the denoiser
|
// Set the pointers in the MACROBLOCKD to point to the buffers in the denoiser
|
||||||
// struct.
|
// struct.
|
||||||
filter_mbd->plane[0].pre[0].buf =
|
for (j = 0; j < 2; ++j) {
|
||||||
|
filter_mbd->plane[0].pre[j].buf =
|
||||||
block_start(denoiser->running_avg_y[frame].y_buffer,
|
block_start(denoiser->running_avg_y[frame].y_buffer,
|
||||||
denoiser->running_avg_y[frame].y_stride,
|
denoiser->running_avg_y[frame].y_stride,
|
||||||
mi_row, mi_col);
|
mi_row, mi_col);
|
||||||
filter_mbd->plane[0].pre[0].stride = denoiser->running_avg_y[frame].y_stride;
|
filter_mbd->plane[0].pre[j].stride =
|
||||||
|
denoiser->running_avg_y[frame].y_stride;
|
||||||
filter_mbd->plane[1].pre[0].buf =
|
filter_mbd->plane[1].pre[j].buf =
|
||||||
block_start(denoiser->running_avg_y[frame].u_buffer,
|
block_start(denoiser->running_avg_y[frame].u_buffer,
|
||||||
denoiser->running_avg_y[frame].uv_stride,
|
denoiser->running_avg_y[frame].uv_stride,
|
||||||
mi_row, mi_col);
|
mi_row, mi_col);
|
||||||
filter_mbd->plane[1].pre[0].stride = denoiser->running_avg_y[frame].uv_stride;
|
filter_mbd->plane[1].pre[j].stride =
|
||||||
|
denoiser->running_avg_y[frame].uv_stride;
|
||||||
filter_mbd->plane[2].pre[0].buf =
|
filter_mbd->plane[2].pre[j].buf =
|
||||||
block_start(denoiser->running_avg_y[frame].v_buffer,
|
block_start(denoiser->running_avg_y[frame].v_buffer,
|
||||||
denoiser->running_avg_y[frame].uv_stride,
|
denoiser->running_avg_y[frame].uv_stride,
|
||||||
mi_row, mi_col);
|
mi_row, mi_col);
|
||||||
filter_mbd->plane[2].pre[0].stride = denoiser->running_avg_y[frame].uv_stride;
|
filter_mbd->plane[2].pre[j].stride =
|
||||||
|
denoiser->running_avg_y[frame].uv_stride;
|
||||||
filter_mbd->plane[0].pre[1].buf =
|
}
|
||||||
block_start(denoiser->running_avg_y[frame].y_buffer,
|
|
||||||
denoiser->running_avg_y[frame].y_stride,
|
|
||||||
mi_row, mi_col);
|
|
||||||
filter_mbd->plane[0].pre[1].stride = denoiser->running_avg_y[frame].y_stride;
|
|
||||||
|
|
||||||
filter_mbd->plane[1].pre[1].buf =
|
|
||||||
block_start(denoiser->running_avg_y[frame].u_buffer,
|
|
||||||
denoiser->running_avg_y[frame].uv_stride,
|
|
||||||
mi_row, mi_col);
|
|
||||||
filter_mbd->plane[1].pre[1].stride = denoiser->running_avg_y[frame].uv_stride;
|
|
||||||
|
|
||||||
filter_mbd->plane[2].pre[1].buf =
|
|
||||||
block_start(denoiser->running_avg_y[frame].v_buffer,
|
|
||||||
denoiser->running_avg_y[frame].uv_stride,
|
|
||||||
mi_row, mi_col);
|
|
||||||
filter_mbd->plane[2].pre[1].stride = denoiser->running_avg_y[frame].uv_stride;
|
|
||||||
|
|
||||||
filter_mbd->plane[0].dst.buf =
|
filter_mbd->plane[0].dst.buf =
|
||||||
block_start(denoiser->mc_running_avg_y.y_buffer,
|
block_start(denoiser->mc_running_avg_y.y_buffer,
|
||||||
denoiser->mc_running_avg_y.y_stride,
|
denoiser->mc_running_avg_y.y_stride,
|
||||||
mi_row, mi_col);
|
mi_row, mi_col);
|
||||||
filter_mbd->plane[0].dst.stride = denoiser->mc_running_avg_y.y_stride;
|
filter_mbd->plane[0].dst.stride = denoiser->mc_running_avg_y.y_stride;
|
||||||
|
|
||||||
filter_mbd->plane[1].dst.buf =
|
filter_mbd->plane[1].dst.buf =
|
||||||
block_start(denoiser->mc_running_avg_y.u_buffer,
|
block_start(denoiser->mc_running_avg_y.u_buffer,
|
||||||
denoiser->mc_running_avg_y.uv_stride,
|
denoiser->mc_running_avg_y.uv_stride,
|
||||||
mi_row, mi_col);
|
mi_row, mi_col);
|
||||||
filter_mbd->plane[1].dst.stride = denoiser->mc_running_avg_y.y_stride;
|
filter_mbd->plane[1].dst.stride = denoiser->mc_running_avg_y.uv_stride;
|
||||||
|
|
||||||
filter_mbd->plane[2].dst.buf =
|
filter_mbd->plane[2].dst.buf =
|
||||||
block_start(denoiser->mc_running_avg_y.v_buffer,
|
block_start(denoiser->mc_running_avg_y.v_buffer,
|
||||||
denoiser->mc_running_avg_y.uv_stride,
|
denoiser->mc_running_avg_y.uv_stride,
|
||||||
mi_row, mi_col);
|
mi_row, mi_col);
|
||||||
filter_mbd->plane[2].dst.stride = denoiser->mc_running_avg_y.y_stride;
|
filter_mbd->plane[2].dst.stride = denoiser->mc_running_avg_y.uv_stride;
|
||||||
|
|
||||||
vp9_build_inter_predictors_sby(filter_mbd, mv_row, mv_col, bs);
|
vp9_build_inter_predictors_sby(filter_mbd, mv_row, mv_col, bs);
|
||||||
|
|
||||||
// Restore everything to its original state
|
// Restore everything to its original state
|
||||||
filter_mbd->plane[0].pre[0] = saved_pre[0];
|
|
||||||
filter_mbd->plane[0].pre[1] = saved_pre[1];
|
|
||||||
filter_mbd->plane[0].dst = saved_dst;
|
|
||||||
*mbmi = saved_mbmi;
|
*mbmi = saved_mbmi;
|
||||||
|
for (i = 0; i < MAX_MB_PLANE; ++i) {
|
||||||
|
for (j = 0; j < 2; ++j) {
|
||||||
|
filter_mbd->plane[i].pre[j] = saved_pre[i][j];
|
||||||
|
}
|
||||||
|
filter_mbd->plane[i].dst = saved_dst[i];
|
||||||
|
}
|
||||||
|
|
||||||
mv_row = denoiser->best_sse_mv.as_mv.row;
|
mv_row = denoiser->best_sse_mv.as_mv.row;
|
||||||
mv_col = denoiser->best_sse_mv.as_mv.col;
|
mv_col = denoiser->best_sse_mv.as_mv.col;
|
||||||
|
@ -862,9 +862,7 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) {
|
|||||||
|
|
||||||
#if CONFIG_DENOISING
|
#if CONFIG_DENOISING
|
||||||
#ifdef OUTPUT_YUV_DENOISED
|
#ifdef OUTPUT_YUV_DENOISED
|
||||||
if (cpi->oxcf.noise_sensitivity > 0) {
|
|
||||||
yuv_denoised_file = fopen("denoised.yuv", "ab");
|
yuv_denoised_file = fopen("denoised.yuv", "ab");
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef OUTPUT_YUV_SRC
|
#ifdef OUTPUT_YUV_SRC
|
||||||
@ -1122,9 +1120,7 @@ void vp9_remove_compressor(VP9_COMP *cpi) {
|
|||||||
|
|
||||||
#if CONFIG_DENOISING
|
#if CONFIG_DENOISING
|
||||||
#ifdef OUTPUT_YUV_DENOISED
|
#ifdef OUTPUT_YUV_DENOISED
|
||||||
if (cpi->oxcf.noise_sensitivity > 0) {
|
|
||||||
fclose(yuv_denoised_file);
|
fclose(yuv_denoised_file);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef OUTPUT_YUV_SRC
|
#ifdef OUTPUT_YUV_SRC
|
||||||
|
Loading…
x
Reference in New Issue
Block a user