static inline void dxt1_decode_pixels(const uint8_t *s, uint32_t *d,
                                      unsigned int qstride, unsigned int flag,
                                      uint64_t alpha) {
    unsigned int x, y, c0, c1, a = (!flag * 255) << 24;
    unsigned int rb0, rb1, rb2, rb3, g0, g1, g2, g3;
    uint32_t colors[4], pixels;
    c0 = AV_RL16(s);
    c1 = AV_RL16(s+2);
    rb0  = (c0<<3 | c0<<8) & 0xf800f8;
    rb1  = (c1<<3 | c1<<8) & 0xf800f8;
    rb0 +=        (rb0>>5) & 0x070007;
    rb1 +=        (rb1>>5) & 0x070007;
    g0   =        (c0 <<5) & 0x00fc00;
    g1   =        (c1 <<5) & 0x00fc00;
    g0  +=        (g0 >>6) & 0x000300;
    g1  +=        (g1 >>6) & 0x000300;
    colors[0] = rb0 + g0 + a;
    colors[1] = rb1 + g1 + a;
    if (c0 > c1 || flag) {
        rb2 = (((2*rb0+rb1) * 21) >> 6) & 0xff00ff;
        rb3 = (((2*rb1+rb0) * 21) >> 6) & 0xff00ff;
        g2  = (((2*g0 +g1 ) * 21) >> 6) & 0x00ff00;
        g3  = (((2*g1 +g0 ) * 21) >> 6) & 0x00ff00;
        colors[3] = rb3 + g3 + a;
    } else {
        rb2 = ((rb0+rb1) >> 1) & 0xff00ff;
        g2  = ((g0 +g1 ) >> 1) & 0x00ff00;
        colors[3] = 0;
    }
    colors[2] = rb2 + g2 + a;
    pixels = AV_RL32(s+4);
    for (y=0; y<4; y++) {
        for (x=0; x<4; x++) {
            a        = (alpha & 0x0f) << 28;
            a       += a >> 4;
            d[x]     = a + colors[pixels&3];
            pixels >>= 2;
            alpha  >>= 4;
        }
        d += qstride;
    }
}
['static inline void dxt1_decode_pixels(const uint8_t *s, uint32_t *d,\n                                      unsigned int qstride, unsigned int flag,\n                                      uint64_t alpha) {\n    unsigned int x, y, c0, c1, a = (!flag * 255) << 24;\n    unsigned int rb0, rb1, rb2, rb3, g0, g1, g2, g3;\n    uint32_t colors[4], pixels;\n    c0 = AV_RL16(s);\n    c1 = AV_RL16(s+2);\n    rb0  = (c0<<3 | c0<<8) & 0xf800f8;\n    rb1  = (c1<<3 | c1<<8) & 0xf800f8;\n    rb0 +=        (rb0>>5) & 0x070007;\n    rb1 +=        (rb1>>5) & 0x070007;\n    g0   =        (c0 <<5) & 0x00fc00;\n    g1   =        (c1 <<5) & 0x00fc00;\n    g0  +=        (g0 >>6) & 0x000300;\n    g1  +=        (g1 >>6) & 0x000300;\n    colors[0] = rb0 + g0 + a;\n    colors[1] = rb1 + g1 + a;\n    if (c0 > c1 || flag) {\n        rb2 = (((2*rb0+rb1) * 21) >> 6) & 0xff00ff;\n        rb3 = (((2*rb1+rb0) * 21) >> 6) & 0xff00ff;\n        g2  = (((2*g0 +g1 ) * 21) >> 6) & 0x00ff00;\n        g3  = (((2*g1 +g0 ) * 21) >> 6) & 0x00ff00;\n        colors[3] = rb3 + g3 + a;\n    } else {\n        rb2 = ((rb0+rb1) >> 1) & 0xff00ff;\n        g2  = ((g0 +g1 ) >> 1) & 0x00ff00;\n        colors[3] = 0;\n    }\n    colors[2] = rb2 + g2 + a;\n    pixels = AV_RL32(s+4);\n    for (y=0; y<4; y++) {\n        for (x=0; x<4; x++) {\n            a        = (alpha & 0x0f) << 28;\n            a       += a >> 4;\n            d[x]     = a + colors[pixels&3];\n            pixels >>= 2;\n            alpha  >>= 4;\n        }\n        d += qstride;\n    }\n}']