Initial version of astc-codec for open source release

Contains an implementation of an ASTC decoder that is able to pass the
dEQP ASTC LDR tests.

astc-codec has no external dependencies for the main library, only for
test code, and is licensed under the Apache license.


include/ - Public API that can decode ASTC LDR data into a RGBA UNORM8

src/base/ - Base library with common functionality not directly related
to ASTC decoding.  Contains a uint128 implementation, BitStream for
reading/writing bits with a primitive (or uint128 type), Optional
implementation (to not take a dependency on C++17), and more.

src/decoder/ - Internal implementation of the ASTC decoder.

src/base/test/, src/decoder/test/ - Unit tests (and a fuzzing test) for
the astc decoder.

src/decoder/testdata/ - Sample ASTC images and golden image results for

src/decoder/tools/ - A tool to inspect contents of an ASTC file.

third_party/ - Third party libraries, only used for tests.

Change-Id: Ia98e5a7dc847daa3d3a48c5e62d94b8fb1cb98bd
112 files changed
tree: d81c98f2d097f9b32f23cffef7afa6725a182e66
  1. .gitignore
  2. BUILD.bazel
  7. include/
  8. src/
  9. third_party/


astc-codec is a software ASTC decoder implementation, which supports the ASTC LDR profile.

Example usage:

#include <astc-codec/astc-codec.h>

// ...

std::vector<uint8_t> astc = LoadMyASTCData();
const size_t width = 640;
const size_t height = 480;

std::vector<uint8_t> result;
result.resize(width * height * 4);

bool result = astc_codec::ASTCDecompressToRGBA(, astc.size(), width, height, astc_codec::FootprintType::k4x4,, result.size(), /* stride */ width * 4);


Install Bazel, and then run:

bazel build :astc_codec -c opt

astc-codec has been tested on Mac and Linux.

Run Tests

bazel test //...


See for important contributing requirements.


astc-codec project is licensed under the Apache License Version 2.0. You can find a copy of it in LICENSE.

This is not an officially supported Google product.