130625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* Copyright 2013 Google Inc. All Rights Reserved.
230625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
330625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   Licensed under the Apache License, Version 2.0 (the "License");
430625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   you may not use this file except in compliance with the License.
530625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   You may obtain a copy of the License at
630625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
730625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   http://www.apache.org/licenses/LICENSE-2.0
830625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
930625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   Unless required by applicable law or agreed to in writing, software
1030625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   distributed under the License is distributed on an "AS IS" BASIS,
1130625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1230625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   See the License for the specific language governing permissions and
1330625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   limitations under the License.
1430625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka
1530625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka   API for Brotli decompression
1630625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka*/
1704163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
1804163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#ifndef BROTLI_DEC_DECODE_H_
1904163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#define BROTLI_DEC_DECODE_H_
2004163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
211571db36a9b00e895882ee236e9f84d62f8ea226Zoltan Szabadka#include "./streams.h"
2204163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#include "./types.h"
2304163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
2404163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#if defined(__cplusplus) || defined(c_plusplus)
2504163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadkaextern "C" {
2604163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#endif
2704163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
2830625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* Sets *decoded_size to the decompressed size of the given encoded stream. */
29cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka/* This function only works if the encoded buffer has a single meta block, */
30cbd5cb55f487eda746b0d6f8b5742b5a8e5c846aZoltan Szabadka/* and this meta block must have the "is last" bit set. */
3130625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* Returns 1 on success, 0 on failure. */
3204163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadkaint BrotliDecompressedSize(size_t encoded_size,
3304163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka                           const uint8_t* encoded_buffer,
3404163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka                           size_t* decoded_size);
3504163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
3630625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* Decompresses the data in encoded_buffer into decoded_buffer, and sets */
3730625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* *decoded_size to the decompressed length. */
3830625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* Returns 0 if there was either a bit stream error or memory allocation */
3930625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* error, and 1 otherwise. */
4030625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* If decoded size is zero, returns 1 and keeps decoded_buffer unchanged. */
4104163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadkaint BrotliDecompressBuffer(size_t encoded_size,
4204163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka                           const uint8_t* encoded_buffer,
4304163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka                           size_t* decoded_size,
4404163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka                           uint8_t* decoded_buffer);
4504163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
4630625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* Same as above, but uses the specified input and output callbacks instead */
4730625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka/* of reading from and writing to pre-allocated memory buffers. */
481571db36a9b00e895882ee236e9f84d62f8ea226Zoltan Szabadkaint BrotliDecompress(BrotliInput input, BrotliOutput output);
491571db36a9b00e895882ee236e9f84d62f8ea226Zoltan Szabadka
5004163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#if defined(__cplusplus) || defined(c_plusplus)
5130625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka}    /* extern "C" */
5204163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka#endif
5304163a87d098f14e890c2a3fd240af7f09099711Zoltan Szabadka
5430625ba238fcb360c80a093164347503bbedf7adZoltan Szabadka#endif  /* BROTLI_DEC_DECODE_H_ */
55