On Sonntag, 24. April 2016 01:44:51 CEST Michael Niedermayer wrote: > On Tue, Apr 19, 2016 at 04:37:16PM +0200, Gerion Entrup wrote: > > On Dienstag, 19. April 2016 13:25:53 CEST Moritz Barsnick wrote: > > +static int request_frame(AVFilterLink *outlink) > > +{ > > + AVFilterContext *ctx = outlink->src; > > + SignatureContext *sc = ctx->priv; > > + int i, ret; > > + > > + for (i = 0; i < sc->nb_inputs; i++){ > > + ret = ff_request_frame(ctx->inputs[i]); > > + // TODO handle this in a better way? > > + // Problem is the following: > > + // Assuming two inputs, inputA with 50 frames, inputB with 100 > > frames > > + // simply returning ret when < 0 would result in not filtering > > inputB > > + // after 50 frames anymore, not wanted > > + // only returning ret at the end would result in only respecting > > the error > > + // values of the last input, please comment > > + if (ret < 0 && ret != AVERROR_EOF) > > + return ret; > > + } > > + return ret; > > +} > > i dont know what exactly you want to happen when the inputs mismatch > but handling it like other dualinput filters might be an option vf_decimate, vf_fieldmatch: a main input exists, that dominates vf_mergeplanes, vf_stack, f_streamselect: return value of ff_framesync_request_frame is used af_amerge, af_join: as soon as one inputstream end, the filter quits, other said, the first error is returned af_amix: AVERROR_EOF is catched and things happen, could be a possible solution, but is audio related af_ladspa: beside other things, with multiinput the return value of ff_request_frame is returned avf_concat, f_interleave: only values except AVERROR_EOF are handled, in some way similar like my current solution but without the <0 check
I see not an analog usecase with any of these filters. If the inputs mismatch absolutely nothing should happen. The filter (the algorithm) does not require inputs of same length. > > > [...] > > +static av_cold void uninit(AVFilterContext *ctx) > > +{ > > + SignatureContext *sic = ctx->priv; > > + StreamContext *sc, *sc2; > > + void* tmp; > > + FineSignature* finsig; > > + CourseSignature* cousig; > > + MatchingInfo match; > > + int i,j; > > + > > + //TODO export and especially lookup_signature can have a return value > > to show some error etc. > > + //How could this be handled in this function? > > why does it need to happen in uninit ? > EOF could be detected before uninit if it doesnt work here What would be another good place to call export and lookup? The process chart would be something like: [input1]-->[signature_computation with loop over all frames]-->[export]-. -->[lookup] [input2]-->[signature_computation with loop over all frames]-->[export]-` ATM signature_computation is done in filter_frame and export and lookup are in uninit. Gerion _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel