aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMuhammad Faiz <mfcc64@gmail.com>2016-03-06 12:54:32 +0700
committerMuhammad Faiz <mfcc64@gmail.com>2016-03-08 20:50:26 +0700
commitfd0c9789cfe88d9b07d390339f193072d8d662af (patch)
tree3c73ede6e4f745b2e7d9d623025e5d6339b38998
parentf78ef2d885aa2245606e1fe95ce85b84f634c18b (diff)
downloadffmpeg-fd0c9789cfe88d9b07d390339f193072d8d662af.tar.gz
avfilter/avf_showcqt: add performance debugging log
for easier development Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
-rw-r--r--libavfilter/avf_showcqt.c64
-rw-r--r--libavfilter/avf_showcqt.h9
2 files changed, 68 insertions, 5 deletions
diff --git a/libavfilter/avf_showcqt.c b/libavfilter/avf_showcqt.c
index f3fc782f4b..8928bfb41e 100644
--- a/libavfilter/avf_showcqt.c
+++ b/libavfilter/avf_showcqt.c
@@ -25,6 +25,7 @@
#include "libavutil/xga_font_data.h"
#include "libavutil/eval.h"
#include "libavutil/pixdesc.h"
+#include "libavutil/time.h"
#include "avfilter.h"
#include "internal.h"
#include "lavfutils.h"
@@ -90,7 +91,33 @@ AVFILTER_DEFINE_CLASS(showcqt);
static void common_uninit(ShowCQTContext *s)
{
int k;
-
+ int level = AV_LOG_DEBUG;
+ int64_t plot_time;
+
+ if (s->fft_time)
+ av_log(s->ctx, level, "fft_time = %16.3f s.\n", s->fft_time * 1e-6);
+ if (s->cqt_time)
+ av_log(s->ctx, level, "cqt_time = %16.3f s.\n", s->cqt_time * 1e-6);
+ if (s->process_cqt_time)
+ av_log(s->ctx, level, "process_cqt_time = %16.3f s.\n", s->process_cqt_time * 1e-6);
+ if (s->update_sono_time)
+ av_log(s->ctx, level, "update_sono_time = %16.3f s.\n", s->update_sono_time * 1e-6);
+ if (s->alloc_time)
+ av_log(s->ctx, level, "alloc_time = %16.3f s.\n", s->alloc_time * 1e-6);
+ if (s->bar_time)
+ av_log(s->ctx, level, "bar_time = %16.3f s.\n", s->bar_time * 1e-6);
+ if (s->axis_time)
+ av_log(s->ctx, level, "axis_time = %16.3f s.\n", s->axis_time * 1e-6);
+ if (s->sono_time)
+ av_log(s->ctx, level, "sono_time = %16.3f s.\n", s->sono_time * 1e-6);
+
+ plot_time = s->fft_time + s->cqt_time + s->process_cqt_time + s->update_sono_time
+ + s->alloc_time + s->bar_time + s->axis_time + s->sono_time;
+ if (plot_time)
+ av_log(s->ctx, level, "plot_time = %16.3f s.\n", plot_time * 1e-6);
+
+ s->fft_time = s->cqt_time = s->process_cqt_time = s->update_sono_time
+ = s->alloc_time = s->bar_time = s->axis_time = s->sono_time = 0;
/* axis_frame may be non reference counted frame */
if (s->axis_frame && !s->axis_frame->buf[0]) {
av_freep(s->axis_frame->data);
@@ -961,25 +988,52 @@ static int plot_cqt(AVFilterContext *ctx, AVFrame **frameout)
{
AVFilterLink *outlink = ctx->outputs[0];
ShowCQTContext *s = ctx->priv;
+ int64_t last_time, cur_time;
+
+#define UPDATE_TIME(t) \
+ cur_time = av_gettime(); \
+ t += cur_time - last_time; \
+ last_time = cur_time
+
+ last_time = av_gettime();
memcpy(s->fft_result, s->fft_data, s->fft_len * sizeof(*s->fft_data));
av_fft_permute(s->fft_ctx, s->fft_result);
av_fft_calc(s->fft_ctx, s->fft_result);
s->fft_result[s->fft_len] = s->fft_result[0];
+ UPDATE_TIME(s->fft_time);
+
s->cqt_calc(s->cqt_result, s->fft_result, s->coeffs, s->cqt_len, s->fft_len);
+ UPDATE_TIME(s->cqt_time);
+
process_cqt(s);
- if (s->sono_h)
+ UPDATE_TIME(s->process_cqt_time);
+
+ if (s->sono_h) {
s->update_sono(s->sono_frame, s->c_buf, s->sono_idx);
+ UPDATE_TIME(s->update_sono_time);
+ }
+
if (!s->sono_count) {
AVFrame *out = *frameout = ff_get_video_buffer(outlink, outlink->w, outlink->h);
if (!out)
return AVERROR(ENOMEM);
- if (s->bar_h)
+ UPDATE_TIME(s->alloc_time);
+
+ if (s->bar_h) {
s->draw_bar(out, s->h_buf, s->rcp_h_buf, s->c_buf, s->bar_h);
- if (s->axis_h)
+ UPDATE_TIME(s->bar_time);
+ }
+
+ if (s->axis_h) {
s->draw_axis(out, s->axis_frame, s->c_buf, s->bar_h);
- if (s->sono_h)
+ UPDATE_TIME(s->axis_time);
+ }
+
+ if (s->sono_h) {
s->draw_sono(out, s->sono_frame, s->bar_h + s->axis_h, s->sono_idx);
+ UPDATE_TIME(s->sono_time);
+ }
out->pts = s->next_pts;
s->next_pts += PTS_STEP;
}
diff --git a/libavfilter/avf_showcqt.h b/libavfilter/avf_showcqt.h
index 82025b1df4..b945f49c08 100644
--- a/libavfilter/avf_showcqt.h
+++ b/libavfilter/avf_showcqt.h
@@ -79,6 +79,15 @@ typedef struct {
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;