5027 Commits

Author SHA1 Message Date
Adrian Grange
852f62fde5 Fix valgrind memcpy memory overlaps warning
Change-Id: Id0bb162b48b891c5c849f0411ef2ac0aa4bbe261
2015-03-03 15:06:34 -08:00
Jingning Han
a521008201 Scale the normalization factor depending on the block size
Change-Id: I0a26994bf65ea224e496b09af2ce71e1a4210433
2015-03-03 11:29:46 -08:00
Yaowu Xu
47ac3ea0bb Adapt color sensitiviy threshold to luma signal energy
Instead using only a fixed threshold, this commit adapts the threshold
for color sensitivity decision to luma signal energy: chroma channel's
sse is at least 1/6 of that in luma for color sensitivity flag to be
set to active.

This recoups a large portion of the speed loss due to accounting for
chroma component costs in RTC mode decision.

Change-Id: Ie01f747f6037dba6a1d1ed3e10b71a0ef1abc42c
2015-03-03 11:15:13 -08:00
Jingning Han
1790d45252 Use variance metric for integral projection vector match
This commit replaces the SAD with variance as metric for the
integral projection vector match. It improves the search accuracy
in the presence of slight light change. The average speed -6
compression performance for rtc set is improved by 1.7%. No speed
changes are observed for the test clips.

Change-Id: I71c1d27e42de2aa429fb3564e6549bba1c7d6d4d
2015-03-01 10:42:56 -08:00
Jingning Han
f4e0eb17e8 Merge "Fix source frame border extension" 2015-02-27 18:19:18 -08:00
Jingning Han
fe85fabbac Fix source frame border extension
This commit fixes an issue in source frame border extension. It
causes certain frame resolution such as 640x480 to have a portion
of the right/bottom extension filled by zeros, which misleads
motion search and degrades transform coding performance when large
block size is used.

This fix improves the speed 2 compression performance of a few
yt sequence, typically ranging from 1% - 2%, up to 5% at median
to low bit-rate.

Change-Id: Id6b09a5695d9e7651c6dfbc2c6a72288b08af7fb
2015-02-27 15:48:01 -08:00
Adrian Grange
94bba48525 Merge "Fix calc_highbd_psnr" 2015-02-27 15:42:08 -08:00
Alex Converse
2b2fc812f1 Merge "Make SVC compatible with external resize." 2015-02-27 14:37:48 -08:00
Adrian Grange
54293ee3c7 Fix calc_highbd_psnr
Should use the crop dimensions of the frame rather
than the extended size.

Change-Id: I49ed041a46ff0753d43e074020857b7ff2f95e17
2015-02-27 14:05:02 -08:00
Marco
2b0ed0842f Merge "Fix arithmetic overflow warnings." 2015-02-27 11:53:57 -08:00
Jingning Han
89ee460ee4 Merge "Refactor integral projection based motion estimation" 2015-02-27 09:49:30 -08:00
Marco
c3f7bb16b4 Fix arithmetic overflow warnings.
Change-Id: Ib85b5bc135aa0907a76b8c74faafe577e27d014f
2015-02-26 15:27:21 -08:00
Jingning Han
73a00d3219 Refactor integral projection based motion estimation
Support variable block size integral projection based motion
estimation.

Change-Id: Iee6d65e44df4480aa13fb7b84b9c91914b89caa1
2015-02-26 14:48:59 -08:00
Yaowu Xu
754bbcfdc8 Fix the encoder to support profile change
Change-Id: Iefb928ad1174e274409facfb44f80265ff0f7683
2015-02-26 11:41:01 -08:00
Yaowu Xu
387bb8bed7 Correct parameter order in a function call
Change-Id: Ibd87db1c4371edcbe193d39df2fdc07d3842c21a
2015-02-26 11:39:57 -08:00
paulwilkins
e2b4ef1313 Merge "Account for rate error in GF group Q calculation." 2015-02-26 08:20:08 -08:00
Alex Converse
6ea83fdfcb Make SVC compatible with external resize.
Fixes https://code.google.com/p/webm/issues/detail?id=943

Change-Id: I6177bf6ab6b31a22d2652732f579b8aed3f28887
2015-02-25 14:05:51 -08:00
Jingning Han
3e1d14a6ce Merge "Motion compensated reference refinement" 2015-02-25 12:33:09 -08:00
Jingning Han
4c5a4efc38 Merge "Re-distribute hierarchical vector match pattern" 2015-02-25 10:33:25 -08:00
Jingning Han
b7050c0be3 Motion compensated reference refinement
This commit applies one-step refinement search to the resulting
motion vector of the integral projectiion based motion estimation,
per 64x64 block. It improves the coding performance of speed -6.

pedestrian 1080p 500 kbps
51735 b/f, 36.794 dB, 16044 ms ->
51382 b/f, 36.793 dB, 16282 ms

cloud 1080p 500 kbps
24081 b/f, 37.988 dB, 14016 ms ->
23597 b/f, 38.076 dB, 12774 ms

vidyo1 720p 1000 kbps
16552 b/f, 40.514 dB, 8279 ms ->
16553 b/f, 40.543 dB, 8510 ms

The rtc set compression performance is improved by 0.5%.

Change-Id: I3d09bea2caf58b2a4f3b38aa26fffafcbe9a2c17
2015-02-25 10:32:09 -08:00
Yunqing Wang
419ff1352e Merge "Fix ssse3 quantize_fp functions while skip=1" 2015-02-25 10:10:10 -08:00
Jingning Han
0f57d0a682 Merge "Fix fwd transform sse2 build issue on older gcc version" 2015-02-25 09:32:00 -08:00
Jingning Han
e47033319d Fix fwd transform sse2 build issue on older gcc version
Change-Id: I3e0e53d129552babf29e6c5d047483733983973c
2015-02-24 23:25:21 -08:00
Jingning Han
f87e315e1e Re-distribute hierarchical vector match pattern
This commit modifies the hierarchical vector match patter. It
avoids repeated SAD computation at same points. The function
vp9_vector_sad_sse2 is called 12 times per 64x64 block, instead
of 15 times as before. The effective coverage remains the same.

Change-Id: I91ad9d27d40db8963c907d02af84e10702136994
2015-02-24 11:48:38 -08:00
Yunqing Wang
58e0159c80 Fix ssse3 quantize_fp functions while skip=1
In ssse3 functions, DEFINE_ARGS macro hard codes qcoeff and dqcoeff
to r3 and r4. If skip is 1, qcoeff and dqcoeff need to be loaded
from the stack, which doesn't work because of the above definitions.
Currently, skip=1 case is not used in the encoder. This patch fixed
the issue, so it can be turned on later.

Change-Id: I998d696b1a7a85dca2b3bcee790b21c21e039147
2015-02-24 10:37:05 -08:00
paulwilkins
8d7f53f04c Account for rate error in GF group Q calculation.
When GF group adaptive maxQ is enabled this patch accounts
somewhat for accumulated error in the rate control.

This improves accuracy quite a bit on many clips especially
when there is  overshoot.

Examples when the overshoot and undershoot command line
parameters are set to 100:

Hall @ 1200 overshoot is reduced from 67-24%.
Akiyo @ 400 undershoot is reduced from 28%-15%.

Setting a lower value for undershoot or overshoot still
reduces the error further.

Impact on metrics is mixed with some gains in average psnr
but generally a little lower (e.g. 0.5%) on overall and ssim.

The GF group adaptation is still off by default in this patch.
Compared to with the head, enabling this mode now gives
big average psnr gains on the YT sets (e.g. YT_HD >11.2%),
a drop in overall PSNR (YT-HD 3.9%) and a smaller drop or
neutral for SSIM.

Change-Id: If4b32cd0740d3fb941317b374f9c2951954eee90
2015-02-23 10:57:27 +00:00
Marco
c9f660d895 Merge "Remove a few unneccessary multiplications in denoiser." 2015-02-20 14:42:02 -08:00
Marco
8f84fbe756 Remove a few unneccessary multiplications in denoiser.
Change-Id: I3edbb7cc67203fbbf32c6fd4a08015ca9d9ed53e
2015-02-20 11:55:11 -08:00
Hangyu Kuang
8724d31d12 Move dequant table from VP9_COMMON to VP9_COMP as decoder
does not need it any more.

This reduces VP9_COMMON size from 25776 bytes to 17584 bytes(~31%).

Change-Id: Ic5daea732ccefb6d512b048af7983f0efe08589b
2015-02-20 11:12:42 -08:00
Marco
a1b402e71c Merge "Adjustments to cyclic refresh (aq-mode=3)." 2015-02-20 09:55:05 -08:00
Jingning Han
6728655422 Merge "Add high bit depth support to rtc sub8x8 block coding" 2015-02-20 09:35:18 -08:00
Marco
0187f4b411 Adjustments to cyclic refresh (aq-mode=3).
Target higher delta-qp for big blocks with zero motion,
and for segment#1: avoid 64x64 partition size and force 8x8 tx size.

Metrics on RTC set mostly positive: SSIM up by ~4%, PSRN by ~1.5%.
Doesn't seem to be any change in speed.

Change-Id: I1f68fa3c4f62dab3b90cc58041f05ebb048ae5ac
2015-02-20 08:47:59 -08:00
Jingning Han
6f4245894a Add high bit depth support to rtc sub8x8 block coding
This commit adds proper buffer handle to support high bit depth
in rtc sub8x8 block coding.

Change-Id: Ibaf8a2160194121aec9ca68b8094817fed9ccaea
2015-02-20 08:36:33 -08:00
Adrian Grange
f03627347e Merge "Fix control string in firstpass stats fprintf" 2015-02-19 16:36:43 -08:00
Yunqing Wang
5e57729601 Merge "Improve skip_txfm thresholds in the non-rd mode selection" 2015-02-19 15:31:02 -08:00
Adrian Grange
2ae314fe3a Fix control string in firstpass stats fprintf
20 items in the control string but only 19 arguments.

Change-Id: I51dab9aa1c58c653b52395005a9cb41f09feb484
2015-02-19 15:18:30 -08:00
Jingning Han
216b171d63 Merge "Integral projection based motion estimation" 2015-02-19 15:08:11 -08:00
Yunqing Wang
81fc5bf81c Improve skip_txfm thresholds in the non-rd mode selection
Modified the thresholds of deciding whether or not to skip
the transforms in model_rd_for_sb_y(). Used zbin[] instead
of dequant[] to be more precise. Also, modified the checking
coditions.

Rtc set borg test results (at speed 6) showed:
average PSNR gain: 0.138%, overall PSNR gain: 0.158%,
and SSIM gain: 0.177%.

The data rate test was modified slightly as suggested by
Marco.

Change-Id: Ieaf633ab77f4838cb3c45cf69065b29d55f8ae6c
2015-02-19 14:30:46 -08:00
Jingning Han
ed2dc59c1b Integral projection based motion estimation
This commit introduces a new block match motion estimation
using integral projection measurement. The 2-D block and the nearby
region is projected onto the horizontal and vertical 1-D vectors,
respectively. It then runs vector match, instead of block match,
over the two separate 1-D vectors to locate the motion compensated
reference block.

This process is run per 64x64 block to align the reference before
choosing partitioning in speed 6. The overall CPU cycle cost due
to this additional 64x64 block match (SSE2 version) takes around 2%
at low bit-rate rtc speed 6. When strong motion activities exist in
the video sequence, it substantially improves the partition
selection accuracy, thereby achieving better compression performance
and lower CPU cycles.

The experiments were tested in RTC speed -6 setting:
cloud 1080p 500 kbps
17006 b/f, 37.086 dB, 5386 ms ->
16669 b/f, 37.970 dB, 5085 ms (>0.9dB gain and 6% faster)

pedestrian_area 1080p 500 kbps
53537 b/f, 36.771 dB, 18706 ms ->
51897 b/f, 36.792 dB, 18585 ms (4% bit-rate savings)

blue_sky 1080p 500 kbps
70214 b/f, 33.600 dB, 13979 ms ->
53885 b/f, 33.645 dB, 10878 ms (30% bit-rate savings, 25% faster)

jimred 400 kbps
13380 b/f, 36.014 dB, 5723 ms ->
13377 b/f, 36.087 dB, 5831 ms  (2% bit-rate savings, 2% slower)

Change-Id: Iffdb6ea5b16b77016bfa3dd3904d284168ae649c
2015-02-19 13:47:19 -08:00
Jingning Han
83559e7357 Fix a check condition in nonrd_pick_partition
Change-Id: Ic92fb4b16948f745c218351b24fdafecf9abce3a
2015-02-19 09:54:55 -08:00
Yaowu Xu
c5718a7aa3 Merge "Fix an encoder/decode mismatch bug" 2015-02-13 16:40:41 -08:00
Yaowu Xu
4bc7f4828f Fix an encoder/decode mismatch bug
This commit prevent the encoder to update last_frame_type when a frame
is dropped in the encoder. Prior to this fix, if there is a dropped
frame immediatedly after a key frame, decoder would have the value of
last_frame_type as key frame, different from encoder as the dropped
frame in encoder would have updated the value to an inter frame. This
leads to different probability update in encoder and decoder, thereby
encoder/decoder mismatch.

This fixes issue #941

Change-Id: I27115224b138bec43ae3916c016574f5740822b0
2015-02-13 15:45:47 -08:00
Marco
b1940bf5fe Replace some operations with shift in encoder_breakout.
Replaced a divide by 9 with 8, so some very small difference,
but otherwise no change in behavior.

Change-Id: I1079ae3c41e0789ff0bc6fa9940a238b6bca0f5b
2015-02-13 10:45:19 -08:00
Jingning Han
e69c79e19a Merge "Fix ioc issue in block_rd_txfm" 2015-02-12 15:07:41 -08:00
Jingning Han
5041aa0fbe Fix ioc issue in block_rd_txfm
Force 64-bit precision in the intermediate steps.

Change-Id: I666113d9adcef8975da201d5aa1a13b783d09594
2015-02-12 12:51:39 -08:00
Marco
cc7d981de1 Merge "Add skin detection." 2015-02-12 11:12:27 -08:00
Jingning Han
f4c29ae9ea Merge "Update partition rate cost in rtc speed 5" 2015-02-12 09:14:49 -08:00
Jingning Han
ee83243daa Merge "Add mode cost to sub8x8 block mode decision in rtc coding" 2015-02-12 09:14:29 -08:00
Marco
56435bb7b6 Add skin detection.
Simple skin detection, from vp8; works reasonable on most of the
RTC clips, but could miss sometimes.

Added debug flag to write out skin map over source input.

Change-Id: I2caea7592f1c459047aac46627eeb24a94946464
2015-02-11 17:47:17 -08:00
Adrian Grange
053625e4cd Add cast to convert double to int
Change-Id: I7f63c2940256a5dadf9a29a853809290dd9e98ed
2015-02-11 15:59:48 -08:00