Skip to content

Commit 28743f1

Browse files
committed
avfilter/vf_median: implement percentile option
1 parent d9751a1 commit 28743f1

File tree

3 files changed

+8
-1
lines changed

3 files changed

+8
-1
lines changed

doc/filters.texi

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13289,6 +13289,11 @@ Set which planes to process. Default is @code{15}, which is all available planes
1328913289
Set vertical radius size. Default value is @code{0}.
1329013290
Allowed range is integer from 0 to 127.
1329113291
If it is 0, value will be picked from horizontal @code{radius} option.
13292+
13293+
@item percentile
13294+
Set median percentile. Default value is @code{0.5}.
13295+
Default value of @code{0.5} will pick always median values, while @code{0} will pick
13296+
minimum values, and @code{1} maximum values.
1329213297
@end table
1329313298

1329413299
@subsection Commands

libavfilter/median.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ typedef struct MedianContext {
3131
int planes;
3232
int radius;
3333
int radiusV;
34+
float percentile;
3435

3536
int planewidth[4];
3637
int planeheight[4];

libavfilter/vf_median.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ static const AVOption median_options[] = {
6060
{ "radius", "set median radius", OFFSET(radius), AV_OPT_TYPE_INT, {.i64=1}, 1, 127, FLAGS },
6161
{ "planes", "set planes to filter", OFFSET(planes), AV_OPT_TYPE_INT, {.i64=0xF}, 0, 0xF, FLAGS },
6262
{ "radiusV", "set median vertical radius", OFFSET(radiusV), AV_OPT_TYPE_INT, {.i64=0},0, 127, FLAGS },
63+
{ "percentile", "set median percentile", OFFSET(percentile), AV_OPT_TYPE_FLOAT, {.dbl=.5}, 0., 1., FLAGS },
6364
{ NULL }
6465
};
6566

@@ -127,7 +128,7 @@ static void check_params(MedianContext *s, AVFilterLink *inlink)
127128
}
128129
}
129130

130-
s->t = 2 * s->radius * s->radiusV + 2 * s->radius;
131+
s->t = (2 * s->radius * s->radiusV + s->radiusV + s->radius) * 2.f * s->percentile;
131132
}
132133

133134
static int config_input(AVFilterLink *inlink)

0 commit comments

Comments
 (0)