int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup)

{

    AVCodecContext *const avctx = h->avctx;

    int err = 0;

    h->mb_y = 0;



    if (!in_setup && !h->droppable)

        ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX,

                                  h->picture_structure == PICT_BOTTOM_FIELD);



    if (in_setup || !(avctx->active_thread_type & FF_THREAD_FRAME)) {

        if (!h->droppable) {

            err = ff_h264_execute_ref_pic_marking(h);

            h->poc.prev_poc_msb = h->poc.poc_msb;

            h->poc.prev_poc_lsb = h->poc.poc_lsb;

        }

        h->poc.prev_frame_num_offset = h->poc.frame_num_offset;

        h->poc.prev_frame_num        = h->poc.frame_num;

    }



    if (avctx->hwaccel) {

        if (avctx->hwaccel->end_frame(avctx) < 0)

            av_log(avctx, AV_LOG_ERROR,

                   "hardware accelerator failed to decode picture\n");

    }



#if CONFIG_ERROR_RESILIENCE

    /*

     * FIXME: Error handling code does not seem to support interlaced

     * when slices span multiple rows

     * The ff_er_add_slice calls don't work right for bottom

     * fields; they cause massive erroneous error concealing

     * Error marking covers both fields (top and bottom).

     * This causes a mismatched s->error_count

     * and a bad error table. Further, the error count goes to

     * INT_MAX when called for bottom field, because mb_y is

     * past end by one (callers fault) and resync_mb_y != 0

     * causes problems for the first MB line, too.

     */

    if (!FIELD_PICTURE(h) && h->enable_er) {

        h264_set_erpic(&sl->er.cur_pic, h->cur_pic_ptr);

        h264_set_erpic(&sl->er.last_pic,

                       sl->ref_count[0] ? sl->ref_list[0][0].parent : NULL);

        h264_set_erpic(&sl->er.next_pic,

                       sl->ref_count[1] ? sl->ref_list[1][0].parent : NULL);

        ff_er_frame_end(&sl->er);

    }

#endif /* CONFIG_ERROR_RESILIENCE */



    emms_c();



    h->current_slice = 0;




    return err;

}
int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup)

{

    AVCodecContext *const avctx = h->avctx;

    int err = 0;

    h->mb_y = 0;



    if (!in_setup && !h->droppable)

        ff_thread_report_progress(&h->cur_pic_ptr->tf, INT_MAX,

                                  h->picture_structure == PICT_BOTTOM_FIELD);



    if (in_setup || !(avctx->active_thread_type & FF_THREAD_FRAME)) {

        if (!h->droppable) {

            err = ff_h264_execute_ref_pic_marking(h);

            h->poc.prev_poc_msb = h->poc.poc_msb;

            h->poc.prev_poc_lsb = h->poc.poc_lsb;

        }

        h->poc.prev_frame_num_offset = h->poc.frame_num_offset;

        h->poc.prev_frame_num        = h->poc.frame_num;

    }



    if (avctx->hwaccel) {

        if (avctx->hwaccel->end_frame(avctx) < 0)

            av_log(avctx, AV_LOG_ERROR,

                   "hardware accelerator failed to decode picture\n");

    }



#if CONFIG_ERROR_RESILIENCE

    























    if (!FIELD_PICTURE(h) && h->enable_er) {

        h264_set_erpic(&sl->er.cur_pic, h->cur_pic_ptr);

        h264_set_erpic(&sl->er.last_pic,

                       sl->ref_count[0] ? sl->ref_list[0][0].parent : NULL);

        h264_set_erpic(&sl->er.next_pic,

                       sl->ref_count[1] ? sl->ref_list[1][0].parent : NULL);

        ff_er_frame_end(&sl->er);

    }

#endif 



    emms_c();



    h->current_slice = 0;




    return err;

}
int FUNC_0(H264Context *VAR_0, H264SliceContext *VAR_1, int VAR_2)

{

    AVCodecContext *const avctx = VAR_0->avctx;

    int VAR_3 = 0;

    VAR_0->mb_y = 0;



    if (!VAR_2 && !VAR_0->droppable)

        ff_thread_report_progress(&VAR_0->cur_pic_ptr->tf, INT_MAX,

                                  VAR_0->picture_structure == PICT_BOTTOM_FIELD);



    if (VAR_2 || !(avctx->active_thread_type & FF_THREAD_FRAME)) {

        if (!VAR_0->droppable) {

            VAR_3 = ff_h264_execute_ref_pic_marking(VAR_0);

            VAR_0->poc.prev_poc_msb = VAR_0->poc.poc_msb;

            VAR_0->poc.prev_poc_lsb = VAR_0->poc.poc_lsb;

        }

        VAR_0->poc.prev_frame_num_offset = VAR_0->poc.frame_num_offset;

        VAR_0->poc.prev_frame_num        = VAR_0->poc.frame_num;

    }



    if (avctx->hwaccel) {

        if (avctx->hwaccel->end_frame(avctx) < 0)

            av_log(avctx, AV_LOG_ERROR,

                   "hardware accelerator failed to decode picture\n");

    }



#if CONFIG_ERROR_RESILIENCE

    























    if (!FIELD_PICTURE(VAR_0) && VAR_0->enable_er) {

        h264_set_erpic(&VAR_1->er.cur_pic, VAR_0->cur_pic_ptr);

        h264_set_erpic(&VAR_1->er.last_pic,

                       VAR_1->ref_count[0] ? VAR_1->ref_list[0][0].parent : NULL);

        h264_set_erpic(&VAR_1->er.next_pic,

                       VAR_1->ref_count[1] ? VAR_1->ref_list[1][0].parent : NULL);

        ff_er_frame_end(&VAR_1->er);

    }

#endif 



    emms_c();



    VAR_0->current_slice = 0;




    return VAR_3;

}
int FUNC_0(H264Context *VAR_0, H264SliceContext *VAR_1, int VAR_2)
{ AVCodecContext *const avctx = VAR_0->avctx; int VAR_3 = 0; VAR_0->mb_y = 0; if (!VAR_2 && !VAR_0->droppable)
ff_thread_report_progress(&VAR_0->cur_pic_ptr->tf, INT_MAX,
VAR_0->picture_structure == PICT_BOTTOM_FIELD); if (VAR_2 || !(avctx->active_thread_type & FF_THREAD_FRAME)) { if (!VAR_0->droppable) { VAR_3 = ff_h264_execute_ref_pic_marking(VAR_0); VAR_0->poc.prev_poc_msb = VAR_0->poc.poc_msb; VAR_0->poc.prev_poc_lsb = VAR_0->poc.poc_lsb; } VAR_0->poc.prev_frame_num_offset = VAR_0->poc.frame_num_offset; VAR_0->poc.prev_frame_num        = VAR_0->poc.frame_num; } if (avctx->hwaccel) { if (avctx->hwaccel->end_frame(avctx) < 0)
av_log(avctx, AV_LOG_ERROR,
"hardware accelerator failed to decode picture\n"); } #if CONFIG_ERROR_RESILIENCE
if (!FIELD_PICTURE(VAR_0) && VAR_0->enable_er) { h264_set_erpic(&VAR_1->er.cur_pic, VAR_0->cur_pic_ptr); h264_set_erpic(&VAR_1->er.last_pic,
VAR_1->ref_count[0] ? VAR_1->ref_list[0][0].parent : NULL); h264_set_erpic(&VAR_1->er.next_pic,
VAR_1->ref_count[1] ? VAR_1->ref_list[1][0].parent : NULL); ff_er_frame_end(&VAR_1->er); } #endif
emms_c(); VAR_0->current_slice = 0; return VAR_3; }