Re: [FFmpeg-devel] [PATCH v3] lavf/vf_find_rect: add the dual input support function
On Fri, Jun 28, 2019 at 05:23:22PM +0200, Paul B Mahol wrote: > On 6/28/19, Limin Wang wrote: > > On Fri, Jun 28, 2019 at 09:49:27AM +0200, Michael Niedermayer wrote: > >> On Thu, Jun 27, 2019 at 05:40:31PM +0800, lance.lmw...@gmail.com wrote: > >> > From: Limin Wang > >> > > >> > Please using the below command for the testing: > >> > ./ffmpeg -i input.ts -i ref.png -filter_complex > >> > find_rect,cover_rect=cover.jpg:mode=cover output.ts > >> > > >> > I have updated the help document for the function change. > >> > > >> > Reviewed-by: Moritz Barsnick > >> > Signed-off-by: Limin Wang > >> > --- > >> > doc/filters.texi | 12 +-- > >> > libavfilter/version.h | 2 +- > >> > libavfilter/vf_find_rect.c | 173 +++-- > >> > 3 files changed, 118 insertions(+), 69 deletions(-) > >> > > >> > diff --git a/doc/filters.texi b/doc/filters.texi > >> > index 2d9af46a6b..92e1dee07e 100644 > >> > --- a/doc/filters.texi > >> > +++ b/doc/filters.texi > >> > @@ -10156,12 +10156,14 @@ Set color for pixels in fixed mode. Default is > >> > @var{black}. > >> > > >> > Find a rectangular object > >> > > >> > +This filter takes in two video inputs, the first input is considered > >> > +the "main" source and is passed unchanged to the output. The "second" > >> > +input is used as a rectangular object for finding. Now the "second" > >> > +input will be auto converted to gray8 format. > >> > + > >> > It accepts the following options: > >> > > >> > @table @option > >> > -@item object > >> > -Filepath of the object image, needs to be in gray8. > >> > - > >> > @item threshold > >> > Detection threshold, default is 0.5. > >> > > >> > @@ -10178,7 +10180,7 @@ Specifies the rectangle in which to search. > >> > @item > >> > Cover a rectangular object by the supplied image of a given video using > >> > @command{ffmpeg}: > >> > @example > >> > -ffmpeg -i file.ts -vf > >> > find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv > >> > +ffmpeg -i file.ts -i newref.pgm -filter_complex > >> > find_rect,cover_rect=cover.jpg:mode=cover new.mkv > >> > >> It will be needed to support the old syntax until the next 2 major API > >> bumps > >> at minimum. > > I haven't find a good way to support the old the syntax. With the dual > > input, the input has been configured with two input(main and > > find_object), so it'll report error if with old syntax. > > > > Or how about to create a new video filter like find_logo and keep the > > find_rect > > filter untouch as I plan to improve it for logo detection. > > Unacceptable. that would have been the easy option > > Is this filter actually useful? If not, just remove it. there was a company that wanted it. In fact they would have paid me if i didnt make it open source ... So this must be important to at least them and their competitor. If you think that we have too many filters then we could start a broader discussion/thread maybe about combining or factoring things. But we probably should only go there if theres a broad consensus. I dont want to step on anyones toes ... Thanks [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Rewriting code that is poorly written but fully understood is good. Rewriting code that one doesnt understand is a sign that one is less smart then the original author, trying to rewrite it will not make it better. signature.asc Description: PGP signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
Re: [FFmpeg-devel] [PATCH v3] lavf/vf_find_rect: add the dual input support function
On 6/28/19, Limin Wang wrote: > On Fri, Jun 28, 2019 at 09:49:27AM +0200, Michael Niedermayer wrote: >> On Thu, Jun 27, 2019 at 05:40:31PM +0800, lance.lmw...@gmail.com wrote: >> > From: Limin Wang >> > >> > Please using the below command for the testing: >> > ./ffmpeg -i input.ts -i ref.png -filter_complex >> > find_rect,cover_rect=cover.jpg:mode=cover output.ts >> > >> > I have updated the help document for the function change. >> > >> > Reviewed-by: Moritz Barsnick >> > Signed-off-by: Limin Wang >> > --- >> > doc/filters.texi | 12 +-- >> > libavfilter/version.h | 2 +- >> > libavfilter/vf_find_rect.c | 173 +++-- >> > 3 files changed, 118 insertions(+), 69 deletions(-) >> > >> > diff --git a/doc/filters.texi b/doc/filters.texi >> > index 2d9af46a6b..92e1dee07e 100644 >> > --- a/doc/filters.texi >> > +++ b/doc/filters.texi >> > @@ -10156,12 +10156,14 @@ Set color for pixels in fixed mode. Default is >> > @var{black}. >> > >> > Find a rectangular object >> > >> > +This filter takes in two video inputs, the first input is considered >> > +the "main" source and is passed unchanged to the output. The "second" >> > +input is used as a rectangular object for finding. Now the "second" >> > +input will be auto converted to gray8 format. >> > + >> > It accepts the following options: >> > >> > @table @option >> > -@item object >> > -Filepath of the object image, needs to be in gray8. >> > - >> > @item threshold >> > Detection threshold, default is 0.5. >> > >> > @@ -10178,7 +10180,7 @@ Specifies the rectangle in which to search. >> > @item >> > Cover a rectangular object by the supplied image of a given video using >> > @command{ffmpeg}: >> > @example >> > -ffmpeg -i file.ts -vf >> > find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv >> > +ffmpeg -i file.ts -i newref.pgm -filter_complex >> > find_rect,cover_rect=cover.jpg:mode=cover new.mkv >> >> It will be needed to support the old syntax until the next 2 major API >> bumps >> at minimum. > I haven't find a good way to support the old the syntax. With the dual > input, the input has been configured with two input(main and > find_object), so it'll report error if with old syntax. > > Or how about to create a new video filter like find_logo and keep the > find_rect > filter untouch as I plan to improve it for logo detection. Unacceptable. Is this filter actually useful? If not, just remove it. > >> That is first it would need to be deprecated and then we need 2 major API >> bumps >> before it can be removed. >> Keep in mind users both of the command line tools as well as the API would >> need to have their scripts / software updated/changed for this. >> also to make the transition easy both variants should be supported at the >> samw time so people can switch to the new syntax "immedeatly" and do not >> need to time it with a specific version bump >> Yes i know thats a bit annoying ... >> >> Theres of course no need to support newly added features with the old >> syntax >> >> thanks >> >> [...] >> -- >> Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB >> >> If a bugfix only changes things apparently unrelated to the bug with no >> further explanation, that is a good sign that the bugfix is wrong. > > > >> ___ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> To unsubscribe, visit link above, or email >> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". > > ___ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
Re: [FFmpeg-devel] [PATCH v3] lavf/vf_find_rect: add the dual input support function
On Fri, Jun 28, 2019 at 09:49:27AM +0200, Michael Niedermayer wrote: > On Thu, Jun 27, 2019 at 05:40:31PM +0800, lance.lmw...@gmail.com wrote: > > From: Limin Wang > > > > Please using the below command for the testing: > > ./ffmpeg -i input.ts -i ref.png -filter_complex > > find_rect,cover_rect=cover.jpg:mode=cover output.ts > > > > I have updated the help document for the function change. > > > > Reviewed-by: Moritz Barsnick > > Signed-off-by: Limin Wang > > --- > > doc/filters.texi | 12 +-- > > libavfilter/version.h | 2 +- > > libavfilter/vf_find_rect.c | 173 +++-- > > 3 files changed, 118 insertions(+), 69 deletions(-) > > > > diff --git a/doc/filters.texi b/doc/filters.texi > > index 2d9af46a6b..92e1dee07e 100644 > > --- a/doc/filters.texi > > +++ b/doc/filters.texi > > @@ -10156,12 +10156,14 @@ Set color for pixels in fixed mode. Default is > > @var{black}. > > > > Find a rectangular object > > > > +This filter takes in two video inputs, the first input is considered > > +the "main" source and is passed unchanged to the output. The "second" > > +input is used as a rectangular object for finding. Now the "second" > > +input will be auto converted to gray8 format. > > + > > It accepts the following options: > > > > @table @option > > -@item object > > -Filepath of the object image, needs to be in gray8. > > - > > @item threshold > > Detection threshold, default is 0.5. > > > > @@ -10178,7 +10180,7 @@ Specifies the rectangle in which to search. > > @item > > Cover a rectangular object by the supplied image of a given video using > > @command{ffmpeg}: > > @example > > -ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover > > new.mkv > > +ffmpeg -i file.ts -i newref.pgm -filter_complex > > find_rect,cover_rect=cover.jpg:mode=cover new.mkv > > It will be needed to support the old syntax until the next 2 major API bumps > at minimum. I haven't find a good way to support the old the syntax. With the dual input, the input has been configured with two input(main and find_object), so it'll report error if with old syntax. Or how about to create a new video filter like find_logo and keep the find_rect filter untouch as I plan to improve it for logo detection. > That is first it would need to be deprecated and then we need 2 major API > bumps > before it can be removed. > Keep in mind users both of the command line tools as well as the API would > need to have their scripts / software updated/changed for this. > also to make the transition easy both variants should be supported at the > samw time so people can switch to the new syntax "immedeatly" and do not > need to time it with a specific version bump > Yes i know thats a bit annoying ... > > Theres of course no need to support newly added features with the old syntax > > thanks > > [...] > -- > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB > > If a bugfix only changes things apparently unrelated to the bug with no > further explanation, that is a good sign that the bugfix is wrong. > ___ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
Re: [FFmpeg-devel] [PATCH v3] lavf/vf_find_rect: add the dual input support function
On Thu, Jun 27, 2019 at 05:40:31PM +0800, lance.lmw...@gmail.com wrote: > From: Limin Wang > > Please using the below command for the testing: > ./ffmpeg -i input.ts -i ref.png -filter_complex > find_rect,cover_rect=cover.jpg:mode=cover output.ts > > I have updated the help document for the function change. > > Reviewed-by: Moritz Barsnick > Signed-off-by: Limin Wang > --- > doc/filters.texi | 12 +-- > libavfilter/version.h | 2 +- > libavfilter/vf_find_rect.c | 173 +++-- > 3 files changed, 118 insertions(+), 69 deletions(-) > > diff --git a/doc/filters.texi b/doc/filters.texi > index 2d9af46a6b..92e1dee07e 100644 > --- a/doc/filters.texi > +++ b/doc/filters.texi > @@ -10156,12 +10156,14 @@ Set color for pixels in fixed mode. Default is > @var{black}. > > Find a rectangular object > > +This filter takes in two video inputs, the first input is considered > +the "main" source and is passed unchanged to the output. The "second" > +input is used as a rectangular object for finding. Now the "second" > +input will be auto converted to gray8 format. > + > It accepts the following options: > > @table @option > -@item object > -Filepath of the object image, needs to be in gray8. > - > @item threshold > Detection threshold, default is 0.5. > > @@ -10178,7 +10180,7 @@ Specifies the rectangle in which to search. > @item > Cover a rectangular object by the supplied image of a given video using > @command{ffmpeg}: > @example > -ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover > new.mkv > +ffmpeg -i file.ts -i newref.pgm -filter_complex > find_rect,cover_rect=cover.jpg:mode=cover new.mkv It will be needed to support the old syntax until the next 2 major API bumps at minimum. That is first it would need to be deprecated and then we need 2 major API bumps before it can be removed. Keep in mind users both of the command line tools as well as the API would need to have their scripts / software updated/changed for this. also to make the transition easy both variants should be supported at the samw time so people can switch to the new syntax "immedeatly" and do not need to time it with a specific version bump Yes i know thats a bit annoying ... Theres of course no need to support newly added features with the old syntax thanks [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB If a bugfix only changes things apparently unrelated to the bug with no further explanation, that is a good sign that the bugfix is wrong. signature.asc Description: PGP signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-devel] [PATCH v3] lavf/vf_find_rect: add the dual input support function
From: Limin Wang Please using the below command for the testing: ./ffmpeg -i input.ts -i ref.png -filter_complex find_rect,cover_rect=cover.jpg:mode=cover output.ts I have updated the help document for the function change. Reviewed-by: Moritz Barsnick Signed-off-by: Limin Wang --- doc/filters.texi | 12 +-- libavfilter/version.h | 2 +- libavfilter/vf_find_rect.c | 173 +++-- 3 files changed, 118 insertions(+), 69 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 2d9af46a6b..92e1dee07e 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -10156,12 +10156,14 @@ Set color for pixels in fixed mode. Default is @var{black}. Find a rectangular object +This filter takes in two video inputs, the first input is considered +the "main" source and is passed unchanged to the output. The "second" +input is used as a rectangular object for finding. Now the "second" +input will be auto converted to gray8 format. + It accepts the following options: @table @option -@item object -Filepath of the object image, needs to be in gray8. - @item threshold Detection threshold, default is 0.5. @@ -10178,7 +10180,7 @@ Specifies the rectangle in which to search. @item Cover a rectangular object by the supplied image of a given video using @command{ffmpeg}: @example -ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv +ffmpeg -i file.ts -i newref.pgm -filter_complex find_rect,cover_rect=cover.jpg:mode=cover new.mkv @end example @end itemize @@ -10212,7 +10214,7 @@ Default value is @var{blur}. @item Cover a rectangular object by the supplied image of a given video using @command{ffmpeg}: @example -ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv +ffmpeg -i file.ts -i newref.pgm -filter_complex find_rect,cover_rect=cover.jpg:mode=cover new.mkv @end example @end itemize diff --git a/libavfilter/version.h b/libavfilter/version.h index 91a5a1604e..c0a4b969f1 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -31,7 +31,7 @@ #define LIBAVFILTER_VERSION_MAJOR 7 #define LIBAVFILTER_VERSION_MINOR 55 -#define LIBAVFILTER_VERSION_MICRO 100 +#define LIBAVFILTER_VERSION_MICRO 101 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ diff --git a/libavfilter/vf_find_rect.c b/libavfilter/vf_find_rect.c index d7e6579af7..91757b666d 100644 --- a/libavfilter/vf_find_rect.c +++ b/libavfilter/vf_find_rect.c @@ -18,13 +18,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -/** - * @todo switch to dualinput - */ - #include "libavutil/avassert.h" #include "libavutil/imgutils.h" #include "libavutil/opt.h" +#include "framesync.h" #include "internal.h" #include "lavfutils.h" @@ -36,9 +33,9 @@ typedef struct FOCContext { float threshold; int mipmaps; int xmin, ymin, xmax, ymax; -char *obj_filename; int last_x, last_y; -AVFrame *obj_frame; +FFFrameSync fs; + AVFrame *needle_frame[MAX_MIPMAPS]; AVFrame *haystack_frame[MAX_MIPMAPS]; } FOCContext; @@ -46,7 +43,6 @@ typedef struct FOCContext { #define OFFSET(x) offsetof(FOCContext, x) #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM static const AVOption find_rect_options[] = { -{ "object", "object bitmap filename", OFFSET(obj_filename), AV_OPT_TYPE_STRING, {.str = NULL}, .flags = FLAGS }, { "threshold", "set threshold", OFFSET(threshold), AV_OPT_TYPE_FLOAT, {.dbl = 0.5}, 0, 1.0, FLAGS }, { "mipmaps", "set mipmaps", OFFSET(mipmaps), AV_OPT_TYPE_INT, {.i64 = 3}, 1, MAX_MIPMAPS, FLAGS }, { "xmin", "", OFFSET(xmin), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS }, @@ -56,17 +52,32 @@ static const AVOption find_rect_options[] = { { NULL } }; -AVFILTER_DEFINE_CLASS(find_rect); +FRAMESYNC_DEFINE_CLASS(find_rect, FOCContext, fs); static int query_formats(AVFilterContext *ctx) { -static const enum AVPixelFormat pix_fmts[] = { -AV_PIX_FMT_YUV420P, -AV_PIX_FMT_YUVJ420P, -AV_PIX_FMT_NONE -}; +static const enum AVPixelFormat in_fmts[]= {AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE}; +static const enum AVPixelFormat obj_fmts[] = {AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE}; +static const enum AVPixelFormat out_fmts[] = {AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE}; +int ret; +AVFilterFormats *in= ff_make_format_list(in_fmts); +AVFilterFormats *obj = ff_make_format_list(obj_fmts); +AVFilterFormats *out = ff_make_format_list(out_fmts); + +if (!in || !obj || !out) { +av_freep(); +av_freep(); +av_freep(); +return AVERROR(ENOMEM); +} + +if ((ret = ff_formats_ref(in , >inputs[0]->out_formats)) < 0 || +(ret = ff_formats_ref(obj , >inputs[1]->out_formats)) < 0 || +