int ff_h264_fill_default_ref_list(H264Context *h, H264SliceContext *sl)

{

    int i, len;



    if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {

        H264Picture *sorted[32];

        int cur_poc, list;

        int lens[2];



        if (FIELD_PICTURE(h))

            cur_poc = h->cur_pic_ptr->field_poc[h->picture_structure == PICT_BOTTOM_FIELD];

        else

            cur_poc = h->cur_pic_ptr->poc;



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

            len  = add_sorted(sorted,       h->short_ref, h->short_ref_count, cur_poc, 1 ^ list);

            len += add_sorted(sorted + len, h->short_ref, h->short_ref_count, cur_poc, 0 ^ list);

            av_assert0(len <= 32);



            len  = build_def_list(h->default_ref_list[list], FF_ARRAY_ELEMS(h->default_ref_list[0]),

                                  sorted, len, 0, h->picture_structure);

            len += build_def_list(h->default_ref_list[list] + len,

                                  FF_ARRAY_ELEMS(h->default_ref_list[0]) - len,

                                  h->long_ref, 16, 1, h->picture_structure);

            av_assert0(len <= 32);



            if (len < sl->ref_count[list])

                memset(&h->default_ref_list[list][len], 0, sizeof(H264Ref) * (sl->ref_count[list] - len));

            lens[list] = len;

        }



        if (lens[0] == lens[1] && lens[1] > 1) {

            for (i = 0; i < lens[0] &&

                        h->default_ref_list[0][i].parent->f.buf[0]->buffer ==

                        h->default_ref_list[1][i].parent->f.buf[0]->buffer; i++);

            if (i == lens[0]) {

                FFSWAP(H264Ref, h->default_ref_list[1][0], h->default_ref_list[1][1]);

            }

        }

    } else {

        len  = build_def_list(h->default_ref_list[0], FF_ARRAY_ELEMS(h->default_ref_list[0]),

                              h->short_ref, h->short_ref_count, 0, h->picture_structure);

        len += build_def_list(h->default_ref_list[0] + len,

                              FF_ARRAY_ELEMS(h->default_ref_list[0]) - len,

                              h-> long_ref, 16, 1, h->picture_structure);

        av_assert0(len <= 32);



        if (len < sl->ref_count[0])

            memset(&h->default_ref_list[0][len], 0, sizeof(H264Ref) * (sl->ref_count[0] - len));

    }

#ifdef TRACE

    for (i = 0; i < sl->ref_count[0]; i++) {

        tprintf(h->avctx, "List0: %s fn:%d 0x%p\n",

                (h->default_ref_list[0][i].parent->long_ref ? "LT" : "ST"),

                h->default_ref_list[0][i].pic_id,

                h->default_ref_list[0][i].parent->f.data[0]);

    }

    if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {

        for (i = 0; i < sl->ref_count[1]; i++) {

            tprintf(h->avctx, "List1: %s fn:%d 0x%p\n",

                    (h->default_ref_list[1][i].parent->long_ref ? "LT" : "ST"),

                    h->default_ref_list[1][i].pic_id,

                    h->default_ref_list[1][i].parent->f.data[0]);

        }

    }

#endif

    return 0;

}

int ff_h264_fill_default_ref_list(H264Context *h, H264SliceContext *sl)

{

    int i, len;



    if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {

        H264Picture *sorted[32];

        int cur_poc, list;

        int lens[2];



        if (FIELD_PICTURE(h))

            cur_poc = h->cur_pic_ptr->field_poc[h->picture_structure == PICT_BOTTOM_FIELD];

        else

            cur_poc = h->cur_pic_ptr->poc;



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

            len  = add_sorted(sorted,       h->short_ref, h->short_ref_count, cur_poc, 1 ^ list);

            len += add_sorted(sorted + len, h->short_ref, h->short_ref_count, cur_poc, 0 ^ list);

            av_assert0(len <= 32);



            len  = build_def_list(h->default_ref_list[list], FF_ARRAY_ELEMS(h->default_ref_list[0]),

                                  sorted, len, 0, h->picture_structure);

            len += build_def_list(h->default_ref_list[list] + len,

                                  FF_ARRAY_ELEMS(h->default_ref_list[0]) - len,

                                  h->long_ref, 16, 1, h->picture_structure);

            av_assert0(len <= 32);



            if (len < sl->ref_count[list])

                memset(&h->default_ref_list[list][len], 0, sizeof(H264Ref) * (sl->ref_count[list] - len));

            lens[list] = len;

        }



        if (lens[0] == lens[1] && lens[1] > 1) {

            for (i = 0; i < lens[0] &&

                        h->default_ref_list[0][i].parent->f.buf[0]->buffer ==

                        h->default_ref_list[1][i].parent->f.buf[0]->buffer; i++);

            if (i == lens[0]) {

                FFSWAP(H264Ref, h->default_ref_list[1][0], h->default_ref_list[1][1]);

            }

        }

    } else {

        len  = build_def_list(h->default_ref_list[0], FF_ARRAY_ELEMS(h->default_ref_list[0]),

                              h->short_ref, h->short_ref_count, 0, h->picture_structure);

        len += build_def_list(h->default_ref_list[0] + len,

                              FF_ARRAY_ELEMS(h->default_ref_list[0]) - len,

                              h-> long_ref, 16, 1, h->picture_structure);

        av_assert0(len <= 32);



        if (len < sl->ref_count[0])

            memset(&h->default_ref_list[0][len], 0, sizeof(H264Ref) * (sl->ref_count[0] - len));

    }

#ifdef TRACE

    for (i = 0; i < sl->ref_count[0]; i++) {

        tprintf(h->avctx, "List0: %s fn:%d 0x%p\n",

                (h->default_ref_list[0][i].parent->long_ref ? "LT" : "ST"),

                h->default_ref_list[0][i].pic_id,

                h->default_ref_list[0][i].parent->f.data[0]);

    }

    if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {

        for (i = 0; i < sl->ref_count[1]; i++) {

            tprintf(h->avctx, "List1: %s fn:%d 0x%p\n",

                    (h->default_ref_list[1][i].parent->long_ref ? "LT" : "ST"),

                    h->default_ref_list[1][i].pic_id,

                    h->default_ref_list[1][i].parent->f.data[0]);

        }

    }

#endif

    return 0;

}

                (h->default_ref_list[0][i].parent->long_ref ? "LT" : "ST"),                 h->default_ref_list[0][i].parent->f.data[0]);                     (h->default_ref_list[1][i].parent->long_ref ? "LT" : "ST"),                     h->default_ref_list[1][i].parent->f.data[0]);
int FUNC_0(H264Context *VAR_0, H264SliceContext *VAR_1)

{

    int VAR_2, VAR_3;



    if (VAR_1->slice_type_nos == AV_PICTURE_TYPE_B) {

        H264Picture *sorted[32];

        int VAR_4, VAR_5;

        int VAR_6[2];



        if (FIELD_PICTURE(VAR_0))

            VAR_4 = VAR_0->cur_pic_ptr->field_poc[VAR_0->picture_structure == PICT_BOTTOM_FIELD];

        else

            VAR_4 = VAR_0->cur_pic_ptr->poc;



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

            VAR_3  = add_sorted(sorted,       VAR_0->short_ref, VAR_0->short_ref_count, VAR_4, 1 ^ VAR_5);

            VAR_3 += add_sorted(sorted + VAR_3, VAR_0->short_ref, VAR_0->short_ref_count, VAR_4, 0 ^ VAR_5);

            av_assert0(VAR_3 <= 32);



            VAR_3  = build_def_list(VAR_0->default_ref_list[VAR_5], FF_ARRAY_ELEMS(VAR_0->default_ref_list[0]),

                                  sorted, VAR_3, 0, VAR_0->picture_structure);

            VAR_3 += build_def_list(VAR_0->default_ref_list[VAR_5] + VAR_3,

                                  FF_ARRAY_ELEMS(VAR_0->default_ref_list[0]) - VAR_3,

                                  VAR_0->long_ref, 16, 1, VAR_0->picture_structure);

            av_assert0(VAR_3 <= 32);



            if (VAR_3 < VAR_1->ref_count[VAR_5])

                memset(&VAR_0->default_ref_list[VAR_5][VAR_3], 0, sizeof(H264Ref) * (VAR_1->ref_count[VAR_5] - VAR_3));

            VAR_6[VAR_5] = VAR_3;

        }



        if (VAR_6[0] == VAR_6[1] && VAR_6[1] > 1) {

            for (VAR_2 = 0; VAR_2 < VAR_6[0] &&

                        VAR_0->default_ref_list[0][VAR_2].parent->f.buf[0]->buffer ==

                        VAR_0->default_ref_list[1][VAR_2].parent->f.buf[0]->buffer; VAR_2++);

            if (VAR_2 == VAR_6[0]) {

                FFSWAP(H264Ref, VAR_0->default_ref_list[1][0], VAR_0->default_ref_list[1][1]);

            }

        }

    } else {

        VAR_3  = build_def_list(VAR_0->default_ref_list[0], FF_ARRAY_ELEMS(VAR_0->default_ref_list[0]),

                              VAR_0->short_ref, VAR_0->short_ref_count, 0, VAR_0->picture_structure);

        VAR_3 += build_def_list(VAR_0->default_ref_list[0] + VAR_3,

                              FF_ARRAY_ELEMS(VAR_0->default_ref_list[0]) - VAR_3,

                              VAR_0-> long_ref, 16, 1, VAR_0->picture_structure);

        av_assert0(VAR_3 <= 32);



        if (VAR_3 < VAR_1->ref_count[0])

            memset(&VAR_0->default_ref_list[0][VAR_3], 0, sizeof(H264Ref) * (VAR_1->ref_count[0] - VAR_3));

    }

#ifdef TRACE

    for (VAR_2 = 0; VAR_2 < VAR_1->ref_count[0]; VAR_2++) {

        tprintf(VAR_0->avctx, "List0: %s fn:%d 0x%p\n",

                (VAR_0->default_ref_list[0][VAR_2].parent->long_ref ? "LT" : "ST"),

                VAR_0->default_ref_list[0][VAR_2].pic_id,

                VAR_0->default_ref_list[0][VAR_2].parent->f.data[0]);

    }

    if (VAR_1->slice_type_nos == AV_PICTURE_TYPE_B) {

        for (VAR_2 = 0; VAR_2 < VAR_1->ref_count[1]; VAR_2++) {

            tprintf(VAR_0->avctx, "List1: %s fn:%d 0x%p\n",

                    (VAR_0->default_ref_list[1][VAR_2].parent->long_ref ? "LT" : "ST"),

                    VAR_0->default_ref_list[1][VAR_2].pic_id,

                    VAR_0->default_ref_list[1][VAR_2].parent->f.data[0]);

        }

    }

#endif

    return 0;

}

int FUNC_0(H264Context *VAR_0, H264SliceContext *VAR_1)
{ int VAR_2, VAR_3; if (VAR_1->slice_type_nos == AV_PICTURE_TYPE_B) { H264Picture *sorted[32]; int VAR_4, VAR_5; int VAR_6[2]; if (FIELD_PICTURE(VAR_0))
VAR_4 = VAR_0->cur_pic_ptr->field_poc[VAR_0->picture_structure == PICT_BOTTOM_FIELD]; else
VAR_4 = VAR_0->cur_pic_ptr->poc; for (VAR_5 = 0; VAR_5 < 2; VAR_5++) { VAR_3  = add_sorted(sorted,       VAR_0->short_ref, VAR_0->short_ref_count, VAR_4, 1 ^ VAR_5); VAR_3 += add_sorted(sorted + VAR_3, VAR_0->short_ref, VAR_0->short_ref_count, VAR_4, 0 ^ VAR_5); av_assert0(VAR_3 <= 32); VAR_3  = build_def_list(VAR_0->default_ref_list[VAR_5], FF_ARRAY_ELEMS(VAR_0->default_ref_list[0]),
sorted, VAR_3, 0, VAR_0->picture_structure); VAR_3 += build_def_list(VAR_0->default_ref_list[VAR_5] + VAR_3,
FF_ARRAY_ELEMS(VAR_0->default_ref_list[0]) - VAR_3,
VAR_0->long_ref, 16, 1, VAR_0->picture_structure); av_assert0(VAR_3 <= 32); if (VAR_3 < VAR_1->ref_count[VAR_5])
memset(&VAR_0->default_ref_list[VAR_5][VAR_3], 0, sizeof(H264Ref) * (VAR_1->ref_count[VAR_5] - VAR_3)); VAR_6[VAR_5] = VAR_3; } if (VAR_6[0] == VAR_6[1] && VAR_6[1] > 1) { for (VAR_2 = 0; VAR_2 < VAR_6[0] && VAR_0->default_ref_list[0][VAR_2].parent->f.buf[0]->buffer ==
VAR_0->default_ref_list[1][VAR_2].parent->f.buf[0]->buffer; VAR_2++); if (VAR_2 == VAR_6[0]) { FFSWAP(H264Ref, VAR_0->default_ref_list[1][0], VAR_0->default_ref_list[1][1]); } } } else { VAR_3  = build_def_list(VAR_0->default_ref_list[0], FF_ARRAY_ELEMS(VAR_0->default_ref_list[0]),
VAR_0->short_ref, VAR_0->short_ref_count, 0, VAR_0->picture_structure); VAR_3 += build_def_list(VAR_0->default_ref_list[0] + VAR_3,
FF_ARRAY_ELEMS(VAR_0->default_ref_list[0]) - VAR_3,
VAR_0-> long_ref, 16, 1, VAR_0->picture_structure); av_assert0(VAR_3 <= 32); if (VAR_3 < VAR_1->ref_count[0])
memset(&VAR_0->default_ref_list[0][VAR_3], 0, sizeof(H264Ref) * (VAR_1->ref_count[0] - VAR_3)); } #ifdef TRACE
for (VAR_2 = 0; VAR_2 < VAR_1->ref_count[0]; VAR_2++) { tprintf(VAR_0->avctx, "List0: %s fn:%d 0x%p\n",
(VAR_0->default_ref_list[0][VAR_2].parent->long_ref ? "LT" : "ST"),
VAR_0->default_ref_list[0][VAR_2].pic_id,
VAR_0->default_ref_list[0][VAR_2].parent->f.data[0]); } if (VAR_1->slice_type_nos == AV_PICTURE_TYPE_B) { for (VAR_2 = 0; VAR_2 < VAR_1->ref_count[1]; VAR_2++) { tprintf(VAR_0->avctx, "List1: %s fn:%d 0x%p\n",
(VAR_0->default_ref_list[1][VAR_2].parent->long_ref ? "LT" : "ST"),
VAR_0->default_ref_list[1][VAR_2].pic_id,
VAR_0->default_ref_list[1][VAR_2].parent->f.data[0]); } } #endif
return 0; }