• Yunqing Wang's avatar
    Encoder denoiser performance improvement · 64075c9b
    Yunqing Wang authored
    The denoiser function was modified to reduce the computational
    complexity.
    
    1. The denoiser c function modification:
    The original implementation calculated pixel's filter_coefficient
    based on the pixel value difference between current raw frame and last
    denoised raw frame, and stored them in lookup tables. For each pixel c,
    find its coefficient using
        filter_coefficient[c] = LUT[abs_diff[c]];
    and then apply filtering operation for the pixel.
    
    The denoising filter costed about 12% of encoding time when it was
    turned on, and half of the time was spent on finding coefficients in
    lookup tables. In order to simplify the process, a short cut was taken.
    The pixel adjustments vs. pixel diff value were calculated ahead of time.
        adjustment = filtered_value - current_raw
                   = (filter_coefficient * diff + 128) >> 8
    
    The adjustment vs. diff curve becomes flat very quick when diff increases.
    This allowed us to use only several levels to get a close approximation
    of the curve. Following the denoiser algorithm, the adjustments are
    further modified according to how big the motion magnitude is.
    
    2. The sse2 function was rewritten.
    
    This change made denoiser filter function 3x faster, and improved the
    encoder performance by 7% ~ 10% with the denoiser on.
    
    Change-Id: I93a4308963b8e80c7307f96ffa8b8c667425bf50
    64075c9b
Name
Last commit
Last update
build Loading commit data...
examples Loading commit data...
libmkv Loading commit data...
nestegg Loading commit data...
test Loading commit data...
third_party Loading commit data...
tools Loading commit data...
vp8 Loading commit data...
vpx Loading commit data...
vpx_mem Loading commit data...
vpx_ports Loading commit data...
vpx_scale Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
AUTHORS Loading commit data...
CHANGELOG Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README Loading commit data...
args.c Loading commit data...
args.h Loading commit data...
configure Loading commit data...
docs.mk Loading commit data...
example_xma.c Loading commit data...
examples.mk Loading commit data...
keywords.dox Loading commit data...
libs.doxy_template Loading commit data...
libs.mk Loading commit data...
mainpage.dox Loading commit data...
md5_utils.c Loading commit data...
md5_utils.h Loading commit data...
solution.mk Loading commit data...
tools_common.c Loading commit data...
tools_common.h Loading commit data...
usage.dox Loading commit data...
usage_cx.dox Loading commit data...
usage_dx.dox Loading commit data...
vp8_multi_resolution_encoder.c Loading commit data...
vp8_scalable_patterns.c Loading commit data...
vpxdec.c Loading commit data...
vpxenc.c Loading commit data...
y4minput.c Loading commit data...
y4minput.h Loading commit data...