static void compute_default_clut(AVSubtitleRect *rect, int w, int h)

{

    uint8_t list[256] = {0};

    uint8_t list_inv[256];

    int counttab[256] = {0};

    int count, i, x, y;



#define V(x,y) rect->data[0][(x) + (y)*rect->linesize[0]]

    for (y = 0; y<h; y++) {

        for (x = 0; x<w; x++) {

            int v = V(x,y) + 1;

            int vl = x     ? V(x-1,y) + 1 : 0;

            int vr = x+1<w ? V(x+1,y) + 1 : 0;

            int vt = y     ? V(x,y-1) + 1 : 0;

            int vb = y+1<h ? V(x,y+1) + 1 : 0;

            counttab[v-1] += !!((v!=vl) + (v!=vr) + (v!=vt) + (v!=vb));

        }

    }

#define L(x,y) list[ rect->data[0][(x) + (y)*rect->linesize[0]] ]



    for (i = 0; i<256; i++) {

        int scoretab[256] = {0};

        int bestscore = 0;

        int bestv = 0;

        for (y = 0; y<h; y++) {

            for (x = 0; x<w; x++) {

                int v = rect->data[0][x + y*rect->linesize[0]];

                int l_m = list[v];

                int l_l = x     ? L(x-1, y) : 1;

                int l_r = x+1<w ? L(x+1, y) : 1;

                int l_t = y     ? L(x, y-1) : 1;

                int l_b = y+1<h ? L(x, y+1) : 1;

                int score;

                if (l_m)

                    continue;

                scoretab[v] += l_l + l_r + l_t + l_b;

                score = 1024LL*scoretab[v] / counttab[v];

                if (score > bestscore) {

                    bestscore = score;

                    bestv = v;

                }

            }

        }

        if (!bestscore)

            break;

        list    [ bestv ] = 1;

        list_inv[     i ] = bestv;

    }



    count = FFMAX(i - 1, 1);

    for (i--; i>=0; i--) {

        int v = i*255/count;

        AV_WN32(rect->data[1] + 4*list_inv[i], RGBA(v/2,v,v/2,v));

    }

}

static void compute_default_clut(AVSubtitleRect *rect, int w, int h)

{

    uint8_t list[256] = {0};

    uint8_t list_inv[256];

    int counttab[256] = {0};

    int count, i, x, y;



#define V(x,y) rect->data[0][(x) + (y)*rect->linesize[0]]

    for (y = 0; y<h; y++) {

        for (x = 0; x<w; x++) {

            int v = V(x,y) + 1;

            int vl = x     ? V(x-1,y) + 1 : 0;

            int vr = x+1<w ? V(x+1,y) + 1 : 0;

            int vt = y     ? V(x,y-1) + 1 : 0;

            int vb = y+1<h ? V(x,y+1) + 1 : 0;

            counttab[v-1] += !!((v!=vl) + (v!=vr) + (v!=vt) + (v!=vb));

        }

    }

#define L(x,y) list[ rect->data[0][(x) + (y)*rect->linesize[0]] ]



    for (i = 0; i<256; i++) {

        int scoretab[256] = {0};

        int bestscore = 0;

        int bestv = 0;

        for (y = 0; y<h; y++) {

            for (x = 0; x<w; x++) {

                int v = rect->data[0][x + y*rect->linesize[0]];

                int l_m = list[v];

                int l_l = x     ? L(x-1, y) : 1;

                int l_r = x+1<w ? L(x+1, y) : 1;

                int l_t = y     ? L(x, y-1) : 1;

                int l_b = y+1<h ? L(x, y+1) : 1;

                int score;

                if (l_m)

                    continue;

                scoretab[v] += l_l + l_r + l_t + l_b;

                score = 1024LL*scoretab[v] / counttab[v];

                if (score > bestscore) {

                    bestscore = score;

                    bestv = v;

                }

            }

        }

        if (!bestscore)

            break;

        list    [ bestv ] = 1;

        list_inv[     i ] = bestv;

    }



    count = FFMAX(i - 1, 1);

    for (i--; i>=0; i--) {

        int v = i*255/count;

        AV_WN32(rect->data[1] + 4*list_inv[i], RGBA(v/2,v,v/2,v));

    }

}

static void FUNC_0(AVSubtitleRect *VAR_0, int VAR_1, int VAR_2)

{

    uint8_t list[256] = {0};

    uint8_t list_inv[256];

    int VAR_3[256] = {0};

    int VAR_4, VAR_5, VAR_6, VAR_7;



#define V(VAR_6,VAR_7) VAR_0->data[0][(VAR_6) + (VAR_7)*VAR_0->linesize[0]]

    for (VAR_7 = 0; VAR_7<VAR_2; VAR_7++) {

        for (VAR_6 = 0; VAR_6<VAR_1; VAR_6++) {

            int VAR_22 = V(VAR_6,VAR_7) + 1;

            int VAR_9 = VAR_6     ? V(VAR_6-1,VAR_7) + 1 : 0;

            int VAR_10 = VAR_6+1<VAR_1 ? V(VAR_6+1,VAR_7) + 1 : 0;

            int VAR_11 = VAR_7     ? V(VAR_6,VAR_7-1) + 1 : 0;

            int VAR_12 = VAR_7+1<VAR_2 ? V(VAR_6,VAR_7+1) + 1 : 0;

            VAR_3[VAR_22-1] += !!((VAR_22!=VAR_9) + (VAR_22!=VAR_10) + (VAR_22!=VAR_11) + (VAR_22!=VAR_12));

        }

    }

#define L(VAR_6,VAR_7) list[ VAR_0->data[0][(VAR_6) + (VAR_7)*VAR_0->linesize[0]] ]



    for (VAR_5 = 0; VAR_5<256; VAR_5++) {

        int VAR_13[256] = {0};

        int VAR_14 = 0;

        int VAR_15 = 0;

        for (VAR_7 = 0; VAR_7<VAR_2; VAR_7++) {

            for (VAR_6 = 0; VAR_6<VAR_1; VAR_6++) {

                int VAR_22 = VAR_0->data[0][VAR_6 + VAR_7*VAR_0->linesize[0]];

                int VAR_16 = list[VAR_22];

                int VAR_17 = VAR_6     ? L(VAR_6-1, VAR_7) : 1;

                int VAR_18 = VAR_6+1<VAR_1 ? L(VAR_6+1, VAR_7) : 1;

                int VAR_19 = VAR_7     ? L(VAR_6, VAR_7-1) : 1;

                int VAR_20 = VAR_7+1<VAR_2 ? L(VAR_6, VAR_7+1) : 1;

                int VAR_21;

                if (VAR_16)

                    continue;

                VAR_13[VAR_22] += VAR_17 + VAR_18 + VAR_19 + VAR_20;

                VAR_21 = 1024LL*VAR_13[VAR_22] / VAR_3[VAR_22];

                if (VAR_21 > VAR_14) {

                    VAR_14 = VAR_21;

                    VAR_15 = VAR_22;

                }

            }

        }

        if (!VAR_14)

            break;

        list    [ VAR_15 ] = 1;

        list_inv[     VAR_5 ] = VAR_15;

    }



    VAR_4 = FFMAX(VAR_5 - 1, 1);

    for (VAR_5--; VAR_5>=0; VAR_5--) {

        int VAR_22 = VAR_5*255/VAR_4;

        AV_WN32(VAR_0->data[1] + 4*list_inv[VAR_5], RGBA(VAR_22/2,VAR_22,VAR_22/2,VAR_22));

    }

}

static void FUNC_0(AVSubtitleRect *VAR_0, int VAR_1, int VAR_2)
{ uint8_t list[256] = {0}; uint8_t list_inv[256]; int VAR_3[256] = {0}; int VAR_4, VAR_5, VAR_6, VAR_7; #define V(VAR_6,VAR_7) VAR_0->data[0][(VAR_6) + (VAR_7)*VAR_0->linesize[0]]
for (VAR_7 = 0; VAR_7<VAR_2; VAR_7++) { for (VAR_6 = 0; VAR_6<VAR_1; VAR_6++) { int VAR_22 = V(VAR_6,VAR_7) + 1; int VAR_9 = VAR_6     ? V(VAR_6-1,VAR_7) + 1 : 0; int VAR_10 = VAR_6+1<VAR_1 ? V(VAR_6+1,VAR_7) + 1 : 0; int VAR_11 = VAR_7     ? V(VAR_6,VAR_7-1) + 1 : 0; int VAR_12 = VAR_7+1<VAR_2 ? V(VAR_6,VAR_7+1) + 1 : 0; VAR_3[VAR_22-1] += !!((VAR_22!=VAR_9) + (VAR_22!=VAR_10) + (VAR_22!=VAR_11) + (VAR_22!=VAR_12)); } } #define L(VAR_6,VAR_7) list[ VAR_0->data[0][(VAR_6) + (VAR_7)*VAR_0->linesize[0]] ]
for (VAR_5 = 0; VAR_5<256; VAR_5++) { int VAR_13[256] = {0}; int VAR_14 = 0; int VAR_15 = 0; for (VAR_7 = 0; VAR_7<VAR_2; VAR_7++) { for (VAR_6 = 0; VAR_6<VAR_1; VAR_6++) { int VAR_22 = VAR_0->data[0][VAR_6 + VAR_7*VAR_0->linesize[0]]; int VAR_16 = list[VAR_22]; int VAR_17 = VAR_6     ? L(VAR_6-1, VAR_7) : 1; int VAR_18 = VAR_6+1<VAR_1 ? L(VAR_6+1, VAR_7) : 1; int VAR_19 = VAR_7     ? L(VAR_6, VAR_7-1) : 1; int VAR_20 = VAR_7+1<VAR_2 ? L(VAR_6, VAR_7+1) : 1; int VAR_21; if (VAR_16)
continue; VAR_13[VAR_22] += VAR_17 + VAR_18 + VAR_19 + VAR_20; VAR_21 = 1024LL*VAR_13[VAR_22] / VAR_3[VAR_22]; if (VAR_21 > VAR_14) { VAR_14 = VAR_21; VAR_15 = VAR_22; } } } if (!VAR_14)
break; list    [ VAR_15 ] = 1; list_inv[     VAR_5 ] = VAR_15; } VAR_4 = FFMAX(VAR_5 - 1, 1); for (VAR_5--; VAR_5>=0; VAR_5--) { int VAR_22 = VAR_5*255/VAR_4; AV_WN32(VAR_0->data[1] + 4*list_inv[VAR_5], RGBA(VAR_22/2,VAR_22,VAR_22/2,VAR_22)); } }