Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: source/libvpx/vp9/encoder/vp9_denoiser.c

Issue 394353005: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_denoiser.h ('k') | source/libvpx/vp9/encoder/vp9_encodeframe.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/libvpx/vp9/encoder/vp9_denoiser.c
===================================================================
--- source/libvpx/vp9/encoder/vp9_denoiser.c (revision 284462)
+++ source/libvpx/vp9/encoder/vp9_denoiser.c (working copy)
@@ -13,6 +13,7 @@
#include "vpx_scale/yv12config.h"
#include "vpx/vpx_integer.h"
#include "vp9/common/vp9_reconinter.h"
+#include "vp9/encoder/vp9_context_tree.h"
#include "vp9/encoder/vp9_denoiser.h"
/* The VP9 denoiser is a work-in-progress. It currently is only designed to work
@@ -183,9 +184,11 @@
BLOCK_SIZE bs,
int increase_denoising,
int mi_row,
- int mi_col) {
+ int mi_col,
+ PICK_MODE_CONTEXT *ctx
+ ) {
int mv_col, mv_row;
- int sse_diff = denoiser->zero_mv_sse - denoiser->best_sse;
+ int sse_diff = ctx->zeromv_sse - ctx->newmv_sse;
MV_REFERENCE_FRAME frame;
MACROBLOCKD *filter_mbd = &mb->e_mbd;
MB_MODE_INFO *mbmi = &filter_mbd->mi[0]->mbmi;
@@ -204,29 +207,29 @@
saved_dst[i] = filter_mbd->plane[i].dst;
}
- mv_col = denoiser->best_sse_mv.as_mv.col;
- mv_row = denoiser->best_sse_mv.as_mv.row;
+ mv_col = ctx->best_sse_mv.as_mv.col;
+ mv_row = ctx->best_sse_mv.as_mv.row;
- frame = denoiser->best_reference_frame;
+ frame = ctx->best_reference_frame;
// If the best reference frame uses inter-prediction and there is enough of a
// difference in sum-squared-error, use it.
if (frame != INTRA_FRAME &&
sse_diff > sse_diff_thresh(bs, increase_denoising, mv_row, mv_col)) {
- mbmi->ref_frame[0] = denoiser->best_reference_frame;
- mbmi->mode = denoiser->best_sse_inter_mode;
- mbmi->mv[0] = denoiser->best_sse_mv;
+ mbmi->ref_frame[0] = ctx->best_reference_frame;
+ mbmi->mode = ctx->best_sse_inter_mode;
+ mbmi->mv[0] = ctx->best_sse_mv;
} else {
// Otherwise, use the zero reference frame.
- frame = denoiser->best_zeromv_reference_frame;
+ frame = ctx->best_zeromv_reference_frame;
- mbmi->ref_frame[0] = denoiser->best_zeromv_reference_frame;
+ mbmi->ref_frame[0] = ctx->best_zeromv_reference_frame;
mbmi->mode = ZEROMV;
mbmi->mv[0].as_int = 0;
- denoiser->best_sse_inter_mode = ZEROMV;
- denoiser->best_sse_mv.as_int = 0;
- denoiser->best_sse = denoiser->zero_mv_sse;
+ ctx->best_sse_inter_mode = ZEROMV;
+ ctx->best_sse_mv.as_int = 0;
+ ctx->newmv_sse = ctx->zeromv_sse;
}
// Set the pointers in the MACROBLOCKD to point to the buffers in the denoiser
@@ -278,10 +281,10 @@
filter_mbd->plane[i].dst = saved_dst[i];
}
- mv_row = denoiser->best_sse_mv.as_mv.row;
- mv_col = denoiser->best_sse_mv.as_mv.col;
+ mv_row = ctx->best_sse_mv.as_mv.row;
+ mv_col = ctx->best_sse_mv.as_mv.col;
- if (denoiser->best_sse > sse_thresh(bs, increase_denoising)) {
+ if (ctx->newmv_sse > sse_thresh(bs, increase_denoising)) {
return COPY_BLOCK;
}
if (mv_row * mv_row + mv_col * mv_col >
@@ -292,7 +295,8 @@
}
void vp9_denoiser_denoise(VP9_DENOISER *denoiser, MACROBLOCK *mb,
- int mi_row, int mi_col, BLOCK_SIZE bs) {
+ int mi_row, int mi_col, BLOCK_SIZE bs,
+ PICK_MODE_CONTEXT *ctx) {
VP9_DENOISER_DECISION decision = FILTER_BLOCK;
YV12_BUFFER_CONFIG avg = denoiser->running_avg_y[INTRA_FRAME];
YV12_BUFFER_CONFIG mc_avg = denoiser->mc_running_avg_y;
@@ -303,7 +307,7 @@
decision = perform_motion_compensation(denoiser, mb, bs,
denoiser->increase_denoising,
- mi_row, mi_col);
+ mi_row, mi_col, ctx);
if (decision == FILTER_BLOCK) {
decision = denoiser_filter(src.buf, src.stride,
@@ -341,10 +345,9 @@
int refresh_last_frame) {
if (frame_type == KEY_FRAME) {
int i;
- copy_frame(denoiser->running_avg_y[LAST_FRAME], src);
- for (i = 2; i < MAX_REF_FRAMES - 1; i++) {
- copy_frame(denoiser->running_avg_y[i],
- denoiser->running_avg_y[LAST_FRAME]);
+ // Start at 1 so as not to overwrite the INTRA_FRAME
+ for (i = 1; i < MAX_REF_FRAMES; ++i) {
+ copy_frame(denoiser->running_avg_y[i], src);
}
} else { /* For non key frames */
if (refresh_alt_ref_frame) {
@@ -362,24 +365,25 @@
}
}
-void vp9_denoiser_reset_frame_stats(VP9_DENOISER *denoiser) {
- denoiser->zero_mv_sse = UINT_MAX;
- denoiser->best_sse = UINT_MAX;
+void vp9_denoiser_reset_frame_stats(PICK_MODE_CONTEXT *ctx) {
+ ctx->zeromv_sse = UINT_MAX;
+ ctx->newmv_sse = UINT_MAX;
}
void vp9_denoiser_update_frame_stats(VP9_DENOISER *denoiser, MB_MODE_INFO *mbmi,
- unsigned int sse, PREDICTION_MODE mode) {
+ unsigned int sse, PREDICTION_MODE mode,
+ PICK_MODE_CONTEXT *ctx) {
// TODO(tkopp): Use both MVs if possible
- if (mbmi->mv[0].as_int == 0 && sse < denoiser->zero_mv_sse) {
- denoiser->zero_mv_sse = sse;
- denoiser->best_zeromv_reference_frame = mbmi->ref_frame[0];
+ if (mbmi->mv[0].as_int == 0 && sse < ctx->zeromv_sse) {
+ ctx->zeromv_sse = sse;
+ ctx->best_zeromv_reference_frame = mbmi->ref_frame[0];
}
- if (mbmi->mv[0].as_int != 0 && sse < denoiser->best_sse) {
- denoiser->best_sse = sse;
- denoiser->best_sse_inter_mode = mode;
- denoiser->best_sse_mv = mbmi->mv[0];
- denoiser->best_reference_frame = mbmi->ref_frame[0];
+ if (mode == NEWMV) {
+ ctx->newmv_sse = sse;
+ ctx->best_sse_inter_mode = mode;
+ ctx->best_sse_mv = mbmi->mv[0];
+ ctx->best_reference_frame = mbmi->ref_frame[0];
}
}
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_denoiser.h ('k') | source/libvpx/vp9/encoder/vp9_encodeframe.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698