else return -1;
}
+int avfilter_poll_frame(AVFilterLink *link)
+{
+ int i, min=INT_MAX;
+
+ if(link_spad(link).poll_frame)
+ return link_spad(link).poll_frame(link);
+ else
+ for (i=0; i<link->src->input_count; i++) {
+ if(!link->src->inputs[i])
+ return -1;
+ min = FFMIN(min, avfilter_poll_frame(link->src->inputs[i]));
+ }
+
+ return min;
+}
+
/* XXX: should we do the duplicating of the picture ref here, instead of
* forcing the source filter to do it? */
void avfilter_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
/* prepare to copy the picture if it has insufficient permissions */
if((link_dpad(link).min_perms & picref->perms) != link_dpad(link).min_perms ||
link_dpad(link).rej_perms & picref->perms) {
+ /*
av_log(link->dst, AV_LOG_INFO,
"frame copy needed (have perms %x, need %x, reject %x)\n",
picref->perms,
link_dpad(link).min_perms, link_dpad(link).rej_perms);
+ */
link->cur_pic = avfilter_default_get_video_buffer(link, link_dpad(link).min_perms);
link->srcpic = picref;
{
void (*end_frame)(AVFilterLink *);
+ if(!(end_frame = link_dpad(link).end_frame))
+ end_frame = avfilter_default_end_frame;
+
+ end_frame(link);
+
/* unreference the source picture if we're feeding the destination filter
* a copied version dues to permission issues */
if(link->srcpic) {
link->srcpic = NULL;
}
- if(!(end_frame = link_dpad(link).end_frame))
- end_frame = avfilter_default_end_frame;
-
- end_frame(link);
}
void avfilter_draw_slice(AVFilterLink *link, int y, int h)
if(link->srcpic) {
avcodec_get_chroma_sub_sample(link->format, &hsub, &vsub);
+ link->cur_pic->pts = link->srcpic->pts;
src[0] = link->srcpic-> data[0] + y * link->srcpic-> linesize[0];
dst[0] = link->cur_pic->data[0] + y * link->cur_pic->linesize[0];
for(i = 1; i < 4; i ++) {
link_dpad(link).draw_slice(link, y, h);
}
-AVFilter *avfilter_get_by_name(char *name)
+AVFilter *avfilter_get_by_name(const char *name)
{
struct FilterList *filt;
static int pad_count(const AVFilterPad *pads)
{
- AVFilterPad *p = (AVFilterPad *) pads;
int count;
- for(count = 0; p->name; count ++) p ++;
+ for(count = 0; pads->name; count ++) pads ++;
return count;
}
return filter->filter->name;
}
-AVFilterContext *avfilter_open(AVFilter *filter, char *inst_name)
+AVFilterContext *avfilter_open(AVFilter *filter, const char *inst_name)
{
AVFilterContext *ret;