summaryrefslogtreecommitdiff
path: root/libavfilter/avf_avectorscope.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2017-11-21 12:07:13 +0100
committerPaul B Mahol <onemda@gmail.com>2017-11-21 12:27:03 +0100
commitafd2bf54c31b501244941e93bff364c6aa60e02c (patch)
tree1219a0b68de4f2a230abf509a41c7ab5aefcd4e9 /libavfilter/avf_avectorscope.c
parent37810bee7839f7524e68db83c3aef7b7474fce80 (diff)
downloadffmpeg-afd2bf54c31b501244941e93bff364c6aa60e02c.tar.gz
avfilter/avf_avectorscope: add swap and mirror options
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavfilter/avf_avectorscope.c')
-rw-r--r--libavfilter/avf_avectorscope.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/libavfilter/avf_avectorscope.c b/libavfilter/avf_avectorscope.c
index c8ff0698e3..725ac8bbda 100644
--- a/libavfilter/avf_avectorscope.c
+++ b/libavfilter/avf_avectorscope.c
@@ -65,6 +65,8 @@ typedef struct AudioVectorScopeContext {
int contrast[4];
int fade[4];
double zoom;
+ int swap;
+ int mirror;
unsigned prev_x, prev_y;
AVRational frame_rate;
} AudioVectorScopeContext;
@@ -99,6 +101,12 @@ static const AVOption avectorscope_options[] = {
{ "sqrt", "square root", 0, AV_OPT_TYPE_CONST, {.i64=SQRT}, 0, 0, FLAGS, "scale" },
{ "cbrt", "cube root", 0, AV_OPT_TYPE_CONST, {.i64=CBRT}, 0, 0, FLAGS, "scale" },
{ "log", "logarithmic", 0, AV_OPT_TYPE_CONST, {.i64=LOG}, 0, 0, FLAGS, "scale" },
+ { "swap", "swap x axis with y axis", OFFSET(swap), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, FLAGS },
+ { "mirror", "mirror axis", OFFSET(mirror), AV_OPT_TYPE_INT, {.i64=2}, 0, 3, FLAGS, "mirror" },
+ { "none", "no mirror", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "mirror" },
+ { "x", "mirror x", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "mirror" },
+ { "y", "mirror y", 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "mirror" },
+ { "xy", "mirror both", 0, AV_OPT_TYPE_CONST, {.i64=3}, 0, 0, FLAGS, "mirror" },
{ NULL }
};
@@ -316,6 +324,15 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
break;
}
+ if (s->mirror & 1)
+ src[0] = -src[0];
+
+ if (s->mirror & 2)
+ src[1] = -src[1];
+
+ if (s->swap)
+ FFSWAP(float, src[0], src[1]);;
+
if (s->mode == LISSAJOUS) {
x = ((src[1] - src[0]) * zoom / 2 + 1) * hw;
y = (1.0 - (src[0] + src[1]) * zoom / 2) * hh;