static int request_frame(AVFilterLink *outlink) { AVFilterContext *ctx = outlink->src; SelectContext *select = ctx->priv; AVFilterLink *inlink = outlink->src->inputs[0]; select->select = 0; if (av_fifo_size(select->pending_frames)) { AVFilterBufferRef *picref; av_fifo_generic_read(select->pending_frames, &picref, sizeof(picref), NULL); avfilter_start_frame(outlink, avfilter_ref_buffer(picref, ~0)); avfilter_draw_slice(outlink, 0, outlink->h, 1); avfilter_end_frame(outlink); avfilter_unref_buffer(picref); return 0; } while (!select->select) { int ret = avfilter_request_frame(inlink); if (ret < 0) return ret; } return 0; }
static int request_frame(AVFilterLink *outlink) { FifoContext *fifo = outlink->src->priv; BufPic *tmp; int ret; if (!fifo->root.next) { if ((ret = avfilter_request_frame(outlink->src->inputs[0]) < 0)) return ret; } /* by doing this, we give ownership of the reference to the next filter, * so we don't have to worry about dereferencing it ourselves. */ avfilter_start_frame(outlink, fifo->root.next->picref); avfilter_draw_slice (outlink, 0, outlink->h, 1); avfilter_end_frame (outlink); if (fifo->last == fifo->root.next) fifo->last = &fifo->root; tmp = fifo->root.next->next; av_free(fifo->root.next); fifo->root.next = tmp; return 0; }
static void start_frame(AVFilterLink *link, AVFilterPicRef *picref) { AspectContext *aspect = link->dst->priv; picref->pixel_aspect = aspect->aspect; avfilter_start_frame(link->dst->outputs[0], picref); }
static int request_frame(AVFilterLink *link) { BufferSourceContext *c = link->src->priv; AVFilterBufferRef *picref; if (!c->has_frame) { av_log(link->src, AV_LOG_ERROR, "request_frame() called with no available frame!\n"); return -1; } picref = avfilter_get_video_buffer(link, AV_PERM_WRITE, link->w, link->h); av_image_copy(picref->data, picref->linesize, c->frame.data, c->frame.linesize, picref->format, link->w, link->h); picref->pts = c->pts; picref->video->interlaced = c->frame.interlaced_frame; picref->video->top_field_first = c->frame.top_field_first; avfilter_start_frame(link, avfilter_ref_buffer(picref, ~0)); avfilter_draw_slice(link, 0, link->h, 1); avfilter_end_frame(link); avfilter_unref_buffer(picref); c->has_frame = 0; return 0; }
static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref) { AspectContext *aspect = link->dst->priv; picref->video->sample_aspect_ratio = aspect->ratio; avfilter_start_frame(link->dst->outputs[0], picref); }
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) { SetPTSContext *setpts = inlink->dst->priv; double d; AVFilterBufferRef *outpicref = avfilter_ref_buffer(inpicref, ~0); if (isnan(setpts->var_values[VAR_STARTPTS])) setpts->var_values[VAR_STARTPTS] = TS2D(inpicref->pts); setpts->var_values[VAR_INTERLACED] = inpicref->video->interlaced; setpts->var_values[VAR_PTS ] = TS2D(inpicref->pts); setpts->var_values[VAR_POS ] = inpicref->pos == -1 ? NAN : inpicref->pos; d = av_expr_eval(setpts->expr, setpts->var_values, NULL); outpicref->pts = D2TS(d); #ifdef DEBUG av_log(inlink->dst, AV_LOG_DEBUG, "n:%"PRId64" interlaced:%d pos:%"PRId64" pts:%"PRId64" t:%f -> pts:%"PRId64" t:%f\n", (int64_t)setpts->var_values[VAR_N], (int)setpts->var_values[VAR_INTERLACED], inpicref ->pos, inpicref ->pts, inpicref ->pts * av_q2d(inlink->time_base), outpicref->pts, outpicref->pts * av_q2d(inlink->time_base)); #endif setpts->var_values[VAR_N] += 1.0; setpts->var_values[VAR_PREV_INPTS ] = TS2D(inpicref ->pts); setpts->var_values[VAR_PREV_OUTPTS] = TS2D(outpicref->pts); avfilter_start_frame(inlink->dst->outputs[0], outpicref); }
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) { PixdescTestContext *priv = inlink->dst->priv; AVFilterLink *outlink = inlink->dst->outputs[0]; AVFilterBufferRef *outpicref; int i; outlink->out_buf = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h); outpicref = outlink->out_buf; avfilter_copy_buffer_ref_props(outpicref, picref); for (i = 0; i < 4; i++) { int h = outlink->h; h = i == 1 || i == 2 ? h>>priv->pix_desc->log2_chroma_h : h; if (outpicref->data[i]) { uint8_t *data = outpicref->data[i] + (outpicref->linesize[i] > 0 ? 0 : outpicref->linesize[i] * (h-1)); memset(data, 0, FFABS(outpicref->linesize[i]) * h); } } /* copy palette */ if (priv->pix_desc->flags & PIX_FMT_PAL) memcpy(outpicref->data[1], outpicref->data[1], 256*4); avfilter_start_frame(outlink, avfilter_ref_buffer(outpicref, ~0)); }
static int request_frame(AVFilterLink *link) { BufferSourceContext *c = link->src->priv; AVFilterBufferRef *picref; if (!c->has_frame) { av_log(link->src, AV_LOG_ERROR, "request_frame() called with no available frame!\n"); //return -1; } /* This picture will be needed unmodified later for decoding the next * frame */ picref = avfilter_get_video_buffer(link, AV_PERM_WRITE | AV_PERM_PRESERVE | AV_PERM_REUSE2, link->w, link->h); av_picture_copy((AVPicture *)&picref->data, (AVPicture *)&c->frame, picref->format, link->w, link->h); picref->pts = c->pts; picref->pixel_aspect = c->pixel_aspect; picref->interlaced = c->frame.interlaced_frame; picref->top_field_first = c->frame.top_field_first; avfilter_start_frame(link, avfilter_ref_buffer(picref, ~0)); avfilter_draw_slice(link, 0, link->h, 1); avfilter_end_frame(link); avfilter_unref_buffer(picref); c->has_frame = 0; return 0; }
static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref) { AVFilterBufferRef *outpicref = avfilter_ref_buffer(picref, ~0); link->dst->outputs[0]->out_buf = outpicref; avfilter_start_frame(link->dst->outputs[0], outpicref); }
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) { AVFilterContext *ctx = inlink->dst; int i; for (i = 0; i < ctx->output_count; i++) avfilter_start_frame(ctx->outputs[i], avfilter_ref_buffer(picref, ~AV_PERM_WRITE)); }
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) { AVFilterLink *outlink = inlink->dst->outputs[0]; outlink->out_buf = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h); outlink->out_buf->pts = picref->pts; avfilter_start_frame(outlink, avfilter_ref_buffer(outlink->out_buf, ~0)); }
static void start_frame(AVFilterLink *link, AVFilterBufferRef *inpicref) { AVFilterBufferRef *outpicref = avfilter_ref_buffer(inpicref, ~0); outpicref->data[1] = inpicref->data[2]; outpicref->data[2] = inpicref->data[1]; outpicref->linesize[1] = inpicref->linesize[2]; outpicref->linesize[2] = inpicref->linesize[1]; avfilter_start_frame(link->dst->outputs[0], outpicref); }
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) { AVFilterContext *ctx = inlink->dst; AVFilterLink *outlink = ctx->outputs[0]; AVFilterBufferRef *outpicref; outpicref = avfilter_ref_buffer(inpicref, ~0); outlink->out_buf = outpicref; avfilter_start_frame(outlink, outpicref); }
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) { SetFieldContext *setfield = inlink->dst->priv; AVFilterBufferRef *outpicref = avfilter_ref_buffer(inpicref, ~0); if (setfield->mode == MODE_PROG) { outpicref->video->interlaced = 0; } else if (setfield->mode != MODE_AUTO) { outpicref->video->interlaced = 1; outpicref->video->top_field_first = setfield->mode; } avfilter_start_frame(inlink->dst->outputs[0], outpicref); }
void avfilter_default_start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) { AVFilterLink *outlink = NULL; if (inlink->dst->output_count) outlink = inlink->dst->outputs[0]; if (outlink) { outlink->out_buf = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h); avfilter_copy_buffer_ref_props(outlink->out_buf, picref); avfilter_start_frame(outlink, avfilter_ref_buffer(outlink->out_buf, ~0)); } }
void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref) { AVFilterLink *out = NULL; if(link->dst->output_count) out = link->dst->outputs[0]; if(out) { out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE); out->outpic->pts = picref->pts; avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0)); } }
static int mpsrc_request_frame(AVFilterLink *link) { struct mpsrc_priv *c = link->src->priv; struct vf_instance *vf = c->vf; if (!vf->priv->in_buf) return AVERROR(EINVAL); avfilter_start_frame(link, avfilter_ref_buffer(vf->priv->in_buf, ~0)); avfilter_draw_slice(link, 0, link->h, 1); avfilter_end_frame(link); vf->priv->in_buf = NULL; return 0; }
static void start_frame(AVFilterLink *link, AVFilterPicRef *picref) { AVFilterLink *out = link->dst->outputs[0]; out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE, out->w, out->h); out->outpic->pts = picref->pts; if(picref->pixel_aspect.num == 0) { out->outpic->pixel_aspect = picref->pixel_aspect; } else { out->outpic->pixel_aspect.num = picref->pixel_aspect.den; out->outpic->pixel_aspect.den = picref->pixel_aspect.num; } avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0)); }
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) { AVFilterContext *ctx = inlink->dst; AVFilterLink *outlink = ctx->outputs[0]; AVFilterBufferRef *picref2 = picref; if (av_cmp_q(inlink->time_base, outlink->time_base)) { picref2 = avfilter_ref_buffer(picref, ~0); picref2->pts = av_rescale_q(picref->pts, inlink->time_base, outlink->time_base); av_log(ctx, AV_LOG_DEBUG, "tb:%d/%d pts:%"PRId64" -> tb:%d/%d pts:%"PRId64"\n", inlink ->time_base.num, inlink ->time_base.den, picref ->pts, outlink->time_base.num, outlink->time_base.den, picref2->pts); avfilter_unref_buffer(picref); } avfilter_start_frame(outlink, picref2); }
static int source_request_frame(AVFilterLink *outlink) { Frei0rContext *frei0r = outlink->src->priv; AVFilterBufferRef *picref = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h); picref->video->pixel_aspect = (AVRational) {1, 1}; picref->pts = frei0r->pts++; picref->pos = -1; avfilter_start_frame(outlink, avfilter_ref_buffer(picref, ~0)); frei0r->update(frei0r->instance, av_rescale_q(picref->pts, frei0r->time_base, (AVRational){1,1000}), NULL, (uint32_t *)picref->data[0]); avfilter_draw_slice(outlink, 0, outlink->h, 1); avfilter_end_frame(outlink); avfilter_unref_buffer(picref); return 0; }
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) { AVFilterLink *outlink = inlink->dst->outputs[0]; outlink->out_buf = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h); outlink->out_buf->pts = picref->pts; if (picref->video->pixel_aspect.num == 0) { outlink->out_buf->video->pixel_aspect = picref->video->pixel_aspect; } else { outlink->out_buf->video->pixel_aspect.num = picref->video->pixel_aspect.den; outlink->out_buf->video->pixel_aspect.den = picref->video->pixel_aspect.num; } avfilter_start_frame(outlink, avfilter_ref_buffer(outlink->out_buf, ~0)); }
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) { AVFilterLink *outlink = inlink->dst->outputs[0]; AVFilterBufferRef *outpicref; if (inpicref->perms & AV_PERM_PRESERVE) { outpicref = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h); avfilter_copy_buffer_ref_props(outpicref, inpicref); outpicref->video->w = outlink->w; outpicref->video->h = outlink->h; } else outpicref = inpicref; outlink->out_buf = outpicref; avfilter_start_frame(outlink, avfilter_ref_buffer(outpicref, ~0)); }
void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref) { AVFilterLink *out = NULL; if(link->dst->output_count) out = link->dst->outputs[0]; if(out) { out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE, out->w, out->h); out->outpic->pts = picref->pts; out->outpic->pos = picref->pos; out->outpic->pixel_aspect = picref->pixel_aspect; out->outpic->interlaced = picref->interlaced; out->outpic->top_field_first = picref->top_field_first; avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0)); } }
static int color_request_frame(AVFilterLink *link) { ColorContext *color = link->src->priv; AVFilterBufferRef *picref = avfilter_get_video_buffer(link, AV_PERM_WRITE, color->w, color->h); picref->video->pixel_aspect = (AVRational) {1, 1}; picref->pts = av_rescale_q(color->pts++, color->time_base, AV_TIME_BASE_Q); picref->pos = 0; avfilter_start_frame(link, avfilter_ref_buffer(picref, ~0)); ff_draw_rectangle(picref->data, picref->linesize, color->line, color->line_step, color->hsub, color->vsub, 0, 0, color->w, color->h); avfilter_draw_slice(link, 0, color->h, 1); avfilter_end_frame(link); avfilter_unref_buffer(picref); return 0; }
static int request_frame(AVFilterLink *link) { BufferSourceContext *c = link->src->priv; if (!c->picref) { av_log(link->src, AV_LOG_WARNING, "request_frame() called with no available frame!\n"); return AVERROR(EINVAL); } avfilter_start_frame(link, avfilter_ref_buffer(c->picref, ~0)); avfilter_draw_slice(link, 0, link->h, 1); avfilter_end_frame(link); avfilter_unref_buffer(c->picref); c->picref = NULL; return 0; }
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) { SelectContext *select = inlink->dst->priv; select->select = select_frame(inlink->dst, picref); if (select->select) { /* frame was requested through poll_frame */ if (select->cache_frames) { if (!av_fifo_space(select->pending_frames)) av_log(inlink->dst, AV_LOG_ERROR, "Buffering limit reached, cannot cache more frames\n"); else av_fifo_generic_write(select->pending_frames, &picref, sizeof(picref), NULL); return; } avfilter_start_frame(inlink->dst->outputs[0], avfilter_ref_buffer(picref, ~0)); } }
static int request_frame(AVFilterLink *link) { BufferSourceContext *c = link->src->priv; AVFilterBufferRef *buf; if (!av_fifo_size(c->fifo)) { av_log(link->src, AV_LOG_WARNING, "request_frame() called with no available frame!\n"); return AVERROR(EINVAL); } av_fifo_generic_read(c->fifo, &buf, sizeof(buf), NULL); avfilter_start_frame(link, avfilter_ref_buffer(buf, ~0)); avfilter_draw_slice(link, 0, link->h, 1); avfilter_end_frame(link); avfilter_unref_buffer(buf); return 0; }
static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) { AVFilterBufferRef *outpicref = avfilter_ref_buffer(inpicref, ~0); AVFilterContext *ctx = inlink->dst; OverlayContext *over = ctx->priv; inlink->dst->outputs[0]->out_buf = outpicref; if (!over->overpicref || over->overpicref->pts < outpicref->pts) { AVFilterBufferRef *old = over->overpicref; over->overpicref = NULL; avfilter_request_frame(ctx->inputs[OVERLAY]); if (over->overpicref) { if (old) avfilter_unref_buffer(old); } else over->overpicref = old; } avfilter_start_frame(inlink->dst->outputs[0], outpicref); }
static int request_frame(AVFilterLink *link) { FPSContext *fps = link->src->priv; if (fps->videoend) return -1; if (!fps->has_frame) // support for filtering without poll_frame usage while(!fps->pic || fps->pic->pts < fps->pts) if(avfilter_request_frame(link->src->inputs[0])) return -1; fps->has_frame=0; avfilter_start_frame(link, avfilter_ref_pic(fps->pic, ~AV_PERM_WRITE)); avfilter_draw_slice (link, 0, fps->pic->h, 1); avfilter_end_frame (link); avfilter_unref_pic(fps->pic); fps->pic = NULL; fps->pts += fps->timebase; return 0; }
void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref) { avfilter_start_frame(link->dst->outputs[0], picref); }