|
|
@@ -323,6 +323,10 @@ int ff_request_frame(AVFilterLink *link) |
|
|
|
|
|
|
|
if (link->closed) |
|
|
|
return AVERROR_EOF; |
|
|
|
av_assert0(!link->frame_requested); |
|
|
|
link->frame_requested = 1; |
|
|
|
while (link->frame_requested) { |
|
|
|
/* TODO reindent */ |
|
|
|
if (link->srcpad->request_frame) |
|
|
|
ret = link->srcpad->request_frame(link); |
|
|
|
else if (link->src->inputs[0]) |
|
|
@@ -332,8 +336,15 @@ int ff_request_frame(AVFilterLink *link) |
|
|
|
link->partial_buf = NULL; |
|
|
|
ret = ff_filter_frame_framed(link, pbuf); |
|
|
|
} |
|
|
|
if (ret == AVERROR_EOF) |
|
|
|
link->closed = 1; |
|
|
|
if (ret < 0) { |
|
|
|
link->frame_requested = 0; |
|
|
|
if (ret == AVERROR_EOF) |
|
|
|
link->closed = 1; |
|
|
|
} else { |
|
|
|
av_assert0(!link->frame_requested || |
|
|
|
link->flags & FF_LINK_FLAG_REQUEST_LOOP); |
|
|
|
} |
|
|
|
} |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
@@ -702,6 +713,7 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame) |
|
|
|
|
|
|
|
pts = out->pts; |
|
|
|
ret = filter_frame(link, out); |
|
|
|
link->frame_requested = 0; |
|
|
|
ff_update_link_current_pts(link, pts); |
|
|
|
return ret; |
|
|
|
} |
|
|
@@ -713,6 +725,7 @@ static int ff_filter_frame_needs_framing(AVFilterLink *link, AVFrame *frame) |
|
|
|
int nb_channels = av_frame_get_channels(frame); |
|
|
|
int ret = 0; |
|
|
|
|
|
|
|
link->flags |= FF_LINK_FLAG_REQUEST_LOOP; |
|
|
|
/* Handle framing (min_samples, max_samples) */ |
|
|
|
while (insamples) { |
|
|
|
if (!pbuf) { |
|
|
|