#define VFLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
#define OFFSET(x) offsetof(LoopContext, x)
+static void check_size(AVFilterContext *ctx)
+{
+ LoopContext *s = ctx->priv;
+
+ if (!s->size)
+ av_log(ctx, AV_LOG_WARNING, "Number of %s to loop is not set!\n",
+ ctx->input_pads[0].type == AVMEDIA_TYPE_VIDEO ? "frames" : "samples");
+}
+
#if CONFIG_ALOOP_FILTER
static int aconfig_input(AVFilterLink *inlink)
if (!s->fifo || !s->left)
return AVERROR(ENOMEM);
+ check_size(ctx);
+
return 0;
}
if (!s->frames)
return AVERROR(ENOMEM);
+ check_size(ctx);
+
return 0;
}
FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink);
- if (!s->eof && (s->nb_frames < s->size || !s->loop)) {
+ if (!s->eof && (s->nb_frames < s->size || !s->loop || !s->size)) {
ret = ff_inlink_consume_frame(inlink, &frame);
if (ret < 0)
return ret;
}
if (!s->eof && ff_inlink_acknowledge_status(inlink, &status, &pts)) {
- if (status == AVERROR_EOF)
+ if (status == AVERROR_EOF) {
+ s->size = s->nb_frames;
s->eof = 1;
+ }
}
- if (s->eof && (s->loop == 0 || s->nb_frames < s->size)) {
+ if (s->eof && (!s->loop || !s->size)) {
ff_outlink_set_status(outlink, AVERROR_EOF, s->duration);
return 0;
}