static int source_request_frame(AVFilterLink *outlink) { Frei0rContext *s = outlink->src->priv; AVFrame *frame = ff_get_video_buffer(outlink, outlink->w, outlink->h); if (!frame) return AVERROR(ENOMEM); frame->sample_aspect_ratio = (AVRational) {1, 1}; frame->pts = s->pts++; s->update(s->instance, av_rescale_q(frame->pts, s->time_base, (AVRational){1,1000}), NULL, (uint32_t *)frame->data[0]); return ff_filter_frame(outlink, frame); }
static int filter_frame(AVFilterLink *inlink, AVFrame *in) { Frei0rContext *s = inlink->dst->priv; AVFilterLink *outlink = inlink->dst->outputs[0]; AVFrame *out; out = ff_get_video_buffer(outlink, outlink->w, outlink->h); if (!out) { av_frame_free(&in); return AVERROR(ENOMEM); } av_frame_copy_props(out, in); s->update(s->instance, in->pts * av_q2d(inlink->time_base) * 1000, (const uint32_t *)in->data[0], (uint32_t *)out->data[0]); av_frame_free(&in); return ff_filter_frame(outlink, out); }