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 28 typedef struct Coeffs { 29 FFTSample *val; 30 int start, len; 31 } Coeffs; 32 33 typedef struct RGBFloat { 34 float r, g, b; 35 } RGBFloat; 36 37 typedef struct YUVFloat { 38 float y, u, v; 39 } YUVFloat; 40 41 typedef union { 42 RGBFloat rgb; 43 YUVFloat yuv; 44 } ColorFloat; 45 46 typedef struct ShowCQTContext { 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 int remaining_fill_max; 59 int64_t next_pts; 60 double *freq; 61 FFTContext *fft_ctx; 62 Coeffs *coeffs; 63 FFTComplex *fft_data; 64 FFTComplex *fft_result; 65 FFTComplex *cqt_result; 66 float *attack_data; 67 int fft_bits; 68 int fft_len; 69 int cqt_len; 70 int cqt_align; 71 ColorFloat *c_buf; 72 float *h_buf; 73 float *rcp_h_buf; 74 float *sono_v_buf; 75 float *bar_v_buf; 76 float cmatrix[3][3]; 77 float cscheme_v[6]; 78 /* callback */ 79 void (*cqt_calc)(FFTComplex *dst, const FFTComplex *src, const Coeffs *coeffs, 80 int len, int fft_len); 81 void (*permute_coeffs)(float *v, int len); 82 void (*draw_bar)(AVFrame *out, const float *h, const float *rcp_h, 83 const ColorFloat *c, int bar_h, float bar_t); 84 void (*draw_axis)(AVFrame *out, AVFrame *axis, const ColorFloat *c, int off); 85 void (*draw_sono)(AVFrame *out, AVFrame *sono, int off, int idx); 86 void (*update_sono)(AVFrame *sono, const ColorFloat *c, int idx); 87 /* performance debugging */ 88 int64_t fft_time; 89 int64_t cqt_time; 90 int64_t process_cqt_time; 91 int64_t update_sono_time; 92 int64_t alloc_time; 93 int64_t bar_time; 94 int64_t axis_time; 95 int64_t sono_time; 96 /* option */ 97 int width, height; 98 AVRational rate; 99 int bar_h; 100 int axis_h; 101 int sono_h; 102 int fullhd; /* deprecated */ 103 char *sono_v; 104 char *bar_v; 105 float sono_g; 106 float bar_g; 107 float bar_t; 108 double timeclamp; 109 double attack; 110 double basefreq; 111 double endfreq; 112 float coeffclamp; /* deprecated - ignored */ 113 char *tlength; 114 int count; 115 int fcount; 116 char *fontfile; 117 char *font; 118 char *fontcolor; 119 char *axisfile; 120 int axis; 121 int csp; 122 char *cscheme; 123 } ShowCQTContext; 124 125 void ff_showcqt_init_x86(ShowCQTContext *s); 126 127 #endif 128