Commit Graph

1192 Commits

Author SHA1 Message Date
szabadka
500c85acae Merge pull request #94 from szabadka/master
Speed and memory usage improvements for the decoder.
2015-05-07 17:00:58 +02:00
Zoltan Szabadka
83aa24dc86 Speed and memory usage improvements for the decoder.
* Change order of members of bit reader state structure.

* Remove unused includes for assert. Add BROTLI_DCHECK
  macros and use it instead of assert.

* Do not calculate nbits in common case of ReadSymbol.

* Introduce and use PREDICT_TRUE / PREDICT_FALSE macros.

* Allocate less memory in the brotli decoder if it knows
  the result size beforehand. Before this, the decoder
  would always allocate 16MB if the encoder annotated the
  window size as 22 bit (which is the default), even if the
  file is only a few KB uncompressed. Now, it'll only
  allocate a ringbuffer as large as needed for the result file.
  But only if it can know the filesize, it's not possible
  to know that if there are multiple metablocks or too large
  uncompressed metablock.
2015-05-07 16:53:43 +02:00
szabadka
47ea761869 Merge pull request #93 from szabadka/master
Don't do any block splitting for quality 1.
2015-04-28 10:14:55 +02:00
Zoltan Szabadka
0f726df1f1 Don't do any block splitting for quality 1. 2015-04-28 10:12:47 +02:00
szabadka
344ea8edb3 Merge pull request #92 from szabadka/master
Fix an error propagation bug in the decoder.
2015-04-28 10:08:52 +02:00
Zoltan Szabadka
fe14d7b32a Fix an error propagation bug in the decoder. 2015-04-28 10:07:12 +02:00
szabadka
4f902dccf4 Merge pull request #91 from szabadka/master
Fix the year on the copyright message.
2015-04-27 18:27:00 +02:00
Zoltan Szabadka
94bc27d87a Fix the year on the copyright message. 2015-04-27 18:25:59 +02:00
szabadka
5a1cf14116 Merge pull request #90 from szabadka/master
Change the expiration date and title of the -03 draft.
2015-04-27 18:12:55 +02:00
Zoltan Szabadka
fd4a048171 Change the expiration date and title of the -03 draft. 2015-04-27 18:12:09 +02:00
szabadka
29a72665c3 Merge pull request #89 from szabadka/master
Create -03 version of the internet draft.
2015-04-27 18:04:12 +02:00
Zoltan Szabadka
98bd88413a Create -03 version of the internet draft. 2015-04-27 17:52:21 +02:00
szabadka
f8bfe06821 Merge pull request #88 from szabadka/master
Remove the 'override' keyword from ~BrotliFileIn().
2015-04-23 16:44:35 +02:00
Zoltan Szabadka
99af4df8ea Remove the 'override' keyword from ~BrotliFileIn().
Apparently MSVS 2010 does not support this.
2015-04-23 16:43:38 +02:00
szabadka
977bec5159 Merge pull request #87 from szabadka/master
Remove quality parameter from bitstream writing functions.
2015-04-23 16:23:36 +02:00
Zoltan Szabadka
98539223f5 Remove quality parameter from bitstream writing functions.
Fix a few crashes related to some quality and param combinations.
2015-04-23 16:20:29 +02:00
szabadka
e94bddd013 Merge pull request #86 from szabadka/master
Add a static hash table based dictionary lookup to fast brotli.
2015-04-23 15:56:54 +02:00
Zoltan Szabadka
e91a4492c7 Add dictionary_hash.h to setup.py. 2015-04-23 15:55:43 +02:00
Zoltan Szabadka
fdfb19806b Add a static hash table based dictionary lookup to fast brotli. 2015-04-23 15:52:32 +02:00
szabadka
16a219bbc2 Merge pull request #85 from szabadka/master
Encoder support for new empty meta-block format.
2015-04-23 15:45:48 +02:00
Zoltan Szabadka
2fd80cdc9a Encoder support for new empty meta-block format.
Changed the parallel implementation to sync meta-blocks
to byte boundary by emitting empty meta-blocks.
2015-04-23 15:43:37 +02:00
szabadka
098c928864 Merge pull request #84 from szabadka/master
Fix entropy calculation.
2015-04-23 15:36:03 +02:00
Zoltan Szabadka
6d80610f03 Fix entropy calculation. 2015-04-23 15:35:16 +02:00
szabadka
5ea92475af Merge pull request #83 from szabadka/master
Encoder implementation using input/output classes.
2015-04-23 15:30:51 +02:00
Zoltan Szabadka
3dbe2e03e7 Encoder implementation using input/output classes.
Add a BrotliCompress() method to the public encoder API
that uses the BrotliIn and BrotliOut classes and use
that in the 'bro' command-line tool.

Use the streaming api in BrotliCompressBuffer() and
BrotliCompressor::WriteMetaBlock().

Use the appropiate hashers for quality <= 9.
2015-04-23 15:26:08 +02:00
szabadka
e42eaa097c Merge pull request #82 from szabadka/master
Add input and output classes for streaming compression.
2015-04-23 14:37:50 +02:00
Zoltan Szabadka
09aa9ca410 Add the streams.* files to Makefile and setup.py 2015-04-23 14:35:43 +02:00
Zoltan Szabadka
6a5303304e Add input and output classes for streaming compression. 2015-04-23 14:29:01 +02:00
szabadka
ec03509d6d Merge pull request #81 from szabadka/master
Add params to disable static dictionary and context modeling.
2015-04-23 13:55:38 +02:00
Zoltan Szabadka
89a6fb85fb Add params to disable static dictionary and context modeling.
Disable all slow features for quality <= 9 (literal cost modeling,
dictionary, context modeling, advanced block splitting).

Change vector<Command> arguments of internal functions
to Command* and size_t.
2015-04-23 13:15:42 +02:00
szabadka
0c81a1360b Merge pull request #35 from mitya57/master
Makefile fixes and cleanups
2015-04-23 12:05:39 +02:00
szabadka
2492f171c7 Merge pull request #80 from anthrotype/test_brotli_py
[python] prepend build/lib folder to PYTHONPATH before running tests
2015-04-23 10:44:35 +02:00
Cosimo Lupo
cdde52ef63 [python] refactored tests and import shared utilities from module 2015-04-22 17:54:56 +01:00
Cosimo Lupo
906f4f52ab [python] prepend build/lib folder to PYTHONPATH before running tests 2015-04-22 16:50:38 +01:00
szabadka
7fa4586079 Merge pull request #79 from szabadka/master
Add partial output support to the decoder.
2015-04-22 17:34:55 +02:00
Zoltan Szabadka
64c261113f Add partial output support to the decoder. 2015-04-22 17:33:21 +02:00
szabadka
5ded136348 Merge pull request #78 from szabadka/master
Implement some stricter format checks in the decoder.
2015-04-22 14:43:06 +02:00
Zoltan Szabadka
84a7687453 Merge remote-tracking branch 'upstream/master' 2015-04-22 14:38:26 +02:00
Zoltan Szabadka
28b1f7a6b1 Implement some stricter format checks in the decoder.
- Reject brotli streams where the number of
    nibbles is too large for the size of the
    meta-block
  - Reject brotli streams where the padding
    bits after a meta-block are not all zero
  - Reject brotli streams where the symbol
    in the simple prefix code is not in
    the symbol alphabet
2015-04-22 14:35:21 +02:00
szabadka
42b8c74d98 Merge pull request #77 from szabadka/master
Decoder support for new empty meta-block format.
2015-04-22 14:29:05 +02:00
Zoltan Szabadka
a81f2ef433 Decoder support for new empty meta-block format.
This change enforces the new 16MB limit on the
size of the meta-blocks and adds support for
empty meta-blocks with optional ignored metadata.
2015-04-22 14:25:08 +02:00
szabadka
f393bff2e3 Merge pull request #76 from szabadka/master
Support empty meta-blocks with optional ignored metadata.
2015-04-22 13:18:52 +02:00
Zoltan Szabadka
2d8b2ec12b Support empty meta-blocks with optional ignored metadata.
This is a partially backward incompatible format change,
that makes previously valid brotli streams that contain
larger than 16MB meta-blocks invalid.

The impact of this should be minimal, since the 'bro'
command-line tool does not create larger than 2MB
meta-blocks, so the only streams this change could
break are those created by a custom brotli encoder.

This commit contains only the specification update,
implementation in the decoder and encoder will
follow in later commits.
2015-04-22 12:41:57 +02:00
szabadka
d941130e59 Merge pull request #75 from szabadka/master
Change the specification to be less strict in some cases.
2015-04-22 12:27:08 +02:00
Zoltan Szabadka
5b80ef0fd1 Change the specification to be less strict in some cases.
In the following three cases we allow more choices
for the compressor, which can potentially lead to
less compressed bits.

  (1) Allow brotli streams where the block counts
      do not count down to exactly zero at the end
      of the meta-block. This makes it possible
      for compressors to sometimes choose a block
      count which can be represented with less bits
      than the exact block count.

  (2) Remove the restriction that prefix code
      descriptions with exactly one non-zero
      length symbol in the code length alphabet
      must have 1 bit depth. This is because
      bit depth 1 requires the most bits to encode.

  (3) Allow any copy length value in the last
      command where the copy part is ignored.
      This makes it possible for a compressor
      to choose a copy length which can be
      represented with the least amount of bits.

In addition to the changes above, this commit also
has a wording clarification in the overview section
where the use of the 'context ID' expression is
changed to be consistent with the rest of the
specification, i.e. that it is a function of the
last two literals or the copy length.
2015-04-22 12:08:16 +02:00
szabadka
8fe88e4bae Merge pull request #74 from szabadka/master
Use consistent sentence spacing in the specification.
2015-04-22 11:57:26 +02:00
Zoltan Szabadka
206d067c4a Use consistent sentence spacing in the specification.
All sentence spacing was changed to one space, except
in the boilerplate which must be preserved verbatim.
2015-04-22 11:55:29 +02:00
szabadka
0c1a222159 Merge pull request #73 from szabadka/master
Add Mark Adler's edits to the specification.
2015-04-22 11:44:38 +02:00
Zoltan Szabadka
e9fd1a4f20 Add Mark Adler's edits to the specification.
The specification source is changed in this commit
to exactly mirror the specification edited by Mark Adler:

https://github.com/madler/brotli/blob/master/brotli-02-edit.nroff
(version 70e53d7)
2015-04-22 11:33:38 +02:00
szabadka
7310f1b91f Merge pull request #71 from anthrotype/pypy_unbuffered
[python] fix unbuffered binary mode for I/O streams in Windows pypy
2015-04-16 14:35:55 +02:00