// 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.
struct ReferceFrame {
std::unique_ptr<ImageBundle> frame; // ImageBundle doesn't yet have a simple way to state it is in XYB. bool ib_is_in_xyb = false;
};
enumclass PatchBlendMode : uint8_t { // The new values are the old ones. Useful to skip some channels.
kNone = 0, // The new values (in the crop) replace the old ones: sample = new
kReplace = 1, // The new values (in the crop) get added to the old ones: sample = old + new
kAdd = 2, // The new values (in the crop) get multiplied by the old ones: // sample = old * new // This blend mode is only supported if BlendColorSpace is kEncoded. The // range of the new value matters for multiplication purposes, and its // nominal range of 0..1 is computed the same way as this is done for the // alpha values in kBlend and kAlphaWeightedAdd.
kMul = 3, // The new values (in the crop) replace the old ones if alpha>0: // For first alpha channel: // alpha = old + new * (1 - old) // For other channels if !alpha_associated: // sample = ((1 - new_alpha) * old * old_alpha + new_alpha * new) / alpha // For other channels if alpha_associated: // sample = (1 - new_alpha) * old + new // The alpha formula applies to the alpha used for the division in the other // channels formula, and applies to the alpha channel itself if its // blend_channel value matches itself. // If using kBlendAbove, new is the patch and old is the original image; if // using kBlendBelow, the meaning is inverted.
kBlendAbove = 4,
kBlendBelow = 5, // The new values (in the crop) are added to the old ones if alpha>0: // For first alpha channel: sample = sample = old + new * (1 - old) // For other channels: sample = old + alpha * new
kAlphaWeightedAddAbove = 6,
kAlphaWeightedAddBelow = 7,
};
// Adds patches to a segment of `xsize` pixels, starting at `inout`, assumed // to be located at position (x0, y) in the frame.
Status AddOneRow( float* const* inout, size_t y, size_t x0, size_t xsize, const std::vector<ExtraChannelInfo>& extra_channel_info) const;
// Returns dependencies of this patch dictionary on reference frame ids as a // bit mask: bits 0-3 indicate reference frame 0-3. int GetReferences() const;
// Interval tree on the y coordinates of the patches. struct PatchTreeNode {
ssize_t left_child;
ssize_t right_child;
size_t y_center; // Range of patches in sorted_patches_y0_ and sorted_patches_y1_ that // contain the row y_center.
size_t start;
size_t num;
};
std::vector<PatchTreeNode> patch_tree_; // Number of patches for each row.
std::vector<size_t> num_patches_;
std::vector<std::pair<size_t, size_t>> sorted_patches_y0_;
std::vector<std::pair<size_t, size_t>> sorted_patches_y1_;
void ComputePatchTree();
};
} // namespace jxl
#endif// LIB_JXL_DEC_PATCH_DICTIONARY_H_
Messung V0.5
¤ Dauer der Verarbeitung: 0.12 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.