diff options
Diffstat (limited to 'libavfilter/avf_showcqt.h')
-rw-r--r-- | libavfilter/avf_showcqt.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/libavfilter/avf_showcqt.h b/libavfilter/avf_showcqt.h new file mode 100644 index 0000000000..0cef5a2003 --- /dev/null +++ b/libavfilter/avf_showcqt.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2015 Muhammad Faiz <mfcc64@gmail.com> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVFILTER_SHOWCQT_H +#define AVFILTER_SHOWCQT_H + +#include "libavcodec/avfft.h" +#include "avfilter.h" +#include "internal.h" + +typedef struct Coeffs { + FFTSample *val; + int start, len; +} Coeffs; + +typedef struct RGBFloat { + float r, g, b; +} RGBFloat; + +typedef struct YUVFloat { + float y, u, v; +} YUVFloat; + +typedef union { + RGBFloat rgb; + YUVFloat yuv; +} ColorFloat; + +typedef struct ShowCQTContext { + const AVClass *class; + AVFilterContext *ctx; + AVFrame *axis_frame; + AVFrame *sono_frame; + enum AVPixelFormat format; + int sono_idx; + int sono_count; + int step; + AVRational step_frac; + int remaining_frac; + int remaining_fill; + int remaining_fill_max; + int64_t next_pts; + double *freq; + FFTContext *fft_ctx; + Coeffs *coeffs; + FFTComplex *fft_data; + FFTComplex *fft_result; + FFTComplex *cqt_result; + float *attack_data; + int fft_bits; + int fft_len; + int cqt_len; + int cqt_align; + ColorFloat *c_buf; + float *h_buf; + float *rcp_h_buf; + float *sono_v_buf; + float *bar_v_buf; + float cmatrix[3][3]; + float cscheme_v[6]; + /* callback */ + void (*cqt_calc)(FFTComplex *dst, const FFTComplex *src, const Coeffs *coeffs, + int len, int fft_len); + void (*permute_coeffs)(float *v, int len); + void (*draw_bar)(AVFrame *out, const float *h, const float *rcp_h, + const ColorFloat *c, int bar_h, float bar_t); + void (*draw_axis)(AVFrame *out, AVFrame *axis, const ColorFloat *c, int off); + void (*draw_sono)(AVFrame *out, AVFrame *sono, int off, int idx); + void (*update_sono)(AVFrame *sono, const ColorFloat *c, int idx); + /* performance debugging */ + int64_t fft_time; + int64_t cqt_time; + int64_t process_cqt_time; + int64_t update_sono_time; + int64_t alloc_time; + int64_t bar_time; + int64_t axis_time; + int64_t sono_time; + /* option */ + int width, height; + AVRational rate; + int bar_h; + int axis_h; + int sono_h; + int fullhd; /* deprecated */ + char *sono_v; + char *bar_v; + float sono_g; + float bar_g; + float bar_t; + double timeclamp; + double attack; + double basefreq; + double endfreq; + float coeffclamp; /* deprecated - ignored */ + char *tlength; + int count; + int fcount; + char *fontfile; + char *font; + char *fontcolor; + char *axisfile; + int axis; + int csp; + char *cscheme; +} ShowCQTContext; + +void ff_showcqt_init_x86(ShowCQTContext *s); + +#endif |