int ff_h264_pred_weight_table(GetBitContext *gb, const SPS *sps,

                              const int *ref_count, int slice_type_nos,

                              H264PredWeightTable *pwt,

                              int picture_structure, void *logctx)

{

    int list, i, j;

    int luma_def, chroma_def;



    pwt->use_weight             = 0;

    pwt->use_weight_chroma      = 0;

    pwt->luma_log2_weight_denom = get_ue_golomb(gb);

    if (sps->chroma_format_idc)

        pwt->chroma_log2_weight_denom = get_ue_golomb(gb);



    if (pwt->luma_log2_weight_denom > 7U) {

        av_log(logctx, AV_LOG_ERROR, "luma_log2_weight_denom %d is out of range\n", pwt->luma_log2_weight_denom);

        pwt->luma_log2_weight_denom = 0;

    }

    if (pwt->chroma_log2_weight_denom > 7U) {

        av_log(logctx, AV_LOG_ERROR, "chroma_log2_weight_denom %d is out of range\n", pwt->chroma_log2_weight_denom);

        pwt->chroma_log2_weight_denom = 0;

    }



    luma_def   = 1 << pwt->luma_log2_weight_denom;

    chroma_def = 1 << pwt->chroma_log2_weight_denom;



    for (list = 0; list < 2; list++) {

        pwt->luma_weight_flag[list]   = 0;

        pwt->chroma_weight_flag[list] = 0;

        for (i = 0; i < ref_count[list]; i++) {

            int luma_weight_flag, chroma_weight_flag;



            luma_weight_flag = get_bits1(gb);

            if (luma_weight_flag) {

                pwt->luma_weight[i][list][0] = get_se_golomb(gb);

                pwt->luma_weight[i][list][1] = get_se_golomb(gb);

                if ((int8_t)pwt->luma_weight[i][list][0] != pwt->luma_weight[i][list][0] ||

                    (int8_t)pwt->luma_weight[i][list][1] != pwt->luma_weight[i][list][1])

                    goto out_range_weight;

                if (pwt->luma_weight[i][list][0] != luma_def ||

                    pwt->luma_weight[i][list][1] != 0) {

                    pwt->use_weight             = 1;

                    pwt->luma_weight_flag[list] = 1;

                }

            } else {

                pwt->luma_weight[i][list][0] = luma_def;

                pwt->luma_weight[i][list][1] = 0;

            }



            if (sps->chroma_format_idc) {

                chroma_weight_flag = get_bits1(gb);

                if (chroma_weight_flag) {

                    int j;

                    for (j = 0; j < 2; j++) {

                        pwt->chroma_weight[i][list][j][0] = get_se_golomb(gb);

                        pwt->chroma_weight[i][list][j][1] = get_se_golomb(gb);

                        if ((int8_t)pwt->chroma_weight[i][list][j][0] != pwt->chroma_weight[i][list][j][0] ||

                            (int8_t)pwt->chroma_weight[i][list][j][1] != pwt->chroma_weight[i][list][j][1])

                            goto out_range_weight;

                        if (pwt->chroma_weight[i][list][j][0] != chroma_def ||

                            pwt->chroma_weight[i][list][j][1] != 0) {

                            pwt->use_weight_chroma        = 1;

                            pwt->chroma_weight_flag[list] = 1;

                        }

                    }

                } else {

                    int j;

                    for (j = 0; j < 2; j++) {

                        pwt->chroma_weight[i][list][j][0] = chroma_def;

                        pwt->chroma_weight[i][list][j][1] = 0;

                    }

                }

            }



            // for MBAFF

            if (picture_structure == PICT_FRAME) {

                pwt->luma_weight[16 + 2 * i][list][0] = pwt->luma_weight[16 + 2 * i + 1][list][0] = pwt->luma_weight[i][list][0];

                pwt->luma_weight[16 + 2 * i][list][1] = pwt->luma_weight[16 + 2 * i + 1][list][1] = pwt->luma_weight[i][list][1];

                for (j = 0; j < 2; j++) {

                    pwt->chroma_weight[16 + 2 * i][list][j][0] = pwt->chroma_weight[16 + 2 * i + 1][list][j][0] = pwt->chroma_weight[i][list][j][0];

                    pwt->chroma_weight[16 + 2 * i][list][j][1] = pwt->chroma_weight[16 + 2 * i + 1][list][j][1] = pwt->chroma_weight[i][list][j][1];

                }

            }

        }

        if (slice_type_nos != AV_PICTURE_TYPE_B)

            break;

    }

    pwt->use_weight = pwt->use_weight || pwt->use_weight_chroma;

    return 0;

out_range_weight:

    avpriv_request_sample(logctx, "Out of range weight\n");

    return AVERROR_INVALIDDATA;

}

int ff_h264_pred_weight_table(GetBitContext *gb, const SPS *sps,

                              const int *ref_count, int slice_type_nos,

                              H264PredWeightTable *pwt,

                              int picture_structure, void *logctx)

{

    int list, i, j;

    int luma_def, chroma_def;



    pwt->use_weight             = 0;

    pwt->use_weight_chroma      = 0;

    pwt->luma_log2_weight_denom = get_ue_golomb(gb);

    if (sps->chroma_format_idc)

        pwt->chroma_log2_weight_denom = get_ue_golomb(gb);



    if (pwt->luma_log2_weight_denom > 7U) {

        av_log(logctx, AV_LOG_ERROR, "luma_log2_weight_denom %d is out of range\n", pwt->luma_log2_weight_denom);

        pwt->luma_log2_weight_denom = 0;

    }

    if (pwt->chroma_log2_weight_denom > 7U) {

        av_log(logctx, AV_LOG_ERROR, "chroma_log2_weight_denom %d is out of range\n", pwt->chroma_log2_weight_denom);

        pwt->chroma_log2_weight_denom = 0;

    }



    luma_def   = 1 << pwt->luma_log2_weight_denom;

    chroma_def = 1 << pwt->chroma_log2_weight_denom;



    for (list = 0; list < 2; list++) {

        pwt->luma_weight_flag[list]   = 0;

        pwt->chroma_weight_flag[list] = 0;

        for (i = 0; i < ref_count[list]; i++) {

            int luma_weight_flag, chroma_weight_flag;



            luma_weight_flag = get_bits1(gb);

            if (luma_weight_flag) {

                pwt->luma_weight[i][list][0] = get_se_golomb(gb);

                pwt->luma_weight[i][list][1] = get_se_golomb(gb);

                if ((int8_t)pwt->luma_weight[i][list][0] != pwt->luma_weight[i][list][0] ||

                    (int8_t)pwt->luma_weight[i][list][1] != pwt->luma_weight[i][list][1])

                    goto out_range_weight;

                if (pwt->luma_weight[i][list][0] != luma_def ||

                    pwt->luma_weight[i][list][1] != 0) {

                    pwt->use_weight             = 1;

                    pwt->luma_weight_flag[list] = 1;

                }

            } else {

                pwt->luma_weight[i][list][0] = luma_def;

                pwt->luma_weight[i][list][1] = 0;

            }



            if (sps->chroma_format_idc) {

                chroma_weight_flag = get_bits1(gb);

                if (chroma_weight_flag) {

                    int j;

                    for (j = 0; j < 2; j++) {

                        pwt->chroma_weight[i][list][j][0] = get_se_golomb(gb);

                        pwt->chroma_weight[i][list][j][1] = get_se_golomb(gb);

                        if ((int8_t)pwt->chroma_weight[i][list][j][0] != pwt->chroma_weight[i][list][j][0] ||

                            (int8_t)pwt->chroma_weight[i][list][j][1] != pwt->chroma_weight[i][list][j][1])

                            goto out_range_weight;

                        if (pwt->chroma_weight[i][list][j][0] != chroma_def ||

                            pwt->chroma_weight[i][list][j][1] != 0) {

                            pwt->use_weight_chroma        = 1;

                            pwt->chroma_weight_flag[list] = 1;

                        }

                    }

                } else {

                    int j;

                    for (j = 0; j < 2; j++) {

                        pwt->chroma_weight[i][list][j][0] = chroma_def;

                        pwt->chroma_weight[i][list][j][1] = 0;

                    }

                }

            }



            

            if (picture_structure == PICT_FRAME) {

                pwt->luma_weight[16 + 2 * i][list][0] = pwt->luma_weight[16 + 2 * i + 1][list][0] = pwt->luma_weight[i][list][0];

                pwt->luma_weight[16 + 2 * i][list][1] = pwt->luma_weight[16 + 2 * i + 1][list][1] = pwt->luma_weight[i][list][1];

                for (j = 0; j < 2; j++) {

                    pwt->chroma_weight[16 + 2 * i][list][j][0] = pwt->chroma_weight[16 + 2 * i + 1][list][j][0] = pwt->chroma_weight[i][list][j][0];

                    pwt->chroma_weight[16 + 2 * i][list][j][1] = pwt->chroma_weight[16 + 2 * i + 1][list][j][1] = pwt->chroma_weight[i][list][j][1];

                }

            }

        }

        if (slice_type_nos != AV_PICTURE_TYPE_B)

            break;

    }

    pwt->use_weight = pwt->use_weight || pwt->use_weight_chroma;

    return 0;

out_range_weight:

    avpriv_request_sample(logctx, "Out of range weight\n");

    return AVERROR_INVALIDDATA;

}

    pwt->luma_log2_weight_denom = get_ue_golomb(gb);     if (sps->chroma_format_idc)         pwt->chroma_log2_weight_denom = get_ue_golomb(gb);     if (pwt->chroma_log2_weight_denom > 7U) {         av_log(logctx, AV_LOG_ERROR, "chroma_log2_weight_denom %d is out of range\n", pwt->chroma_log2_weight_denom);         pwt->chroma_log2_weight_denom = 0;     luma_def   = 1 << pwt->luma_log2_weight_denom;     chroma_def = 1 << pwt->chroma_log2_weight_denom;                 for (j = 0; j < 2; j++) {                     pwt->chroma_weight[16 + 2 * i][list][j][0] = pwt->chroma_weight[16 + 2 * i + 1][list][j][0] = pwt->chroma_weight[i][list][j][0];                     pwt->chroma_weight[16 + 2 * i][list][j][1] = pwt->chroma_weight[16 + 2 * i + 1][list][j][1] = pwt->chroma_weight[i][list][j][1];
int FUNC_0(GetBitContext *VAR_0, const SPS *VAR_1,

                              const int *VAR_2, int VAR_3,

                              H264PredWeightTable *VAR_4,

                              int VAR_5, void *VAR_6)

{

    int VAR_7, VAR_8, VAR_14;

    int VAR_10, VAR_11;



    VAR_4->use_weight             = 0;

    VAR_4->use_weight_chroma      = 0;

    VAR_4->luma_log2_weight_denom = get_ue_golomb(VAR_0);

    if (VAR_1->chroma_format_idc)

        VAR_4->chroma_log2_weight_denom = get_ue_golomb(VAR_0);



    if (VAR_4->luma_log2_weight_denom > 7U) {

        av_log(VAR_6, AV_LOG_ERROR, "luma_log2_weight_denom %d is out of range\n", VAR_4->luma_log2_weight_denom);

        VAR_4->luma_log2_weight_denom = 0;

    }

    if (VAR_4->chroma_log2_weight_denom > 7U) {

        av_log(VAR_6, AV_LOG_ERROR, "chroma_log2_weight_denom %d is out of range\n", VAR_4->chroma_log2_weight_denom);

        VAR_4->chroma_log2_weight_denom = 0;

    }



    VAR_10   = 1 << VAR_4->luma_log2_weight_denom;

    VAR_11 = 1 << VAR_4->chroma_log2_weight_denom;



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

        VAR_4->VAR_12[VAR_7]   = 0;

        VAR_4->VAR_13[VAR_7] = 0;

        for (VAR_8 = 0; VAR_8 < VAR_2[VAR_7]; VAR_8++) {

            int VAR_12, VAR_13;



            VAR_12 = get_bits1(VAR_0);

            if (VAR_12) {

                VAR_4->luma_weight[VAR_8][VAR_7][0] = get_se_golomb(VAR_0);

                VAR_4->luma_weight[VAR_8][VAR_7][1] = get_se_golomb(VAR_0);

                if ((int8_t)VAR_4->luma_weight[VAR_8][VAR_7][0] != VAR_4->luma_weight[VAR_8][VAR_7][0] ||

                    (int8_t)VAR_4->luma_weight[VAR_8][VAR_7][1] != VAR_4->luma_weight[VAR_8][VAR_7][1])

                    goto out_range_weight;

                if (VAR_4->luma_weight[VAR_8][VAR_7][0] != VAR_10 ||

                    VAR_4->luma_weight[VAR_8][VAR_7][1] != 0) {

                    VAR_4->use_weight             = 1;

                    VAR_4->VAR_12[VAR_7] = 1;

                }

            } else {

                VAR_4->luma_weight[VAR_8][VAR_7][0] = VAR_10;

                VAR_4->luma_weight[VAR_8][VAR_7][1] = 0;

            }



            if (VAR_1->chroma_format_idc) {

                VAR_13 = get_bits1(VAR_0);

                if (VAR_13) {

                    int VAR_14;

                    for (VAR_14 = 0; VAR_14 < 2; VAR_14++) {

                        VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0] = get_se_golomb(VAR_0);

                        VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1] = get_se_golomb(VAR_0);

                        if ((int8_t)VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0] != VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0] ||

                            (int8_t)VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1] != VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1])

                            goto out_range_weight;

                        if (VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0] != VAR_11 ||

                            VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1] != 0) {

                            VAR_4->use_weight_chroma        = 1;

                            VAR_4->VAR_13[VAR_7] = 1;

                        }

                    }

                } else {

                    int VAR_14;

                    for (VAR_14 = 0; VAR_14 < 2; VAR_14++) {

                        VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0] = VAR_11;

                        VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1] = 0;

                    }

                }

            }



            

            if (VAR_5 == PICT_FRAME) {

                VAR_4->luma_weight[16 + 2 * VAR_8][VAR_7][0] = VAR_4->luma_weight[16 + 2 * VAR_8 + 1][VAR_7][0] = VAR_4->luma_weight[VAR_8][VAR_7][0];

                VAR_4->luma_weight[16 + 2 * VAR_8][VAR_7][1] = VAR_4->luma_weight[16 + 2 * VAR_8 + 1][VAR_7][1] = VAR_4->luma_weight[VAR_8][VAR_7][1];

                for (VAR_14 = 0; VAR_14 < 2; VAR_14++) {

                    VAR_4->chroma_weight[16 + 2 * VAR_8][VAR_7][VAR_14][0] = VAR_4->chroma_weight[16 + 2 * VAR_8 + 1][VAR_7][VAR_14][0] = VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0];

                    VAR_4->chroma_weight[16 + 2 * VAR_8][VAR_7][VAR_14][1] = VAR_4->chroma_weight[16 + 2 * VAR_8 + 1][VAR_7][VAR_14][1] = VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1];

                }

            }

        }

        if (VAR_3 != AV_PICTURE_TYPE_B)

            break;

    }

    VAR_4->use_weight = VAR_4->use_weight || VAR_4->use_weight_chroma;

    return 0;

out_range_weight:

    avpriv_request_sample(VAR_6, "Out of range weight\n");

    return AVERROR_INVALIDDATA;

}

int FUNC_0(GetBitContext *VAR_0, const SPS *VAR_1,
const int *VAR_2, int VAR_3,
H264PredWeightTable *VAR_4,
int VAR_5, void *VAR_6)
{ int VAR_7, VAR_8, VAR_14; int VAR_10, VAR_11; VAR_4->use_weight             = 0; VAR_4->use_weight_chroma      = 0; VAR_4->luma_log2_weight_denom = get_ue_golomb(VAR_0); if (VAR_1->chroma_format_idc)
VAR_4->chroma_log2_weight_denom = get_ue_golomb(VAR_0); if (VAR_4->luma_log2_weight_denom > 7U) { av_log(VAR_6, AV_LOG_ERROR, "luma_log2_weight_denom %d is out of range\n", VAR_4->luma_log2_weight_denom); VAR_4->luma_log2_weight_denom = 0; } if (VAR_4->chroma_log2_weight_denom > 7U) { av_log(VAR_6, AV_LOG_ERROR, "chroma_log2_weight_denom %d is out of range\n", VAR_4->chroma_log2_weight_denom); VAR_4->chroma_log2_weight_denom = 0; } VAR_10   = 1 << VAR_4->luma_log2_weight_denom; VAR_11 = 1 << VAR_4->chroma_log2_weight_denom; for (VAR_7 = 0; VAR_7 < 2; VAR_7++) { VAR_4->VAR_12[VAR_7]   = 0; VAR_4->VAR_13[VAR_7] = 0; for (VAR_8 = 0; VAR_8 < VAR_2[VAR_7]; VAR_8++) { int VAR_12, VAR_13; VAR_12 = get_bits1(VAR_0); if (VAR_12) { VAR_4->luma_weight[VAR_8][VAR_7][0] = get_se_golomb(VAR_0); VAR_4->luma_weight[VAR_8][VAR_7][1] = get_se_golomb(VAR_0); if ((int8_t)VAR_4->luma_weight[VAR_8][VAR_7][0] != VAR_4->luma_weight[VAR_8][VAR_7][0] ||
(int8_t)VAR_4->luma_weight[VAR_8][VAR_7][1] != VAR_4->luma_weight[VAR_8][VAR_7][1])
goto out_range_weight; if (VAR_4->luma_weight[VAR_8][VAR_7][0] != VAR_10 ||
VAR_4->luma_weight[VAR_8][VAR_7][1] != 0) { VAR_4->use_weight             = 1; VAR_4->VAR_12[VAR_7] = 1; } } else { VAR_4->luma_weight[VAR_8][VAR_7][0] = VAR_10; VAR_4->luma_weight[VAR_8][VAR_7][1] = 0; } if (VAR_1->chroma_format_idc) { VAR_13 = get_bits1(VAR_0); if (VAR_13) { int VAR_14; for (VAR_14 = 0; VAR_14 < 2; VAR_14++) { VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0] = get_se_golomb(VAR_0); VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1] = get_se_golomb(VAR_0); if ((int8_t)VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0] != VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0] ||
(int8_t)VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1] != VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1])
goto out_range_weight; if (VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0] != VAR_11 ||
VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1] != 0) { VAR_4->use_weight_chroma        = 1; VAR_4->VAR_13[VAR_7] = 1; } } } else { int VAR_14; for (VAR_14 = 0; VAR_14 < 2; VAR_14++) { VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0] = VAR_11; VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1] = 0; } } } if (VAR_5 == PICT_FRAME) { VAR_4->luma_weight[16 + 2 * VAR_8][VAR_7][0] = VAR_4->luma_weight[16 + 2 * VAR_8 + 1][VAR_7][0] = VAR_4->luma_weight[VAR_8][VAR_7][0]; VAR_4->luma_weight[16 + 2 * VAR_8][VAR_7][1] = VAR_4->luma_weight[16 + 2 * VAR_8 + 1][VAR_7][1] = VAR_4->luma_weight[VAR_8][VAR_7][1]; for (VAR_14 = 0; VAR_14 < 2; VAR_14++) { VAR_4->chroma_weight[16 + 2 * VAR_8][VAR_7][VAR_14][0] = VAR_4->chroma_weight[16 + 2 * VAR_8 + 1][VAR_7][VAR_14][0] = VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][0]; VAR_4->chroma_weight[16 + 2 * VAR_8][VAR_7][VAR_14][1] = VAR_4->chroma_weight[16 + 2 * VAR_8 + 1][VAR_7][VAR_14][1] = VAR_4->chroma_weight[VAR_8][VAR_7][VAR_14][1]; } } } if (VAR_3 != AV_PICTURE_TYPE_B)
break; } VAR_4->use_weight = VAR_4->use_weight || VAR_4->use_weight_chroma; return 0; out_range_weight:
avpriv_request_sample(VAR_6, "Out of range weight\n"); return AVERROR_INVALIDDATA; }