int ff_h264_fill_default_ref_list(H264Context *h)

{

    int i, len;



    if (h->slice_type_nos == AV_PICTURE_TYPE_B) {

        Picture *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);

            assert(len <= 32);

            len  = build_def_list(h->default_ref_list[list],       sorted,      len, 0, h->picture_structure);

            len += build_def_list(h->default_ref_list[list] + len, h->long_ref, 16,  1, h->picture_structure);

            assert(len <= 32);



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

                memset(&h->default_ref_list[list][len], 0, sizeof(Picture) * (h->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].f.buf[0]->buffer ==

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

            if (i == lens[0]) {

                Picture tmp;

                COPY_PICTURE(&tmp, &h->default_ref_list[1][0]);

                COPY_PICTURE(&h->default_ref_list[1][0], &h->default_ref_list[1][1]);

                COPY_PICTURE(&h->default_ref_list[1][1], &tmp);

            }

        }

    } else {

        len  = build_def_list(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, h-> long_ref, 16,                 1, h->picture_structure);

        assert(len <= 32);

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

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

    }

#ifdef TRACE

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

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

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

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

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

    }

    if (h->slice_type_nos == AV_PICTURE_TYPE_B) {

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

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

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

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

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

        }

    }

#endif

    return 0;

}

int ff_h264_fill_default_ref_list(H264Context *h)

{

    int i, len;



    if (h->slice_type_nos == AV_PICTURE_TYPE_B) {

        Picture *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);

            assert(len <= 32);

            len  = build_def_list(h->default_ref_list[list],       sorted,      len, 0, h->picture_structure);

            len += build_def_list(h->default_ref_list[list] + len, h->long_ref, 16,  1, h->picture_structure);

            assert(len <= 32);



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

                memset(&h->default_ref_list[list][len], 0, sizeof(Picture) * (h->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].f.buf[0]->buffer ==

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

            if (i == lens[0]) {

                Picture tmp;

                COPY_PICTURE(&tmp, &h->default_ref_list[1][0]);

                COPY_PICTURE(&h->default_ref_list[1][0], &h->default_ref_list[1][1]);

                COPY_PICTURE(&h->default_ref_list[1][1], &tmp);

            }

        }

    } else {

        len  = build_def_list(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, h-> long_ref, 16,                 1, h->picture_structure);

        assert(len <= 32);

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

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

    }

#ifdef TRACE

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

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

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

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

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

    }

    if (h->slice_type_nos == AV_PICTURE_TYPE_B) {

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

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

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

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

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

        }

    }

#endif

    return 0;

}

            len  = build_def_list(h->default_ref_list[list],       sorted,      len, 0, h->picture_structure);             len += build_def_list(h->default_ref_list[list] + len, h->long_ref, 16,  1, h->picture_structure);             assert(len <= 32);         len  = build_def_list(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, h-> long_ref, 16,                 1, h->picture_structure);         assert(len <= 32);
int FUNC_0(H264Context *VAR_0)

{

    int VAR_1, VAR_2;



    if (VAR_0->slice_type_nos == AV_PICTURE_TYPE_B) {

        Picture *sorted[32];

        int VAR_3, VAR_4;

        int VAR_5[2];



        if (FIELD_PICTURE(VAR_0))

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

        else

            VAR_3 = VAR_0->cur_pic_ptr->poc;



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

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

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

            assert(VAR_2 <= 32);

            VAR_2  = build_def_list(VAR_0->default_ref_list[VAR_4],       sorted,      VAR_2, 0, VAR_0->picture_structure);

            VAR_2 += build_def_list(VAR_0->default_ref_list[VAR_4] + VAR_2, VAR_0->long_ref, 16,  1, VAR_0->picture_structure);

            assert(VAR_2 <= 32);



            if (VAR_2 < VAR_0->ref_count[VAR_4])

                memset(&VAR_0->default_ref_list[VAR_4][VAR_2], 0, sizeof(Picture) * (VAR_0->ref_count[VAR_4] - VAR_2));

            VAR_5[VAR_4] = VAR_2;

        }



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

            for (VAR_1 = 0; VAR_1 < VAR_5[0] &&

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

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

            if (VAR_1 == VAR_5[0]) {

                Picture tmp;

                COPY_PICTURE(&tmp, &VAR_0->default_ref_list[1][0]);

                COPY_PICTURE(&VAR_0->default_ref_list[1][0], &VAR_0->default_ref_list[1][1]);

                COPY_PICTURE(&VAR_0->default_ref_list[1][1], &tmp);

            }

        }

    } else {

        VAR_2  = build_def_list(VAR_0->default_ref_list[0],       VAR_0->short_ref, VAR_0->short_ref_count, 0, VAR_0->picture_structure);

        VAR_2 += build_def_list(VAR_0->default_ref_list[0] + VAR_2, VAR_0-> long_ref, 16,                 1, VAR_0->picture_structure);

        assert(VAR_2 <= 32);

        if (VAR_2 < VAR_0->ref_count[0])

            memset(&VAR_0->default_ref_list[0][VAR_2], 0, sizeof(Picture) * (VAR_0->ref_count[0] - VAR_2));

    }

#ifdef TRACE

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

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

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

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

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

    }

    if (VAR_0->slice_type_nos == AV_PICTURE_TYPE_B) {

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

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

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

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

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

        }

    }

#endif

    return 0;

}

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