platform/upstream/libvpx.git
5 years agoMerge "Assign GOP frame offset to all the coding frames"
Jingning Han [Tue, 18 Sep 2018 03:53:09 +0000 (03:53 +0000)]
Merge "Assign GOP frame offset to all the coding frames"

5 years agoMerge "cosmetics: normalize include guards"
James Zern [Tue, 18 Sep 2018 03:38:15 +0000 (03:38 +0000)]
Merge "cosmetics: normalize include guards"

5 years agovpx_mem: allow VPX_MAX_ALLOCABLE_MEMORY to be overridden
James Zern [Mon, 17 Sep 2018 19:32:58 +0000 (12:32 -0700)]
vpx_mem: allow VPX_MAX_ALLOCABLE_MEMORY to be overridden

this allows the define to be set by the build environment

Change-Id: Ib40111c5d9bae417b031b8b40a7bc135c6734044

5 years agoAssign GOP frame offset to all the coding frames
Jingning Han [Mon, 17 Sep 2018 16:30:37 +0000 (09:30 -0700)]
Assign GOP frame offset to all the coding frames

Overload the use of arf_src_offset to account the relative frame
offset for all the coding frames within a GOP.

Change-Id: Ia86dede37c6a93d9f23098c15dbd936acefd75dc

5 years agoRemove multi_arf_last_grp_enabled flag.
Paul Wilkins [Mon, 17 Sep 2018 14:45:57 +0000 (15:45 +0100)]
Remove multi_arf_last_grp_enabled flag.

Delete flag and associated code.

Change-Id: I899d258a4cd7b84de9136ccfa27cf8a50108b130

5 years agoRemove multi_arf_enabled.
Paul Wilkins [Mon, 17 Sep 2018 14:41:13 +0000 (15:41 +0100)]
Remove multi_arf_enabled.

Remove deprecated multi_arf_enabled flag and associated code.

Change-Id: I73f06362a10faa5b3bd91a78eedb201a96434f18

5 years agoRemove multi_arf_allowed variable.
Paul Wilkins [Mon, 17 Sep 2018 14:28:23 +0000 (15:28 +0100)]
Remove multi_arf_allowed variable.

Removes deprecated multi_arf_allowed variable and dependent code.

Change-Id: Ic1cf341f807c38207e728c48a4c4442387db93ff

5 years agocosmetics: normalize include guards
James Zern [Wed, 22 Aug 2018 21:03:54 +0000 (14:03 -0700)]
cosmetics: normalize include guards

use the recommended format [1] of:
<PROJECT>_<PATH>_<FILE>_H_

[1] https://google.github.io/styleguide/cppguide.html#The__define_Guard
"All header files should have #define guards to prevent multiple
inclusion. The format of the symbol name should be
<PROJECT>_<PATH>_<FILE>_H_."

Change-Id: I2e8ab0b32fb23c30fa43cff5fec12d043c0d2037

5 years agofix a bug of tiny_ssim to handle odd frame sizes
Liu Peng [Fri, 14 Sep 2018 21:25:44 +0000 (16:25 -0500)]
fix a bug of tiny_ssim to handle odd frame sizes

Change-Id: Id8ef0eb211517a8f8ec764ec398d16efb9320540

5 years agofix a bug of tiny_ssim when the bit depth is 8
Liu Peng [Fri, 14 Sep 2018 20:04:16 +0000 (15:04 -0500)]
fix a bug of tiny_ssim when the bit depth is 8

Change-Id: I2563e661c71b474fe04b70cd9b713d478a27ac5f

5 years agoMerge changes Ic6b9330f,Ibe14a023
Angie Chiang [Fri, 14 Sep 2018 00:10:19 +0000 (00:10 +0000)]
Merge changes Ic6b9330f,Ibe14a023

* changes:
  Fix mv_arr assignment
  Dump tpl mvs for mv search block

5 years agoFix mv_arr assignment
Angie Chiang [Thu, 13 Sep 2018 19:14:46 +0000 (12:14 -0700)]
Fix mv_arr assignment

Change-Id: Ic6b9330ffb9b75b3a8441024fbf8ba53c134621b

5 years agoDump tpl mvs for mv search block
Angie Chiang [Thu, 13 Sep 2018 00:44:45 +0000 (17:44 -0700)]
Dump tpl mvs for mv search block

Change-Id: Ibe14a02391b960e030c4a48e61718e43a5a65788

5 years agoMerge "Dump ref frame when DUMP_TPL_STATS is on"
Angie Chiang [Thu, 13 Sep 2018 16:58:43 +0000 (16:58 +0000)]
Merge "Dump ref frame when DUMP_TPL_STATS is on"

5 years agoMerge "Initial step in deprecating previous dual arf code."
Jingning Han [Thu, 13 Sep 2018 16:57:52 +0000 (16:57 +0000)]
Merge "Initial step in deprecating previous dual arf code."

5 years agoMerge "Remove deprecated first_inter_index"
Jingning Han [Thu, 13 Sep 2018 16:19:46 +0000 (16:19 +0000)]
Merge "Remove deprecated first_inter_index"

5 years agoMerge "Remove unused variables from VP9_COMP"
Jingning Han [Thu, 13 Sep 2018 16:19:39 +0000 (16:19 +0000)]
Merge "Remove unused variables from VP9_COMP"

5 years agoInitial step in deprecating previous dual arf code.
Paul Wilkins [Thu, 13 Sep 2018 13:21:46 +0000 (14:21 +0100)]
Initial step in deprecating previous dual arf code.

Always use cpi->multi_layer_arf branch if enable_auto_arf >= 2.

Use enable_auto_arf value to indicate max number of ARF
levels to use in multi-arf case.

Further cleanup to of old code follow in seperate patches.

Change-Id: I25cd1e4a119a2d482a15705f5126389054764f9f

5 years agoRemove deprecated first_inter_index
Jingning Han [Thu, 13 Sep 2018 05:51:19 +0000 (22:51 -0700)]
Remove deprecated first_inter_index

With the refactoring of logics that determines if a frame needs
re-code runs to adapt to the target bit-rate, the variable
first_inter_index is no longer in effect use. Hence remove it.

Change-Id: I045894ad1f8b1e00fa40d5a55d762bad0d31b27d

5 years agoRemove unused variables from VP9_COMP
Jingning Han [Thu, 13 Sep 2018 05:49:07 +0000 (22:49 -0700)]
Remove unused variables from VP9_COMP

Change-Id: I853e0925d29becb9c1f84e5c00d84649fb070a07

5 years agoDump ref frame when DUMP_TPL_STATS is on
Angie Chiang [Tue, 11 Sep 2018 22:51:54 +0000 (15:51 -0700)]
Dump ref frame when DUMP_TPL_STATS is on

Also add a python script to parse the dumped results.

Change-Id: I1abea5a7c04d852ec40ce37d758af21960b6e589

5 years agoMerge "Revert "Revert "Loopfilter MultiThread Optimization"""
Harish Mahendrakar [Wed, 12 Sep 2018 23:15:24 +0000 (23:15 +0000)]
Merge "Revert "Revert "Loopfilter MultiThread Optimization"""

5 years agoMerge changes I7173f2fe,I460b6c4b,I5070657f,I2b3e1e16
Jingning Han [Wed, 12 Sep 2018 21:06:53 +0000 (21:06 +0000)]
Merge changes I7173f2fe,I460b6c4b,I5070657f,I2b3e1e16

* changes:
  Remove some deprecated FRAME_UPDATE_TYPE elements.
  Remove some deprecated constants.
  Remove unused rate control data elements
  Remove extra_arf_allowed.

5 years agoRemove some deprecated FRAME_UPDATE_TYPE elements.
Paul Wilkins [Wed, 12 Sep 2018 11:53:10 +0000 (12:53 +0100)]
Remove some deprecated FRAME_UPDATE_TYPE elements.

Removal of some frame types relating to deprecated multi-arf work.

Added a dummy value for the USE_BUF_FRAME frame type in the
declaration of the rd_frame_type_factor[FRAME_UPDATE_TYPES] structure.

Change-Id: I7173f2fe33a53117e1bde6f9621efc1a5951240b

5 years agoMerge "Fix rate control bug with recode all."
Paul Wilkins [Wed, 12 Sep 2018 11:57:02 +0000 (11:57 +0000)]
Merge "Fix rate control bug with recode all."

5 years agoRemove some deprecated constants.
Paul Wilkins [Wed, 12 Sep 2018 11:37:05 +0000 (12:37 +0100)]
Remove some deprecated constants.

Removal of some # defines relating to deprecated multi-arf work.

Change-Id: I460b6c4bee9bf0ef588eddc47329c2b17f60e5ba

5 years agoRemove unused rate control data elements
Paul Wilkins [Wed, 12 Sep 2018 11:27:04 +0000 (12:27 +0100)]
Remove unused rate control data elements

Removal of rate control structure elements related to Zoe's
deprecated multi laryer ARF work.

Change-Id: I5070657f91df7bd3f9137cf74016f737313417c8

5 years agoRemove extra_arf_allowed.
Paul Wilkins [Wed, 12 Sep 2018 11:06:36 +0000 (12:06 +0100)]
Remove extra_arf_allowed.

Removed VP9_COMP element that is no longer used.

Change-Id: I2b3e1e16244074e3510c1467b0e7532213c4ae05

5 years agoMerge "Enable rectangular partition search for speed 1"
Paul Wilkins [Wed, 12 Sep 2018 11:03:50 +0000 (11:03 +0000)]
Merge "Enable rectangular partition search for speed 1"

5 years agoMerge changes I306c582c,Id5389285
Paul Wilkins [Wed, 12 Sep 2018 11:01:38 +0000 (11:01 +0000)]
Merge changes I306c582c,Id5389285

* changes:
  Remove configure_multi_arf_buffer_updates()
  Remove update_multi_arf_ref_frames()

5 years agoMerge changes I97111413,Idcd6dcbc
Paul Wilkins [Wed, 12 Sep 2018 11:01:20 +0000 (11:01 +0000)]
Merge changes I97111413,Idcd6dcbc

* changes:
  Clean up define_gf_group()
  Clean up deprecated gop structure code

5 years agoMerge "Set GF frame layer depth to be 0"
Paul Wilkins [Wed, 12 Sep 2018 11:00:49 +0000 (11:00 +0000)]
Merge "Set GF frame layer depth to be 0"

5 years agoRevert "Revert "Loopfilter MultiThread Optimization""
Venkatarama NG. Avadhani [Wed, 5 Sep 2018 05:05:04 +0000 (10:35 +0530)]
Revert "Revert "Loopfilter MultiThread Optimization""

This reverts commit 753fd86e86ac727dccac88376260b8f54502f2a3.

This also has the fix for the DoS reported in bug 1558.

BUG=webm:1558

Change-Id: I65ea84e0c11d6bd40d8cb0587dfe934b3ac11dce

5 years agoRemove configure_multi_arf_buffer_updates()
Jingning Han [Tue, 11 Sep 2018 21:35:42 +0000 (14:35 -0700)]
Remove configure_multi_arf_buffer_updates()

The bit-stream syntax doesn't support lst2/3/bwd reference frame
update. Remove the deprecated function that goes such assumption.

Change-Id: I306c582c2efc63928e4231adef2ee549076a987c

5 years agoRemove update_multi_arf_ref_frames()
Jingning Han [Tue, 11 Sep 2018 21:14:03 +0000 (14:14 -0700)]
Remove update_multi_arf_ref_frames()

The bit-stream syntax doesn't support the use of lst2/3 frames.
Remove the update_multi_arf_ref_frames() function that assumes
such functionality.

Change-Id: Id5389285c84fe6c578c52d210aa47ef3cb789f8e

5 years agoMerge "Simplify vp9_frame_type_qdelta()"
Jingning Han [Tue, 11 Sep 2018 23:32:34 +0000 (23:32 +0000)]
Merge "Simplify vp9_frame_type_qdelta()"

5 years agoMerge "Store mv/inter_cost/recon_error/err for ref frames"
Angie Chiang [Tue, 11 Sep 2018 22:52:18 +0000 (22:52 +0000)]
Merge "Store mv/inter_cost/recon_error/err for ref frames"

5 years agoClean up define_gf_group()
Jingning Han [Tue, 11 Sep 2018 21:12:29 +0000 (14:12 -0700)]
Clean up define_gf_group()

Remove deprecated extra_arf_allowed code.

Change-Id: I97111413e6465475e750106fddef8f344db53405

5 years agoClean up deprecated gop structure code
Jingning Han [Tue, 11 Sep 2018 21:05:31 +0000 (14:05 -0700)]
Clean up deprecated gop structure code

Gradually integrate the single-/multi-layer ARF and dual ARF
encoder control. Remove deprecated code.

Change-Id: Idcd6dcbca3f8d7597878d83dec421e16be819f55

5 years agoSimplify vp9_frame_type_qdelta()
Jingning Han [Tue, 11 Sep 2018 17:50:49 +0000 (10:50 -0700)]
Simplify vp9_frame_type_qdelta()

Make direct use of frame type in the available VP9_COMMON structure.
Eliminate the need to map through rf_level to fetch the frame type.
This change doesn't alter the coding stats. It simplifies the
vp9_frame_type_qdelta() function logic and removes unnecessary
reference to rf_level.

Change-Id: I1a7b2f5abcae39aa4a60d08a6011dde38ecf3b58

5 years agoSet GF frame layer depth to be 0
Jingning Han [Tue, 11 Sep 2018 16:19:37 +0000 (09:19 -0700)]
Set GF frame layer depth to be 0

Set the golden frame layer depth as 0 - the base layer in temporal
domain.

Change-Id: If63e1524a567fcff6162f4283811298551516be5

5 years agoRemove unused constant definition
Jingning Han [Tue, 11 Sep 2018 16:27:33 +0000 (09:27 -0700)]
Remove unused constant definition

ARF_DECAY_BREAKOUT is no long used.

Change-Id: I553f8a3087389f0343444e2551581e9de02d3427

5 years agoLocalize variable definitions
Jingning Han [Tue, 11 Sep 2018 16:21:45 +0000 (09:21 -0700)]
Localize variable definitions

Localize variable definitions in setup_frames() and
two_pass_first_group_inter().

Change-Id: I66e842791d679be6d22cef50e0b395b5aa380eac

5 years agoMerge "Rework two_pass_first_group_inter()"
Jingning Han [Tue, 11 Sep 2018 04:04:31 +0000 (04:04 +0000)]
Merge "Rework two_pass_first_group_inter()"

5 years agoMerge "Separate frame context index for GOP layers"
Jingning Han [Tue, 11 Sep 2018 04:04:14 +0000 (04:04 +0000)]
Merge "Separate frame context index for GOP layers"

5 years agoMerge "Assign layer depth for all coding frames"
Jingning Han [Tue, 11 Sep 2018 04:03:52 +0000 (04:03 +0000)]
Merge "Assign layer depth for all coding frames"

5 years agoMerge "Refactor block_rd_txfm()"
Hui Su [Tue, 11 Sep 2018 02:18:18 +0000 (02:18 +0000)]
Merge "Refactor block_rd_txfm()"

5 years agoRework two_pass_first_group_inter()
Jingning Han [Mon, 10 Sep 2018 18:55:10 +0000 (11:55 -0700)]
Rework two_pass_first_group_inter()

This function is used to in part decide if to trigger recode loop
for the first normal P frame in a GOP. Rework its design logic to
support the GOP with multi-layer ARF. Allow recode when there is
a transition from ARF/OVERLAY/USE_BUF to normal P frame.

The overall coding performance for multi-ARF gets slightly better
(less than 0.1% for show_existing_frame case). Tested on a few
clips, the encoding speed remains similar too. This change primarily
serves to help integration of multi-layer ARF and dual-ARF systems.

Change-Id: Ia44e44526b05029b1546985b3eb649e767d5444f

5 years agoRefactor block_rd_txfm()
Hui Su [Mon, 10 Sep 2018 18:53:04 +0000 (11:53 -0700)]
Refactor block_rd_txfm()

Merge two identical if branches.

Change-Id: Ie012ba9c116a30ef6fa2e7868c7a4ba886b99bc6

5 years agoStore mv/inter_cost/recon_error/err for ref frames
Angie Chiang [Wed, 5 Sep 2018 18:56:42 +0000 (11:56 -0700)]
Store mv/inter_cost/recon_error/err for ref frames

These information will help with making better mv search decision

Add functionality to dump tpl_stats for offline analysis

Change-Id: Ic2ec34368499c9bccb4d1f21a12b66453847fcf2

5 years agoSeparate frame context index for GOP layers
Jingning Han [Fri, 7 Sep 2018 23:37:42 +0000 (16:37 -0700)]
Separate frame context index for GOP layers

Use separate frame context index to code frames at different layers.
The maximum index cap is set as 3. This improves the compression
performance of multi-layer ARF by 0.15% across the test sets.

The overall coding gains from multi-layer ARF are

         avg PSNR       ovarall PSNR        SSIM
lowres   -3.9%            -3.7%            -3.2%
midres   -3.5%            -3.2%            -2.3%
nflx2k   -4.3%            -4.6%            -3.0%

Change-Id: I8a0b345fdd47823c018544a6b4748753faf89dc1

5 years agofix vp9_svc_adjust_frame_rate signature
James Zern [Sat, 8 Sep 2018 20:53:46 +0000 (13:53 -0700)]
fix vp9_svc_adjust_frame_rate signature

match the const in the header; quiets a visual studio warning.

since:
04b3d49ba vp9-svc: Allow for setting framerate per spatial layer.

Change-Id: I0a216eb8fe1a689fe6822bbfac70f7c98e9b1a70

5 years agoFix rate control bug with recode all.
Paul Wilkins [Thu, 6 Sep 2018 14:56:01 +0000 (15:56 +0100)]
Fix rate control bug with recode all.

This patch fixes a rate control bug that can manifest if the recode
loop is activated for all frame types. Specifically things go wrong when the
recode loop is used on an overlay frame that has a rate target of 0 bits.

The patch prevents adjustment of the active worst quality and repeat recode
loops for overlay frames.

The bug showed up during artificial experiments on re-distribution of bits in
ARF groups but does not activate in any current encode profile, as even best
best quality does not currently allow recodes for all frames.

Change-Id: I80872093d9ebd3350106230c42c3928e56ecb754

5 years agoMerge "Fork auto-alt-ref control"
Jingning Han [Sat, 8 Sep 2018 02:26:52 +0000 (02:26 +0000)]
Merge "Fork auto-alt-ref control"

5 years agoMerge "Extend auto-alt-ref parameter range"
Jingning Han [Sat, 8 Sep 2018 02:26:47 +0000 (02:26 +0000)]
Merge "Extend auto-alt-ref parameter range"

5 years agoMerge "Add non-greedy-mv experimental flag"
Angie Chiang [Sat, 8 Sep 2018 01:02:21 +0000 (01:02 +0000)]
Merge "Add non-greedy-mv experimental flag"

5 years agoAssign layer depth for all coding frames
Jingning Han [Fri, 7 Sep 2018 22:59:14 +0000 (15:59 -0700)]
Assign layer depth for all coding frames

Assign layer depth for the base layer ARF and the normal frames.

Change-Id: I81cbb2846c3176336622f9006701c0219652905a

5 years agoMerge "Add NORMAL_BOOST macro"
Jingning Han [Fri, 7 Sep 2018 22:27:23 +0000 (22:27 +0000)]
Merge "Add NORMAL_BOOST macro"

5 years agoEnable rectangular partition search for speed 1
Hui Su [Tue, 4 Sep 2018 21:44:02 +0000 (14:44 -0700)]
Enable rectangular partition search for speed 1

This patch enables rectangular partition search on speed 1. The encoding
speed loss is reduced thanks to recently added speed features.

This only affects speed 1 low bit-depth encoding.

Coding gains:
           avg_psnr     ovr_psnr    ssim
lowres      0.577%       0.621%    0.665%
midres      1.147%       1.215%    1.148%
hdres       0.758%       0.790%    0.769%

Tested encoding speed on 15 midres and 15 hdres clips, average speed
loss:
           QP=30       QP=40        QP=50
midres     4.43%       3.72%       -1.05%
hdres      4.41%       5.65%        3.77%

Change-Id: Ifc0712becccc69f7498796359ff12dbfa63fd7b3

5 years agoFork auto-alt-ref control
Jingning Han [Fri, 7 Sep 2018 17:25:07 +0000 (10:25 -0700)]
Fork auto-alt-ref control

Temporarily fork the auto-alt-ref control meaning. When it is set
to be 1, use single layer ARF as baseline. The value 2 would enable
dual ARF system. Any number above it would trigger automatic multi-
layer ARFs.

We would gradually refactor and integrate dual ARF and multi-layer
ARF systems next, and eventually make auto-alt-ref directly control
the layer depth.

Change-Id: I292d27111ae8a596b97444afecf4b896043e543f

5 years agoExtend auto-alt-ref parameter range
Jingning Han [Fri, 7 Sep 2018 17:20:56 +0000 (10:20 -0700)]
Extend auto-alt-ref parameter range

Extend the upper limit from 2 (dual ARFs) to maximum ARF layers.
This would later allow --auto-alt-ref to directly control the
ARF layer depth later on.

Change-Id: I6324fe980122e73dc98f81c8d7de1193a1a16e51

5 years agoAdd NORMAL_BOOST macro
Jingning Han [Thu, 6 Sep 2018 23:58:55 +0000 (16:58 -0700)]
Add NORMAL_BOOST macro

Normal frame boost factor is set to be 100 as the baseline for
ARF boost. Replace the hard coded number with a macro.

Change-Id: I81ce30138f7819844e7a2d811de9e1ccbeb85da5

5 years agoMerge "vp9-svc: Allow for setting framerate per spatial layer."
Marco Paniconi [Thu, 6 Sep 2018 16:17:50 +0000 (16:17 +0000)]
Merge "vp9-svc: Allow for setting framerate per spatial layer."

5 years agoMerge "Fix short first kf bug."
Paul Wilkins [Thu, 6 Sep 2018 14:24:05 +0000 (14:24 +0000)]
Merge "Fix short first kf bug."

5 years agoMerge "Revert "Revert "Prevent double application of min rate in two pass."""
Paul Wilkins [Thu, 6 Sep 2018 14:23:54 +0000 (14:23 +0000)]
Merge "Revert "Revert "Prevent double application of min rate in two pass."""

5 years agoMerge "Adaptive ARF factor decision"
Jingning Han [Thu, 6 Sep 2018 03:45:22 +0000 (03:45 +0000)]
Merge "Adaptive ARF factor decision"

5 years agoMerge "Recursive rate allocation for multi-layer ARF coding"
Jingning Han [Thu, 6 Sep 2018 03:45:13 +0000 (03:45 +0000)]
Merge "Recursive rate allocation for multi-layer ARF coding"

5 years agoMerge "Enable adaptive rate allocation for multi-layer ARFs"
Jingning Han [Thu, 6 Sep 2018 03:45:08 +0000 (03:45 +0000)]
Merge "Enable adaptive rate allocation for multi-layer ARFs"

5 years agoMerge "Initialize the best partition before partition RDO"
Hui Su [Wed, 5 Sep 2018 22:02:22 +0000 (22:02 +0000)]
Merge "Initialize the best partition before partition RDO"

5 years agoInitialize the best partition before partition RDO
Hui Su [Wed, 5 Sep 2018 20:00:56 +0000 (13:00 -0700)]
Initialize the best partition before partition RDO

This fixes the multi-thread encoder test failure.

Change-Id: I0c1845922068e71097a387db0969ca419accb3ed

5 years agoAdd non-greedy-mv experimental flag
Angie Chiang [Wed, 5 Sep 2018 18:46:45 +0000 (11:46 -0700)]
Add non-greedy-mv experimental flag

The experiment aims at making non-greedy mv search decision

Change-Id: I3d77048ce106771fe003f250d07b7ddf0112536f

5 years agovp9-svc: Allow for setting framerate per spatial layer.
Marco Paniconi [Wed, 29 Aug 2018 22:05:46 +0000 (15:05 -0700)]
vp9-svc: Allow for setting framerate per spatial layer.

Add duration to set_svc_ref_frame_config.

BUG=b/113346831

Change-Id: I63613aed6b1183f98d04831600a6bdd645c740df

5 years agoAdaptive ARF factor decision
Jingning Han [Fri, 31 Aug 2018 22:54:10 +0000 (15:54 -0700)]
Adaptive ARF factor decision

Re-count the factors to decide bit boost factor for the
intermediate layer ARFs. Make the gfu_boost factor assigned to
each ARF adapt to its local factors.

This and the recursive change 5bfe9eb together improves the
multi-layer ARF compression performance:

          avg_psnr      ovr_psnr     ssim
lowres    -0.39%        -0.54%       -1.6%
midres    -0.98%        -1.26%       -2.3%
hdres     -0.95%        -1.13%       -2.3%

Change-Id: I5fec3ea75cae58825787dc88dadc7e8697a041ea

5 years agoRecursive rate allocation for multi-layer ARF coding
Jingning Han [Thu, 30 Aug 2018 04:30:35 +0000 (21:30 -0700)]
Recursive rate allocation for multi-layer ARF coding

Recursively calculate the rate boost for the ARF frames at the
given layer depth from the remaining available bit resource after
the prior layer ARFs consumption.

Change-Id: I0e31bac4f87b895ca20605dc1307a8fc0d2a516d

5 years agoEnable adaptive rate allocation for multi-layer ARFs
Jingning Han [Tue, 28 Aug 2018 21:08:02 +0000 (14:08 -0700)]
Enable adaptive rate allocation for multi-layer ARFs

Increase the bit allocation for the intermediate layer ARFs. The
current strategy assigns higher offset to the lower layer ARFs.
The needed budget is borrowed from the base layer ARF allocation.

Change-Id: I16b6e9cce4dab8e73e7b097674d1a8504205026e

5 years agoMerge "Increase encoder buffer for multi-layer ARFs"
Jingning Han [Wed, 5 Sep 2018 14:30:19 +0000 (14:30 +0000)]
Merge "Increase encoder buffer for multi-layer ARFs"

5 years agoMerge "Structure the multi-layer ARF locations"
Jingning Han [Wed, 5 Sep 2018 14:30:13 +0000 (14:30 +0000)]
Merge "Structure the multi-layer ARF locations"

5 years agoMerge "Move partition search ML models to a seperate file"
Hui Su [Wed, 5 Sep 2018 04:31:58 +0000 (04:31 +0000)]
Merge "Move partition search ML models to a seperate file"

5 years agoMerge "Assign target bits for multi-layer ARF system"
Jingning Han [Tue, 4 Sep 2018 18:29:25 +0000 (18:29 +0000)]
Merge "Assign target bits for multi-layer ARF system"

5 years agoMove partition search ML models to a seperate file
Hui Su [Tue, 4 Sep 2018 17:05:15 +0000 (10:05 -0700)]
Move partition search ML models to a seperate file

Clean up vp9_encodeframe.c.

Change-Id: I4035fee94da746c74d72f71ca8334f91c5d10116

5 years agovp9-svc: Fix to first_spatial_to_encode for pattern constraint.
Marco Paniconi [Tue, 4 Sep 2018 16:08:49 +0000 (09:08 -0700)]
vp9-svc: Fix to first_spatial_to_encode for pattern constraint.

Change-Id: I876f69acf9420b3b013cb3048bbfa8ff059e2e50

5 years agoIncrease encoder buffer for multi-layer ARFs
Jingning Han [Tue, 28 Aug 2018 19:43:34 +0000 (12:43 -0700)]
Increase encoder buffer for multi-layer ARFs

When multi-layer ARF mode is enabled, increase the encoder buffer
to account for the situation where several ARFs are coded together
in a frame packet.

Change-Id: I4e53095f6b6ac5a3c8d79414411ac39880bf1523

5 years agoStructure the multi-layer ARF locations
Jingning Han [Tue, 28 Aug 2018 17:52:32 +0000 (10:52 -0700)]
Structure the multi-layer ARF locations

Fine tune the multi-layer ARF location decisions. Support deeper
layer structure.

Change-Id: I3e44cf52b6813f6267bcd7266f9aa1b7ded57f8e

5 years agoMerge "ML based rectangular partition search pruning"
Hui Su [Tue, 4 Sep 2018 16:38:12 +0000 (16:38 +0000)]
Merge "ML based rectangular partition search pruning"

5 years agoFix short first kf bug.
Paul Wilkins [Mon, 3 Sep 2018 15:48:02 +0000 (16:48 +0100)]
Fix short first kf bug.

This change is in response to quality issue in b/112953058

The quality regression observed is a result of a bug that manifested
because of a very short key frame group at the start of a chunk.
The group was so short that it was less than the minimum allowed
length of an ARF group, so the initial group was coded as a GF only
group. However, group length was not set correctly and the result
was a frame coded with a target of 0 bits.

This causes two problems:

Firstly one very poor frame that caused the issue to be raised.

Secondly that one  frame obviously overshoots its 0 target very heavily
and this has the effect moving the needle significantly in terms of the
adaptive rate control (specifically the estimate of bits per macro block
used to estimate the active Q range). Consequently there is undershoot
for most of the rest of the chunk and the overall rate ends up much lower
than the target (14Mb/s vs a target of 22Mb/s). (The sharp drop in the
overall rate is also noted in the issue.

BUG=b/112953058

Change-Id: Ide9cce57acd3dee0f9496b752902e7b4735f2c7f

5 years agoAssign target bits for multi-layer ARF system
Jingning Han [Mon, 27 Aug 2018 23:17:29 +0000 (16:17 -0700)]
Assign target bits for multi-layer ARF system

Keep the ARF and P frame rate allocation distribution. All the
intermediate ARFs are treated same as regular P frames.

Change-Id: I7807b8e6a8f19b6e1b09b9b7d119b3c88ef90b67

5 years agoMerge "Properly update the raw_src_frame for psnr calculation"
Jingning Han [Tue, 4 Sep 2018 14:10:34 +0000 (14:10 +0000)]
Merge "Properly update the raw_src_frame for psnr calculation"

5 years agoMerge "Build arf index stack"
Jingning Han [Tue, 4 Sep 2018 14:08:45 +0000 (14:08 +0000)]
Merge "Build arf index stack"

5 years agoMerge "vp9-svc: Add bypass flag to constrain inter_layer."
Marco Paniconi [Tue, 4 Sep 2018 04:07:53 +0000 (04:07 +0000)]
Merge "vp9-svc: Add bypass flag to constrain inter_layer."

5 years agovp9-svc: Add bypass flag to constrain inter_layer.
Marco Paniconi [Mon, 3 Sep 2018 17:15:38 +0000 (10:15 -0700)]
vp9-svc: Add bypass flag to constrain inter_layer.

The additional constraint imposed on inter-layer
prediction should only be done for non-bypass (fixed)
svc mode.

Change-Id: Ia22cdb7bc21684776c9a13397e177a1e1c3d55a2

5 years agoRevert "Revert "Prevent double application of min rate in two pass.""
Paul Wilkins [Mon, 3 Sep 2018 15:12:22 +0000 (16:12 +0100)]
Revert "Revert "Prevent double application of min rate in two pass.""

This rate control bug in the original patch is not the underlying cause
of the quality regression but simply unmasked a problem which stems
from applying 0 bits to the last frame in a short KF group at the start
of a chunk.

This reverts commit d10b1f233657054b1465d40f0b409c20029a540b.

Change-Id: I32c91a24a14d013853bb8e5587aa69600e6a0063

5 years agovp9-svc: Fix condition for pattern constraints
Marco Paniconi [Mon, 3 Sep 2018 05:17:32 +0000 (22:17 -0700)]
vp9-svc: Fix condition for pattern constraints

For fixed/non-flexible SVC mode: on non-key spatial
enhancement layers modify constraint on the inter-layer
prediction to include the first_spatial_layer_to_encode.

Change-Id: I6a59174976ad72d555653704dcd3b03c52e31b6f

5 years agoProperly update the raw_src_frame for psnr calculation
Jingning Han [Mon, 27 Aug 2018 22:58:41 +0000 (15:58 -0700)]
Properly update the raw_src_frame for psnr calculation

Update the raw_src_frame to be the current input source frame in
the show_existing_frame mode.

Change-Id: Ia8edf49ca948c45ffe6c60556756b36124ab092a

5 years agoBuild arf index stack
Jingning Han [Sun, 26 Aug 2018 04:39:59 +0000 (21:39 -0700)]
Build arf index stack

Stack the ARF frame indexes. Use the most recent one as the ARF
reference frame for frame coding.

Change-Id: I88a2202fa5deb2587d861b434d27ab8de0642cf7

5 years agovp9-svc: Add first_spatial_layer_to_encode per superframe
Marco Paniconi [Fri, 31 Aug 2018 22:42:19 +0000 (15:42 -0700)]
vp9-svc: Add first_spatial_layer_to_encode per superframe

VP9E_SET_SVC_LAYER_ID sets the first spatial layer to
encoder per superframe, so add this parameter to svc encoder.
This is needed, for example, to properly set is_key_frame for
spatial layers when base spatial layer is skipped encoded.

Change-Id: Ifd4ac77f539197ec021e62f4c624a6cc79d64f43

5 years agoML based rectangular partition search pruning
Hui Su [Tue, 17 Jul 2018 05:05:19 +0000 (22:05 -0700)]
ML based rectangular partition search pruning

Add a ML model to predict if rectangular partition search can be skipped
without much coding loss. This model is enabled for speed 0 low bitdepth
only.

Impact on coding performance is minor:
             avg_psnr     ovr_psnr     ssim
lowres       -0.005%       0.005%     0.017%
midres        0.100%       0.114%     0.134%
hdres         0.048%       0.083%     0.074%
jvet480p      0.035%       0.027%     0.044%
jvet720p      0.094%       0.090%     0.174%

Tested encoding speed over 20 midres and hdres clips, average speed
gain is about 8%; maximum speed gain is 23%.

Change-Id: I5d4029dec7134c53ac68ab6cf0c8077dc0b767ed

5 years agoMerge "Fix arf_src_offset calculation"
Jingning Han [Fri, 31 Aug 2018 18:19:47 +0000 (18:19 +0000)]
Merge "Fix arf_src_offset calculation"

5 years agoMerge "Set minimum frame size to be 1 byte"
Jingning Han [Fri, 31 Aug 2018 18:19:42 +0000 (18:19 +0000)]
Merge "Set minimum frame size to be 1 byte"

5 years agoMerge "Prepare multi-layer ARF coding structure"
Jingning Han [Fri, 31 Aug 2018 18:19:32 +0000 (18:19 +0000)]
Merge "Prepare multi-layer ARF coding structure"

5 years agoMerge "Build up multi-layer ARF processing order"
Jingning Han [Fri, 31 Aug 2018 18:19:13 +0000 (18:19 +0000)]
Merge "Build up multi-layer ARF processing order"