summaryrefslogtreecommitdiffstats
path: root/third_party/jpeg-xl/lib/jxl/modular/modular_image.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/jpeg-xl/lib/jxl/modular/modular_image.cc')
-rw-r--r--third_party/jpeg-xl/lib/jxl/modular/modular_image.cc77
1 files changed, 77 insertions, 0 deletions
diff --git a/third_party/jpeg-xl/lib/jxl/modular/modular_image.cc b/third_party/jpeg-xl/lib/jxl/modular/modular_image.cc
new file mode 100644
index 0000000000..785d0c5443
--- /dev/null
+++ b/third_party/jpeg-xl/lib/jxl/modular/modular_image.cc
@@ -0,0 +1,77 @@
+// 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.
+
+#include "lib/jxl/modular/modular_image.h"
+
+#include <sstream>
+
+#include "lib/jxl/base/status.h"
+#include "lib/jxl/common.h"
+#include "lib/jxl/modular/transform/transform.h"
+
+namespace jxl {
+
+void Image::undo_transforms(const weighted::Header &wp_header,
+ jxl::ThreadPool *pool) {
+ while (!transform.empty()) {
+ Transform t = transform.back();
+ JXL_DEBUG_V(4, "Undoing transform");
+ Status result = t.Inverse(*this, wp_header, pool);
+ if (result == false) {
+ JXL_NOTIFY_ERROR("Error while undoing transform.");
+ error = true;
+ return;
+ }
+ JXL_DEBUG_V(8, "Undoing transform: done");
+ transform.pop_back();
+ }
+}
+
+Image::Image(size_t iw, size_t ih, int bitdepth, int nb_chans)
+ : w(iw), h(ih), bitdepth(bitdepth), nb_meta_channels(0), error(false) {
+ for (int i = 0; i < nb_chans; i++) channel.emplace_back(Channel(iw, ih));
+}
+
+Image::Image() : w(0), h(0), bitdepth(8), nb_meta_channels(0), error(true) {}
+
+Image &Image::operator=(Image &&other) noexcept {
+ w = other.w;
+ h = other.h;
+ bitdepth = other.bitdepth;
+ nb_meta_channels = other.nb_meta_channels;
+ error = other.error;
+ channel = std::move(other.channel);
+ transform = std::move(other.transform);
+ return *this;
+}
+
+Image Image::clone() {
+ Image c(w, h, bitdepth, 0);
+ c.nb_meta_channels = nb_meta_channels;
+ c.error = error;
+ c.transform = transform;
+ for (Channel &ch : channel) {
+ Channel a(ch.w, ch.h, ch.hshift, ch.vshift);
+ CopyImageTo(ch.plane, &a.plane);
+ c.channel.push_back(std::move(a));
+ }
+ return c;
+}
+
+std::string Image::DebugString() const {
+ std::ostringstream os;
+ os << w << "x" << h << ", depth: " << bitdepth;
+ if (!channel.empty()) {
+ os << ", channels:";
+ for (size_t i = 0; i < channel.size(); ++i) {
+ os << " " << channel[i].w << "x" << channel[i].h
+ << "(shift: " << channel[i].hshift << "," << channel[i].vshift << ")";
+ if (i < nb_meta_channels) os << "*";
+ }
+ }
+ return os.str();
+}
+
+} // namespace jxl