Граф коммитов

43 Коммитов

Автор SHA1 Сообщение Дата
Yushin Cho d080f4152d Fix broken build with accounting
Change-Id: I50267aa39d4d2857b48cbea0cbc8a7608489ebd7
2017-03-14 22:04:46 +00:00
Thomas Davies f7f87ff2e6 Add a symbol decode call count to accounting.
This keeps track of how many calls have been made
to read symbols or bits. A given syntax element
may make multiple calls to symbol decoding functions,
and these variables keep track of the entropy
decoding engine throughput.

Change-Id: Iab3a720cbfe68f8d5ca3e4c415f7baa683b24268
2017-03-10 20:09:01 +00:00
Nathan E. Egge c4e9e473c6 Rename aom_read_tree_bits() to aom_read_tree_as_bits().
Rename the aom_read_tree_bits() function to match aom_read_tree_as_cdf().

Change-Id: I779f544615b1c19bb1f781c1f7a0f59dda7bd466
2017-02-16 11:41:20 -05:00
Nathan E. Egge 0f11c78dae Fix DAALA_EC when EC_MULTISYMBOL disabled.
When DAALA_EC is enabled, calls to aom_read_tree() and aom_write_tree()
 would automatically convert the aom_tree_index and aom_prob into a CDF
 and call the aom_read_cdf() or aom_write_cdf(), which causes an
 error if DAALA_EC is enabled without EC_MULTISYMBOL.
This patch moves the conversion functions from daalaboolreader.h and
 daalaboolwriter.h into bitreader.h and bitwriter.h respectively, and
 only calls the conversion functions if EC_MULTISYMBOL is enabled.
This allows DAALA_EC to be enabled without EC_MULTISYMBOL and is a
 bitstream change when both ANS and EC_MULTISYMBOL are enabled as calls
 to read and write trees will automatically be converted into calls that
 read and write cdfs.

Change-Id: Id2f9aa9b5113292998cadfe69e4ba547324643ac
2017-02-16 08:35:52 +00:00
Nathan E. Egge 24f1a90441 Add flag for RAWBITS to use raw bits with DAALA_EC.
The use of raw bits is now disabled by default and can be turned on with:
 ./configure --enable-experimental --enable-rawbits
This commit has a negligible impact on rate.

subset1:

master@2017-02-14T18:57:22.282Z -> no_rawbits@2017-02-14T18:57:41.977Z

   PSNR | PSNR Cb | PSNR Cr | PSNR HVS |    SSIM | MS SSIM | CIEDE 2000
-0.0000 | -0.0000 | -0.0000 |  -0.0000 | -0.0000 | -0.0000 |    -0.0000

objective-1-fast:

master@2017-02-14T18:52:48.425Z -> no_rawbits@2017-02-14T18:52:04.489Z

   PSNR | PSNR Cb | PSNR Cr | PSNR HVS |    SSIM | MS SSIM | CIEDE 2000
-0.0001 | -0.0001 | -0.0001 |  -0.0001 | -0.0001 | -0.0001 |    -0.0001

Change-Id: I01e79e9f314565a64b224ca41047f7bd7fe33f70
2017-02-15 02:30:14 +00:00
Alex Converse c54692b5ac ans: Switch from uABS to rABS
This is in preparation for expanding the state range.

No discernible compression impact

ans_multioff@2017-01-25T20:58:18.756Z -> ans_multioff_rabs@2017-01-26T01:05:12.801Z

     PSNR | PSNR Cb | PSNR Cr | PSNR HVS |    SSIM | MS SSIM | CIEDE 2000
  -0.0001 | -0.0001 | -0.0001 |  -0.0001 | -0.0001 | -0.0001 | -0.0001

https://arewecompressedyet.com/?job=ans_multioff%402017-01-25T20%3A58%3A18.756Z&job=ans_multioff_rabs%402017-01-26T01%3A05%3A12.801Z

Change-Id: Ie1817991190f1de6d9c31e0c97f77efbd5869d35
2017-02-04 02:40:26 +00:00
Alex Converse 346440bd74 Use the standard aom_reader_init() interface for ans
Change-Id: I4a0f0a775362e6e43cd28ed29bf83c912cdc7df5
2017-01-11 17:29:55 +00:00
Nathan E. Egge 2d8dd96635 Use const cdf with aom_read_symbol().
Change-Id: I6e60d9083da8a2d8f7e182e4f12704eddd170df6
2017-01-09 17:03:21 +00:00
Nathan E. Egge e069849592 Split aom_read_cdf() from aom_read_symbol().
Separate the aom_read_cdf() functionality from aom_read_symbol() which
 can optionally adapt the cdf when run with --enable-ec_adapt.

Change-Id: I5446d6402835dfcf68d3462a2bd8835704fe6603
2017-01-09 17:03:21 +00:00
Nathan E. Egge c98d286385 Add API for coding symbols with unscaled CDFs.
Add aom_write_symbol_unscaled() and aom_read_symbol_unscaled() calls
 for encoding and decoding symbols with non-dyadic CDFs, e.g. that
 don't add up to 32768.
This currently only works with the DAALA_EC backend, but does support
 AOM bit accounting.

Change-Id: Icb37500f1b051dd2e8893ff0920302ece1d6ccfd
2017-01-05 04:19:55 -05:00
Alex Converse 2cdf0d85a2 Specify ANS window size at initialization
Change-Id: Ia1757d580dd230d9e743b1f8c3e87df164008684
2016-12-17 03:56:10 +00:00
Nathan E. Egge 08c99eb30f Explicitly call daala read/write bit functions.
Calling aom_write_bit() and aom_read_bit() with --enable-daala_ec
 would call aom_write() and aom_read() with probability 128 which
 would ultimately call od_ec_enc_bits() and od_ec_dec_bits().
This refactors that code and makes the call explicit.

objective-1-fast:
master@2016-12-14T18:38:33Z -> daala_ec_bits@2016-12-14T18:36:22Z

    PSNR | PSNR Cb | PSNR Cr | PSNR HVS |   SSIM | MS SSIM | CIEDE 2000
  0.0000 |  0.0000 |  0.0000 |   0.0000 | 0.0000 |  0.0000 |     0.0000

Change-Id: Ib69e98734fadcdc8b89936b7b6fbd0574afc7e34
2016-12-15 02:05:58 +00:00
Alex Converse 5b5140b06e Unfork some ANS setup code
Change-Id: I85e1b3cc4174029b6d1bfa4109b37793537071c2
2016-12-14 17:56:22 +00:00
Yaowu Xu f42bba2522 Reinstate "fix msvc build warnings and errors"
This commit reinstates portion of a reverted commit to fix warnings
and errors with MSVC2013 build.

Change-Id: Ibb5fd665db6d8c897a657e5994547a1f82e3f188
2016-11-12 00:36:55 +00:00
Yaowu Xu fdb4216d6b Revert "fix msvc build warnings and errors"
This reverts commit 32dbdff1b3.

Change-Id: I94ef281223f7abceb156714e8192d5ea5fdc2581
2016-11-10 22:32:29 +00:00
Yaowu Xu 32dbdff1b3 fix msvc build warnings and errors
This commit fix the msvc2013 build for configuration:
configure --target=x86_64-win64-vs12 --enable-experimental
 --enable-clpf --enable-dering --enable-motion-var --enable-ans

BUG=aomedia:80

Change-Id: I08b61e38e761ea4ed3175529fba4a50c57be44ac
2016-11-10 21:51:43 +00:00
Yaowu Xu febe9b06bb Fix msvc compiler warnings
BUG=aomedia:80

Change-Id: Ie4bccf053d2c24dcb64519650bcbcef4baffcdae
2016-11-09 19:38:21 +00:00
Alex Converse 1e4e29f776 Fix rans ec_multisymbol merge issues.
The rans experiment is dead. The ans experiment with the ec_multisymbol
experiment also turned on takes its place.

Change-Id: Ie9f30ec7cf73aae6b2ea580a7b1f208485a8a7a7
2016-11-09 01:25:29 +00:00
Nathan E. Egge baaaa16186 Centralize EC_MULTISYMBOL error checking.
The EC_ADAPT experiment cannot work unless EC_MULTISYMBOL is also
 enabled.
This patch replaces all individual checks with a centralized check in
 both the bitreader.h and bitwriter.h.

Change-Id: I418852d95c5012cc074ed65cd24997e08bc2aadd
2016-10-29 22:26:27 -07:00
Alex Converse 58c520afe9 Only build aom_read/write_symbol if CONFIG_EC_MULTISYMBOL
Change-Id: If86c7220ac9199a59e605dc43d42cc3db26cf8bd
2016-10-29 17:05:40 -07:00
Alex Converse aca9feba82 Add ec_multisymbol for common daala_ec and rans code
The new ec_multisymbol experiment supersedes the rans experiment and is
used for multisymbol features that can be backed by either daala_ec or
rans.

This experiment is automatically enabled by ec_adapt and will try to
enable daala_ec or ans (in that order).

Change-Id: Ie75b4002b7a9d7f5f7b4d130c1aacb3dbe97e54f
2016-10-29 17:05:40 -07:00
Thomas 9ac5508f32 Add EC_ADAPT experiment for symbol-adaptive entropy coding.
This experiment performs symbol-by-symbol statistics
adaptation for non-binary symbols. It requires DAALA_EC or
RANS and ANS to be enabled. The adaptation is currently
based on a simple recursive filter and is taken from
Daala. It has an adaptation rate dependent on alphabet size,
taken from Daala. It applies wherever non-binary symbols
are encoded using Cumulative Probability Functions rather
than trees.

Where symbols are adapted, forward updates in the compressed
header are removed.

In the case of RANS coefficient token values are adapted,
with the exception of the zero token which remains a
binary symbol. In the case of DAALA_EC other values
such as inter and intra modes are adapted as CDFs are
provided in those cases.

The experiment is configured with:

./configure --enable-experimental --enable-daala-ec --enable-ec-adapt

or

./configure --enable-experimental --enable-ans --enable-rans \
    --enable-ec-adapt

EC_ADAPT is not currently compatible with tiles.

BDR results on Objective-1-fast give a small loss:

PSNR YCbCr:      0.51%      0.49%      0.48%
PSNRHVS:      0.50%
SSIM:      0.50%
MSSSIM:      0.51%
CIEDE2000:      0.50%

Change-Id: I3888718e42616f3fd87144de7f125228446ac984
2016-10-29 16:57:48 -07:00
Yaowu Xu cfc5ac5034 Merge "Partition the ans experiment into 'ans' and 'rans'" into nextgenv2 2016-10-19 22:58:05 +00:00
Alex Converse ec6fb649da Partition the ans experiment into 'ans' and 'rans'
The (new) ans experiment replaces the bool coder with uABS bools. The
'rans' experiment adds multisymbol coding.

This matches the setup in aom/master.

Change-Id: Ida8372ccabf1e1e9afc45fe66362cda35a491222
2016-10-19 12:03:15 -07:00
Nathan E. Egge b244f39627 Change return type of tell and tell_frac to uint32_t.
The bit accounting functions aom_reader_tell() and aom_reader_tell_frac()
 return the number of bits and 1/8th bits respectively.
This patch changes the return type from ptrdiff_t which is signed to
 uint32_t which is unsigned.
The size_t type is not used since we only care about the number of bits
 or 1/8 bits per entropy coder context and we don't expect to code more
 than 512 megabits per tile.

Change-Id: I84a119d1f52829dcbdb66a92656eacca06e42b11
2016-10-19 10:53:52 -07:00
Michael Bebenita 6048d05225 Bit accounting.
This patch adds bit account infrastructure to the bit reader API.
When configured with --enable-accounting, every bit reader API
function records the number of bits necessary to decoding a symbol.
Accounting symbol entries are collected in global accounting data
structure, that can be used to understand exactly where bits are
spent (http://aomanalyzer.org). The data structure is cleared and
reused each frame to reduce memory usage. When configured without
--enable-accounting, bit accounting does not incur any runtime
overhead.

All aom_read_xxx functions now have an additional string parameter
that specifies the symbol name. By default, the ACCT_STR macro is
used (which expands to __func__). For more precise accounting,
these should be replaced with more descriptive names.

Change-Id: Ia2e1343cb842c9391b12b77272587dfbe307a56d
2016-10-19 04:34:29 +00:00
Michael Bebenita d7baf45ff6 Adds ability to measure with a higher precision the number of bits
read per symbol.

Change-Id: I218abaa5172b769b66dba45050381c0212602668
2016-10-18 16:57:56 -07:00
Michael Bebenita 868fc0b04a Port aom_reader_tell() support
This commit ports the following from aom/master:
4c46278 Add aom_reader_tell() support.
b9c9935 Remove an erroneous declaration.
56c9c3b Fix ANS build.

Change-Id: I59bd910f58c218c649a1de2a7b5fae0397e13cb1
2016-10-18 08:50:05 -07:00
Nathan E. Egge 45741e9351 Rename daala_read_tree_cdf() to daala_read_symbol().
Change-Id: I35f85bad88c637cea62577c546cdd5ced0e21bd6
2016-10-17 20:22:19 -07:00
Nathan E. Egge 44460148b2 Add API for writing trees using a CDF.
Added aom_write_tree_cdf() and aom_read_tree_cdf() function calls to
 bitwriter.h and bitreader.h respectively.
These calls take a multisymbol CDF and an index and directly encode the
 symbol using the enabled entropy coder.
Currently only the daala entropy encoder supports this (enabled with
 --enable-daala_ec) and a compile error is thrown otherwise.

Change-Id: I2fa1e87af4352c94384e0cfdbfd170ac99cf3705
2016-10-14 14:59:27 -07:00
Nathan E. Egge 43acafdee2 Use Daala entropy coder to code trees.
When building with --enable-daala_ec, calls to aom_write_tree() and
 aom_read_tree() will convert a aom_tree_index structure with associated
 aom_prob probabilities into a CDF on the fly for use with the
 od_ec_encode_cdf_q15().
The number of symbols in the CDF is capped at 16, and trees that contain
 more than 16 leaf nodes are handled by splitting the most likely, e.g.,
 highest probability symbols, first and coding multiple symbols if
 necessary.

ntt-short-1:

         MEDIUM (%) HIGH (%)
    PSNR 0.000227   0.000213
 PSNRHVS 0.000215   0.000205
    SSIM 0.000229   0.000209
FASTSSIM 0.000229   0.000214

subset1:

          RATE (%)  DSNR (dB)
    PSNR -0.00026   0.00002
 PSNRHVS -0.00026   0.00002
    SSIM -0.00026   0.00001
FASTSSIM -0.00026   0.00001

Change-Id: Icb1a8cb854fd81fdd88fbe4bc6761c7eb4757dfe
2016-10-14 14:59:27 -07:00
Nathan E. Egge 8043cc4018 Use Daala entropy coder to code bits.
When building with --enable-daala_ec, calls to aom_write() and aom_read()
 use the daala entropy coder to write and read bits.
When the probability is exactly 0.5 (128), then raw bits are used.

ntt-short-1:

          MEDIUM (%) HIGH (%)
    PSNR -0.027556  -0.020114
 PSNRHVS -0.027401  -0.020169
    SSIM -0.027587  -0.020151
FASTSSIM -0.027592  -0.020102

subset1:

         RATE (%)  DSNR (dB)
    PSNR 0.03296  -0.00210
 PSNRHVS 0.03537  -0.00281
    SSIM 0.03299  -0.00161
FASTSSIM 0.03458  -0.00111

Change-Id: I48ad8eb40fc895d62d6e241ea8abc02820d573f7
2016-10-14 14:59:27 -07:00
Alex Converse a1ac972867 Import the aom_read/write_symbol abstractions from aom/master
Change-Id: I0b255c05108c3b97e74df1b59c34111c9e9a5770
2016-10-12 17:41:01 -07:00
Nathan E. Egge eeedc633c0 Move tree writing code into bitwriter.h.
Rename av1_write_tree() to aom_write_tree() and move it into bitwriter.h
 to match aom_read_tree() in bitreader.h.

Manually cherry-picked from aom/master:
33a143fa7a

Change-Id: I6c686cdd3e0f179d7e95c5bc6984558b62d46d67
2016-10-11 09:36:01 -07:00
Alex Converse 7fe2ae8e88 Port ANS from aom/master 25aaf40
Reconciles the following commits from aom/master to nextgenv2:
- 25aaf40bbc
- 87073de569

Change-Id: Ideda50a6ec75485cb4fa7437c69f4e58d6a2ca73
2016-09-28 12:07:00 -07:00
Nathan E. Egge e691a24cff Refactor bitreader and bitwriter wrapper.
Move code for reading and writing literals and reading trees to use
just the aom_read_bit() and aom_write_bit() function calls.

Change-Id: Id2bced5f0125a5558030a813c51c3d79e5701873
(cherry picked from aom/master commit bc1ac15846)
2016-09-28 12:07:00 -07:00
Alex Converse acef60bd2c Migrate bitreader to the interface from aom/master
Change-Id: I7232f9ae3d97e730f66e4b80f550192e3ef7230b
2016-09-26 12:19:11 -07:00
Alex Converse eb00cb289b Move and wrap the old vpx boolcoder.
This should make room for compile time pluggable replacements.

Change-Id: Ib7afcffa93bf664b89a49da21a20138127443292
(cherry picked from commit 9dd0b89824)
2016-09-17 14:56:51 -07:00
Yaowu Xu 0764955002 Merge "Change to use aom copyright notice" into nextgenv2 2016-09-02 17:41:21 +00:00
Yaowu Xu 9c01aa1b0c Change to use aom copyright notice
This minimize code differences between AOM master and nextgenv2

Change-Id: If144865bdf3ef0818e7aac11018b9e786444c550
2016-09-02 08:22:07 -07:00
Angie Chiang cb9a9ebd81 Add frame info in bitstream debug tool
Change-Id: Iead3edd8563d7900481eb199e8b003d2d3df075b
2016-09-01 16:24:49 -07:00
Yaowu Xu f883b42cab Port renaming changes from AOMedia
Cherry-Picked the following commits:
0defd8f Changed "WebM" to "AOMedia" & "webm" to "aomedia"
54e6676 Replace "VPx" by "AVx"
5082a36 Change "Vpx" to "Avx"
7df44f1 Replace "Vp9" w/ "Av1"
967f722 Remove kVp9CodecId
828f30c Change "Vp8" to "AOM"
030b5ff AUTHORS regenerated
2524cae Add ref-mv experimental flag
016762b Change copyright notice to AOMedia form
81e5526 Replace vp9 w/ av1
9b94565 Add missing files
fa8ca9f Change "vp9" to "av1"
ec838b7  Convert "vp8" to "aom"
80edfa0 Change "VP9" to "AV1"
d1a11fb Change "vp8" to "aom"
7b58251 Point to WebM test data
dd1a5c8 Replace "VP8" with "AOM"
ff00fc0 Change "VPX" to "AOM"
01dee0b Change "vp10" to "av1" in source code
cebe6f0 Convert "vpx" to "aom"
17b0567 rename vp10*.mk to av1_*.mk
fe5f8a8 rename files vp10_* to av1_*

Change-Id: I6fc3d18eb11fc171e46140c836ad5339cf6c9419
2016-08-31 18:19:03 -07:00
Yaowu Xu c27fc14b02 Port folder renaming changes from AOM
Manually cherry-picked commits:
ceef058 libvpx->libaom part2
3d26d91 libvpx -> libaom
cfea7dd vp10/ -> av1/
3a8eff7 Fix a build issue for a test
bf4202e Rename vpx to aom

Change-Id: I1b0eb5a40796e3aaf41c58984b4229a439a597dc
2016-08-31 17:26:24 -07:00