History

avfilter/avf_avectorscope: add slice threading for fade function

Paul B Mahol committed 5 years ago

Commit 99d71c21 parent 4f7f0461 file · +25 −15Browse files

Unified · Split

libavfilter/avf_avectorscope.c+25−15
@@ -160,29 +160,38 @@ static void draw_line(AudioVectorScopeContext *s, int x0, int y0, int x1, int y1 · 159 unmodified lines
160160 }
161161 }
162162
163−static void fade(AudioVectorScopeContext *s)
163+static int fade(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
164164 {
165+ AudioVectorScopeContext *s = ctx->priv;
165166 const int linesize = s->outpicref->linesize[0];
166− int i, j;
167−
168− if (s->fade[0] = 255 && s->fade[1] == 255 && s->fade[2] == 255) {
169− for (int i = 0; i < s->outpicref->height; i++)
170− memset(s->outpicref->data[0] + i * s->outpicref->linesize[0], 0, s->outpicref->width * 4);
171− return;
167+ const int height = s->outpicref->height;
168+ const int slice_start = (height * jobnr ) / nb_jobs;
169+ const int slice_end = (height * (jobnr+1)) / nb_jobs;
170+
171+ if (s->fade[0] == 255 && s->fade[1] == 255 && s->fade[2] == 255) {
172+ for (int i = slice_start; i < slice_end; i++)
173+ memset(s->outpicref->data[0] + i * linesize, 0, s->outpicref->width * 4);
174+ return 0;
172175 }
173176
174177 if (s->fade[0] || s->fade[1] || s->fade[2]) {
175− uint8_t *d = s->outpicref->data[0];
176− for (i = 0; i < s->h; i++) {
177− for (j = 0; j < s->w*4; j+=4) {
178− d[j+0] = FFMAX(d[j+0] - s->fade[0], 0);
179− d[j+1] = FFMAX(d[j+1] - s->fade[1], 0);
180− d[j+2] = FFMAX(d[j+2] - s->fade[2], 0);
181− d[j+3] = FFMAX(d[j+3] - s->fade[3], 0);
178+ uint8_t *d = s->outpicref->data[0] + slice_start * linesize;
179+ for (int i = slice_start; i < slice_end; i++) {
180+ for (int j = 0; j < s->w*4; j+=4) {
181+ if (d[j+0])
182+ d[j+0] = FFMAX(d[j+0] - s->fade[0], 0);
183+ if (d[j+1])
184+ d[j+1] = FFMAX(d[j+1] - s->fade[1], 0);
185+ if (d[j+2])
186+ d[j+2] = FFMAX(d[j+2] - s->fade[2], 0);
187+ if (d[j+3])
188+ d[j+3] = FFMAX(d[j+3] - s->fade[3], 0);
182189 }
183190 d += linesize;
184191 }
185192 }
193+
194+ return 0;
186195 }
187196
188197 static int query_formats(AVFilterContext *ctx)
@@ -265,7 +274,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples) · 76 unmodified lines
265274 }
266275 s->outpicref->pts = insamples->pts;
267276
268− fade(s);
277+ ff_filter_execute(ctx, fade, NULL, NULL, FFMIN(outlink->h, ff_filter_get_nb_threads(ctx)));
269278
270279 if (zoom < 1) {
271280 float max = 0;
@@ -429,4 +438,5 @@ const AVFilter ff_avf_avectorscope = { · 157 unmodified lines
429438 FILTER_INPUTS(audiovectorscope_inputs),
430439 FILTER_OUTPUTS(audiovectorscope_outputs),
431440 .priv_class = &avectorscope_class,
441+ .flags = AVFILTER_FLAG_SLICE_THREADS,
432442 };

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t