// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/gfx/codec/webp_codec.h" #include #include "ui/gfx/codec/vector_wstream.h" namespace gfx { // Encoder --------------------------------------------------------------------- bool WebpCodec::Encode(const SkPixmap& input, int quality, std::vector* output) { output->clear(); VectorWStream dst(output); SkWebpEncoder::Options options; options.fQuality = quality; return SkWebpEncoder::Encode(&dst, input, options); } bool WebpCodec::Encode(const SkBitmap& src, int quality, std::vector* output) { SkPixmap pixmap; if (!src.peekPixels(&pixmap)) { return false; } return WebpCodec::Encode(pixmap, quality, output); } absl::optional> WebpCodec::EncodeAnimated( const std::vector& frames, const SkWebpEncoder::Options& options) { std::vector output; VectorWStream dst(&output); if (!SkWebpEncoder::EncodeAnimated(&dst, frames, options)) { return absl::nullopt; } return output; } absl::optional> WebpCodec::EncodeAnimated( const std::vector& frames, const SkWebpEncoder::Options& options) { std::vector pixmap_frames; for (const auto& frame : frames) { SkEncoder::Frame pixmap_frame; if (!frame.bitmap.peekPixels(&pixmap_frame.pixmap)) { return absl::nullopt; } pixmap_frame.duration = frame.duration; pixmap_frames.push_back(pixmap_frame); } return WebpCodec::EncodeAnimated(pixmap_frames, options); } } // namespace gfx