static void do_video_out(AVFormatContext *s,

                         OutputStream *ost,

                         AVFrame *in_picture,

                         int *frame_size)

{

    int ret, format_video_sync;

    AVPacket pkt;

    AVCodecContext *enc = ost->enc_ctx;



    *frame_size = 0;



    format_video_sync = video_sync_method;

    if (format_video_sync == VSYNC_AUTO)

        format_video_sync = (s->oformat->flags & AVFMT_NOTIMESTAMPS) ? VSYNC_PASSTHROUGH :

                            (s->oformat->flags & AVFMT_VARIABLE_FPS) ? VSYNC_VFR : VSYNC_CFR;

    if (format_video_sync != VSYNC_PASSTHROUGH &&

        ost->frame_number &&

        in_picture->pts != AV_NOPTS_VALUE &&

        in_picture->pts < ost->sync_opts) {

        nb_frames_drop++;

        av_log(NULL, AV_LOG_WARNING,

               "*** dropping frame %d from stream %d at ts %"PRId64"\n",

               ost->frame_number, ost->st->index, in_picture->pts);

        return;

    }



    if (in_picture->pts == AV_NOPTS_VALUE)

        in_picture->pts = ost->sync_opts;

    ost->sync_opts = in_picture->pts;





    if (!ost->frame_number)

        ost->first_pts = in_picture->pts;



    av_init_packet(&pkt);

    pkt.data = NULL;

    pkt.size = 0;



    if (ost->frame_number >= ost->max_frames)

        return;



    if (enc->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) &&

        ost->top_field_first >= 0)

        in_picture->top_field_first = !!ost->top_field_first;



    in_picture->quality = enc->global_quality;

    in_picture->pict_type = 0;

    if (ost->forced_kf_index < ost->forced_kf_count &&

        in_picture->pts >= ost->forced_kf_pts[ost->forced_kf_index]) {

        in_picture->pict_type = AV_PICTURE_TYPE_I;

        ost->forced_kf_index++;

    }



    ost->frames_encoded++;



    ret = avcodec_send_frame(enc, in_picture);

    if (ret < 0)

        goto error;



    /*

     * For video, there may be reordering, so we can't throw away frames on

     * encoder flush, we need to limit them here, before they go into encoder.

     */

    ost->frame_number++;



    while (1) {

        ret = avcodec_receive_packet(enc, &pkt);

        if (ret == AVERROR(EAGAIN))

            break;

        if (ret < 0)

            goto error;



        av_packet_rescale_ts(&pkt, enc->time_base, ost->st->time_base);

        output_packet(s, &pkt, ost);

        *frame_size = pkt.size;



        /* if two pass, output log */

        if (ost->logfile && enc->stats_out) {

            fprintf(ost->logfile, "%s", enc->stats_out);

        }



        ost->sync_opts++;

    }



    return;

error:

    av_assert0(ret != AVERROR(EAGAIN) && ret != AVERROR_EOF);

    av_log(NULL, AV_LOG_FATAL, "Video encoding failed\n");

    exit_program(1);

}

static void do_video_out(AVFormatContext *s,

                         OutputStream *ost,

                         AVFrame *in_picture,

                         int *frame_size)

{

    int ret, format_video_sync;

    AVPacket pkt;

    AVCodecContext *enc = ost->enc_ctx;



    *frame_size = 0;



    format_video_sync = video_sync_method;

    if (format_video_sync == VSYNC_AUTO)

        format_video_sync = (s->oformat->flags & AVFMT_NOTIMESTAMPS) ? VSYNC_PASSTHROUGH :

                            (s->oformat->flags & AVFMT_VARIABLE_FPS) ? VSYNC_VFR : VSYNC_CFR;

    if (format_video_sync != VSYNC_PASSTHROUGH &&

        ost->frame_number &&

        in_picture->pts != AV_NOPTS_VALUE &&

        in_picture->pts < ost->sync_opts) {

        nb_frames_drop++;

        av_log(NULL, AV_LOG_WARNING,

               "*** dropping frame %d from stream %d at ts %"PRId64"\n",

               ost->frame_number, ost->st->index, in_picture->pts);

        return;

    }



    if (in_picture->pts == AV_NOPTS_VALUE)

        in_picture->pts = ost->sync_opts;

    ost->sync_opts = in_picture->pts;





    if (!ost->frame_number)

        ost->first_pts = in_picture->pts;



    av_init_packet(&pkt);

    pkt.data = NULL;

    pkt.size = 0;



    if (ost->frame_number >= ost->max_frames)

        return;



    if (enc->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) &&

        ost->top_field_first >= 0)

        in_picture->top_field_first = !!ost->top_field_first;



    in_picture->quality = enc->global_quality;

    in_picture->pict_type = 0;

    if (ost->forced_kf_index < ost->forced_kf_count &&

        in_picture->pts >= ost->forced_kf_pts[ost->forced_kf_index]) {

        in_picture->pict_type = AV_PICTURE_TYPE_I;

        ost->forced_kf_index++;

    }



    ost->frames_encoded++;



    ret = avcodec_send_frame(enc, in_picture);

    if (ret < 0)

        goto error;



    







    ost->frame_number++;



    while (1) {

        ret = avcodec_receive_packet(enc, &pkt);

        if (ret == AVERROR(EAGAIN))

            break;

        if (ret < 0)

            goto error;



        av_packet_rescale_ts(&pkt, enc->time_base, ost->st->time_base);

        output_packet(s, &pkt, ost);

        *frame_size = pkt.size;



        

        if (ost->logfile && enc->stats_out) {

            fprintf(ost->logfile, "%s", enc->stats_out);

        }



        ost->sync_opts++;

    }



    return;

error:

    av_assert0(ret != AVERROR(EAGAIN) && ret != AVERROR_EOF);

    av_log(NULL, AV_LOG_FATAL, "Video encoding failed\n");

    exit_program(1);

}

static void FUNC_0(AVFormatContext *VAR_0,

                         OutputStream *VAR_1,

                         AVFrame *VAR_2,

                         int *VAR_3)

{

    int VAR_4, VAR_5;

    AVPacket pkt;

    AVCodecContext *enc = VAR_1->enc_ctx;



    *VAR_3 = 0;



    VAR_5 = video_sync_method;

    if (VAR_5 == VSYNC_AUTO)

        VAR_5 = (VAR_0->oformat->flags & AVFMT_NOTIMESTAMPS) ? VSYNC_PASSTHROUGH :

                            (VAR_0->oformat->flags & AVFMT_VARIABLE_FPS) ? VSYNC_VFR : VSYNC_CFR;

    if (VAR_5 != VSYNC_PASSTHROUGH &&

        VAR_1->frame_number &&

        VAR_2->pts != AV_NOPTS_VALUE &&

        VAR_2->pts < VAR_1->sync_opts) {

        nb_frames_drop++;

        av_log(NULL, AV_LOG_WARNING,

               "*** dropping frame %d from stream %d at ts %"PRId64"\n",

               VAR_1->frame_number, VAR_1->st->index, VAR_2->pts);

        return;

    }



    if (VAR_2->pts == AV_NOPTS_VALUE)

        VAR_2->pts = VAR_1->sync_opts;

    VAR_1->sync_opts = VAR_2->pts;





    if (!VAR_1->frame_number)

        VAR_1->first_pts = VAR_2->pts;



    av_init_packet(&pkt);

    pkt.data = NULL;

    pkt.size = 0;



    if (VAR_1->frame_number >= VAR_1->max_frames)

        return;



    if (enc->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) &&

        VAR_1->top_field_first >= 0)

        VAR_2->top_field_first = !!VAR_1->top_field_first;



    VAR_2->quality = enc->global_quality;

    VAR_2->pict_type = 0;

    if (VAR_1->forced_kf_index < VAR_1->forced_kf_count &&

        VAR_2->pts >= VAR_1->forced_kf_pts[VAR_1->forced_kf_index]) {

        VAR_2->pict_type = AV_PICTURE_TYPE_I;

        VAR_1->forced_kf_index++;

    }



    VAR_1->frames_encoded++;



    VAR_4 = avcodec_send_frame(enc, VAR_2);

    if (VAR_4 < 0)

        goto error;



    







    VAR_1->frame_number++;



    while (1) {

        VAR_4 = avcodec_receive_packet(enc, &pkt);

        if (VAR_4 == AVERROR(EAGAIN))

            break;

        if (VAR_4 < 0)

            goto error;



        av_packet_rescale_ts(&pkt, enc->time_base, VAR_1->st->time_base);

        output_packet(VAR_0, &pkt, VAR_1);

        *VAR_3 = pkt.size;



        

        if (VAR_1->logfile && enc->stats_out) {

            fprintf(VAR_1->logfile, "%VAR_0", enc->stats_out);

        }



        VAR_1->sync_opts++;

    }



    return;

error:

    av_assert0(VAR_4 != AVERROR(EAGAIN) && VAR_4 != AVERROR_EOF);

    av_log(NULL, AV_LOG_FATAL, "Video encoding failed\n");

    exit_program(1);

}

static void FUNC_0(AVFormatContext *VAR_0,
OutputStream *VAR_1,
AVFrame *VAR_2,
int *VAR_3)
{ int VAR_4, VAR_5; AVPacket pkt; AVCodecContext *enc = VAR_1->enc_ctx; *VAR_3 = 0; VAR_5 = video_sync_method; if (VAR_5 == VSYNC_AUTO)
VAR_5 = (VAR_0->oformat->flags & AVFMT_NOTIMESTAMPS) ? VSYNC_PASSTHROUGH :
(VAR_0->oformat->flags & AVFMT_VARIABLE_FPS) ? VSYNC_VFR : VSYNC_CFR; if (VAR_5 != VSYNC_PASSTHROUGH &&
VAR_1->frame_number &&
VAR_2->pts != AV_NOPTS_VALUE &&
VAR_2->pts < VAR_1->sync_opts) { nb_frames_drop++; av_log(NULL, AV_LOG_WARNING,
"*** dropping frame %d from stream %d at ts %"PRId64"\n",
VAR_1->frame_number, VAR_1->st->index, VAR_2->pts); return; } if (VAR_2->pts == AV_NOPTS_VALUE)
VAR_2->pts = VAR_1->sync_opts; VAR_1->sync_opts = VAR_2->pts; if (!VAR_1->frame_number)
VAR_1->first_pts = VAR_2->pts; av_init_packet(&pkt); pkt.data = NULL; pkt.size = 0; if (VAR_1->frame_number >= VAR_1->max_frames)
return; if (enc->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) &&
VAR_1->top_field_first >= 0)
VAR_2->top_field_first = !!VAR_1->top_field_first; VAR_2->quality = enc->global_quality; VAR_2->pict_type = 0; if (VAR_1->forced_kf_index < VAR_1->forced_kf_count &&
VAR_2->pts >= VAR_1->forced_kf_pts[VAR_1->forced_kf_index]) { VAR_2->pict_type = AV_PICTURE_TYPE_I; VAR_1->forced_kf_index++; } VAR_1->frames_encoded++; VAR_4 = avcodec_send_frame(enc, VAR_2); if (VAR_4 < 0)
goto error; VAR_1->frame_number++; while (1) { VAR_4 = avcodec_receive_packet(enc, &pkt); if (VAR_4 == AVERROR(EAGAIN))
break; if (VAR_4 < 0)
goto error; av_packet_rescale_ts(&pkt, enc->time_base, VAR_1->st->time_base); output_packet(VAR_0, &pkt, VAR_1); *VAR_3 = pkt.size; if (VAR_1->logfile && enc->stats_out) { fprintf(VAR_1->logfile, "%VAR_0", enc->stats_out); } VAR_1->sync_opts++; } return; error:
av_assert0(VAR_4 != AVERROR(EAGAIN) && VAR_4 != AVERROR_EOF); av_log(NULL, AV_LOG_FATAL, "Video encoding failed\n"); exit_program(1); }