|
|
|
@@ -159,42 +159,6 @@ AVFilterBufferRef *ff_get_video_buffer(AVFilterLink *link, int perms, int w, int |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
// for filters that support (but don't require) outpic==inpic |
|
|
|
int ff_inplace_start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) |
|
|
|
{ |
|
|
|
AVFilterLink *outlink = inlink->dst->outputs[0]; |
|
|
|
AVFilterBufferRef *outpicref = NULL, *for_next_filter; |
|
|
|
int ret = 0; |
|
|
|
|
|
|
|
if (inpicref->perms & AV_PERM_WRITE) { |
|
|
|
outpicref = avfilter_ref_buffer(inpicref, ~0); |
|
|
|
if (!outpicref) |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
} else { |
|
|
|
outpicref = ff_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h); |
|
|
|
if (!outpicref) |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
avfilter_copy_buffer_ref_props(outpicref, inpicref); |
|
|
|
outpicref->video->w = outlink->w; |
|
|
|
outpicref->video->h = outlink->h; |
|
|
|
} |
|
|
|
|
|
|
|
for_next_filter = avfilter_ref_buffer(outpicref, ~0); |
|
|
|
if (for_next_filter) |
|
|
|
ret = ff_start_frame(outlink, for_next_filter); |
|
|
|
else |
|
|
|
ret = AVERROR(ENOMEM); |
|
|
|
|
|
|
|
if (ret < 0) { |
|
|
|
avfilter_unref_bufferp(&outpicref); |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
outlink->out_buf = outpicref; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
static int default_start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) |
|
|
|
{ |
|
|
|
AVFilterLink *outlink = NULL; |
|
|
|
|