[FFmpeg-devel] [PATCHv2] add signature filter for MPEG7 video signature
Gerion Entrup
gerion.entrup.ffdev at flump.de
Tue May 10 12:54:06 CEST 2016
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.
More information about the ffmpeg-devel
mailing list