platform/upstream/libvpx.git
6 years agoMerge "Add a partition search breakout model"
Hui Su [Thu, 21 Jun 2018 19:18:01 +0000 (19:18 +0000)]
Merge "Add a partition search breakout model"

6 years agoMerge "Add bit allocation for hierarchical layer"
Zoe Liu [Thu, 21 Jun 2018 16:31:36 +0000 (16:31 +0000)]
Merge "Add bit allocation for hierarchical layer"

6 years agoRefactor block partition level rate distortion cost computation
Jingning Han [Wed, 20 Jun 2018 18:13:00 +0000 (11:13 -0700)]
Refactor block partition level rate distortion cost computation

Compute the rate distortion cost directly at the coding block level.

Change-Id: Ib3f8e1ac6b6ec68db4f96c037f567b19da7fb114

6 years agoAdd bit allocation for hierarchical layer
Zoe Liu [Wed, 20 Jun 2018 01:11:08 +0000 (18:11 -0700)]
Add bit allocation for hierarchical layer

This CL migrates the bit allocation scheme from libaom and combines the
scheme for hierarchical layer with the updated scheme in libvpx that
uses a modified scheme to calculate the target bitrate per frame.

Change-Id: I63593ed528abd4a6a1a8681abf6c9cf06c7a2ee0

6 years agoMerge "libyuv: remove problematic functions"
Johann Koenig [Wed, 20 Jun 2018 22:53:19 +0000 (22:53 +0000)]
Merge "libyuv: remove problematic functions"

6 years agoMerge "Disable tpl model in high bd route"
Jingning Han [Wed, 20 Jun 2018 21:00:27 +0000 (21:00 +0000)]
Merge "Disable tpl model in high bd route"

6 years agolibyuv: remove problematic functions
Johann [Wed, 20 Jun 2018 20:10:54 +0000 (13:10 -0700)]
libyuv: remove problematic functions

These fail to build with clang on 32 bit with
--disable-optimizations

Upstream libyuv has addressed these and we will get updated
versions on the next roll. At the moment, we don't use
libyuv for copying alpha data and so this is a quick fix.

BUG=webm:1514

Change-Id: I0040c3ae048f8d896c2082deeb2e32070a32c453

6 years agoDisable tpl model in high bd route
Jingning Han [Wed, 20 Jun 2018 18:03:05 +0000 (11:03 -0700)]
Disable tpl model in high bd route

Temporarily disable tpl dep model in the high bit-depth route to
prevent encoding failure.

Change-Id: Iebb3168a60b38dcc1273e25542530c4359dc679d

6 years agoAdd a partition search breakout model
Hui Su [Mon, 18 Jun 2018 23:07:41 +0000 (16:07 -0700)]
Add a partition search breakout model

for q-index between 150 and 200.

Previously the ML based breakout feature is only supported for q-index
larger than 200.

This only affects speed 1 and 2, resolution under 720p, q-index between
150 and 200, low bit-depth.

Compression performane change is neutral.
Encoding speed gain is up to 30% for speed 1;
                       up to 20% for speed 2.

Results from encoding city_4cif_30fps:
speed 1, QP=38
before:  37.689 dB, 41007b/f, 2.91 fps
after:   37.687 dB, 40998b/f, 3.46 fps

speed 1, QP=48
before:  35.959 dB, 22106b/f, 3.66 fps
after:   35.950 dB, 22118b/f, 4.83 fps

speed 2, QP=38
before:  37.630 dB, 40999b/f, 4.42 fps
after:   37.633 dB, 41063b/f, 4.63 fps

speed 2, QP=48
before:  35.905 dB, 22177b/f, 4.90 fps
after:   35.889 dB, 22145b/f, 5.92 fps

Change-Id: Ibd4a2f4d7093fb248ab94ddd388cbaa8de2c5ef7

6 years agovp9-svc: Add support for spatial layer sync frames.
Marco Paniconi [Tue, 12 Jun 2018 18:50:29 +0000 (11:50 -0700)]
vp9-svc: Add support for spatial layer sync frames.

Add encoder control to allow application to insert
spatial layer sync frame. The sync frame disables
temporal prediction for that spatial layer.

This is useful for RTC application to have receiver
start decoding a higher spatial layer, without inserting
a key frame on base spatial layer.

If the layer sync is requested on the base spatial layer
this then force a key frame, otherwise it only disables
the temporal reference for that spatial layer, allowing
temporal prediction to continue for the other layers.

Although the temporal prediction is disabled and reset
on a layer sync frame, the inter-layer prediction for the
sync frame is enabled on INTER frames. So the meaning of
INTER_LAYER_PRED_OFF_NONKEY is modified to mean disable
inter-layer prediction on non-key and non-sync frames.

Added unittest for inserting layer sync frames.

Bump up ABI version.
Change-Id: Id458acc400a77c853551f125c4e7b6d001991f03

6 years agoMerge "Refactor partition mode cost calculation"
Jingning Han [Wed, 20 Jun 2018 04:10:38 +0000 (04:10 +0000)]
Merge "Refactor partition mode cost calculation"

6 years agoMerge "Add hierarchical structure in GF group"
Zoe Liu [Wed, 20 Jun 2018 01:05:54 +0000 (01:05 +0000)]
Merge "Add hierarchical structure in GF group"

6 years agoAdd hierarchical structure in GF group
Zoe Liu [Tue, 19 Jun 2018 19:08:55 +0000 (12:08 -0700)]
Add hierarchical structure in GF group

Change-Id: I06fc4b0ad5a45c49e10a9601a2356fbc6e93d6da

6 years agoMerge "Build temporal prediction dependency propagation"
Jingning Han [Tue, 19 Jun 2018 03:36:32 +0000 (03:36 +0000)]
Merge "Build temporal prediction dependency propagation"

6 years agoMerge "vp9: Enable cyclic refresh for HBD in real-time."
Jerome Jiang [Tue, 19 Jun 2018 02:37:32 +0000 (02:37 +0000)]
Merge "vp9: Enable cyclic refresh for HBD in real-time."

6 years agoMerge "Improve the partition search breakout speed feature"
Hui Su [Tue, 19 Jun 2018 00:04:02 +0000 (00:04 +0000)]
Merge "Improve the partition search breakout speed feature"

6 years agovp9: Enable cyclic refresh for HBD in real-time.
Jerome Jiang [Fri, 8 Jun 2018 01:05:23 +0000 (18:05 -0700)]
vp9: Enable cyclic refresh for HBD in real-time.

Keep denoiser and skin detection disabled since some key functions don't
work with >8 bits source.

Add test for HBD with denoiser and cyclic refresh enabled to make sure
nothing crashes.

BUG=webm:1534

Change-Id: Id61fe1e38ed1768f273870a6bdd5f163aa769fe4

6 years agoBuild temporal prediction dependency propagation
Jingning Han [Sat, 26 May 2018 00:09:23 +0000 (17:09 -0700)]
Build temporal prediction dependency propagation

This commit builds up the temporal prediction dependency propagation
within the group of pictures.

Change-Id: Id04cfc0323e6a5c4ac4a570d53e20d1229b3ee11

6 years agoRefactor partition mode cost calculation
Jingning Han [Wed, 30 May 2018 20:31:08 +0000 (13:31 -0700)]
Refactor partition mode cost calculation

Compute the coding block partition mode cost as additional rdcost
to the cumulative rate-distortion cost from each coding block. This
changes the coding performance slightly due to the rounding error.
The compression performance change is neutral.

Change-Id: Ibdccae0e79263a0e70af7592a8cb11458d795f8d

6 years agoImprove the partition search breakout speed feature
Hui Su [Tue, 12 Jun 2018 18:56:09 +0000 (11:56 -0700)]
Improve the partition search breakout speed feature

Use a linear model to make partition search breakout decisions.
Currently the model is tuned for large quantizers and small resolutions.
So it is only used when q-index is larger than 200 and frame
width/height is smaller than 720. Also it's not yet supported for high
bit depth.

Tested speed 1 and 2 on lowres and midres. Compression performance is
neutral. At low bitrates, encoding speedup is up to 50% for speed 1;
up to 30% for speed 2.
Some sample numbers:

into_tree_480p, speed 1
QP=60 before:  35.228 dB, 3488b/f, 7.78 fps
      now:     35.217 dB, 3475b/f, 11.57 fps
QP=50 before:  37.492 dB, 7983b/f, 6.24 fps
      now:     37.491 dB, 7974b/f, 7.55 fps

PartyScene_832x480_50, speed 1
QP=60 before:  30.104 dB, 22426b/f, 3.28 fps
      now:     30.109 dB, 22410b/f, 4.43 fps
QP=50 before:  33.016 dB, 46984b/f, 2.78 fps
      now:     33.018 dB, 46998b/f, 3.35 fps

into_tree_480p, speed 2
QP=60 before:  35.175 dB, 3506b/f, 10.96 fps
      now:     35.185 dB, 3510b/f, 13.47 fps
QP=50 before:  37.448 dB, 8016b/f, 9.04 fps
      now:     37.459 dB, 8048b/f, 9.81 fps

PartyScene_832x480_50, speed 2
QP=60 before:  30.060 dB, 22537b/f, 4.42 fps
      now:     30.061 dB, 22541b/f, 5.38 fps
QP=50 before:  32.923 dB, 47134b/f, 3.85 fps
      now:     32.920 dB, 47073b/f, 4.31 fps

Change-Id: I674cba4f027c4c65f7837d5ec9179d6201e6ba86

6 years agoMerge "Enable intra prediction search for tpl model"
Jingning Han [Mon, 18 Jun 2018 16:28:21 +0000 (16:28 +0000)]
Merge "Enable intra prediction search for tpl model"

6 years agoMerge "Enable motion compensated prediction for tpl dependency model"
Jingning Han [Mon, 18 Jun 2018 16:28:13 +0000 (16:28 +0000)]
Merge "Enable motion compensated prediction for tpl dependency model"

6 years agoMerge "Remove unneeded buffer restore calls"
Jingning Han [Mon, 18 Jun 2018 16:27:48 +0000 (16:27 +0000)]
Merge "Remove unneeded buffer restore calls"

6 years agoinclude msvc.h for snprintf support in benchmarks
Luc Trudeau [Thu, 14 Jun 2018 15:21:05 +0000 (11:21 -0400)]
include msvc.h for snprintf support in benchmarks

include vpx_ports/msvc.h to avoid issues with snprintf issues with MSVC.

Change-Id: Ida09cff8ee3b84e09fd61de131f84b32c113fa1a

6 years agoAdd update types for hierarchical refs
Zoe Liu [Sun, 17 Jun 2018 12:42:31 +0000 (05:42 -0700)]
Add update types for hierarchical refs

Change-Id: I0cd91187e1efc1441086772e5683fbf72d9371cf

6 years agoEnable intra prediction search for tpl model
Jingning Han [Thu, 24 May 2018 21:06:18 +0000 (14:06 -0700)]
Enable intra prediction search for tpl model

Support intra prediction mode search to find the best intra mode
cost for temporal dependency model building.

Change-Id: Ie62d6af8d0c9f65dee742876f3af9cdd5e3f1d63

6 years agoMerge "VP9 HBD: Fix integer overflow problem in variance calc."
Jerome Jiang [Sat, 16 Jun 2018 00:12:44 +0000 (00:12 +0000)]
Merge "VP9 HBD: Fix integer overflow problem in variance calc."

6 years agoRemove unneeded buffer restore calls
Jingning Han [Sat, 16 Jun 2018 00:06:50 +0000 (17:06 -0700)]
Remove unneeded buffer restore calls

Change-Id: I89c8ad6544e0cee60b5daf49bc18c7e31f08faa2

6 years agoEnable motion compensated prediction for tpl dependency model
Jingning Han [Thu, 24 May 2018 00:00:03 +0000 (17:00 -0700)]
Enable motion compensated prediction for tpl dependency model

Support the motion compensated prediction search to find the motion
trajectory and hence to build the temporal dependency model.

Change-Id: I861ea85a0d4cc2897cb0dfe2e95378bf7d36209f

6 years agoMerge "vp9 svc: add tests for inter layer prediction."
Jerome Jiang [Fri, 15 Jun 2018 23:33:15 +0000 (23:33 +0000)]
Merge "vp9 svc: add tests for inter layer prediction."

6 years agoVP9 HBD: Fix integer overflow problem in variance calc.
Jerome Jiang [Fri, 15 Jun 2018 23:03:00 +0000 (16:03 -0700)]
VP9 HBD: Fix integer overflow problem in variance calc.

BUG=webm:1534
Change-Id: I535ac48e3dd2454cc7088c4f9a1e08ea74107da6

6 years agoMerge "Clean up avx512 compiler support test."
Tom Finegan [Fri, 15 Jun 2018 22:25:25 +0000 (22:25 +0000)]
Merge "Clean up avx512 compiler support test."

6 years agoMerge changes I3436302c,I8969f5c3
Jingning Han [Fri, 15 Jun 2018 18:05:58 +0000 (18:05 +0000)]
Merge changes I3436302c,I8969f5c3

* changes:
  Prepare motion estimation process for temporal dependency model
  Construct temporal dependency building system

6 years agoClean up avx512 compiler support test.
Tom Finegan [Fri, 15 Jun 2018 17:58:11 +0000 (10:58 -0700)]
Clean up avx512 compiler support test.

Moves the check into a function, check_gcc_avx512_compiles,
that behaves somewhat similarly to check_gcc_machine_options.

Change-Id: I2bef3ddd98e636eef12d9d5e548c43282fac7826

6 years agoPrepare motion estimation process for temporal dependency model
Jingning Han [Wed, 23 May 2018 19:13:50 +0000 (12:13 -0700)]
Prepare motion estimation process for temporal dependency model

Set up needed stack for the motion estimation process to build up
the temporal dependency model.

Change-Id: I3436302c916a686e8c82572ffc106bf8023404b6

6 years agoConstruct temporal dependency building system
Jingning Han [Wed, 23 May 2018 16:07:45 +0000 (09:07 -0700)]
Construct temporal dependency building system

Schedule the frame processing to construct temporal dependency
statistics within a group of pictures. Align the corresponding
reference frames.

Change-Id: I8969f5c335a4a5c2614f4530b636fe13a25a8a98

6 years agoMerge "Allocate tpl_dep_stats frame buffer"
Jingning Han [Fri, 15 Jun 2018 01:33:41 +0000 (01:33 +0000)]
Merge "Allocate tpl_dep_stats frame buffer"

6 years agoMerge "Separate GF structure defining from bit allocation"
Zoe Liu [Fri, 15 Jun 2018 00:00:13 +0000 (00:00 +0000)]
Merge "Separate GF structure defining from bit allocation"

6 years agoMerge "Add temporal model control as a speed feature"
Jingning Han [Thu, 14 Jun 2018 23:06:14 +0000 (23:06 +0000)]
Merge "Add temporal model control as a speed feature"

6 years agovp9 svc: add tests for inter layer prediction.
Jerome Jiang [Thu, 14 Jun 2018 19:30:38 +0000 (12:30 -0700)]
vp9 svc: add tests for inter layer prediction.

Change-Id: Ic8e07b07790e067c014677cf33c3b016fcf4cb39

6 years agoSeparate GF structure defining from bit allocation
Zoe Liu [Thu, 14 Jun 2018 18:09:41 +0000 (11:09 -0700)]
Separate GF structure defining from bit allocation

This CL separates the defining of the GF group structure from the
handling of its bitrate allocation. The encoder performance should stay
unchanged.

Change-Id: Ib77967757702bb4b284034e429d4c41ae86d0838

6 years agoAllocate tpl_dep_stats frame buffer
Jingning Han [Mon, 21 May 2018 17:13:53 +0000 (10:13 -0700)]
Allocate tpl_dep_stats frame buffer

Allocate buffers to support gather temporal dependency statistics
at the encoder.

Change-Id: I97d4594913a2423e8a916f20caf82ab0f5836961

6 years agoAdd temporal model control as a speed feature
Jingning Han [Thu, 14 Jun 2018 17:04:03 +0000 (10:04 -0700)]
Add temporal model control as a speed feature

The model construction would incur 15% slowdown for speed 2. The
speed change on speed 0 is unnoticeable.

The current speed features set up would DISABLE temporal dependency
model for all speed settings.

Change-Id: Ic45dd962f3a54a8f5f0452502dc05e352dc09ca1

6 years agoAdd data structure for frame dependent mode decision
Jingning Han [Mon, 21 May 2018 16:31:13 +0000 (09:31 -0700)]
Add data structure for frame dependent mode decision

Add block and frame level data structures to support frame
dependent mode decision.

Change-Id: I996fc84155fcba8e2ec2a114bb0799d6aa5539dd

6 years agoMerge "Unify frame_index in defining GF group structure"
Zoe Liu [Thu, 14 Jun 2018 16:18:51 +0000 (16:18 +0000)]
Merge "Unify frame_index in defining GF group structure"

6 years agoMerge changes I51776f0e,I843f3b34
Luc Trudeau [Thu, 14 Jun 2018 16:13:02 +0000 (16:13 +0000)]
Merge changes I51776f0e,I843f3b34

* changes:
  [VSX] Optimize PROCESS16 macro
  VSX Version of SAD8xN

6 years agoMerge "vp8: remove assertion in tree coder."
Jerome Jiang [Thu, 14 Jun 2018 06:56:40 +0000 (06:56 +0000)]
Merge "vp8: remove assertion in tree coder."

6 years ago[VSX] Optimize PROCESS16 macro
Luc Trudeau [Wed, 13 Jun 2018 19:24:54 +0000 (15:24 -0400)]
[VSX] Optimize PROCESS16 macro

The PROCESS16 macro now uses 8-bit lanes instead of 16-bit lanes.

SADTest Speed Test (POWER8 Model 2.1)
16x8  Old VSX time = 16.7 ms, new VSX time = 9.1 ms [1.8x]
16x16 Old VSX time = 15.7 ms, new VSX time = 7.9 ms [2.0x]
16x32 Old VSX time = 14.4 ms, new VSX time = 7.2 ms [2.0x]
32x16 Old VSX time = 14.0 ms, new VSX time = 7.4 ms [1.9x]
32x32 Old VSX time = 13.4 ms, new VSX time = 6.5 ms [2.0x]
32x64 Old VSX time = 12.7 ms, new VSX time = 6.3 ms [2.0x]
64x32 Old VSX time = 12.6 ms, new VSX time = 6.3 ms [2.0x]
64x64 Old VSX time = 12.7 ms, new VSX time = 6.2 ms [2.0x]

Change-Id: I51776f0e428162e78edde8eac47f30ffd2379873

6 years agoUnify frame_index in defining GF group structure
Zoe Liu [Thu, 14 Jun 2018 00:33:57 +0000 (17:33 -0700)]
Unify frame_index in defining GF group structure

Following are completed in defining GF group structure in firstpass:
1. Remove redundant alt_frame_index;
2. Remove hard coded index value with the variable of frame_index.

Change-Id: I7b56e454559bbf704afc7410ea9832b20ffcd57e

6 years agovp8: remove assertion in tree coder.
Jerome Jiang [Wed, 13 Jun 2018 19:55:17 +0000 (12:55 -0700)]
vp8: remove assertion in tree coder.

Cast the counter to uint64_t in case it overflows.

The assert was to prevent c[0] * Pfac being overflow beyong unsigned int
since Pfac could be 2^8. Thus c[0] needs to be smaller than 2^24.

In VP9, the assert was removed and c[0] was casted to uint64_t.

Bug: 805277
Change-Id: Ic46a3c5b4af2f267de4e32c1518b64e8d6e9d856

6 years agoVSX Version of SAD8xN
Luc Trudeau [Wed, 13 Jun 2018 17:39:04 +0000 (13:39 -0400)]
VSX Version of SAD8xN

VSX versions of the SAD functions of width 8.

SADTest Speed Test (POWER8 Model 2.1)
8x4  C time = 68.7 ms (±0.3 ms), VSX time = 31.8 ms (±0.1 ms) [2.2x]
8x8  C time = 55.6 ms (±0.3 ms), VSX time = 18.3 ms (±0.1 ms) [3.0x]
8x16 C time = 46.5 ms (±0.1 ms), VSX time = 15.6 ms (±0.1 ms) [3.0x]

Change-Id: I843f3b34e103b72deeade4a939193d8b53cee460

6 years agoAdd Speed Tests for the SADTest test suite.
Luc Trudeau [Wed, 13 Jun 2018 17:36:17 +0000 (13:36 -0400)]
Add Speed Tests for the SADTest test suite.

Speed tests are added for the SADTest test suite. These test use the
AbstractBench and print the median run time of SAD operations. Speed
tests are disabled by default.

Change-Id: I5d0957248f9b5b307ae2d757d5f8d4761a1dd712

6 years agoMerge "Fix avx512 related MSVC build failure."
Tom Finegan [Wed, 13 Jun 2018 17:50:39 +0000 (17:50 +0000)]
Merge "Fix avx512 related MSVC build failure."

6 years agoMerge "Remove duplicate vp9_twopass_postencode_update def"
Jingning Han [Wed, 13 Jun 2018 17:32:12 +0000 (17:32 +0000)]
Merge "Remove duplicate vp9_twopass_postencode_update def"

6 years agoFix avx512 related MSVC build failure.
Tom Finegan [Wed, 13 Jun 2018 16:39:28 +0000 (09:39 -0700)]
Fix avx512 related MSVC build failure.

Check GCC specific AVX512 flags only when GCC is enabled.

Change-Id: I15dc2a0dbf8bce37f4364fedfd34a0a34882104b

6 years agoRemove duplicate vp9_twopass_postencode_update def
Jingning Han [Tue, 12 Jun 2018 20:46:43 +0000 (13:46 -0700)]
Remove duplicate vp9_twopass_postencode_update def

Change-Id: I370f37c85a02c032a8ba266b9b9445ee38eb0756

6 years agoMerge "vp9 svc: Denoise golden when it's a temporal ref."
Marco Paniconi [Tue, 12 Jun 2018 05:40:32 +0000 (05:40 +0000)]
Merge "vp9 svc: Denoise golden when it's a temporal ref."

6 years agovp9 svc: Denoise golden when it's a temporal ref.
Jerome Jiang [Mon, 11 Jun 2018 18:05:36 +0000 (11:05 -0700)]
vp9 svc: Denoise golden when it's a temporal ref.

When golden was the inter-layer reference, a block that selected the golden ref
would not be denoised.
But when golden is used as a second temporal reference then we should denoise
blocks that select the golden reference.
This changes allows for that.

Change-Id: Ifdea2ac88f6a74f73520fedcd7fec2f32c559ec9

6 years agoVSX Version of vp9_quantize_fp_32x32
Luc Trudeau [Sat, 9 Jun 2018 02:53:30 +0000 (22:53 -0400)]
VSX Version of vp9_quantize_fp_32x32

Low bit depth version only. Passes the VP9QuantizeTest test suite.

VP9QuantizeTest Speed Test (POWER8 Model 2.1)
32x32 C time = 93.1 ms (±0.4 ms), VSX time = 6.5 ms (±0.2 ms) [14.4x]

Change-Id: I7f1fd0fc987af86baf2b74147a25aee811289112

6 years agoVSX Version of vp9_quantize_fp
Luc Trudeau [Thu, 7 Jun 2018 19:30:23 +0000 (15:30 -0400)]
VSX Version of vp9_quantize_fp

Low bit depth version only. Passes the VP9QuantizeTest test suite.

VP9QuantizeTest Speed Test (POWER8 Model 2.1)
 4x4  C time = 86.3 ms (±0.7 ms), VSX time = 18.2 ms (±0.0 ms) [ 4.7x]
 8x8  C time = 57.7 ms (±0.3 ms), VSX time =  7.6 ms (±0.0 ms) [ 7.6x]
16x16 C time = 50.7 ms (±0.1 ms), VSX time =  4.9 ms (±0.0 ms) [10.3x]

Change-Id: Ic09bc786c57cc89bba14624064216b52996075eb

6 years agoMerge "Small speedup of ml_pruning_partition()"
Hui Su [Mon, 11 Jun 2018 18:07:18 +0000 (18:07 +0000)]
Merge "Small speedup of ml_pruning_partition()"

6 years agoMerge "vp9-svc: Fix to frames_since_golden update for SVC."
Marco Paniconi [Mon, 11 Jun 2018 16:54:43 +0000 (16:54 +0000)]
Merge "vp9-svc: Fix to frames_since_golden update for SVC."

6 years agoMerge "vp9 svc: clean up first_spatial_layer_to_encode."
Jerome Jiang [Mon, 11 Jun 2018 16:43:44 +0000 (16:43 +0000)]
Merge "vp9 svc: clean up first_spatial_layer_to_encode."

6 years agovp9-svc: Fix to frames_since_golden update for SVC.
Marco Paniconi [Thu, 7 Jun 2018 23:35:44 +0000 (16:35 -0700)]
vp9-svc: Fix to frames_since_golden update for SVC.

When the second (gf) temporal reference is used in SVC:
the reference is refreshed on base TL superframes, and so
the rc->frames_since_golden counter was also only updated on
base TL frames. But this was disabling the golden reference
from being used as a temporal reference for TL > 0 frames
(since frames_since_golden was 0/not updated on TL > 0 frames).

Fix is to copy the update of rc->frames_since_golden to all
upper temporal layers. This allows TL > 0 frames to test the
golden inter mode.

Gain on RTC set: ~2%, ~8% on desktop_vga clip.
Encode time increase ~5-8% on linux, 3SL-3TL run with 1 thread.

For now keep this off for TL > 0 frames in speed features, so
this change does not change current behavior for speed >= 7.

Change-Id: I405708f3f80039ae47bd64ec53e66f92160acd9e

6 years agovp9 svc: clean up first_spatial_layer_to_encode.
Jerome Jiang [Fri, 8 Jun 2018 17:53:34 +0000 (10:53 -0700)]
vp9 svc: clean up first_spatial_layer_to_encode.

Change-Id: I3c9aefd3ea5028797b9105d7e49b1cb2f762a9fc

6 years agoSmall speedup of ml_pruning_partition()
Hui Su [Fri, 8 Jun 2018 20:41:05 +0000 (13:41 -0700)]
Small speedup of ml_pruning_partition()

Terminate early and skip neural net model when linear score is already
high enough, which indicates that we should not skip split and
rectangular partitions.

No changes on compression; encoding speed improves slightly.

Change-Id: I4e0995090200eb4889344da905d2f7048673af5f

6 years agoMerge "vp9_subtract_test,cosmetics: fix class order, casts"
James Zern [Fri, 8 Jun 2018 17:44:43 +0000 (17:44 +0000)]
Merge "vp9_subtract_test,cosmetics: fix class order, casts"

6 years agoMerge "Localize variable scope in vp9_rc_get_second_pass_params()"
Jingning Han [Fri, 8 Jun 2018 17:18:33 +0000 (17:18 +0000)]
Merge "Localize variable scope in vp9_rc_get_second_pass_params()"

6 years agoMerge "Add avx512 compile test."
Tom Finegan [Fri, 8 Jun 2018 15:11:13 +0000 (15:11 +0000)]
Merge "Add avx512 compile test."

6 years agovp9_subtract_test,cosmetics: fix class order, casts
James Zern [Fri, 8 Jun 2018 06:19:50 +0000 (23:19 -0700)]
vp9_subtract_test,cosmetics: fix class order, casts

+ remove obsolete FIXME

Change-Id: I97ceb94b0e7860167e9c8cc6900bec8d155f0e8f

6 years agoMerge changes I89ce12b6,Id91b52d6,Icd7d4453
James Zern [Fri, 8 Jun 2018 06:15:24 +0000 (06:15 +0000)]
Merge changes I89ce12b6,Id91b52d6,Icd7d4453

* changes:
  Implement subtract_block for VSX
  Cast bsize as int to print a meaninful debug info
  Speed test for subtract_block

6 years agovp9-svc: Adjust some logic on gf temporal reference.
Marco Paniconi [Thu, 7 Jun 2018 22:07:57 +0000 (15:07 -0700)]
vp9-svc: Adjust some logic on gf temporal reference.

For the feature of using second temporal reference (when
inter-layer is off): move the buffer_idx assignement and
refresh flag settings further down to vp9_rc_get_svc_params(),
since is_key_frame is set there for every frame/layer.
Otherwise it was using the setting from the previous frame/layer.

This makes the refresh more consistent for both layers for
2 spatial layers case.

Small/negligible change in metrics.

Change-Id: I88279243bc27898448e8891dba38143d936cf6d5

6 years agoImplement subtract_block for VSX
Luca Barbato [Wed, 6 Jun 2018 21:10:18 +0000 (21:10 +0000)]
Implement subtract_block for VSX

~2x speedup or better.

[ RUN      ] C/VP9SubtractBlockTest.Speed/0
[    BENCH ]      4x4  365.1 ms ( ±2.2 ms )
[    BENCH ]      8x4  258.5 ms ( ±0.3 ms )
[    BENCH ]      4x8  202.7 ms ( ±0.2 ms )
[    BENCH ]      8x8  162.2 ms ( ±0.5 ms )
[    BENCH ]     16x8  138.8 ms ( ±0.3 ms )
[    BENCH ]     8x16  121.5 ms ( ±0.4 ms )
[    BENCH ]    16x16  110.2 ms ( ±0.5 ms )
[    BENCH ]    32x16  104.8 ms ( ±0.1 ms )
[    BENCH ]    16x32  32.7 ms ( ±0.1 ms )
[    BENCH ]    32x32  30.0 ms ( ±0.0 ms )
[    BENCH ]    64x32  28.7 ms ( ±0.0 ms )
[    BENCH ]    32x64  20.1 ms ( ±0.0 ms )
[    BENCH ]    64x64  19.3 ms ( ±0.0 ms )

[ RUN      ] VSX/VP9SubtractBlockTest.Speed/0
[    BENCH ]      4x4  155.3 ms ( ±0.9 ms )
[    BENCH ]      8x4  99.3 ms ( ±0.4 ms )
[    BENCH ]      4x8  77.2 ms ( ±0.1 ms )
[    BENCH ]      8x8  45.7 ms ( ±0.0 ms )
[    BENCH ]     16x8  34.1 ms ( ±0.0 ms )
[    BENCH ]     8x16  29.5 ms ( ±0.0 ms )
[    BENCH ]    16x16  19.9 ms ( ±0.0 ms )
[    BENCH ]    32x16  15.1 ms ( ±0.0 ms )
[    BENCH ]    16x32  16.7 ms ( ±0.0 ms )
[    BENCH ]    32x32  14.1 ms ( ±0.0 ms )
[    BENCH ]    64x32  12.6 ms ( ±0.0 ms )
[    BENCH ]    32x64  12.0 ms ( ±0.0 ms )
[    BENCH ]    64x64  11.2 ms ( ±0.0 ms )

Change-Id: I89ce12b6475871dc9e8fde84d0b6fe5c420c28c7

6 years agoCast bsize as int to print a meaninful debug info
Luca Barbato [Wed, 6 Jun 2018 22:49:39 +0000 (22:49 +0000)]
Cast bsize as int to print a meaninful debug info

cout helpfully decides to print the bsize value as non-printable char
otherwise.

Change-Id: Id91b52d6475ae9f869365468d1d56d94b2e10ecb

6 years agoSpeed test for subtract_block
Luca Barbato [Wed, 6 Jun 2018 22:16:28 +0000 (22:16 +0000)]
Speed test for subtract_block

Change-Id: Icd7d4453f0ee699635a2a1d484d24cba71d748de

6 years agoAdd avx512 compile test.
Tom Finegan [Thu, 7 Jun 2018 19:35:05 +0000 (12:35 -0700)]
Add avx512 compile test.

Some compiler releases allow the -mavx512f arg without actually
implementing support. Test for this situation, and disable avx512
when it is detected by configure.

BUG=webm:1536

Change-Id: I63952153bb4b24aa9f25267ed47a0fe845d61f8b

6 years agovp9 svc: add control to set using second temporal ref.
Jerome Jiang [Thu, 7 Jun 2018 06:02:26 +0000 (23:02 -0700)]
vp9 svc: add control to set using second temporal ref.

Bump up ABI version.

Change-Id: I4498d7ea4ed72994c5f847aa98e75b0150dd7f82

6 years agovp9-svc: Allow second temporal reference for next highest layer.
Marco Paniconi [Thu, 7 Jun 2018 17:52:09 +0000 (10:52 -0700)]
vp9-svc: Allow second temporal reference for next highest layer.

When inter-layer prediction is disabled on INTER frames, allow
for next highest resolution to have second temporal reference.
Current code allowed for only top/highest spatial layer.

Change-Id: I102137273e3e4d57512a13d95e8ccb9c5b0a7b4b

6 years agoMerge "VP9 SVC: Write out svc src for all spatial layers."
Marco Paniconi [Thu, 7 Jun 2018 15:57:42 +0000 (15:57 +0000)]
Merge "VP9 SVC: Write out svc src for all spatial layers."

6 years agovp9-svc: Modify choose_partitioning for second temporal ref
Marco Paniconi [Thu, 7 Jun 2018 05:42:38 +0000 (22:42 -0700)]
vp9-svc: Modify choose_partitioning for second temporal ref

For mode where second temporal reference is used in SVC: allow
for using/testing this reference (golden ref) in the variance
partition scheme (choose_partitioning).

Small positive gain (~0.25%) on metrics for 3 layer SVC,
negligible change in speed.

Change-Id: I29b8315da530e60db3d6c90faa8fb178d9f2de26

6 years agoMerge "VP9: fix unsigned integer overflow in decoder."
Jerome Jiang [Thu, 7 Jun 2018 00:02:48 +0000 (00:02 +0000)]
Merge "VP9: fix unsigned integer overflow in decoder."

6 years agoVP9 SVC: Write out svc src for all spatial layers.
Jerome Jiang [Wed, 6 Jun 2018 22:44:01 +0000 (15:44 -0700)]
VP9 SVC: Write out svc src for all spatial layers.

Change-Id: Ie78676e4df75f3f870ee2de0c87a8167b7ec68e0

6 years agovp9-svc: Enable use of second temporal reference for SVC.
Marco Paniconi [Wed, 6 Jun 2018 22:16:14 +0000 (15:16 -0700)]
vp9-svc: Enable use of second temporal reference for SVC.

When inter-layer is disabled on INTER frames, this will allow
use of a second (longer term) temporal reference for SVC.

Only enabled on highest resolution spatial layer.

Average gains of ~4% on RTC set, speed decrease of about ~2%.

Change-Id: I3c2d415653c448eb7269c828e120fe8bb2ef3f97

6 years agovp9-svc: Add a buffer_idx is_used parameter for SVC.
Marco Paniconi [Wed, 6 Jun 2018 19:14:59 +0000 (12:14 -0700)]
vp9-svc: Add a buffer_idx is_used parameter for SVC.

For the case where a second (long term) temoral reference is
used in the SVC: this additional parameter is to make sure the
buffer slot selected for this reference is available for usage,
i.e., it is never used for any of the 3 references set for the
fixed SVC patterns.

And some code cleanup (replace cpi->svc).

No change in behavior.

Change-Id: Icba46edfbbefb94d5ea8e2d5c24cccd85a406ee6

6 years agoLocalize variable scope in vp9_rc_get_second_pass_params()
Jingning Han [Wed, 6 Jun 2018 19:52:45 +0000 (12:52 -0700)]
Localize variable scope in vp9_rc_get_second_pass_params()

Remove unnecessary definitions.

Change-Id: Ie540aaed5f3ed3768eff4e6563455666aef9c9e8

6 years agoVP9: fix unsigned integer overflow in decoder.
Jerome Jiang [Thu, 24 May 2018 21:07:28 +0000 (14:07 -0700)]
VP9: fix unsigned integer overflow in decoder.

The difference of two size_t variables.

Change-Id: I73f35cdafc2ba64a9ddaf855cc6a410cfb63b8da

6 years agovp9: Move up reset of cyclic refresh under dynamic resize.
Jerome Jiang [Tue, 5 Jun 2018 22:21:29 +0000 (15:21 -0700)]
vp9: Move up reset of cyclic refresh under dynamic resize.

When resize happens and cyclic refresh is not applied on the
current (resized) frame, the sb_index is not reset and then
might be out of boundary on future frames when the
cyclic refresh is applied.

Change-Id: I05282fc4bc2323522d60e019ed0790d69221a2f7

6 years agoMerge changes I3ba75c45,I97d26285
James Zern [Wed, 6 Jun 2018 04:54:41 +0000 (04:54 +0000)]
Merge changes I3ba75c45,I97d26285

* changes:
  force-inline the convolve functions
  Unbreak the force inline directive for gcc

6 years agoforce-inline the convolve functions
Luca Barbato [Fri, 25 May 2018 20:22:42 +0000 (22:22 +0200)]
force-inline the convolve functions

Change-Id: I3ba75c459ed7c9591b7892e9f8f108146c04507d

6 years agoMerge "vp9-svc: Allow usage of second (long term) temporal reference."
Marco Paniconi [Tue, 5 Jun 2018 03:24:52 +0000 (03:24 +0000)]
Merge "vp9-svc: Allow usage of second (long term) temporal reference."

6 years agotest,cosmetics: fix func/member naming, decl order
James Zern [Sat, 2 Jun 2018 06:22:48 +0000 (23:22 -0700)]
test,cosmetics: fix func/member naming, decl order

functions: upper camelcase
members: lowercase with trailing '_'
decl order: functions (overrides marked virtual), members

after:
656e8ac61 VSX version of vpx_post_proc_down_and_across_mb_row
766d875b9 VSX version of vpx_mbpost_proc_ip
35e98a70b VSX version of vpx_mbpost_proc_down
b2898a9ad Bench Class For More Robust Speed Tests

Change-Id: Ib257bd607c5c1248d30e619ec9e8a47cc629825b

6 years agovp9-svc: Allow usage of second (long term) temporal reference.
Jerome Jiang [Fri, 1 Jun 2018 21:27:34 +0000 (14:27 -0700)]
vp9-svc: Allow usage of second (long term) temporal reference.

Allow for second temporal reference for top spatial layer in SVC,
when inter-layer prediction is disabled on INTER frames.
The second temporal reference is labelled as the golden reference
and the update/refresh of this reference buffer is only on base
temporal layer superframes. For now the period of refresh is
fixed at every 20 TL0 superframes.

Average gain is ~4% on RTC set, several clips up
by ~8-12%. Speed loss is about ~2% on mac.

Feature is disabled as default for now.

Change-Id: I2e5db5052c62dbe958a3b14be97d043823b7a529

6 years agoUnbreak the force inline directive for gcc
Luca Barbato [Mon, 28 May 2018 14:11:17 +0000 (16:11 +0200)]
Unbreak the force inline directive for gcc

Change-Id: I97d26285ec146628cbafd3573ca812c630c6687d

6 years agoMerge "VP9: exclude speed 9 from VBR datarate tests."
Jerome Jiang [Fri, 1 Jun 2018 23:04:35 +0000 (23:04 +0000)]
Merge "VP9: exclude speed 9 from VBR datarate tests."

6 years agoVP9: exclude speed 9 from VBR datarate tests.
Jerome Jiang [Fri, 1 Jun 2018 18:36:39 +0000 (11:36 -0700)]
VP9: exclude speed 9 from VBR datarate tests.

Change-Id: I4c4d31d013cb45e20918f4ef83ce32811d76e02b

6 years agoMerge "VP9: Allow for bilinear subpel interp at speed 9 for high motion."
Jerome Jiang [Thu, 31 May 2018 23:00:32 +0000 (23:00 +0000)]
Merge "VP9: Allow for bilinear subpel interp at speed 9 for high motion."

6 years agoMerge "vp9-svc: Fix to some frame metrics for real-time mode."
Marco Paniconi [Thu, 31 May 2018 22:22:57 +0000 (22:22 +0000)]
Merge "vp9-svc: Fix to some frame metrics for real-time mode."

6 years agoVP9: Allow for bilinear subpel interp at speed 9 for high motion.
Jerome Jiang [Wed, 23 May 2018 18:52:37 +0000 (11:52 -0700)]
VP9: Allow for bilinear subpel interp at speed 9 for high motion.

Fixed some settings in nonrd pick mode to allow for frame-level bilinear
to be set.
On Galaxy S8+ it has 4% speed up on high motion clips. Almost the same
for low motion.

0.17% quality loss on RTC.

Change-Id: I044a7de020183754ba08bb6c96c5a78ba5c7fea2

6 years agoMerge "Improve the ML based partition pruning"
Hui Su [Thu, 31 May 2018 21:04:40 +0000 (21:04 +0000)]
Merge "Improve the ML based partition pruning"

6 years agovp9-svc: Fix to some frame metrics for real-time mode.
Marco Paniconi [Thu, 31 May 2018 16:59:15 +0000 (09:59 -0700)]
vp9-svc: Fix to some frame metrics for real-time mode.

Add condition of LAST frame to the consec_zeromv and
avg_frame_low_motion metrics. This is needed for SVC as
the golden reference is a spatial reference and should
not be included in the metric computation.

Small/negligible change in metrics on RTC set.

Change-Id: I6ea16298fae566bb288c34cf50d120b509146eee