|
| 1 | +// Copyright 2018 Google LLC |
| 2 | +// |
| 3 | +// Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | +// you may not use this file except in compliance with the License. |
| 5 | +// You may obtain a copy of the License at |
| 6 | +// |
| 7 | +// https://www.apache.org/licenses/LICENSE-2.0 |
| 8 | +// |
| 9 | +// Unless required by applicable law or agreed to in writing, software |
| 10 | +// distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | +// See the License for the specific language governing permissions and |
| 13 | +// limitations under the License. |
| 14 | + |
| 15 | +#ifndef ASTC_CODEC_ASTC_CODEC_H_ |
| 16 | +#define ASTC_CODEC_ASTC_CODEC_H_ |
| 17 | + |
| 18 | +#include <cstddef> |
| 19 | +#include <cstdint> |
| 20 | + |
| 21 | +namespace astc_codec { |
| 22 | + |
| 23 | +// These are the valid ASTC footprints according to the specification in |
| 24 | +// Section C.2.7. |
| 25 | +enum class FootprintType { |
| 26 | + k4x4, |
| 27 | + k5x4, |
| 28 | + k5x5, |
| 29 | + k6x5, |
| 30 | + k6x6, |
| 31 | + k8x5, |
| 32 | + k8x6, |
| 33 | + k10x5, |
| 34 | + k10x6, |
| 35 | + k8x8, |
| 36 | + k10x8, |
| 37 | + k10x10, |
| 38 | + k12x10, |
| 39 | + k12x12, |
| 40 | + |
| 41 | + kCount |
| 42 | +}; |
| 43 | + |
| 44 | +// Decompresses ASTC LDR image data to a RGBA32 buffer. |
| 45 | +// |
| 46 | +// Supports formats defined in the KHR_texture_compression_astc_ldr spec and |
| 47 | +// returns UNORM8 values. sRGB is not supported, and should be implemented |
| 48 | +// by the caller. |
| 49 | +// |
| 50 | +// |astc_data| - Compressed ASTC image buffer, must be at least |astc_data_size| |
| 51 | +// bytes long. |
| 52 | +// |astc_data_size| - The size of |astc_data|, in bytes. |
| 53 | +// |width| - Image width, in pixels. |
| 54 | +// |height| - Image height, in pixels. |
| 55 | +// |footprint| - The ASTC footprint (block size) of the compressed image buffer. |
| 56 | +// |out_buffer| - Pointer to a buffer where the decompressed image will be |
| 57 | +// stored, must be at least |out_buffer_size| bytes long. |
| 58 | +// |out_buffer_size| - The size of |out_buffer|, in bytes, at least |
| 59 | +// height*out_buffer_stride. If this is too small, this |
| 60 | +// function will return false and no data will be |
| 61 | +// decompressed. |
| 62 | +// |out_buffer_stride| - The stride that should be used to store rows of the |
| 63 | +// decoded image, must be at least 4*width bytes. |
| 64 | +// |
| 65 | +// Returns true if the decompression succeeded, or false if decompression |
| 66 | +// failed, or if the astc_data_size was too small for the given width, height, |
| 67 | +// and footprint, or if out_buffer_size is too small. |
| 68 | +bool ASTCDecompressToRGBA(const uint8_t* astc_data, size_t astc_data_size, |
| 69 | + size_t width, size_t height, FootprintType footprint, |
| 70 | + uint8_t* out_buffer, size_t out_buffer_size, |
| 71 | + size_t out_buffer_stride); |
| 72 | + |
| 73 | +} // namespace astc_codec |
| 74 | + |
| 75 | +#endif // ASTC_CODEC_ASTC_CODEC_H_ |
0 commit comments