1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-01-24 13:56:33 +02:00

Revert "avfilter/src_movie: switch to activate"

This reverts commit abc884bcc005c450a34e56cd1f4b8b6fa17ea768.

This patch was pushed without actual review.
An actual review would have revealed that the switch to activate
was not done correctly because the logic between request_frame()
and frame_wanted is not as direct with filters with multiple
outputs than with a single output.
This commit is contained in:
Nicolas George 2020-09-08 14:57:53 +02:00
parent ddba05afe4
commit d1f3d721df

View File

@ -44,7 +44,6 @@
#include "audio.h"
#include "avfilter.h"
#include "filters.h"
#include "formats.h"
#include "internal.h"
#include "video.h"
@ -98,6 +97,7 @@ static const AVOption movie_options[]= {
};
static int movie_config_output_props(AVFilterLink *outlink);
static int movie_request_frame(AVFilterLink *outlink);
static AVStream *find_stream(void *log, AVFormatContext *avf, const char *spec)
{
@ -309,6 +309,7 @@ static av_cold int movie_common_init(AVFilterContext *ctx)
if (!pad.name)
return AVERROR(ENOMEM);
pad.config_props = movie_config_output_props;
pad.request_frame = movie_request_frame;
if ((ret = ff_insert_outpad(ctx, i, &pad)) < 0) {
av_freep(&pad.name);
return ret;
@ -594,33 +595,17 @@ static int movie_push_frame(AVFilterContext *ctx, unsigned out_id)
return pkt_out_id == out_id;
}
static int activate(AVFilterContext *ctx)
static int movie_request_frame(AVFilterLink *outlink)
{
MovieContext *movie = ctx->priv;
int nb_eofs = 0;
AVFilterContext *ctx = outlink->src;
unsigned out_id = FF_OUTLINK_IDX(outlink);
int ret;
for (int i = 0; i < ctx->nb_outputs; i++) {
AVFilterLink *outlink = ctx->outputs[i];
nb_eofs += !!ff_outlink_get_status(outlink);
if (ff_outlink_frame_wanted(outlink)) {
int ret = movie_push_frame(ctx, i);
if (ret == AVERROR_EOF) {
ff_outlink_set_status(outlink, AVERROR_EOF, movie->st[i].last_pts);
return 0;
} else if (ret) {
return FFMIN(ret, 0);
}
}
while (1) {
ret = movie_push_frame(ctx, out_id);
if (ret)
return FFMIN(ret, 0);
}
if (nb_eofs != ctx->nb_outputs) {
ff_filter_set_ready(ctx, 100);
return 0;
}
return FFERROR_NOT_READY;
}
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
@ -681,7 +666,6 @@ AVFilter ff_avsrc_movie = {
.inputs = NULL,
.outputs = NULL,
.activate = activate,
.flags = AVFILTER_FLAG_DYNAMIC_OUTPUTS,
.process_command = process_command
};
@ -703,7 +687,6 @@ AVFilter ff_avsrc_amovie = {
.inputs = NULL,
.outputs = NULL,
.activate = activate,
.priv_class = &amovie_class,
.flags = AVFILTER_FLAG_DYNAMIC_OUTPUTS,
.process_command = process_command,