| // Copyright 2018 The Cobalt Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #include "cobalt/loader/image/image_encoder.h" |
| |
| #include <memory> |
| #include <utility> |
| |
| #include "base/trace_event/trace_event.h" |
| #include "cobalt/renderer/test/jpeg_utils/jpeg_encode.h" |
| #include "cobalt/renderer/test/png_utils/png_encode.h" |
| #include "third_party/libwebp/src/webp/encode.h" |
| |
| namespace cobalt { |
| namespace loader { |
| namespace image { |
| |
| scoped_refptr<loader::image::EncodedStaticImage> CompressRGBAImage( |
| loader::image::EncodedStaticImage::ImageFormat desired_format, |
| const uint8* const image_data, const math::Size& dimensions) { |
| TRACE_EVENT0("cobalt::loader", "ImageEncoder::CompressRGBAImage()"); |
| |
| const int kRGBABytesPerPixel = 4; |
| const int kPitchSizeInBytes = dimensions.width() * kRGBABytesPerPixel; |
| size_t num_bytes = 0; |
| std::unique_ptr<uint8[]> compressed_data; |
| |
| using ImageFormat = loader::image::EncodedStaticImage::ImageFormat; |
| switch (desired_format) { |
| case ImageFormat::kPNG: { |
| compressed_data = renderer::test::png_utils::EncodeRGBAToBuffer( |
| image_data, dimensions.width(), dimensions.height(), |
| kPitchSizeInBytes, &num_bytes); |
| break; |
| } |
| |
| #if !defined(COBALT_BUILD_TYPE_GOLD) |
| case ImageFormat::kJPEG: { |
| compressed_data = renderer::test::jpeg_utils::EncodeRGBAToBuffer( |
| image_data, dimensions.width(), dimensions.height(), |
| kPitchSizeInBytes, &num_bytes); |
| break; |
| } |
| #endif |
| |
| case ImageFormat::kWEBP: |
| NOTIMPLEMENTED(); |
| return nullptr; |
| } |
| |
| return scoped_refptr<loader::image::EncodedStaticImage>( |
| new loader::image::EncodedStaticImage( |
| desired_format, std::move(compressed_data), |
| static_cast<int>(num_bytes), dimensions)); |
| } |
| |
| EncodedStaticImage::EncodedStaticImage( |
| image::EncodedStaticImage::ImageFormat image_format, |
| std::unique_ptr<uint8[]> memory, uint32 size_in_bytes, |
| const math::Size& image_dimensions) |
| : image_format_(image_format), |
| size_in_bytes_(size_in_bytes), |
| image_dimensions_(image_dimensions), |
| memory_(std::move(memory)) {} |
| |
| } // namespace image |
| } // namespace loader |
| } // namespace cobalt |