platform/upstream/libvpx.git
2 years agoMerge "Revert "Revert "[NEON] Optimize vp9_diamond_search_sad() for NEON""" into...
James Zern [Mon, 11 Jul 2022 19:58:21 +0000 (19:58 +0000)]
Merge "Revert "Revert "[NEON] Optimize vp9_diamond_search_sad() for NEON""" into main

2 years agoRevert "Revert "[NEON] Optimize vp9_diamond_search_sad() for NEON""
Konstantinos Margaritis [Wed, 6 Jul 2022 08:42:54 +0000 (08:42 +0000)]
Revert "Revert "[NEON] Optimize vp9_diamond_search_sad() for NEON""

This reverts commit 9f1329f8ac88ea5d7c6ae5d6a57221c36cf85ac8
and fixes a dumb mistake in evaluation of vfcmv. Used vdupq_n_s16,
instead of vdupq_n_s32.

Change-Id: Ie236c878c166405c49bc0f93f6d63a6715534a0a

2 years agoMerge "VPX: Add quantize speed test for ref vs opt." into main
Scott LaVarnway [Thu, 7 Jul 2022 22:15:45 +0000 (22:15 +0000)]
Merge "VPX: Add quantize speed test for ref vs opt." into main

2 years agoVPX: Add quantize speed test for ref vs opt.
Scott LaVarnway [Thu, 7 Jul 2022 13:34:11 +0000 (06:34 -0700)]
VPX: Add quantize speed test for ref vs opt.

Bug: b/237714063

Change-Id: I4304ba8d976fed3613e28442983b04a9cfc15b79

2 years agoRevert "Fix bug with smaller width bigger size"
James Zern [Wed, 6 Jul 2022 22:06:51 +0000 (15:06 -0700)]
Revert "Fix bug with smaller width bigger size"

This reverts commit 5b530fc962bcb8a51bbf03f5fbc2912f21b86e70.

This fixes memory related fuzzer failures in the decoder.

Bug: webm:1642
Bug: oss-fuzz:48609
Bug: oss-fuzz:48629
Bug: oss-fuzz:48632
Bug: oss-fuzz:48638
Bug: oss-fuzz:48639
Bug: oss-fuzz:48651
Bug: oss-fuzz:48657
Bug: oss-fuzz:48659
Bug: oss-fuzz:48660
Bug: oss-fuzz:48661
Bug: oss-fuzz:48680
Bug: oss-fuzz:48686
Bug: oss-fuzz:48697
Bug: oss-fuzz:48706
Bug: oss-fuzz:48712
Bug: oss-fuzz:48717
Bug: oss-fuzz:48728
Bug: oss-fuzz:48732
Bug: oss-fuzz:48780
Bug: oss-fuzz:48781
Bug: oss-fuzz:48782
Bug: oss-fuzz:48785
Change-Id: I67a8539a3083f00eec1164fef5c6a8bc209f91fc

2 years agoMerge "Fix bug with smaller width bigger size" into main
Jerome Jiang [Fri, 1 Jul 2022 14:37:32 +0000 (14:37 +0000)]
Merge "Fix bug with smaller width bigger size" into main

2 years agoFix bug with smaller width bigger size
Jerome Jiang [Thu, 30 Jun 2022 17:48:56 +0000 (13:48 -0400)]
Fix bug with smaller width bigger size

Bug: webm:1642

Change-Id: I831b7701495eebeeff6bdc0b570f737bb6d536c6

2 years agoABI compatibility to CHANGELOG for prev releases.
Jerome Jiang [Thu, 30 Jun 2022 14:53:15 +0000 (10:53 -0400)]
ABI compatibility to CHANGELOG for prev releases.

Bug: webm:1757
Change-Id: I19576aa0bc065045dcb0eaf770ae5b0d9ac9d684

2 years agortc: Add svc test for profile 2 10/12 bit
Marco Paniconi [Wed, 29 Jun 2022 17:35:36 +0000 (10:35 -0700)]
rtc: Add svc test for profile 2 10/12 bit

Add TODO to fix the superframe parser
for 10/12 bit.

Change-Id: Ib76c4daa0ff2f516510829ead6a397c89abba2f3

2 years agortc-svc: Fix to make SVC work for Profile 1
Marco Paniconi [Tue, 28 Jun 2022 18:22:48 +0000 (11:22 -0700)]
rtc-svc: Fix to make SVC work for Profile 1

Added datarate unittest for 4:4:4 and 4:2:2 input,
for spatial and temporal layers.

Fix is needed in vp9_set_literal_size():
the sampling_x/y should be passed into update_inital_width(),
othewise sampling_x/y = 1/1 (4:2:0) was forced.
vp9_set_literal_size() is only called by the svc and
on dynamic resize.

Fix issue with the normative optimized scaler:
UV width/height was assumed to be 1/2 of Y, for
the ssse and neon code.

Also fix to assert for the scaled width/height:
in case scaled width/height is odd it should be
incremented by 1 (make it even).

Change-Id: I3a2e40effa53c505f44ef05aaa3132e1b7f57dd5

2 years agoMerge "Merge tag 'v1.12.0' into main" into main
Jerome Jiang [Tue, 28 Jun 2022 22:59:24 +0000 (22:59 +0000)]
Merge "Merge tag 'v1.12.0' into main" into main

2 years agoAdd vp8_ prefix for quantize_lsx.c
Jerome Jiang [Tue, 28 Jun 2022 14:24:57 +0000 (10:24 -0400)]
Add vp8_ prefix for quantize_lsx.c

Duplicate name as vpx_dsp/loongarch/quantize_lsx.c
Chromium update script fails.

Bug: webm:1755
Change-Id: Ifb956c2292d909496eb2b9e1833993f1b021b07e

2 years agoMerge tag 'v1.12.0' into main
Jerome Jiang [Tue, 28 Jun 2022 21:07:31 +0000 (17:07 -0400)]
Merge tag 'v1.12.0' into main

Release v1.12.0 Torrent Duck

2022-06-17 v1.12.0 "Torrent Duck"

  This release adds optimizations for Loongarch, adds support for vp8 in the
  real-time rate control library, upgrades GoogleTest to v1.11.0, updates
  libwebm to libwebm-1.0.0.28-20-g206d268, and includes numerous bug fixes.

- Upgrading:
    This release is ABI compatible with the previous release.
    vp8 support in the real-time rate control library.
    New codec control VP8E_SET_RTC_EXTERNAL_RATECTRL is added.
    Configure support for darwin21 is added.
    GoogleTest is upgraded to v1.11.0.
    libwebm is updated to libwebm-1.0.0.28-20-g206d268.

- Enhancement:
    Numerous improvements on checking memory allocations.
    Optimizations for Loongarch.
    Code clean-up.

- Bug fixes:
    Fix to a crash related to {vp8/vp9}_set_roi_map.
    Fix to compiling failure with -Wformat-nonliteral.
    Fix to integer overflow with vp9 with high resolution content.
    Fix to AddNoiseTest failure with ARMv7.
    Fix to libvpx Null-dereference READ in vp8.

Change-Id: I6964e96bccf016f977cc6e83dc0a192d66a19618

2 years agoReplace date with version and release from README upstream/torrent v1.12.0
Jerome Jiang [Tue, 28 Jun 2022 18:38:49 +0000 (14:38 -0400)]
Replace date with version and release from README

CHANGELOG has the date.

Bug: webm:1752
Change-Id: I2888ce2afed8619f043eee1e9ca23bdf9d75e607

2 years agoL2E: Distinguish fixed and active gf_interval
Cheng Chen [Fri, 24 Jun 2022 18:57:42 +0000 (11:57 -0700)]
L2E: Distinguish fixed and active gf_interval

min/max_gf_interval is fixed and can be passed from the command line.
It must satisfy the level constraints.

active_min/max_gf_interval might be changing based on
min/max_gf_interval. It is determined per GOP.

Change-Id: If456c691c97a8b4c946859c05cedd39ca7defa9c

2 years agovp9_encode_sb_row: remove a branch w/CONFIG_REALTIME_ONLY
James Zern [Fri, 17 Jun 2022 01:43:44 +0000 (18:43 -0700)]
vp9_encode_sb_row: remove a branch w/CONFIG_REALTIME_ONLY

replace the check on use_nonrd_pick_mode with an assert. this is only a
start, there are many branches that could be removed that check mode ==
REALTIME, etc. with this configuration.

Bug: webm:1773
Change-Id: I38cf9f83e7c085eb8e87d5cf6db7dc75359b611b
(cherry picked from commit 08b86d76224453ef9cbab4b10a48617715d9a14e)

2 years agovp9_cx_iface: set default cpu_used=5 w/CONFIG_REALTIME_ONLY
James Zern [Fri, 17 Jun 2022 01:22:52 +0000 (18:22 -0700)]
vp9_cx_iface: set default cpu_used=5 w/CONFIG_REALTIME_ONLY

this avoids a crash if cpu-used is not explicitly set as there are some
(unnecessary) checks against use_nonrd_pick_mode which would cause
encoding to be skipped if the old default of 0 were used

Bug: webm:1773
Change-Id: I62fba5fb51d8afa422689b7de3f03e8f7570e50b
Fixed: webm:1773
(cherry picked from commit 95d196fdf45edf57015cc18635c52b30a93522fd)

2 years agoUpdate CHANGELOG for L2E
Jerome Jiang [Tue, 21 Jun 2022 18:54:16 +0000 (14:54 -0400)]
Update CHANGELOG for L2E

Bug: webm:1752
Change-Id: I5335e0360501503d5c162be4bbdef3ad73151e9f

2 years agoUpdate CHANGELOG and version info v1.12.0-rc1
Jerome Jiang [Fri, 17 Jun 2022 18:14:10 +0000 (14:14 -0400)]
Update CHANGELOG and version info

A stale codec control was removed, but compatibility was restored.

New codec control was added.

Bump *current* and *age*, and keep *revision* as 0.

Bug: webm:1752
Bug: webm:1757

Change-Id: I76179f129a10c06d897b5c62462808ed9b9c2923

2 years agovp9_encode_sb_row: remove a branch w/CONFIG_REALTIME_ONLY
James Zern [Fri, 17 Jun 2022 01:43:44 +0000 (18:43 -0700)]
vp9_encode_sb_row: remove a branch w/CONFIG_REALTIME_ONLY

replace the check on use_nonrd_pick_mode with an assert. this is only a
start, there are many branches that could be removed that check mode ==
REALTIME, etc. with this configuration.

Bug: webm:1773
Change-Id: I38cf9f83e7c085eb8e87d5cf6db7dc75359b611b

2 years agovp9_cx_iface: set default cpu_used=5 w/CONFIG_REALTIME_ONLY
James Zern [Fri, 17 Jun 2022 01:22:52 +0000 (18:22 -0700)]
vp9_cx_iface: set default cpu_used=5 w/CONFIG_REALTIME_ONLY

this avoids a crash if cpu-used is not explicitly set as there are some
(unnecessary) checks against use_nonrd_pick_mode which would cause
encoding to be skipped if the old default of 0 were used

Bug: webm:1773
Change-Id: I62fba5fb51d8afa422689b7de3f03e8f7570e50b
Fixed: webm:1773

2 years agoMerge "vp9,encoder: fix some integer sanitizer warnings" into main
James Zern [Tue, 14 Jun 2022 01:24:23 +0000 (01:24 +0000)]
Merge "vp9,encoder: fix some integer sanitizer warnings" into main

2 years agoRestore backward compatibility
Jerome Jiang [Mon, 13 Jun 2022 20:29:31 +0000 (16:29 -0400)]
Restore backward compatibility

This CL breaks the backward compatibility:

1365e7e1a vp9-svc: Remove VP9E_SET_TEMPORAL_LAYERING_MODE

Forcing the value of the next element

Bug: webm:1752
Change-Id: I83c774b3aa6cca25f2f14995590fb20c0a1668d4
(cherry picked from commit 013ec5722ce88bebcdcf32b1496fcca413199336)

2 years agoUpdate AUTHORS
Jerome Jiang [Mon, 13 Jun 2022 20:36:07 +0000 (16:36 -0400)]
Update AUTHORS

Bug: webm:1752
Change-Id: I08b4100a0e8c003cd9a7bdaf72926c268e02d53c

2 years agoRestore backward compatibility
Jerome Jiang [Mon, 13 Jun 2022 20:29:31 +0000 (16:29 -0400)]
Restore backward compatibility

This CL breaks the backward compatibility:

1365e7e1a vp9-svc: Remove VP9E_SET_TEMPORAL_LAYERING_MODE

Forcing the value of the next element

Bug: webm:1752
Change-Id: I83c774b3aa6cca25f2f14995590fb20c0a1668d4

2 years agoConvert EncoderTest::last_pts_ to a local variable
Wan-Teh Chang [Fri, 10 Jun 2022 20:52:31 +0000 (13:52 -0700)]
Convert EncoderTest::last_pts_ to a local variable

Convert the data member EncoderTest::last_pts_ to a local variable in
the EncoderTest::RunLoop() and VP9FrameSizeTestsLarge::RunLoop()
methods. EncoderTest::last_pts_ is only used in these two methods, and
these two methods first set EncoderTest::last_pts_ to 0 before using it.
So EncoderTest::last_pts_ is effectively a local variable in these two
methods.

Note that several subclasses of EncoderTest declare their own last_pts_
data member and use it to calculate the data rate. Apparently their own
last_pts_ data member hides the same-named data member in the base
class. Although this is allowed by C++, this is very confusing.

Change-Id: I55ce1cf8cc62e07333d8a902d65b46343a3d5881

2 years agoL2E: Use libvpx's default q in case of invalid external value
Cheng Chen [Mon, 6 Jun 2022 23:46:55 +0000 (16:46 -0700)]
L2E: Use libvpx's default q in case of invalid external value

If the external model recommends an invalid q value, we use the
default q selected by libvpx's rate control strategy.

We update the test so that when the external model wants to control
GOP decision, it could get per frame information and just recommend
an invalid q.

Change-Id: I69be4b0ee0800e7ab0706d305242bb87f001b1f7

2 years agoL2E: rename 'gop_index' to 'gop_global_index'
Cheng Chen [Mon, 6 Jun 2022 22:46:41 +0000 (15:46 -0700)]
L2E: rename 'gop_index' to 'gop_global_index'

'gop_index' has already been used in vpx_rc_encodeframe_info_t,
which represents the frame index inside the current
group of picture (gop).

We therefore use 'gop_global_index' to represent the index of
the current gop to avoid duplicate names.

Change-Id: I3eb8987dd878f650649b013e0036e23d0846b5f0

2 years agoL2E: send first pass stats before gop decisions
Cheng Chen [Mon, 6 Jun 2022 21:53:46 +0000 (14:53 -0700)]
L2E: send first pass stats before gop decisions

This change let the encoder send first pass stats before gop
decisioins so that external models could make use of it.

Change-Id: Iafc7eddab93aa77ceaf8e1f7663a52b27d94af80

2 years agoL2E: Use bit mask to represent control type
Cheng Chen [Fri, 3 Jun 2022 22:08:48 +0000 (15:08 -0700)]
L2E: Use bit mask to represent control type

The bit mask allows us to easily add an additional control mode
which both the QP and GOP are controlled by an external model.

Change-Id: I49f676f622a6e70feb2a39dc97a4e5050b7f4760

2 years agoMerge "libs.mk,build/make/Makefile: make test targets ordinary rules" into main
James Zern [Fri, 3 Jun 2022 17:39:48 +0000 (17:39 +0000)]
Merge "libs.mk,build/make/Makefile: make test targets ordinary rules" into main

2 years agovp9_change_config: check vp9_alloc_loop_filter return
James Zern [Sat, 28 May 2022 22:24:37 +0000 (15:24 -0700)]
vp9_change_config: check vp9_alloc_loop_filter return

Change-Id: I4cba67a5ab192d1cf1dbfb5c039a93a4952b071e
(cherry picked from commit 6549e76307631de7e37459fceb23b4eee4573620)

2 years agovp9e_set_config: setjmp before calling vp9_change_config
James Zern [Sat, 28 May 2022 04:50:11 +0000 (21:50 -0700)]
vp9e_set_config: setjmp before calling vp9_change_config

vp9_change_config may call functions that perform allocations which
expect failures detected by CHECK_MEM_ERROR to not return.

Change-Id: I1dd1eca9c661ed157d51b4a6a77fc9f88236d794
(cherry picked from commit 3997d9bc6286ba075879353b87678986cdbfa347)

2 years agovp8e_set_config: setjmp before calling vp8_change_config
James Zern [Sat, 28 May 2022 04:50:11 +0000 (21:50 -0700)]
vp8e_set_config: setjmp before calling vp8_change_config

vp8_change_config may call vp8_alloc_compressor_data which expects
failures detected by CHECK_MEM_ERROR to not return.

Change-Id: Ib7fbf4af904bd9b539402bb61c8f87855eef2ad6
(cherry picked from commit 365eebc147627ae83ec8b36077198d8cfb5e0128)

2 years agolibs.mk,build/make/Makefile: make test targets ordinary rules
James Zern [Fri, 3 Jun 2022 02:38:03 +0000 (19:38 -0700)]
libs.mk,build/make/Makefile: make test targets ordinary rules

this fixes a regression in make 4.2 and still present in 4.3 causing
double colon rules to be serialized which breaks sharding done by the
test and test-no-data-check rules. these targets only define one set of
rules so ordinary rules work unlike clean. install may be another
candidate, but that's left for a follow up.

Change-Id: I9f074eca2ad266eeca6e31aae2e9f31eec8680e0
Tested: make 3.81, 4.1, 4.2, 4.2.1, 4.3

2 years agoMerge ".gitignore: add android studio / vscode folders" into main
James Zern [Fri, 3 Jun 2022 00:49:18 +0000 (00:49 +0000)]
Merge ".gitignore: add android studio / vscode folders" into main

2 years agoMerge changes I4cba67a5,I1dd1eca9,Ib7fbf4af into main
James Zern [Thu, 2 Jun 2022 23:44:29 +0000 (23:44 +0000)]
Merge changes I4cba67a5,I1dd1eca9,Ib7fbf4af into main

* changes:
  vp9_change_config: check vp9_alloc_loop_filter return
  vp9e_set_config: setjmp before calling vp9_change_config
  vp8e_set_config: setjmp before calling vp8_change_config

2 years agotest/*: normalize use of nullptr
James Zern [Sat, 28 May 2022 02:36:47 +0000 (19:36 -0700)]
test/*: normalize use of nullptr

this is preferred over NULL in C++11

Change-Id: Ic48ddcc6dfb8975a57f6713549ad04d93db21415
(cherry picked from commit c304ec38d05040b74de4aacada62c4a336714341)

2 years ago.gitignore: add android studio / vscode folders
James Zern [Thu, 2 Jun 2022 23:34:21 +0000 (16:34 -0700)]
.gitignore: add android studio / vscode folders

Change-Id: I039a96bc33f55d9ba8bca9f9f6b69135659d2351

2 years agoMerge "L2E: Return error when GOP model is not set" into main
Cheng Chen [Thu, 2 Jun 2022 20:38:43 +0000 (20:38 +0000)]
Merge "L2E: Return error when GOP model is not set" into main

2 years agoL2E: Return error when GOP model is not set
Cheng Chen [Tue, 31 May 2022 18:07:15 +0000 (11:07 -0700)]
L2E: Return error when GOP model is not set

- Return error instead of OK when GOP model is not set.
- Update descriptions for a few variables.

Change-Id: I213f6b7085c487507c3935e7ce615e807f4474cc

2 years agovp9,encoder: fix some integer sanitizer warnings
James Zern [Thu, 2 Jun 2022 01:55:10 +0000 (18:55 -0700)]
vp9,encoder: fix some integer sanitizer warnings

the issues fixed in this change are related to implicit conversions
between int / unsigned int:
vp9/encoder/vp9_segmentation.c:42:36: runtime error: implicit conversion
  from type 'int' of value -9 (32-bit, signed) to type 'unsigned int'
  changed the value to 4294967287 (32-bit, unsigned)
vpx_dsp/x86/sum_squares_sse2.c:36:52: runtime error: implicit conversion
  from type 'unsigned int' of value 4294967295 (32-bit, unsigned) to type
  'int' changed the value to -1 (32-bit, signed)
vpx_dsp/x86/sum_squares_sse2.c:36:67: runtime error: implicit conversion
  from type 'unsigned int' of value 4294967295 (32-bit, unsigned) to type
  'int' changed the value to -1 (32-bit, signed)
vp9/encoder/x86/vp9_diamond_search_sad_avx.c:81:45: runtime error:
  implicit conversion from type 'uint32_t' (aka 'unsigned int') of value
  4290576316 (32-bit, unsigned) to type 'int' changed the value to
  -4390980 (32-bit, signed)
vp9/encoder/vp9_rdopt.c:3472:31: runtime error: implicit conversion from
  type 'int' of value -1024 (32-bit, signed) to type 'uint16_t' (aka
  'unsigned short') changed the value to 64512 (16-bit, unsigned)

unsigned is forced for masks and int is used with intel intrinsics

Bug: webm:1767
Change-Id: Icfa4179e13bc98a36ac29586b60d65819d3ce9ee
Fixed: webm:1767

2 years agovp9_change_config: check vp9_alloc_loop_filter return
James Zern [Sat, 28 May 2022 22:24:37 +0000 (15:24 -0700)]
vp9_change_config: check vp9_alloc_loop_filter return

Change-Id: I4cba67a5ab192d1cf1dbfb5c039a93a4952b071e

2 years agovp9e_set_config: setjmp before calling vp9_change_config
James Zern [Sat, 28 May 2022 04:50:11 +0000 (21:50 -0700)]
vp9e_set_config: setjmp before calling vp9_change_config

vp9_change_config may call functions that perform allocations which
expect failures detected by CHECK_MEM_ERROR to not return.

Change-Id: I1dd1eca9c661ed157d51b4a6a77fc9f88236d794

2 years agovp8e_set_config: setjmp before calling vp8_change_config
James Zern [Sat, 28 May 2022 04:50:11 +0000 (21:50 -0700)]
vp8e_set_config: setjmp before calling vp8_change_config

vp8_change_config may call vp8_alloc_compressor_data which expects
failures detected by CHECK_MEM_ERROR to not return.

Change-Id: Ib7fbf4af904bd9b539402bb61c8f87855eef2ad6

2 years agoresize_test: add TODO for ResizeTest instantiation for VP9
James Zern [Sat, 28 May 2022 22:25:49 +0000 (15:25 -0700)]
resize_test: add TODO for ResizeTest instantiation for VP9

this should match VP8 and use ONE_PASS_TEST_MODES, but currently the
code will produce integer sanitizer warnings and may segfault under
certain conditions

Bug: webm:1767,webm:1768
Change-Id: I6482ff1862f19716fde3d57522591bc61d76a84f

2 years agoresize_test: add TODO for test failure
James Zern [Sat, 28 May 2022 22:26:29 +0000 (15:26 -0700)]
resize_test: add TODO for test failure

DISABLED_TestExternalResizeSmallerWidthBiggerSize was added for
webm:1642, but never fixed

Bug: webm:1642
Change-Id: I0fa368a44dda550241ea997068c58eaff551233c

2 years agolibs.doxy_template: remove some obsolete variables
James Zern [Fri, 27 May 2022 02:38:01 +0000 (19:38 -0700)]
libs.doxy_template: remove some obsolete variables

- COLS_IN_ALPHA_INDEX
  this was unused given ALPHABETICAL_INDEX = NO
- PERL_PATH / MSCGEN_PATH
  these were unused

quiets warnings with doxygen 1.9.1:
warning: Tag 'COLS_IN_ALPHA_INDEX' at line 1110 of file 'doxyfile' has
become obsolete.
warning: Tag 'PERL_PATH' at line 1105 of file 'doxyfile' has become
obsolete.
warning: Tag 'MSCGEN_PATH' at line 1126 of file 'doxyfile' has become
obsolete

Change-Id: I6229311afaa3318a3f9bcaf40fafcc5ea71ae271

2 years agoMerge "L2E: Add vp9 GOP decision helper function" into main
Cheng Chen [Tue, 31 May 2022 17:30:48 +0000 (17:30 +0000)]
Merge "L2E: Add vp9 GOP decision helper function" into main

2 years agoMerge "L2E: Add control type for the external rate control API" into main
Cheng Chen [Tue, 31 May 2022 17:30:31 +0000 (17:30 +0000)]
Merge "L2E: Add control type for the external rate control API" into main

2 years agotest/*: normalize use of nullptr
James Zern [Sat, 28 May 2022 02:36:47 +0000 (19:36 -0700)]
test/*: normalize use of nullptr

this is preferred over NULL in C++11

Change-Id: Ic48ddcc6dfb8975a57f6713549ad04d93db21415

2 years agoL2E: Add vp9 GOP decision helper function
Cheng Chen [Fri, 13 May 2022 20:42:28 +0000 (13:42 -0700)]
L2E: Add vp9 GOP decision helper function

Add a helper function to call the external rate control model.

The helper function is placed in the function where vp9 determines
GOP decisions.

The helper function passes frame information, including current
frame show index, coding index, etc to the external rate control
model, and then receives GOP decisions.

The received GOP decisions overwrites the default GOP decision, only
when the external rate control model is set to be active via
the codec control.

The decision should satisfy a few constraints, for example, larger
than min_gf_interval; smaller than max_gf_interval. Otherwise,
return error.

Unit tests are added to test the new functionality.

Change-Id: Id129b4e1a91c844ee5c356a7801c862b1130a3d8

2 years agoL2E: Add control type for the external rate control API
Cheng Chen [Fri, 13 May 2022 17:59:06 +0000 (10:59 -0700)]
L2E: Add control type for the external rate control API

Two control types are defined: QP and GOP control.
Now the API only supports the QP model.

Change-Id: Ib3a712964b9d2282c93993ee56e0558e4795fb46

2 years agoRevert "[NEON] Optimize vp9_diamond_search_sad() for NEON"
Jerome Jiang [Wed, 25 May 2022 23:39:42 +0000 (23:39 +0000)]
Revert "[NEON] Optimize vp9_diamond_search_sad() for NEON"

This reverts commit 258affdeab68ed59e181368baa46e2f1d077b0ab.

Reason for revert:

Not bitexact with C version

Original change's description:
> [NEON] Optimize vp9_diamond_search_sad() for NEON
>
> About 50% improvement in comparison to the C function.
> I have followed the AVX version with some simplifications.
>
> Change-Id: I72ddbdb2fbc5ed8a7f0210703fe05523a37db1c9

Change-Id: I5c210b3dfe1f6dec525da857dd8c83946be566fc

2 years agoMerge changes Iecb26f38,Ib3ee9b59 into main
James Zern [Thu, 26 May 2022 05:03:17 +0000 (05:03 +0000)]
Merge changes Iecb26f38,Ib3ee9b59 into main

* changes:
  GetTempOutFile(): use testing::TempDir()
  y4m_test: check temp file ptr

2 years agoGetTempOutFile(): use testing::TempDir()
James Zern [Sat, 21 May 2022 02:15:47 +0000 (19:15 -0700)]
GetTempOutFile(): use testing::TempDir()

rather than tmpfile(). this allows for setting the path with TEST_TMPDIR
and provides a valid default for android.

Change-Id: Iecb26f381b6a6ec97da62cfa0b7200f427440a2f

2 years agoloongarch: Remove redundant code
yuanhecai [Wed, 25 May 2022 01:42:35 +0000 (09:42 +0800)]
loongarch: Remove redundant code

Simplify architecture support code and remove redundant code
to improve efficiency.

Bug: webm:1755

Change-Id: I03bc251aca115b0379fe19907abd165e0876355b

2 years agoy4m_test: check temp file ptr
James Zern [Thu, 19 May 2022 02:00:56 +0000 (19:00 -0700)]
y4m_test: check temp file ptr

GetTempOutFile() and TempOutFile::file() may return null if the open
fails

Change-Id: Ib3ee9b592140d30d12aecefa7dfc5f569fa28a34

2 years agotools/*.py: update to python3
James Zern [Sun, 15 May 2022 22:39:15 +0000 (15:39 -0700)]
tools/*.py: update to python3

only lint-hunks.py is tested as part of the presubmit; the rest may
need further changes as they're used.

Bug: b/229626362
Change-Id: I2fd6e96deab8d892d34527e484ea65e3df86d162

2 years agoloongarch: Modify the representation of macros
yuanhecai [Tue, 17 May 2022 11:06:04 +0000 (19:06 +0800)]
loongarch: Modify the representation of macros

Some macros have been changed to "#define do {...} While (0)",
change the rest to "static INLINE ..."

Bug: webm:1755

Change-Id: I445ac0c543f12df38f086b479394b111058367d0

2 years agoloongarch: Reduce the number of instructions
yuanhecai [Mon, 9 May 2022 06:39:05 +0000 (14:39 +0800)]
loongarch: Reduce the number of instructions

Replace some redundant instructions to improve the efficiency
of the program.

1. txfm_macros_lsx.h
2. vpx_convolve8_avg_lsx.c
3. vpx_convolve8_horiz_lsx.c
4. vpx_convolve8_lsx.c
5. vpx_convolve8_vert_lsx.c
6. vpx_convolve_copy_lsx.c
7. vpx_convolve_lsx.h

Bug: webm:1755

Change-Id: I9b7fdf6900338a26f9b1775609ad387648684f3d

2 years agovp9[loongarch]: Optimize vpx_quantize_b/b_32x32
yuanhecai [Fri, 6 May 2022 04:17:39 +0000 (12:17 +0800)]
vp9[loongarch]: Optimize vpx_quantize_b/b_32x32

1. vpx_quantize_b_lsx
2. vpx_quantize_b_32x32_lsx

Bug: webm:1755

Change-Id: I476c8677a2c2aed7248e088e62c3777c9bed2adb

2 years agovp8[loongarch]: Optimize vp8_sixtap_predict4x4
yuanhecai [Sun, 24 Apr 2022 02:34:21 +0000 (10:34 +0800)]
vp8[loongarch]: Optimize vp8_sixtap_predict4x4

1. vp8_sixtap_predict4x4

Bug: webm:1755

Change-Id: If7d844496ef2cfe2252f2ef12bb7cded63ad03dd

2 years agovp8[loongarch]: Optimize fdct8x4/diamond_search_sad
yuanhecai [Wed, 20 Apr 2022 03:16:55 +0000 (11:16 +0800)]
vp8[loongarch]: Optimize fdct8x4/diamond_search_sad

1. vp8_short_fdct8x4_lsx
2. vp8_diamond_search_sad_lsx
3. vpx_sad8x8_lsx

Bug: webm:1755

Change-Id: Ic9df84ead2d4fc07ec58e9730d6a12ac2b2d31c1

2 years agovp8[loongarch]: Optimize sub_pixel_variance8x8/16x16
yuanhecai [Wed, 20 Apr 2022 03:13:13 +0000 (11:13 +0800)]
vp8[loongarch]: Optimize sub_pixel_variance8x8/16x16

1. vpx_sub_pixel_variance8x8_lsx
1. vpx_sub_pixel_variance16x16_lsx
2. vpx_mse16x16_lsx

Bug: webm:1755

Change-Id: Iaedd8393c950c13042a0597d0d47b534a2723317

2 years agovp8[loongarch]: Optimize vp8 encoding partial function
Hao Chen [Fri, 18 Mar 2022 01:33:53 +0000 (09:33 +0800)]
vp8[loongarch]: Optimize vp8 encoding partial function

1. vp8_short_fdct4x4
2. vp8_regular_quantize_b
3. vp8_block_error
4. vp8_mbblock_error
5. vpx_subtract_block

Bug: webm:1755

Change-Id: I3dbfc7e3937af74090fc53fb4c9664e6cdda29ef

2 years agovp9-rtc: Fix to usage of active_maps when aq_mode=0
Marco Paniconi [Mon, 16 May 2022 05:15:29 +0000 (22:15 -0700)]
vp9-rtc: Fix to usage of active_maps when aq_mode=0

If aq_mode=0 the segmentation feature may still be used
for active_maps, so the condition active_maps.enabled
needs to be added in two places regarding segmentation
logic in encodeframe.c. Otherwise the active_maps would
have no effect.

This also resolves why the assert in bug webm:1762 was
not triggered when aq_mode=0.

Change-Id: Ibd68e9b5c3f81728241a168d3fb3567d6845633d

2 years agoMerge changes I7d68c7f2,If283fc08,I3b1e0a2c into main
James Zern [Fri, 13 May 2022 19:15:59 +0000 (19:15 +0000)]
Merge changes I7d68c7f2,If283fc08,I3b1e0a2c into main

* changes:
  vp9[loongarch]: Optimize avg_variance64x64/variance8x8
  vp9[loongarch]: Optimize fdct4x4/8x8_lsx
  vp9[loongarch]: Optimize vpx_hadamard_16x16/8x8

2 years agovp9[loongarch]: Optimize avg_variance64x64/variance8x8
yuanhecai [Wed, 13 Apr 2022 08:46:22 +0000 (16:46 +0800)]
vp9[loongarch]: Optimize avg_variance64x64/variance8x8

1. vpx_variance8x8_lsx
2. vpx_sub_pixel_avg_variance64x64_lsx

Bug: webm:1755

Change-Id: I7d68c7f2f5c8d27dc31cfd32298aeefb68f5d560

2 years agovp9[loongarch]: Optimize fdct4x4/8x8_lsx
yuanhecai [Tue, 12 Apr 2022 13:01:53 +0000 (21:01 +0800)]
vp9[loongarch]: Optimize fdct4x4/8x8_lsx

1. vpx_fdct4x4_lsx
2. vpx_fdct8x8_lsx

Bug: webm:1755

Change-Id: If283fc08f9bedcbecd2c4052adb210f8fe00d4f0

2 years agovp9[loongarch]: Optimize vpx_hadamard_16x16/8x8
yuanhecai [Tue, 12 Apr 2022 08:02:55 +0000 (16:02 +0800)]
vp9[loongarch]: Optimize vpx_hadamard_16x16/8x8

1. vpx_hadamard_16x16_lsx
2. vpx_hadamard_8x8_lsx

Bug: webm:1755

Change-Id: I3b1e0a2c026c3806b7bbbd191d0edf0e78912af7

2 years agoAdd aq mode 0 and 3 to active map test
Jerome Jiang [Fri, 13 May 2022 01:05:24 +0000 (21:05 -0400)]
Add aq mode 0 and 3 to active map test

Bug: webm:1762
Change-Id: Ia827f6686e8d0cdc09f3d07d07dacaa4fcd801ab

2 years agovp9-rtc: Fix to interp_filter for segment skip
Marco Paniconi [Thu, 12 May 2022 18:18:19 +0000 (11:18 -0700)]
vp9-rtc: Fix to interp_filter for segment skip

For segment skip feature: allow for setting the
mi->interp_filter to BILINEAR, if cm->interp_filter
is set BILIENAR. This can happen at speed 9 when the
segment skip feature is used (e.g., active_maps)

Without this fix the assert can be triggered with the
active_map_test.cc for speed 9 included.
Updated the test.

Fixes the assert triggered in the issue:
Bug: webm:1762

Change-Id: I462e0bdd966e4f3cb5b7bc746685916ac8808358

2 years agoMerge "[NEON] Optimize vp9_diamond_search_sad() for NEON" into main
James Zern [Mon, 9 May 2022 17:40:49 +0000 (17:40 +0000)]
Merge "[NEON] Optimize vp9_diamond_search_sad() for NEON" into main

2 years ago[NEON] Optimize vp9_diamond_search_sad() for NEON
Konstantinos Margaritis [Tue, 3 May 2022 09:24:44 +0000 (12:24 +0300)]
[NEON] Optimize vp9_diamond_search_sad() for NEON

About 50% improvement in comparison to the C function.
I have followed the AVX version with some simplifications.

Change-Id: I72ddbdb2fbc5ed8a7f0210703fe05523a37db1c9

2 years agoadd some missing realloc checks
James Zern [Fri, 6 May 2022 18:55:56 +0000 (11:55 -0700)]
add some missing realloc checks

Change-Id: I0fd1e094085c18b1d9a32333e876c2affeb6de23

2 years agovp8[cd]x.h: document vpx_codec_vp[89]_[cd]x*
James Zern [Fri, 6 May 2022 18:47:06 +0000 (11:47 -0700)]
vp8[cd]x.h: document vpx_codec_vp[89]_[cd]x*

+ mark the _algo variables as deprecated.
this quiets some doxygen warnings

Bug: webm:1752
Change-Id: I53b9b796c3d8fef5c713ee4278641198f95b5864

2 years agovp9 svc sample: set fps from y4m file
Jerome Jiang [Tue, 3 May 2022 14:44:49 +0000 (10:44 -0400)]
vp9 svc sample: set fps from y4m file

Change-Id: I082c0409910da4cda5bf852b20ffa11ba5c2ebd6

2 years agoexamples: add missing argv_dup alloc checks
James Zern [Fri, 29 Apr 2022 00:45:47 +0000 (17:45 -0700)]
examples: add missing argv_dup alloc checks

Change-Id: Ia3080cbf50071d599c7168a20466392a963f101a

2 years agoMerge changes I99ee0ef3,Ie087e8be,I6b19d016,I6fb7771d,I54f83733, ... into main
James Zern [Thu, 28 Apr 2022 17:03:32 +0000 (17:03 +0000)]
Merge changes I99ee0ef3,Ie087e8be,I6b19d016,I6fb7771d,I54f83733, ... into main

* changes:
  y4m_input_open: check allocs
  fastssim,fs_ctx_init: check alloc
  vp9_get_smooth_motion_field: check alloc
  vp9_row_mt_alloc_rd_thresh: check alloc
  simple_encode,init_encoder: check buffer_pool alloc
  VP9RateControlRTC::Create: check segmentation_map alloc
  vp9_speed_features.c: check allocations
  vp9_alloc_motion_field_info: check motion_field_array alloc
  vp9_enc_grp_get_next_job: check job queue alloc
  vp9: check postproc_state.limits allocs
  vp9,encode_tiles_buffer_alloc: fix allocation check

2 years agovp9[loongarch]: Optimize sad8x8/32x64/64x32x4d
yuanhecai [Tue, 12 Apr 2022 01:10:27 +0000 (09:10 +0800)]
vp9[loongarch]: Optimize sad8x8/32x64/64x32x4d

1. vpx_sad8x8x4d_lsx
2. vpx_sad32x64x4d_lsx
3. vpx_sad64x32x4d_lsx

Bug: webm:1755

Change-Id: I08a2b8717ec8623ffdd4451a04e68fa3a7228668

2 years agovp9[loongarch]: Optimize sad64x64/32x32_avg,comp_avg_pred
yuanhecai [Thu, 7 Apr 2022 09:51:51 +0000 (17:51 +0800)]
vp9[loongarch]: Optimize sad64x64/32x32_avg,comp_avg_pred

1. vpx_sad64x64_avg_lsx
2. vpx_sad32x32_avg_lsx
3. comp_avg_pred_lsx

Bug: webm:1755

Change-Id: I58dabdcdd4265bd6ebd5670db8a132d2e838683f

2 years agoy4m_input_open: check allocs
James Zern [Wed, 27 Apr 2022 05:20:00 +0000 (22:20 -0700)]
y4m_input_open: check allocs

Change-Id: I99ee0ef3ab28a22923cb413ccf5935fdc38862be

2 years agofastssim,fs_ctx_init: check alloc
James Zern [Wed, 27 Apr 2022 05:19:34 +0000 (22:19 -0700)]
fastssim,fs_ctx_init: check alloc

Change-Id: Ie087e8be1e943b94327ed520db447a0e3a927738

2 years agovp9_get_smooth_motion_field: check alloc
James Zern [Wed, 27 Apr 2022 05:19:05 +0000 (22:19 -0700)]
vp9_get_smooth_motion_field: check alloc

Change-Id: I6b19d0169d127f622abf97b3b8590eee957bdc51

2 years agovp9_row_mt_alloc_rd_thresh: check alloc
James Zern [Wed, 27 Apr 2022 05:18:21 +0000 (22:18 -0700)]
vp9_row_mt_alloc_rd_thresh: check alloc

Change-Id: I6fb7771d9fa6ec54d81f24a02a289e8b852e7332

2 years agosimple_encode,init_encoder: check buffer_pool alloc
James Zern [Wed, 27 Apr 2022 02:16:11 +0000 (19:16 -0700)]
simple_encode,init_encoder: check buffer_pool alloc

Change-Id: I54f83733260abf828166400c5fd0c4c7e3ccec2f

2 years agoVP9RateControlRTC::Create: check segmentation_map alloc
James Zern [Wed, 27 Apr 2022 02:15:40 +0000 (19:15 -0700)]
VP9RateControlRTC::Create: check segmentation_map alloc

Change-Id: I17b23915c32accf834def5ab26a8e4e188f9993a

2 years agovp9_speed_features.c: check allocations
James Zern [Wed, 27 Apr 2022 02:14:44 +0000 (19:14 -0700)]
vp9_speed_features.c: check allocations

Change-Id: If3b319c1ce7036c2259440f4eeb2e645bf559f4c

2 years agovp9_alloc_motion_field_info: check motion_field_array alloc
James Zern [Wed, 27 Apr 2022 02:13:48 +0000 (19:13 -0700)]
vp9_alloc_motion_field_info: check motion_field_array alloc

Change-Id: I4ae11242e645feb3b85eaea186f14b3676ae40a8

2 years agovp9_enc_grp_get_next_job: check job queue alloc
James Zern [Wed, 27 Apr 2022 02:07:08 +0000 (19:07 -0700)]
vp9_enc_grp_get_next_job: check job queue alloc

+ reverse conditional order; var == constant is more readable

Change-Id: I9f2b4394024c262fd5fe9576a8bf33afe197c050

2 years agovp9: check postproc_state.limits allocs
James Zern [Wed, 27 Apr 2022 02:05:56 +0000 (19:05 -0700)]
vp9: check postproc_state.limits allocs

Change-Id: I9d5df96580074375e4847d2e2f60a6a6d56eeea5

2 years agovp9,encode_tiles_buffer_alloc: fix allocation check
James Zern [Wed, 27 Apr 2022 01:42:24 +0000 (18:42 -0700)]
vp9,encode_tiles_buffer_alloc: fix allocation check

previously vp9_bitstream_worker_data was checked after it was memset();
this change uses CHECK_MEM_ERROR for consistency to ensure the pointer
is checked first

Change-Id: I532d0eb0e746dc6b8d694b616eba693c5c0053ac

2 years agovp9[loongarch]: Optimize fdct/get/variance16x16
yuanhecai [Tue, 5 Apr 2022 10:17:19 +0000 (18:17 +0800)]
vp9[loongarch]: Optimize fdct/get/variance16x16

1. vpx_fdct16x16_lsx
2. vpx_get16x16var_lsx
3. vpx_variance16x16_lsx

Bug: webm:1755

Change-Id: I27090406dc28cfdca64760fea4bc16ae11b74628

2 years agoMerge changes Ib8bcefd2,I84f789ca into main
James Zern [Tue, 26 Apr 2022 01:15:30 +0000 (01:15 +0000)]
Merge changes Ib8bcefd2,I84f789ca into main

* changes:
  register_state_check.h: add compiler barrier
  add_noise_test.cc: remove stale TODO

2 years agoregister_state_check.h: add compiler barrier
James Zern [Mon, 25 Apr 2022 22:12:02 +0000 (15:12 -0700)]
register_state_check.h: add compiler barrier

around ASM_REGISTER_STATE_CHECK() this helps keep the call ordering
consistent avoiding some code reordering which may affect the registers
being checked

fixes issue with armv7 and multiple versions of gcc:
[ RUN      ] C/AddNoiseTest.CheckNoiseAdded/0
test/register_state_check.h:116: Failure
Expected equality of these values:
  pre_store_[i]
    Which is: 0
  post_store[i]
    Which is: 4618441417868443648

Bug: webm:1760
Change-Id: Ib8bcefd2c4d263f9fc4d4b4d4ffb853fe89d1152
Fixed: webm:1760

2 years agoadd_noise_test.cc: remove stale TODO
James Zern [Mon, 25 Apr 2022 18:20:48 +0000 (11:20 -0700)]
add_noise_test.cc: remove stale TODO

this was completed in:
0dc69c70f postproc : fix function parameters for noise functions.

Change-Id: I84f789ca333e9690e70e696d44475dd59339593b

2 years agovp9[loongarch]: Optimize sub_pixel_variance32x32/sad16x16
yuanhecai [Fri, 8 Apr 2022 07:00:33 +0000 (15:00 +0800)]
vp9[loongarch]: Optimize sub_pixel_variance32x32/sad16x16

1. vpx_sad16x16_lsx
2. vpx_sub_pixel_variance32x32_lsx

Bug: webm:1755

Change-Id: I9926ace710903993ccbb42caef320fa895e90127

2 years agovp9[loongarch]: Optimize horizontal/vertical_4/dual
yuanhecai [Sun, 3 Apr 2022 10:49:52 +0000 (18:49 +0800)]
vp9[loongarch]: Optimize horizontal/vertical_4/dual

1. vpx_lpf_horizontal_4_lsx
2. vpx_lpf_vertical_4_lsx
3. vpx_lpf_horizontal_4_dual_lsx
3. vpx_lpf_vertical_4_dual_lsx

Bug: webm:1755

Change-Id: I12e9f27cafd9514b24cfbf2354cc66c7d1238687

2 years agovp9[loongarch]: Optimize convolve8_avg_vert/convolve_copy
yuanhecai [Mon, 18 Apr 2022 08:21:04 +0000 (16:21 +0800)]
vp9[loongarch]: Optimize convolve8_avg_vert/convolve_copy

1. vpx_convolve8_avg_vert_lsx
2. vpx_convolve_copy_lsx
3. vpx_idct32x32_135_add_lsx

Bug: webm:1755

Change-Id: I6bdfe5836a91a5e361ab869b26641e86c5ebb68d