mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-09 04:19:10 -04:00
feat(ricepp): some minor speed improvements
This commit is contained in:
parent
f95e59e10b
commit
f1672b6c78
@ -50,20 +50,20 @@ void decode_block(V block, BitstreamReader& reader, PixelTraits const& traits,
|
||||
if (fsp1 == 0) [[unlikely]] {
|
||||
std::fill(block.begin(), block.end(), traits.write(last));
|
||||
} else if (fsp1 > kFsMax) [[unlikely]] {
|
||||
for (size_t i = 0; i < block.size(); ++i) {
|
||||
block[i] = reader.template read_bits<pixel_value_type>(kPixelBits);
|
||||
for (auto& b : block) {
|
||||
b = reader.template read_bits<pixel_value_type>(kPixelBits);
|
||||
}
|
||||
last = traits.read(block.back());
|
||||
} else {
|
||||
auto const fs = fsp1 - 1;
|
||||
for (size_t i = 0; i < block.size(); ++i) {
|
||||
for (auto& b : block) {
|
||||
pixel_value_type diff = reader.find_first_set() << fs;
|
||||
if (fs > 0) {
|
||||
diff |= reader.template read_bits<pixel_value_type>(fs);
|
||||
}
|
||||
last += static_cast<std::make_signed_t<pixel_value_type>>(
|
||||
(diff & 1) ? ~(diff >> 1) : (diff >> 1));
|
||||
block[i] = traits.write(last);
|
||||
b = traits.write(last);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -125,8 +125,8 @@ void encode_block(V block, BitstreamWriter& writer, PixelTraits const& traits,
|
||||
// the input pixel data. This is really unlikely, so reading the input
|
||||
// pixels again is fine.
|
||||
writer.write_bits(kFsMax + 1, kFsBits);
|
||||
for (size_t i = 0; i < block.size(); ++i) {
|
||||
writer.write_bits(block[i], kPixelBits);
|
||||
for (auto& b : block) {
|
||||
writer.write_bits(b, kPixelBits);
|
||||
}
|
||||
} else {
|
||||
// Encode the difference values using Rice entropy coding.
|
||||
@ -134,7 +134,7 @@ void encode_block(V block, BitstreamWriter& writer, PixelTraits const& traits,
|
||||
for (size_t i = 0; i < block.size(); ++i) {
|
||||
pixel_value_type const diff = delta[i];
|
||||
pixel_value_type const top = diff >> fs;
|
||||
if (top > 0) {
|
||||
if (top > 0) [[unlikely]] {
|
||||
writer.write_bit(0, top);
|
||||
}
|
||||
writer.write_bit(1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user