Re: [FFmpeg-devel] [PATCH v3] lavf/vf_find_rect: add the dual input support function

2019-06-28 Thread Michael Niedermayer
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

2019-06-28 Thread Paul B Mahol
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

2019-06-28 Thread Limin Wang
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

2019-06-28 Thread Michael Niedermayer
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

2019-06-27 Thread lance . lmwang
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 ||
+