c/enc


Log

Author Commit Date CI Message
Evgenii Kliuchnikov 3cc6172f 2025-08-14T03:50:11 uninline ShannonEntropy/BitsEntropy PiperOrigin-RevId: 794966726
Evgenii Kliuchnikov 103b25fb 2025-08-13T02:10:36 explicitly specify model for relocatable variables PiperOrigin-RevId: 794473371
Evgenii Kliuchnikov 7b345944 2025-08-11T01:27:34 adjust BROTLI_TEST effects PiperOrigin-RevId: 793535397
Evgenii Kliuchnikov 6a4c96b1 2025-08-07T01:30:51 more portable emergency exit PiperOrigin-RevId: 792046166
Evgenii Kliuchnikov 29e040b8 2025-08-06T06:17:04 use static init to reduce encoder library size PiperOrigin-RevId: 791661871
Evgenii Kliuchnikov bf6231d6 2025-08-05T08:34:48 Introduce static init PiperOrigin-RevId: 791228365
Evgenii Kliuchnikov 8a7201c6 2025-08-05T02:49:08 fix some includes PiperOrigin-RevId: 791124445
Evgenii Kliuchnikov 12203bb5 2025-08-04T23:29:38 Extract Hash14/15 to hash_base PiperOrigin-RevId: 791061237
Evgenii Kliuchnikov a47d7475 2025-07-11T07:38:19 Roll back: Enable shared_dictionary for quality 3 and 4. PiperOrigin-RevId: 781976993
Brotli 42c5139b 2025-07-09T02:33:07 Enable shared_dictionary for quality 3 and 4. PiperOrigin-RevId: 780946946
Brotli 434b582d 2025-06-30T03:31:08 Fix compilation errors when `BROTLI_DEBUG` is defined. PiperOrigin-RevId: 777494216
Andreas Deininger 93d0ac53 2025-05-27T09:47:01 Fix typos (#1242) Co-authored-by: Eugene Kliuchnikov <eustas.ru@gmail.com>
Evgenii Kliuchnikov 440e0364 2025-01-31T05:42:35 Another nullptr-arithmetics clamer PiperOrigin-RevId: 721741817
Copybara-Service 2b6efcbd 2024-11-19T01:42:21 Merge pull request #1204 from heshpdx:master PiperOrigin-RevId: 697922880
Mahesh Madhav 8c6d25f7 2024-11-15T10:39:15 Update c/enc/encode.c Co-authored-by: Eugene Kliuchnikov <eustas@google.com>
Mahesh Madhav 782aadd0 2024-11-12T14:45:06 Apply suggestions from code review Co-authored-by: Eugene Kliuchnikov <eustas@google.com>
Mahesh Madhav 1054ecc2 2024-11-12T16:25:30 Add static variables as per code review comments.
Mahesh Madhav cec846f8 2024-10-05T10:46:27 Update c/enc/block_splitter_inc.h Added a digit of precision
Mahesh Madhav cefec3ce 2024-10-05T05:40:19 Reduce fdiv's into fmul's Provides small speedup on microarchitectures where the floating point divide is slower than the floating point multiply.
Jeremy Koritzinsky aa548219 2024-08-27T14:25:33 Fix C4224 warnings when building with MSVC
Brotli 39bcecf4 2024-07-15T11:26:47 Fix hasher resolution for long windows. PiperOrigin-RevId: 652545288
Brotli a528bce9 2024-05-31T09:10:52 Hoist the static bounds check out of the combined if check. PiperOrigin-RevId: 639054702
Brotli fe754f34 2024-05-30T09:50:58 Use a hash table header and SIMD to speed up hash table operations (similar to [Swiss Tables](https://abseil.io/about/design/swisstables)). PiperOrigin-RevId: 638686412
Brotli 04388304 2024-05-09T12:41:57 Use a hash table header and SIMD to speed up hash table operations (similar to [Swiss Tables](https://abseil.io/about/design/swisstables)). PiperOrigin-RevId: 632238409
Brotli bb809ac9 2024-05-08T17:59:09 Use a hash table header and SIMD to speed up hash table operations (similar to [Swiss Tables](https://abseil.io/about/design/swisstables)). PiperOrigin-RevId: 631982664
Brotli d01a4caa 2024-04-22T02:06:42 Internal change PiperOrigin-RevId: 626960053
Brotli 1b3a5ccb 2024-04-18T19:59:28 Prefetch the backreference hashtable bucket. Place the prefetch before the last distance checks, to give the prefetch enough time to work. PiperOrigin-RevId: 626228820
Evgenii Kliuchnikov 443af10a 2024-04-17T04:09:20 add (assumption) check PiperOrigin-RevId: 625632989
Evgenii Kliuchnikov c1c76e99 2024-04-14T06:35:19 Don't check `cur_ix_masked` against `ring_buffer_mask`. `cur_ix_masked` isn't changing from iteration to iteration, and `max_length` ensures we never find a match long enough to walk off the ring buffer. PiperOrigin-RevId: 624701948
Brotli 709c4672 2024-04-12T09:15:22 Fix minor syntax issues. Missing semicolons. Move checks below variable declarations for c89. PiperOrigin-RevId: 624199887
Brotli a76d96e7 2024-04-12T06:50:04 Don't check `cur_ix_masked` against `ring_buffer_mask`. `cur_ix_masked` isn't changing from iteration to iteration, and `max_length` ensures we never find a match long enough to walk off the ring buffer. PiperOrigin-RevId: 624162764
Brotli a813a6a1 2024-04-11T11:23:08 Update the `H5` hasher to use the `H6`'s `FN(STORE)`. PiperOrigin-RevId: 623885589
Brotli f964a1e8 2024-04-09T00:18:20 Internal change PiperOrigin-RevId: 623073126
Brotli cdbe7fc7 2024-04-08T04:29:59 Internal change PiperOrigin-RevId: 622802698
Brotli 9351fa7f 2024-03-20T10:29:20 Compare 4 bytes when checking if a longer match is possible. Loading and comparing 4 bytes is ~as fast as 1 byte, but allows us to avoid more full match length calculation. PiperOrigin-RevId: 617556847
Brotli 9717649c 2024-03-13T02:47:07 Use BROTLI_MAX_STATIC_CONTEXTS instead of magic constants in encode.c PiperOrigin-RevId: 615341475
Evgenii Kliuchnikov 9b83be23 2023-10-26T02:02:51 fix wording PiperOrigin-RevId: 576788685
Evgenii Kliuchnikov e7313b0c 2023-08-28T07:20:13 tune memory manager for BROTLI_EXPERIMENTAL PiperOrigin-RevId: 560703386
Evgenii Kliuchnikov 2a5a088b 2023-08-21T06:35:47 more tuning for BROTLI_EXPERIMENTAL + clean-on-oom PiperOrigin-RevId: 558771745
Evgenii Kliuchnikov 3ebb2d30 2023-08-18T02:55:01 Move serialized dictionary feature behind the flag. BROTLI_SHARED_DICTIONARY_SERIALIZED enum value is a part of API, but it should not be used (will cause failures). Changing how serialized dictionaries work won't be considered as an API change, until this feature is enabled. Enabling this feature in the future will be considered as a "compatible" change. PiperOrigin-RevId: 558091676
Evgenii Kliuchnikov 0f2157cc 2023-08-16T08:54:37 Update comment; fixes #1061 PiperOrigin-RevId: 557501089
Evgenii Kliuchnikov a5600898 2023-08-03T04:58:16 speedup q5-9 on large files PiperOrigin-RevId: 553440457
Evgenii Kliuchnikov 117b68b7 2023-08-02T03:04:52 speedup encoder on q5-9 / 1MB+ files PiperOrigin-RevId: 553087469
Evgenii Kliuchnikov 779a49bf 2023-07-20T04:18:18 bake in runtime constant PiperOrigin-RevId: 549590409
Evgenii Kliuchnikov 04f294b1 2023-01-29T14:16:20 Fix emitting 1-byte long metadata block PiperOrigin-RevId: 505484299
Brotli 1e61e972 2023-01-27T10:16:21 speed up encoding by ~5 % PiperOrigin-RevId: 505061835
Aron Parker 71fe6cac 2023-01-07T22:01:47 Fix BrotliEncoderEstimatePeakMemoryUsage (#1002) Fixes https://github.com/google/brotli/issues/1001
Eugene Kliuchnikov 0ea46038 2023-01-04T12:10:29 Fix MSVC warning (#998) Fix #875
Evgenii Kliuchnikov a8f5813b 2022-11-17T13:03:09 Update Documentation: - add note that brotli is a "stream" format, not an archive-like - regenerate .1 with Pandoc Build: - drop legacy "BROTLI_BUILD_PORTABLE" option - drop "BROTLI_SANITIZED" definition Code: - c: comb includes - c/enc: extract encoder state into separate header - c/enc: drop designated q10 codepath - c/enc: dealing better with flushing of empty stream - fix MSVC compilation API: - py: use library version instead of one in version.h - c: add plugable API to report consumed input / produced output - c/java: support "lean" prepared dictionaries (without copy of source)
Jyrki Alakuijala 4ec67035 2021-12-07T01:47:07 Merge pull request #929 from jbms/fix-vla-parameter Fix -Werror=vla-parameter errors with GCC 11.2.0
Eugene Kliuchnikov 8376f72e 2021-11-10T10:34:39 Prepare for copybara (#939) Co-authored-by: Eugene Kliuchnikov <eustas@chromium.org>
Jeremy Maitin-Shepard 27dd7265 2021-09-14T12:27:45 Fix -Werror=vla-parameter errors with GCC 11.2.0
Eugene Kliuchnikov 62662f87 2021-09-08T09:18:45 Strip "./" in includes (#925) Co-authored-by: Eugene Kliuchnikov <eustas@chromium.org>
Eugene Kliuchnikov 68f1b90a 2021-08-18T19:15:07 Update (#918) Prepare to use copybara worklow.
Eugene Kliuchnikov 19d86fb9 2021-08-04T14:42:02 Merge-in SharedDictionary feature (#916) Co-authored-by: Eugene Kliuchnikov <eustas@chromium.org>
Eugene Kliuchnikov 630b5084 2021-07-29T22:29:43 Update (#914) * slimmer stack frames in encoder * fix MSAN problem in hasher_composite (not dangerous, only in large_window mode) * fix JNI decoder wrapper - power-of-two payloads fail to decode sometimes * reformat polyfil.js and decode_test.js
Adrián Herrera Arcila 0a3944c8 2021-06-23T08:53:59 Fix VLA parameter warning (#893) Make VLA buffer types consistent in declarations and definitions. Resolves build crash when using -Werror due to "vla-parameter" warning. Signed-off-by: Adrian Herrera <adr.her.arc.95@gmail.com>
Ikko Ashimine bdcfb123 2021-06-23T16:42:28 Fix typo in hash_composite_inc.h (#903) defered -> deferred
Eugene Kliuchnikov 5692e422 2021-01-18T10:56:39 Update (#852) * Update * comments and clarifications in block_splitter * power-of-2 aligned allocations for Hasher * refresh decode.js from Java sources * disable JS build
Dmitry Rozhkov 7e8e207c 2020-09-07T10:40:03 Fix clang-10 compilation issue (#839) clang-10 throws the following error: In file included from external/org_brotli/c/enc/bit_cost.c:9: external/org_brotli/c/enc/./bit_cost.h:48:16: error: implicit conversion from 'size_t' (aka 'unsigned long') to 'double' may lose precision [-Werror,-Wimplicit-int-float-conversion] if (retval < sum) { ~ ^~~ 1 error generated. Make the conversion explicit.
Eugene Kliuchnikov 223d80cf 2020-08-26T12:32:27 Update (#826) * IMPORTANT: decoder: fix potential overflow when input chunk is >2GiB * simplify max Huffman table size calculation * eliminate symbol duplicates (static arrays in .h files) * minor combing in research/ code
Eugene Kliuchnikov 7f740f13 2020-05-15T11:06:21 Update (#807) - fix formatting - fix type conversion - fix no-op arithmetic with null-pointer - improve performance of hash_longest_match64 - go: detect read after close - java decoder: support compound dictionary - remove executable flag on non-scripts
Clinton Ingram 924b2b2b 2020-03-19T03:57:56 Move TZCNT and BSR intrinsics to platform.h, add MSVC versions (#636)
Cristi Vîjdea f503cb70 2020-03-19T11:46:52 Add HAVE_LOG2 build macro (#783) * Add HAVE_LOG2 build macro Fixes #781 * Rename macro to BROTLI_HAVE_LOG2 and move comment for visibility
Eugene Kliuchnikov 78e7bbc3 2019-05-03T11:51:11 Update (#753) * fix executable mode of decode.js * explain clang-analyser about non-nullability * fix "dead assignment" * rename proguard.cfg -> proguard.pgcfg
Eugene Kliuchnikov 4b2b2d4f 2019-04-12T13:57:42 Update (#749) Update: * Bazel: fix MSVC configuration * C: common: extended documentation and helpers around distance codes * C: common: enable BROTLI_DCHECK in "debug" builds * C: common: fix implicit trailing zero in `kPrefixSuffix` * C: dec: fix possible bit reader discharge for "large-window" mode * C: dec: simplify distance decoding via lookup table * C: dec: reuse decoder state members memory via union with lookup table * C: dec: add decoder state diagram * C: enc: clarify access to static dictionary * C: enc: improve static dictionary hash * C: enc: add "stream offset" parameter for parallel encoding * C: enc: reorganize hasher; now Q2-Q3 require exactly 256KiB to avoid global TCMalloc lock * C: enc: fix rare access to uninitialized data in ring-buffer * C: enc: reorganize logging / checks in `write_bits.h` * Java: dec: add "large-window" support * Java: dec: improve speed * Java: dec: debug and 32-bit mode are now activated via system properties * Java: dec: demystify some state variables (use better names) * Dictionary generator: add single input mode * Java: dec: modernize tests * Bazel: js: pick working commit for closure rules
Eugene Kliuchnikov d0ffe60b 2018-10-24T16:06:09 Verbose CLI + start pulling "Shared-Brotli" (#722) * Verbose CLI + start pulling "Shared-Brotli" * vesbose CLI output; fix #666 * pull `SHIFT` transforms; currently this is semantically dead code; later it will be used by "Shared-Brotli"
Eugene Kliuchnikov f7cbc97c 2018-10-16T16:46:54 Fix typo / minor formatting (#716) * Fix typo / minor formatting / pull computable constant to the place of use.
Eugene Kliuchnikov 2216a0dd 2018-09-13T08:09:32 Update (#706) Update * add ASAN/MSAN unaligned read specializations * add "brotli" prefix to u_uint64 type * increment version to 1.0.06 * fix CoverityScan "unused assignment" warning * fix JDK 8<->9 incompatibility * add encoder optimization for empty input * regenerate JS decoder * unbreak Travis builds
Eugene Kliuchnikov eb12ec04 2018-06-20T15:14:10 Update (#688) * add rolling-composite-hasher for large-window mode * make API methods explicitly public
Eugene Kliuchnikov 8544ae85 2018-06-09T11:17:13 Update (#680) * fix MSVC warnings * cleanups
Eugene Kliuchnikov 48a25b3f 2018-05-18T22:07:52 Fix #671 (#672)
Eugene Kliuchnikov f5ed35d0 2018-05-03T11:16:21 Update (#664) * Update * fix ifdef style * get back to fine-compiler-version-based-macros (use Hedley) * fix q=0 histogram collection for very long copy/insert commands
Eugene Kliuchnikov 60003961 2018-04-20T14:10:55 Remove unprefixed macros from public headers (#662)
Eugene Kliuchnikov 68db5c02 2018-04-13T11:44:34 Update (#660) * Update * improve q=1 compression on small files * fix "left shift before promotion" * fix osx Travis builds
Eugene Kliuchnikov c6333e1e 2018-03-29T10:37:07 Fix MSVC compilation (#657) * tell bazel not to pass strict options to a fancy compiler * fix signed-unsigned comparison warning found by MSVC
Eugene Kliuchnikov 0f3c84e7 2018-03-27T22:29:22 Update (#656) * proper fix for the "fall through" warning" * automatic NDIRECT/NPOSTFIX tuning (better compression) * fix unaligned access for `aarch64`-cross-`armhf` build * fix `aarch64` detection (10% decoder speedup) * expose `large_window` CLI option * make default window size 16MiB * ramp up version to 1.0.4
Eugene Kliuchnikov 631fe194 2018-03-20T17:37:41 Update (#651) * fix `bazel` build (ignore switch case fall-through) * add `NPOSTFIX` / `NDIRECT` encoder parameters * fix source file lists (add `params.h`) * fix bug in `durchschlag` * print clarifying messages wheb CLI argument parsing fails
Eugene Kliuchnikov 533843e3 2018-03-02T15:49:58 Update (#643) Update * make the zopflification aware of `NDIRECT`, `NPOSTFIX` (better compression in `font` mode) * add small and simple decoder tool * fix typo * Java: wrapper: make decoder channel more async-friendly Ramp up version to 1.0.3 / 1.0.3
Eugene Kliuchnikov 35e69fc7 2018-02-26T09:04:36 New feature: "Large Window Brotli" (#640) * New feature: "Large Window Brotli" By setting special encoder/decoder flag it is now possible to extend LZ-window up to 30 bits; though produced stream will not be RFC7932 compliant. Added new dictionary generator - "DSH". It combines speed of "Sieve" and quality of "DM". Plus utilities to prepare train corpora (remove unique strings). Improved compression ratio: now two sub-blocks could be stitched: the last copy command could be extended to span the next sub-block. Fixed compression ineffectiveness caused by floating numbers rounding and wrong cost heuristic. Other C changes: - combined / moved `context.h` to `common` - moved transforms to `common` - unified some aspects of code formatting - added an abstraction for encoder (static) dictionary - moved default allocator/deallocator functions to `common` brotli CLI: - window size is auto-adjusted if not specified explicitly Java: - added "eager" decoding both to JNI wrapper and pure decoder - huge speed-up of `DictionaryData` initialization * Add dictionaryless compressed dictionary * Fix `sources.lst` * Fix `sources.lst` and add a note that `libtool` is also required. * Update setup.py * Fix `EagerStreamTest` * Fix BUILD file * Add missing `libdivsufsort` dependency * Fix "unused parameter" warning.
Eugene Kliuchnikov da254cff 2017-12-12T14:33:12 Update (#630) * merge {dec|enc}/port.h into common/platform.h * fix one-shot q=10 1-byte input compression * fix some unprefixed definitions * make hashers host-endianness-independent * extract enc/params.h from enc/quality.h * fix API documentation / typos * improve `BrotliEncoderMaxCompressedSize`
Eugene Kliuchnikov 0ad94eed 2017-11-28T15:37:28 Update (#620) * add autotools build * separate semantic and ABI version * extract sources.lst (used by CMake and Automake) * share pkgconfig templates (used by CMake and Automake) * decoder: always set `total_out` * encoder: fix `BROTLI_ENSURE_CAPACITY` macro (no-op after preprocessor) * decoder/encoder: refine `free_func` contract
Eugene Kliuchnikov 3e58ea5f 2017-10-13T14:50:51 Update (#617) * remove `const` on `BrotliDictionary` members * extend `ZofliNode` distance range to 128MiB * add missing `port.h` include to `quality.h` * fix typo in encoder API-doc * regenerate `decode.min.js`
Tomáš Popela a0c7dafe 2017-10-10T11:24:13 Fix permissions of various files in project (#613) Move from 755 to 644.
Eugene Kliuchnikov 37fb83ec 2017-09-19T15:57:15 Update: (#600) * encoder: relax backward references candidates asserts * encoder: make RNG more platform-independent * encoder: remove "unused" param (context mode) * CLI: improve first-encounter experience * Java: update SynthTest * Java: refine proguard config * Java/JNI: fix one-shot compression workflow
Eugene Kliuchnikov d7bce1e0 2017-09-07T20:27:49 Update (#593) * Update: * fix CLI error messages * fix CLI console IO on Windows
Eugene Kliuchnikov a629289e 2017-08-28T11:31:29 Update (#590) * add transpiled JS decoder * make PY wrapper accept memview * fix dictionary generator * speedup compression of RLEish data
Eugene Kliuchnikov 65354354 2017-08-24T13:29:48 Update (#589) * cleanup * fix `unbrotli` CLI * Java retouch for faster JS decoder
Eugene Kliuchnikov d63e8f75 2017-08-04T10:02:56 Update API, and more (#581) Update API, and more: * remove "custom dictionary" support * c/encoder: fix #580: big-endian build * Java: reduce jar size * Java: speedup decoding * Java: add 32-bit CPU support * Java: make source code JS transpiler-ready
Eugene Kliuchnikov 52441069 2017-07-21T10:07:24 Update (#574) * Update * decoder: better behavior after failure * encoder: replace "len_x_code" with delta * research: add experimental dictionary generator * python: test combing
Elouan Martinet 00cacfdf 2017-06-17T13:22:07 Fix compilation issue with BROTLI_ALLOC macro using GCC 7 (-Wint-in-bool-context) (#562)
Eugene Kliuchnikov 05d5f3d7 2017-06-13T12:52:56 Update (#560) Update: * add decoder API to avoid ringbuffer reallocation * fix MSVC warnings * remove dead code
Eugene Kliuchnikov 6ece1d87 2017-04-23T14:07:08 Move files & update paths (#541) * Move files & update paths * Rename build to scripts. * Fix paths * Fix script.