diff options
author | Paul B Mahol <onemda@gmail.com> | 2016-03-27 23:29:38 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2016-03-27 23:29:38 +0200 |
commit | 48be92e5b6847f622fa356349d6fdf9d86aaf28b (patch) | |
tree | 22457b4c891179fe1c9d46cff76b823a6c4848bf | |
parent | 0b9957c3019a6b4a61ca5d1aff64378e5dc46d98 (diff) | |
download | ffmpeg-48be92e5b6847f622fa356349d6fdf9d86aaf28b.tar.gz |
avfilter/vf_waveform: optimize lowpass 8bit filter
Signed-off-by: Paul B Mahol <onemda@gmail.com>
-rw-r--r-- | libavfilter/vf_waveform.c | 95 |
1 files changed, 71 insertions, 24 deletions
diff --git a/libavfilter/vf_waveform.c b/libavfilter/vf_waveform.c index 3715bcb97e..5041f955a6 100644 --- a/libavfilter/vf_waveform.c +++ b/libavfilter/vf_waveform.c @@ -708,6 +708,22 @@ static av_always_inline void lowpass(WaveformContext *s, envelope(s, out, plane, plane, column ? offset_x : offset_y); } +#define LOWPASS_FUNC(name, column, mirror) \ +static void lowpass_##name(WaveformContext *s, \ + AVFrame *in, AVFrame *out, \ + int component, int intensity, \ + int offset_y, int offset_x, \ + int unused1, int unused2) \ +{ \ + lowpass(s, in, out, component, intensity, \ + offset_y, offset_x, column, mirror); \ +} + +LOWPASS_FUNC(column_mirror, 1, 1) +LOWPASS_FUNC(column, 1, 0) +LOWPASS_FUNC(row_mirror, 0, 1) +LOWPASS_FUNC(row, 0, 0) + static av_always_inline void flat16(WaveformContext *s, AVFrame *in, AVFrame *out, int component, int intensity, @@ -2397,30 +2413,61 @@ static int config_input(AVFilterLink *inlink) s->graticulef = graticule_none; switch (s->filter) { - case LOWPASS: - s->size = 256; - s->waveform = s->bits > 8 ? lowpass16 : lowpass; - break; - case FLAT: - s->size = 256 * 3; - s->waveform = s->bits > 8 ? flat16 : flat; - break; - case AFLAT: - s->size = 256 * 2; - s->waveform = s->bits > 8 ? aflat16 : aflat; - break; - case CHROMA: - s->size = 256; - s->waveform = s->bits > 8 ? chroma16 : chroma; - break; - case COLOR: - s->size = 256; - s->waveform = s->bits > 8 ? color16 : color; - break; - case ACOLOR: - s->size = 256; - s->waveform = s->bits > 8 ? acolor16 : acolor; - break; + case AFLAT: s->size = 256 * 2; break; + case FLAT: s->size = 256 * 3; break; + default: s->size = 256; break; + } + + switch (s->filter | ((s->bits > 8) << 4) | + (s->mode << 8) | (s->mirror << 12)) { + case 0x1100: s->waveform = lowpass_column_mirror; break; + case 0x1000: s->waveform = lowpass_row_mirror; break; + case 0x0100: s->waveform = lowpass_column; break; + case 0x0000: s->waveform = lowpass_row; break; + case 0x1110: + case 0x1010: + case 0x0110: + case 0x0010: s->waveform = lowpass16; break; + case 0x1101: + case 0x1001: + case 0x0101: + case 0x0001: s->waveform = flat; break; + case 0x1111: + case 0x1011: + case 0x0111: + case 0x0011: s->waveform = flat16; break; + case 0x1102: + case 0x1002: + case 0x0102: + case 0x0002: s->waveform = aflat; break; + case 0x1112: + case 0x1012: + case 0x0112: + case 0x0012: s->waveform = aflat16; break; + case 0x1103: + case 0x1003: + case 0x0103: + case 0x0003: s->waveform = chroma; break; + case 0x1113: + case 0x1013: + case 0x0113: + case 0x0013: s->waveform = chroma16; break; + case 0x1104: + case 0x1004: + case 0x0104: + case 0x0004: s->waveform = color; break; + case 0x1114: + case 0x1014: + case 0x0114: + case 0x0014: s->waveform = color16; break; + case 0x1105: + case 0x1005: + case 0x0105: + case 0x0005: s->waveform = acolor; break; + case 0x1115: + case 0x1015: + case 0x0115: + case 0x0015: s->waveform = acolor16; break; } switch (s->filter) { |