Re: [FFmpeg-devel] [PATCH v4] avfilter/avf_aphasemeter: Add out-of-phase and mono detection

2019-07-08 Thread Romane Lafon
Ok, thanks

Le ven. 5 juil. 2019 à 16:54, Devin Heitmueller 
a écrit :

> On Wed, Jul 3, 2019 at 9:34 AM Romane Lafon  wrote:
> >
> > I've added documentation for the extension of aphasemeter filter.
> > Also, I'm not sure that "phasing" is the right word to describe the
> > detection.
>
> In some commercial analyzers I've also seen audio phase presented
> using the term "lissajous" (after the name of the actual curve), but
> personally I prefer to refer to it as audio phase.
>
> Devin
>
> --
> Devin J. Heitmueller - Kernel Labs
> http://www.kernellabs.com
> ___
> 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 v4] avfilter/avf_aphasemeter: Add out-of-phase and mono detection

2019-07-05 Thread Devin Heitmueller
On Wed, Jul 3, 2019 at 9:34 AM Romane Lafon  wrote:
>
> I've added documentation for the extension of aphasemeter filter.
> Also, I'm not sure that "phasing" is the right word to describe the
> detection.

In some commercial analyzers I've also seen audio phase presented
using the term "lissajous" (after the name of the actual curve), but
personally I prefer to refer to it as audio phase.

Devin

-- 
Devin J. Heitmueller - Kernel Labs
http://www.kernellabs.com
___
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 v4] avfilter/avf_aphasemeter: Add out-of-phase and mono detection

2019-07-05 Thread Michael Niedermayer
On Wed, Jul 03, 2019 at 03:33:46PM +0200, Romane Lafon wrote:
> I've added documentation for the extension of aphasemeter filter.
> Also, I'm not sure that "phasing" is the right word to describe the
> detection.

>  doc/filters.texi  |   32 ++
>  libavfilter/avf_aphasemeter.c |  127 
> --
>  2 files changed, 155 insertions(+), 4 deletions(-)
> d7ceb2e8f553300c6ba9058bd292244bc072173f  
> 0001-avfilter-avf_aphasemeter-Add-out-of-phase-and_v4.patch
> From 1e356929e878a2081add102b77a9560647232ef8 Mon Sep 17 00:00:00 2001
> From: Romane Lafon 
> Date: Wed, 3 Jul 2019 15:15:16 +0200
> Subject: [PATCH] avfilter/avf_aphasemeter: Add out of phase and mono detection
> 
> Signed-off-by: Romane Lafon 
> ---
>  doc/filters.texi  |  32 +++
>  libavfilter/avf_aphasemeter.c | 127 
> --
>  2 files changed, 155 insertions(+), 4 deletions(-)
> 
> diff --git a/doc/filters.texi b/doc/filters.texi
> index 700a76f239..ec8c73d558 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -20656,6 +20656,38 @@ Set color which will be used for drawing median 
> phase. If color is
>  Enable video output. Default is enabled.
>  @end table
>  
> +@subsection phasing detection
> +
> +The filter also detects out of phase and mono sequences in stereo streams.
> +It logs the sequence start, end and duration when it lasts longer or as long 
> as the minimum set.
> +
> +The filter accepts the following options for this detection:
> +
> +@table @option
> +@item phasing
> +Enable mono and out of phase detection. Default is disabled.
> +
> +@item tolerance
> +Set phase tolerance for mono detection, in amplitude ratio. Default is 
> @code{0}.
> +Allowed range is @code{[0, 1]}.
> +
> +@item angle
> +Set angle threshold for out of phase detection, in degree. Default is 
> @code{170}.
> +Allowed range is @code{[0, 180]}.
> +
> +@item duration
> +Set mono or out of phase duration until notification, expressed in seconds. 
> Default is @code{2}.
> +
> +@subsection Examples
> +
> +@itemize
> +@item
> +Complete example with @command{ffmpeg} to detect 1 second of mono with 0.001 
> phase tolerance:
> +@example
> +ffmpeg -i stereo.wav -af 
> aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001 -f null -
> +@end example
> +@end itemize
> +
>  @section avectorscope
>  
>  Convert input audio to a video output, representing the audio vector

this breaks building docs

HTMLdoc/ffmpeg-all.html
doc/filters.texi:20681: @subsection seen before @end table
make: *** [doc/ffmpeg-all.html] Error 1

[...]

-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The worst form of inequality is to try to make unequal things equal.
-- Aristotle


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 v4] avfilter/avf_aphasemeter: Add out-of-phase and mono detection

2019-07-03 Thread Romane Lafon
I've added documentation for the extension of aphasemeter filter.
Also, I'm not sure that "phasing" is the right word to describe the
detection.
From 1e356929e878a2081add102b77a9560647232ef8 Mon Sep 17 00:00:00 2001
From: Romane Lafon 
Date: Wed, 3 Jul 2019 15:15:16 +0200
Subject: [PATCH] avfilter/avf_aphasemeter: Add out of phase and mono detection

Signed-off-by: Romane Lafon 
---
 doc/filters.texi  |  32 +++
 libavfilter/avf_aphasemeter.c | 127 --
 2 files changed, 155 insertions(+), 4 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index 700a76f239..ec8c73d558 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -20656,6 +20656,38 @@ Set color which will be used for drawing median phase. If color is
 Enable video output. Default is enabled.
 @end table
 
+@subsection phasing detection
+
+The filter also detects out of phase and mono sequences in stereo streams.
+It logs the sequence start, end and duration when it lasts longer or as long as the minimum set.
+
+The filter accepts the following options for this detection:
+
+@table @option
+@item phasing
+Enable mono and out of phase detection. Default is disabled.
+
+@item tolerance
+Set phase tolerance for mono detection, in amplitude ratio. Default is @code{0}.
+Allowed range is @code{[0, 1]}.
+
+@item angle
+Set angle threshold for out of phase detection, in degree. Default is @code{170}.
+Allowed range is @code{[0, 180]}.
+
+@item duration
+Set mono or out of phase duration until notification, expressed in seconds. Default is @code{2}.
+
+@subsection Examples
+
+@itemize
+@item
+Complete example with @command{ffmpeg} to detect 1 second of mono with 0.001 phase tolerance:
+@example
+ffmpeg -i stereo.wav -af aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001 -f null -
+@end example
+@end itemize
+
 @section avectorscope
 
 Convert input audio to a video output, representing the audio vector
diff --git a/libavfilter/avf_aphasemeter.c b/libavfilter/avf_aphasemeter.c
index f497bc9969..77701e5cde 100644
--- a/libavfilter/avf_aphasemeter.c
+++ b/libavfilter/avf_aphasemeter.c
@@ -28,26 +28,41 @@
 #include "libavutil/intreadwrite.h"
 #include "libavutil/opt.h"
 #include "libavutil/parseutils.h"
+#include "libavutil/timestamp.h"
 #include "avfilter.h"
 #include "formats.h"
 #include "audio.h"
 #include "video.h"
 #include "internal.h"
+#include "stdbool.h"
+#include "float.h"
 
 typedef struct AudioPhaseMeterContext {
 const AVClass *class;
 AVFrame *out;
 int do_video;
+int do_phasing_detection;
 int w, h;
 AVRational frame_rate;
 int contrast[4];
 uint8_t *mpc_str;
 uint8_t mpc[4];
 int draw_median_phase;
+int is_mono;
+int is_out_phase;
+int start_mono_presence;
+int start_out_phase_presence;
+float tolerance;
+float angle;
+float phase;
+float mono_idx[2];
+float out_phase_idx[2];
+double duration;
 } AudioPhaseMeterContext;
 
 #define OFFSET(x) offsetof(AudioPhaseMeterContext, x)
 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
+#define get_duration(index) (index[1] - index[0])
 
 static const AVOption aphasemeter_options[] = {
 { "rate", "set video rate", OFFSET(frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str="25"}, 0, INT_MAX, FLAGS },
@@ -59,6 +74,10 @@ static const AVOption aphasemeter_options[] = {
 { "bc", "set blue contrast",  OFFSET(contrast[2]), AV_OPT_TYPE_INT, {.i64=1}, 0, 255, FLAGS },
 { "mpc", "set median phase color", OFFSET(mpc_str), AV_OPT_TYPE_STRING, {.str = "none"}, 0, 0, FLAGS },
 { "video", "set video output", OFFSET(do_video), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, FLAGS },
+{ "phasing", "set mono and out-of-phase detection output", OFFSET(do_phasing_detection), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, FLAGS },
+{ "tolerance", "set phase tolerance for mono detection", OFFSET(tolerance), AV_OPT_TYPE_FLOAT, {.dbl = 0.}, 0, 1, FLAGS },
+{ "angle", "set angle threshold for out-of-phase detection", OFFSET(angle), AV_OPT_TYPE_FLOAT, {.dbl = 170.}, 90, 180, FLAGS },
+{ "duration", "set minimum mono or out-of-phase duration in seconds", OFFSET(duration), AV_OPT_TYPE_DOUBLE, {.dbl=2.}, 0, 24*60*60, FLAGS },
 { NULL }
 };
 
@@ -140,6 +159,22 @@ static inline int get_x(float phase, int w)
   return (phase + 1.) / 2. * (w - 1);
 }
 
+static inline float get_index(AVFilterLink *inlink, AVFrame *in)
+{
+char *index_str = av_ts2timestr(in->pts, >time_base);
+return atof(index_str);
+}
+
+static inline void add_metadata(AVFrame *insamples, const char *key, float value)
+{
+char buf[128];
+char str[128];
+
+snprintf(str, sizeof(str), "%f", value);
+snprintf(buf, sizeof(buf), "lavfi.aphasemeter.%s", key);
+av_dict_set(>metadata, buf, str, 0);
+}
+
 static int filter_frame(AVFilterLink *inlink, AVFrame *in)
 {
 AVFilterContext *ctx = inlink->dst;
@@ -154,6 +189,10 @@ static int filter_frame(AVFilterLink *inlink,