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

Unified Diff: source/libvpx/vp8/encoder/temporal_filter.c

Issue 7671004: Update libvpx snapshot to v0.9.7-p1 (Cayuga). (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: '' Created 9 years, 4 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/vp8/encoder/ssim.c ('k') | source/libvpx/vp8/encoder/tokenize.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/libvpx/vp8/encoder/temporal_filter.c
===================================================================
--- source/libvpx/vp8/encoder/temporal_filter.c (revision 96967)
+++ source/libvpx/vp8/encoder/temporal_filter.c (working copy)
@@ -24,7 +24,6 @@
#include "segmentation.h"
#include "vp8/common/g_common.h"
#include "vpx_scale/yv12extend.h"
-#include "vp8/common/postproc.h"
#include "vpx_mem/vpx_mem.h"
#include "vp8/common/swapyv12buffer.h"
#include "vp8/common/threading.h"
@@ -149,17 +148,15 @@
)
{
MACROBLOCK *x = &cpi->mb;
- int thissme;
int step_param;
int further_steps;
- int n = 0;
int sadpb = x->sadperbit16;
int bestsme = INT_MAX;
- int num00 = 0;
BLOCK *b = &x->block[0];
BLOCKD *d = &x->e_mbd.block[0];
- MV best_ref_mv1 = {0,0};
+ int_mv best_ref_mv1;
+ int_mv best_ref_mv1_full; /* full-pixel value of best_ref_mv1 */
int *mvcost[2] = { &dummy_cost[mv_max+1], &dummy_cost[mv_max+1] };
int *mvsadcost[2] = { &dummy_cost[mv_max+1], &dummy_cost[mv_max+1] };
@@ -172,6 +169,10 @@
int pre = d->pre;
int pre_stride = d->pre_stride;
+ best_ref_mv1.as_int = 0;
+ best_ref_mv1_full.as_mv.col = best_ref_mv1.as_mv.col >>3;
+ best_ref_mv1_full.as_mv.row = best_ref_mv1.as_mv.row >>3;
+
// Setup frame pointers
b->base_src = &arf_frame->y_buffer;
b->src_stride = arf_frame->y_stride;
@@ -195,72 +196,25 @@
further_steps = 0;
}
- if (1/*cpi->sf.search_method == HEX*/)
- {
- // TODO Check that the 16x16 vf & sdf are selected here
- bestsme = vp8_hex_search(x, b, d,
- &best_ref_mv1, &d->bmi.mv.as_mv,
- step_param,
- sadpb/*x->errorperbit*/,
- &num00, &cpi->fn_ptr[BLOCK_16X16],
- mvsadcost, mvcost, &best_ref_mv1);
- }
- else
- {
- int mv_x, mv_y;
+ /*cpi->sf.search_method == HEX*/
+ // TODO Check that the 16x16 vf & sdf are selected here
+ bestsme = vp8_hex_search(x, b, d,
+ &best_ref_mv1_full, &d->bmi.mv,
+ step_param,
+ sadpb,
+ &cpi->fn_ptr[BLOCK_16X16],
+ mvsadcost, mvcost, &best_ref_mv1);
- bestsme = cpi->diamond_search_sad(x, b, d,
- &best_ref_mv1, &d->bmi.mv.as_mv,
- step_param,
- sadpb / 2/*x->errorperbit*/,
- &num00, &cpi->fn_ptr[BLOCK_16X16],
- mvsadcost, mvcost, &best_ref_mv1); //sadpb < 9
-
- // Further step/diamond searches as necessary
- n = 0;
- //further_steps = (cpi->sf.max_step_search_steps - 1) - step_param;
-
- n = num00;
- num00 = 0;
-
- while (n < further_steps)
- {
- n++;
-
- if (num00)
- num00--;
- else
- {
- thissme = cpi->diamond_search_sad(x, b, d,
- &best_ref_mv1, &d->bmi.mv.as_mv,
- step_param + n,
- sadpb / 4/*x->errorperbit*/,
- &num00, &cpi->fn_ptr[BLOCK_16X16],
- mvsadcost, mvcost, &best_ref_mv1); //sadpb = 9
-
- if (thissme < bestsme)
- {
- bestsme = thissme;
- mv_y = d->bmi.mv.as_mv.row;
- mv_x = d->bmi.mv.as_mv.col;
- }
- else
- {
- d->bmi.mv.as_mv.row = mv_y;
- d->bmi.mv.as_mv.col = mv_x;
- }
- }
- }
- }
-
#if ALT_REF_SUBPEL_ENABLED
// Try sub-pixel MC?
//if (bestsme > error_thresh && bestsme < INT_MAX)
{
+ int distortion;
+ unsigned int sse;
bestsme = cpi->find_fractional_mv_step(x, b, d,
- &d->bmi.mv.as_mv, &best_ref_mv1,
+ &d->bmi.mv, &best_ref_mv1,
x->errorperbit, &cpi->fn_ptr[BLOCK_16X16],
- mvcost);
+ mvcost, &distortion, &sse);
}
#endif
@@ -290,7 +244,6 @@
unsigned int filter_weight;
int mb_cols = cpi->common.mb_cols;
int mb_rows = cpi->common.mb_rows;
- int MBs = cpi->common.MBs;
int mb_y_offset = 0;
int mb_uv_offset = 0;
DECLARE_ALIGNED_ARRAY(16, unsigned int, accumulator, 16*16 + 8*8 + 8*8);
@@ -308,26 +261,33 @@
for (mb_row = 0; mb_row < mb_rows; mb_row++)
{
#if ALT_REF_MC_ENABLED
- // Reduced search extent by 3 for 6-tap filter & smaller UMV border
- cpi->mb.mv_row_min = -((mb_row * 16) + (VP8BORDERINPIXELS - 19));
+ // Source frames are extended to 16 pixels. This is different than
+ // L/A/G reference frames that have a border of 32 (VP8BORDERINPIXELS)
+ // A 6 tap filter is used for motion search. This requires 2 pixels
+ // before and 3 pixels after. So the largest Y mv on a border would
+ // then be 16 - 3. The UV blocks are half the size of the Y and
+ // therefore only extended by 8. The largest mv that a UV block
+ // can support is 8 - 3. A UV mv is half of a Y mv.
+ // (16 - 3) >> 1 == 6 which is greater than 8 - 3.
+ // To keep the mv in play for both Y and UV planes the max that it
+ // can be on a border is therefore 16 - 5.
+ cpi->mb.mv_row_min = -((mb_row * 16) + (16 - 5));
cpi->mb.mv_row_max = ((cpi->common.mb_rows - 1 - mb_row) * 16)
- + (VP8BORDERINPIXELS - 19);
+ + (16 - 5);
#endif
for (mb_col = 0; mb_col < mb_cols; mb_col++)
{
- int i, j, k, w;
- int weight_cap;
+ int i, j, k;
int stride;
vpx_memset(accumulator, 0, 384*sizeof(unsigned int));
vpx_memset(count, 0, 384*sizeof(unsigned short));
#if ALT_REF_MC_ENABLED
- // Reduced search extent by 3 for 6-tap filter & smaller UMV border
- cpi->mb.mv_col_min = -((mb_col * 16) + (VP8BORDERINPIXELS - 19));
+ cpi->mb.mv_col_min = -((mb_col * 16) + (16 - 5));
cpi->mb.mv_col_max = ((cpi->common.mb_cols - 1 - mb_col) * 16)
- + (VP8BORDERINPIXELS - 19);
+ + (16 - 5);
#endif
for (frame = 0; frame < frame_count; frame++)
@@ -406,8 +366,8 @@
}
// Normalize filter output to produce AltRef frame
- dst1 = cpi->alt_ref_buffer.source_buffer.y_buffer;
- stride = cpi->alt_ref_buffer.source_buffer.y_stride;
+ dst1 = cpi->alt_ref_buffer.y_buffer;
+ stride = cpi->alt_ref_buffer.y_stride;
byte = mb_y_offset;
for (i = 0,k = 0; i < 16; i++)
{
@@ -426,9 +386,9 @@
byte += stride - 16;
}
- dst1 = cpi->alt_ref_buffer.source_buffer.u_buffer;
- dst2 = cpi->alt_ref_buffer.source_buffer.v_buffer;
- stride = cpi->alt_ref_buffer.source_buffer.uv_stride;
+ dst1 = cpi->alt_ref_buffer.u_buffer;
+ dst2 = cpi->alt_ref_buffer.v_buffer;
+ stride = cpi->alt_ref_buffer.uv_stride;
byte = mb_uv_offset;
for (i = 0,k = 256; i < 8; i++)
{
@@ -471,7 +431,8 @@
void vp8_temporal_filter_prepare_c
(
- VP8_COMP *cpi
+ VP8_COMP *cpi,
+ int distance
)
{
int frame = 0;
@@ -482,7 +443,6 @@
int frames_to_blur_forward = 0;
int frames_to_blur = 0;
int start_frame = 0;
- unsigned int filtered = 0;
int strength = cpi->oxcf.arnr_strength;
@@ -490,13 +450,10 @@
int max_frames = cpi->active_arnr_frames;
- num_frames_backward = cpi->last_alt_ref_sei - cpi->source_encode_index;
+ num_frames_backward = distance;
+ num_frames_forward = vp8_lookahead_depth(cpi->lookahead)
+ - (num_frames_backward + 1);
- if (num_frames_backward < 0)
- num_frames_backward += cpi->oxcf.lag_in_frames;
-
- num_frames_forward = cpi->oxcf.lag_in_frames - (num_frames_backward + 1);
-
switch (blur_type)
{
case 1:
@@ -547,8 +504,7 @@
break;
}
- start_frame = (cpi->last_alt_ref_sei
- + frames_to_blur_forward) % cpi->oxcf.lag_in_frames;
+ start_frame = distance + frames_to_blur_forward;
#ifdef DEBUGFWG
// DEBUG FWG
@@ -569,12 +525,9 @@
for (frame = 0; frame < frames_to_blur; frame++)
{
int which_buffer = start_frame - frame;
-
- if (which_buffer < 0)
- which_buffer += cpi->oxcf.lag_in_frames;
-
- cpi->frames[frames_to_blur-1-frame]
- = &cpi->src_buffer[which_buffer].source_buffer;
+ struct lookahead_entry* buf = vp8_lookahead_peek(cpi->lookahead,
+ which_buffer);
+ cpi->frames[frames_to_blur-1-frame] = &buf->img;
}
vp8_temporal_filter_iterate_c (
« no previous file with comments | « source/libvpx/vp8/encoder/ssim.c ('k') | source/libvpx/vp8/encoder/tokenize.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698