1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "skia/rusty_png_feature.h"
#include "base/feature_list.h"
#include "base/notreached.h"
#include "skia/buildflags.h"
#include "third_party/skia/include/encode/SkPngEncoder.h"
#if BUILDFLAG(SKIA_BUILD_RUST_PNG)
#include "third_party/skia/experimental/rust_png/encoder/SkPngRustEncoder.h"
#endif
namespace skia {
#if BUILDFLAG(SKIA_BUILD_RUST_PNG)
namespace {
SkPngRustEncoder::Options ConvertToRustOptions(
const SkPngEncoder::Options& options) {
SkPngRustEncoder::Options rust_options;
if (options.fZLibLevel < 4) {
rust_options.fCompressionLevel = SkPngRustEncoder::CompressionLevel::kLow;
} else if (options.fZLibLevel < 7) {
rust_options.fCompressionLevel =
SkPngRustEncoder::CompressionLevel::kMedium;
} else {
rust_options.fCompressionLevel = SkPngRustEncoder::CompressionLevel::kHigh;
}
rust_options.fComments = options.fComments;
// TODO(https://crbug.com/379312510): Translate other `options` (e.g.
// comments and/or ICC profile).
return rust_options;
}
} // namespace
#endif
BASE_FEATURE(kRustyPngFeature, "RustyPng", base::FEATURE_ENABLED_BY_DEFAULT);
bool EncodePng(SkWStream* dst,
const SkPixmap& src,
const SkPngEncoder::Options& options) {
if (IsRustyPngEnabled()) {
#if BUILDFLAG(SKIA_BUILD_RUST_PNG)
return SkPngRustEncoder::Encode(dst, src, ConvertToRustOptions(options));
#else
// The `if` condition guarantees `SKIA_BUILD_RUST_PNG`.
NOTREACHED();
#endif
}
return SkPngEncoder::Encode(dst, src, options);
}
std::unique_ptr<SkEncoder> MakePngEncoder(
SkWStream* dst,
const SkPixmap& src,
const SkPngEncoder::Options& options) {
if (IsRustyPngEnabled()) {
#if BUILDFLAG(SKIA_BUILD_RUST_PNG)
return SkPngRustEncoder::Make(dst, src, ConvertToRustOptions(options));
#else
// The `if` condition guarantees `SKIA_BUILD_RUST_PNG`.
NOTREACHED();
#endif
}
return SkPngEncoder::Make(dst, src, options);
}
} // namespace skia
|