@@ -16,10 +16,10 @@ use super::bit_cost::{BitsEntropy, ShannonEntropy};
16
16
use super :: block_split:: BlockSplit ;
17
17
#[ allow( unused_imports) ]
18
18
use super :: brotli_bit_stream:: { BrotliBuildAndStoreHuffmanTreeFast , BrotliStoreHuffmanTree ,
19
- BrotliStoreMetaBlock , BrotliStoreSyncMetaBlock ,
20
- BrotliStoreMetaBlockFast , BrotliStoreMetaBlockTrivial ,
21
- BrotliStoreUncompressedMetaBlock ,
22
- BrotliWriteEmptyLastMetaBlock , BrotliWriteMetadataMetaBlock ,
19
+ BrotliStoreMetaBlock , BrotliStoreMetaBlockFast ,
20
+ BrotliStoreMetaBlockTrivial , BrotliStoreUncompressedMetaBlock ,
21
+ BrotliWriteEmptyLastMetaBlock ,
22
+ BrotliWritePaddingMetaBlock , BrotliWriteMetadataMetaBlock ,
23
23
MetaBlockSplit , RecoderState , JumpToByteBoundary } ;
24
24
25
25
use enc:: input_pair:: InputReferenceMut ;
@@ -740,7 +740,7 @@ fn EnsureInitialized<Alloc: BrotliAlloc>
740
740
if ( * s) . params . quality == 0i32 || ( * s) . params . quality == 1i32 {
741
741
lgwin = brotli_max_int ( lgwin, 18i32 ) ;
742
742
}
743
- if !( * s) . params . bare_stream {
743
+ if !( ( * s) . params . catable && ( * s ) . params . bare_stream ) {
744
744
EncodeWindowBits ( lgwin, s. params . large_window , & mut ( * s) . last_bytes_ , & mut ( * s) . last_bytes_bits_ ) ;
745
745
}
746
746
}
@@ -1973,6 +1973,15 @@ fn DecideOverLiteralContextModeling(input: &[u8],
1973
1973
literal_context_map) ;
1974
1974
}
1975
1975
}
1976
+ fn WriteEmptyLastBlocksInternal ( params : & BrotliEncoderParams , storage_ix : & mut usize , storage : & mut [ u8 ] ) {
1977
+ // insert empty block for byte alignment if required
1978
+ if params. byte_align {
1979
+ BrotliWritePaddingMetaBlock ( storage_ix, storage) ;
1980
+ }
1981
+ if !params. bare_stream {
1982
+ BrotliWriteEmptyLastMetaBlock ( storage_ix, storage)
1983
+ }
1984
+ }
1976
1985
fn WriteMetaBlockInternal < Alloc : BrotliAlloc ,
1977
1986
Cb >
1978
1987
( alloc : & mut Alloc ,
@@ -2011,8 +2020,7 @@ fn WriteMetaBlockInternal<Alloc: BrotliAlloc,
2011
2020
let literal_context_lut = BROTLI_CONTEXT_LUT ( literal_context_mode) ;
2012
2021
let mut block_params = params. clone ( ) ;
2013
2022
if bytes == 0usize {
2014
- BrotliWriteBits ( 2usize , 3 , storage_ix, storage) ;
2015
- * storage_ix = ( * storage_ix) . wrapping_add ( 7u32 as ( usize ) ) & !7u32 as ( usize ) ;
2023
+ WriteEmptyLastBlocksInternal ( params, storage_ix, storage) ;
2016
2024
return ;
2017
2025
}
2018
2026
if ShouldCompress ( data,
@@ -2035,13 +2043,7 @@ fn WriteMetaBlockInternal<Alloc: BrotliAlloc,
2035
2043
false ,
2036
2044
cb) ;
2037
2045
if actual_is_last != is_last {
2038
- // insert empty block for byte alignment if required
2039
- if params. byte_align && ( ( * storage_ix & 7u32 as ( usize ) ) != 0 ) {
2040
- BrotliStoreSyncMetaBlock ( storage_ix, storage) ;
2041
- }
2042
- if !params. bare_stream {
2043
- BrotliWriteEmptyLastMetaBlock ( storage_ix, storage)
2044
- }
2046
+ WriteEmptyLastBlocksInternal ( params, storage_ix, storage) ;
2045
2047
}
2046
2048
return ;
2047
2049
}
@@ -2181,13 +2183,7 @@ fn WriteMetaBlockInternal<Alloc: BrotliAlloc,
2181
2183
cb) ;
2182
2184
}
2183
2185
if actual_is_last != is_last {
2184
- // insert empty block for byte alignment if required
2185
- if params. byte_align && ( ( * storage_ix & 7u32 as ( usize ) ) != 0 ) {
2186
- BrotliStoreSyncMetaBlock ( storage_ix, storage) ;
2187
- }
2188
- if !params. bare_stream {
2189
- BrotliWriteEmptyLastMetaBlock ( storage_ix, storage)
2190
- }
2186
+ WriteEmptyLastBlocksInternal ( params, storage_ix, storage) ;
2191
2187
}
2192
2188
}
2193
2189
@@ -2284,6 +2280,10 @@ fn EncodeData<Alloc: BrotliAlloc,
2284
2280
* out_size = catable_header_size;
2285
2281
s. is_first_mb = IsFirst :: HeaderWritten ;
2286
2282
}
2283
+ // fixup for empty stream - note: catable is always appendable
2284
+ if bytes == 0 && s. params . byte_align && s. params . appendable && !s. params . catable {
2285
+ BrotliWritePaddingMetaBlock ( & mut storage_ix, ( * s) . storage_ . slice_mut ( ) ) ;
2286
+ }
2287
2287
}
2288
2288
if let IsFirst :: BothCatableBytesWritten = s. is_first_mb {
2289
2289
// nothing to do here, move along
0 commit comments