summaryrefslogtreecommitdiffstats
path: root/third_party/jpeg-xl/lib/jxl/box_content_decoder.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/jpeg-xl/lib/jxl/box_content_decoder.h')
-rw-r--r--third_party/jpeg-xl/lib/jxl/box_content_decoder.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/third_party/jpeg-xl/lib/jxl/box_content_decoder.h b/third_party/jpeg-xl/lib/jxl/box_content_decoder.h
new file mode 100644
index 0000000000..6153360a8e
--- /dev/null
+++ b/third_party/jpeg-xl/lib/jxl/box_content_decoder.h
@@ -0,0 +1,49 @@
+// Copyright (c) the JPEG XL Project Authors. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+#ifndef LIB_JXL_BOX_CONTENT_DECODER_H_
+#define LIB_JXL_BOX_CONTENT_DECODER_H_
+
+#include <brotli/decode.h>
+#include <jxl/decode.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#include <memory>
+#include <vector>
+
+namespace jxl {
+
+/** Outputs the contents of a box in a streaming fashion, either directly, or
+ * optionally decoding with Brotli, in case of a brob box. The input must be
+ * the contents of a box, excluding the box header.
+ */
+class JxlBoxContentDecoder {
+ public:
+ JxlBoxContentDecoder();
+ ~JxlBoxContentDecoder();
+
+ void StartBox(bool brob_decode, bool box_until_eof, size_t contents_size);
+
+ // Outputs decoded bytes from the box, decoding with brotli if needed.
+ // box_pos is the position in the box content which next_in points to.
+ // Returns success, whether more input or output bytes are needed, or error.
+ JxlDecoderStatus Process(const uint8_t* next_in, size_t avail_in,
+ size_t box_pos, uint8_t** next_out,
+ size_t* avail_out);
+
+ private:
+ BrotliDecoderState* brotli_dec;
+
+ bool header_done_;
+ bool brob_decode_;
+ bool box_until_eof_;
+ size_t remaining_;
+ size_t pos_;
+};
+
+} // namespace jxl
+
+#endif // LIB_JXL_BOX_CONTENT_DECODER_H_