| 2106 | } |
| 2107 | |
| 2108 | bool Image::initWithASTCData(uint8_t* data, ssize_t dataLen, bool ownData) |
| 2109 | { |
| 2110 | astc_header* hdr = (astc_header*)data; |
| 2111 | |
| 2112 | do |
| 2113 | { |
| 2114 | // Ensure these are not zero to avoid div by zero |
| 2115 | unsigned int block_x = (std::max)((unsigned int)hdr->block_x, 1u); |
| 2116 | unsigned int block_y = (std::max)((unsigned int)hdr->block_y, 1u); |
| 2117 | // unsigned int block_z = std::max((unsigned int) hdr->block_z, 1u); |
| 2118 | |
| 2119 | unsigned int dim_x = astc_unpack_bytes(hdr->dim_x[0], hdr->dim_x[1], hdr->dim_x[2], 0); |
| 2120 | unsigned int dim_y = astc_unpack_bytes(hdr->dim_y[0], hdr->dim_y[1], hdr->dim_y[2], 0); |
| 2121 | // unsigned int dim_z = astc_unpack_bytes(hdr->dim_z[0], hdr->dim_z[1], hdr->dim_z[2], 0); |
| 2122 | |
| 2123 | if (dim_x == 0 || dim_y == 0) |
| 2124 | break; |
| 2125 | |
| 2126 | _width = dim_x; |
| 2127 | _height = dim_y; |
| 2128 | |
| 2129 | if (block_x < 4 || block_y < 4) |
| 2130 | { |
| 2131 | AXLOGW("The ASTC block with and height should be >= 4"); |
| 2132 | break; |
| 2133 | } |
| 2134 | |
| 2135 | if (Configuration::getInstance()->supportsASTC()) |
| 2136 | { |
| 2137 | if (block_x == 4 && block_y == 4) |
| 2138 | { |
| 2139 | _pixelFormat = backend::PixelFormat::ASTC4x4; |
| 2140 | } |
| 2141 | else if (block_x == 5 && block_y == 4) |
| 2142 | { |
| 2143 | _pixelFormat = backend::PixelFormat::ASTC5x4; |
| 2144 | } |
| 2145 | else if (block_x == 5 && block_y == 5) |
| 2146 | { |
| 2147 | _pixelFormat = backend::PixelFormat::ASTC5x5; |
| 2148 | } |
| 2149 | else if (block_x == 6 && block_y == 5) |
| 2150 | { |
| 2151 | _pixelFormat = backend::PixelFormat::ASTC6x5; |
| 2152 | } |
| 2153 | else if (block_x == 6 && block_y == 6) |
| 2154 | { |
| 2155 | _pixelFormat = backend::PixelFormat::ASTC6x6; |
| 2156 | } |
| 2157 | else if (block_x == 8 && block_y == 5) |
| 2158 | { |
| 2159 | _pixelFormat = backend::PixelFormat::ASTC8x5; |
| 2160 | } |
| 2161 | else if (block_x == 8 && block_y == 6) |
| 2162 | { |
| 2163 | _pixelFormat = backend::PixelFormat::ASTC8x6; |
| 2164 | } |
| 2165 | else if (block_x == 8 && block_y == 8) |
nothing calls this directly
no test coverage detected