+ }
+ if (s->status == 2) {
+ frame = ff_inlink_peek_frame(inlink, ff_inlink_queued_frames(inlink) - 1);
+ pts = av_rescale_q(frame->pts, inlink->time_base, AV_TIME_BASE_Q);
+ if (!(pts - s->first_pts < s->buffer && (av_gettime() - s->cue) < 0))
+ s->status++;
+ }
+ if (s->status == 3) {
+ int64_t diff;
+ while ((diff = (av_gettime() - s->cue)) < 0)
+ av_usleep(av_clip(-diff / 2, 100, 1000000));
+ s->status++;
+ }
+ if (s->status == 4) {
+ int ret = ff_inlink_consume_frame(inlink, &frame);
+ if (ret < 0)
+ return ret;
+ return ff_filter_frame(outlink, frame);
+ }