| 1967 | } |
| 1968 | |
| 1969 | static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash, |
| 1970 | const unsigned char* data, |
| 1971 | size_t datapos, size_t dataend, |
| 1972 | const LodePNGCompressSettings* settings, unsigned final) |
| 1973 | { |
| 1974 | HuffmanTree tree_ll; /*tree for literal values and length codes*/ |
| 1975 | HuffmanTree tree_d; /*tree for distance codes*/ |
| 1976 | |
| 1977 | unsigned BFINAL = final; |
| 1978 | unsigned error = 0; |
| 1979 | size_t i; |
| 1980 | |
| 1981 | HuffmanTree_init(&tree_ll); |
| 1982 | HuffmanTree_init(&tree_d); |
| 1983 | |
| 1984 | generateFixedLitLenTree(&tree_ll); |
| 1985 | generateFixedDistanceTree(&tree_d); |
| 1986 | |
| 1987 | addBitToStream(bp, out, BFINAL); |
| 1988 | addBitToStream(bp, out, 1); /*first bit of BTYPE*/ |
| 1989 | addBitToStream(bp, out, 0); /*second bit of BTYPE*/ |
| 1990 | |
| 1991 | if(settings->use_lz77) /*LZ77 encoded*/ |
| 1992 | { |
| 1993 | uivector lz77_encoded; |
| 1994 | uivector_init(&lz77_encoded); |
| 1995 | error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, |
| 1996 | settings->minmatch, settings->nicematch, settings->lazymatching); |
| 1997 | if(!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); |
| 1998 | uivector_cleanup(&lz77_encoded); |
| 1999 | } |
| 2000 | else /*no LZ77, but still will be Huffman compressed*/ |
| 2001 | { |
| 2002 | for(i = datapos; i < dataend; ++i) |
| 2003 | { |
| 2004 | addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i])); |
| 2005 | } |
| 2006 | } |
| 2007 | /*add END code*/ |
| 2008 | if(!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); |
| 2009 | |
| 2010 | /*cleanup*/ |
| 2011 | HuffmanTree_cleanup(&tree_ll); |
| 2012 | HuffmanTree_cleanup(&tree_d); |
| 2013 | |
| 2014 | return error; |
| 2015 | } |
| 2016 | |
| 2017 | static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize, |
| 2018 | const LodePNGCompressSettings* settings) |
no test coverage detected