| 1938 | } |
| 1939 | |
| 1940 | static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash, |
| 1941 | const unsigned char* data, |
| 1942 | size_t datapos, size_t dataend, |
| 1943 | const LodePNGCompressSettings* settings, unsigned final) |
| 1944 | { |
| 1945 | HuffmanTree tree_ll; /*tree for literal values and length codes*/ |
| 1946 | HuffmanTree tree_d; /*tree for distance codes*/ |
| 1947 | |
| 1948 | unsigned BFINAL = final; |
| 1949 | unsigned error = 0; |
| 1950 | size_t i; |
| 1951 | |
| 1952 | HuffmanTree_init(&tree_ll); |
| 1953 | HuffmanTree_init(&tree_d); |
| 1954 | |
| 1955 | generateFixedLitLenTree(&tree_ll); |
| 1956 | generateFixedDistanceTree(&tree_d); |
| 1957 | |
| 1958 | addBitToStream(bp, out, BFINAL); |
| 1959 | addBitToStream(bp, out, 1); /*first bit of BTYPE*/ |
| 1960 | addBitToStream(bp, out, 0); /*second bit of BTYPE*/ |
| 1961 | |
| 1962 | if(settings->use_lz77) /*LZ77 encoded*/ |
| 1963 | { |
| 1964 | uivector lz77_encoded; |
| 1965 | uivector_init(&lz77_encoded); |
| 1966 | error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, |
| 1967 | settings->minmatch, settings->nicematch, settings->lazymatching); |
| 1968 | if(!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); |
| 1969 | uivector_cleanup(&lz77_encoded); |
| 1970 | } |
| 1971 | else /*no LZ77, but still will be Huffman compressed*/ |
| 1972 | { |
| 1973 | for(i = datapos; i < dataend; i++) |
| 1974 | { |
| 1975 | addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i])); |
| 1976 | } |
| 1977 | } |
| 1978 | /*add END code*/ |
| 1979 | if(!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); |
| 1980 | |
| 1981 | /*cleanup*/ |
| 1982 | HuffmanTree_cleanup(&tree_ll); |
| 1983 | HuffmanTree_cleanup(&tree_d); |
| 1984 | |
| 1985 | return error; |
| 1986 | } |
| 1987 | |
| 1988 | static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize, |
| 1989 | const LodePNGCompressSettings* settings) |
no test coverage detected