opencv
1/* deflate_huff.c -- compress data using huffman encoding only strategy
2*
3* Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
4* For conditions of distribution and use, see copyright notice in zlib.h
5*/
6
7#include "zbuild.h"
8#include "deflate.h"
9#include "deflate_p.h"
10#include "functable.h"
11
12/* ===========================================================================
13* For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
14* (It will be regenerated if this run of deflate switches away from Huffman.)
15*/
16Z_INTERNAL block_state deflate_huff(deflate_state *s, int flush) {
17int bflush = 0; /* set if current block must be flushed */
18
19for (;;) {
20/* Make sure that we have a literal to write. */
21if (s->lookahead == 0) {
22PREFIX(fill_window)(s);
23if (s->lookahead == 0) {
24if (flush == Z_NO_FLUSH)
25return need_more;
26break; /* flush the current block */
27}
28}
29
30/* Output a literal byte */
31bflush = zng_tr_tally_lit(s, s->window[s->strstart]);
32s->lookahead--;
33s->strstart++;
34if (bflush)
35FLUSH_BLOCK(s, 0);
36}
37s->insert = 0;
38if (flush == Z_FINISH) {
39FLUSH_BLOCK(s, 1);
40return finish_done;
41}
42if (s->sym_next)
43FLUSH_BLOCK(s, 0);
44return block_done;
45}
46