On Wed, Feb 25, 2015 at 02:55:58PM +0000, Paul B Mahol wrote: > Signed-off-by: Paul B Mahol <one...@gmail.com> > --- > doc/filters.texi | 34 ++++++ > libavfilter/Makefile | 2 + > libavfilter/allfilters.c | 2 + > libavfilter/vf_neighbor.c | 289 > ++++++++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 327 insertions(+) > create mode 100644 libavfilter/vf_neighbor.c > > diff --git a/doc/filters.texi b/doc/filters.texi > index baef346..13ba797 100644 > --- a/doc/filters.texi > +++ b/doc/filters.texi > @@ -3728,6 +3728,23 @@ FFmpeg was configured with @code{--enable-opencl}. > Default value is 0. > > @end table > > +@section dilation > + > +Apply dilation effect to the video. > + > +This filter replaces the pixel by the local(3x3) maximum. > + > +It accepts the following parameters: > + > +@table @option > +@item threshold > +Allows to limit the maximum change, default is 65535. > + > +@item coordinates > +Flag which specifies the pixel to refer to. Default is 255 ie. all eight > +pixels are used. > +@end table > + > @section drawbox > > Draw a colored box on the input image. > @@ -4437,6 +4454,23 @@ value. > > @end table > > +@section erosion > + > +Apply erosion effect to the video. > + > +This filter replaces the pixel by the local(3x3) minimum. > + > +It accepts the following parameters: > + > +@table @option > +@item threshold > +Allows to limit the maximum change, default is 65535. > + > +@item coordinates > +Flag which specifies the pixel to refer to. Default is 255 ie. all eight > +pixels are used. > +@end table > + [...] > +static int config_input(AVFilterLink *inlink) > +{ > + EDContext *s = inlink->dst->priv; > + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format); > + int ret; > + > + if ((ret = av_image_fill_linesizes(s->linesize, inlink->format, > inlink->w)) < 0) > + return ret; > + > + s->planeheight[1] = s->planeheight[2] = FF_CEIL_RSHIFT(inlink->h, > desc->log2_chroma_h); > + s->planeheight[0] = s->planeheight[3] = inlink->h; > + > + s->nb_planes = av_pix_fmt_count_planes(inlink->format);
> + s->buffer = av_malloc(3 * (s->linesize[0] + 32)); av_malloc_array() relevant? > + if (!s->buffer) > + return AVERROR(ENOMEM); > + > + return 0; > +} > + > +static inline void line_copy8(uint8_t *line, const uint8_t *srcp, int width, > int mergin) > +{ > + memcpy(line, srcp, width); > + > + for (int i = mergin; i > 0; i--) { int should be declared out of the scope > + line[-i] = line[i]; > + line[width - 1 + i] = line[width - 1 - i]; > + } > +} > + [...] No other comment from me. May I ask if there was a special use case of this or that's just because the effect were neat and simple to implement? -- Clément B.
pgp55nEF6uOeE.pgp
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel