// 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.
namespace {
Status ReadPermutation(size_t skip, size_t size, coeff_order_t* order,
BitReader* br, ANSSymbolReader* reader, const std::vector<uint8_t>& context_map) {
std::vector<LehmerT> lehmer(size); // temp space needs to be as large as the next power of 2, so doubling the // allocated size is enough.
std::vector<uint32_t> temp(size * 2);
uint32_t end =
reader->ReadHybridUint(CoeffOrderContext(size), br, context_map) + skip; if (end > size) { return JXL_FAILURE("Invalid permutation size");
}
uint32_t last = 0; for (size_t i = skip; i < end; ++i) {
lehmer[i] =
reader->ReadHybridUint(CoeffOrderContext(last), br, context_map);
last = lehmer[i]; if (lehmer[i] >= size - i) { return JXL_FAILURE("Invalid lehmer code");
}
} if (order == nullptr) returntrue;
JXL_RETURN_IF_ERROR(
DecodeLehmerCode(lehmer.data(), temp.data(), size, order)); returntrue;
}
if (used || (used_orders & (1 << ord))) { if (natural_order.size() < size) natural_order.resize(size);
acs.ComputeNaturalCoeffOrder(natural_order.data());
}
if ((used_orders & (1 << ord)) == 0) { // No need to set the default order if no ACS uses this order. if (used) { for (size_t c = 0; c < 3; c++) {
memcpy(&order[CoeffOrderOffset(ord, c)], natural_order.data(),
size * sizeof(*order));
}
}
} else { for (size_t c = 0; c < 3; c++) {
coeff_order_t* dest = used ? &order[CoeffOrderOffset(ord, c)] : nullptr;
JXL_RETURN_IF_ERROR(DecodeCoeffOrder(acs, dest, br, &reader,
natural_order, context_map));
}
}
} if (used_orders && !reader.CheckANSFinalState()) { return JXL_FAILURE("Invalid ANS stream");
} returntrue;
}
} // namespace jxl
Messung V0.5
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.