summaryrefslogtreecommitdiff
path: root/libavfilter/avf_showcqt.h (plain)
blob: 3fa36f851ccc9c8ef52905ef6c6bc7b932763897
1/*
2 * Copyright (c) 2015 Muhammad Faiz <mfcc64@gmail.com>
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#ifndef AVFILTER_SHOWCQT_H
22#define AVFILTER_SHOWCQT_H
23
24#include "libavcodec/avfft.h"
25#include "avfilter.h"
26#include "internal.h"
27
28typedef struct {
29 FFTSample *val;
30 int start, len;
31} Coeffs;
32
33typedef struct {
34 float r, g, b;
35} RGBFloat;
36
37typedef struct {
38 float y, u, v;
39} YUVFloat;
40
41typedef union {
42 RGBFloat rgb;
43 YUVFloat yuv;
44} ColorFloat;
45
46typedef struct {
47 const AVClass *class;
48 AVFilterContext *ctx;
49 AVFrame *axis_frame;
50 AVFrame *sono_frame;
51 enum AVPixelFormat format;
52 int sono_idx;
53 int sono_count;
54 int step;
55 AVRational step_frac;
56 int remaining_frac;
57 int remaining_fill;
58 int64_t next_pts;
59 double *freq;
60 FFTContext *fft_ctx;
61 Coeffs *coeffs;
62 FFTComplex *fft_data;
63 FFTComplex *fft_result;
64 FFTComplex *cqt_result;
65 int fft_bits;
66 int fft_len;
67 int cqt_len;
68 int cqt_align;
69 ColorFloat *c_buf;
70 float *h_buf;
71 float *rcp_h_buf;
72 float *sono_v_buf;
73 float *bar_v_buf;
74 float cmatrix[3][3];
75 float cscheme_v[6];
76 /* callback */
77 void (*cqt_calc)(FFTComplex *dst, const FFTComplex *src, const Coeffs *coeffs,
78 int len, int fft_len);
79 void (*permute_coeffs)(float *v, int len);
80 void (*draw_bar)(AVFrame *out, const float *h, const float *rcp_h,
81 const ColorFloat *c, int bar_h, float bar_t);
82 void (*draw_axis)(AVFrame *out, AVFrame *axis, const ColorFloat *c, int off);
83 void (*draw_sono)(AVFrame *out, AVFrame *sono, int off, int idx);
84 void (*update_sono)(AVFrame *sono, const ColorFloat *c, int idx);
85 /* performance debugging */
86 int64_t fft_time;
87 int64_t cqt_time;
88 int64_t process_cqt_time;
89 int64_t update_sono_time;
90 int64_t alloc_time;
91 int64_t bar_time;
92 int64_t axis_time;
93 int64_t sono_time;
94 /* option */
95 int width, height;
96 AVRational rate;
97 int bar_h;
98 int axis_h;
99 int sono_h;
100 int fullhd; /* deprecated */
101 char *sono_v;
102 char *bar_v;
103 float sono_g;
104 float bar_g;
105 float bar_t;
106 double timeclamp;
107 double basefreq;
108 double endfreq;
109 float coeffclamp; /* deprecated - ignored */
110 char *tlength;
111 int count;
112 int fcount;
113 char *fontfile;
114 char *font;
115 char *fontcolor;
116 char *axisfile;
117 int axis;
118 int csp;
119 char *cscheme;
120} ShowCQTContext;
121
122void ff_showcqt_init_x86(ShowCQTContext *s);
123
124#endif
125