On Dienstag, 3. Mai 2016 19:01:51 CEST Gerion Entrup wrote: > 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 > Ping.
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel