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

Showing the changes to libavfilter (1 of 1 file). Show all

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
160 }160 }
161}161}
162 162
163static void fade(AudioVectorScopeContext *s)163static int fade(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
164{164{
165 AudioVectorScopeContext *s = ctx->priv;
165 const int linesize = s->outpicref->linesize[0];166 const int linesize = s->outpicref->linesize[0];
166 int i, j;167 const int height = s->outpicref->height;
167 168 const int slice_start = (height * jobnr ) / nb_jobs;
168 if (s->fade[0] = 255 && s->fade[1] == 255 && s->fade[2] == 255) {169 const int slice_end = (height * (jobnr+1)) / nb_jobs;
169 for (int i = 0; i < s->outpicref->height; i++)170
170 memset(s->outpicref->data[0] + i * s->outpicref->linesize[0], 0, s->outpicref->width * 4);171 if (s->fade[0] == 255 && s->fade[1] == 255 && s->fade[2] == 255) {
171 return;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;
172 }175 }
173 176
174 if (s->fade[0] || s->fade[1] || s->fade[2]) {177 if (s->fade[0] || s->fade[1] || s->fade[2]) {
175 uint8_t *d = s->outpicref->data[0];178 uint8_t *d = s->outpicref->data[0] + slice_start * linesize;
176 for (i = 0; i < s->h; i++) {179 for (int i = slice_start; i < slice_end; i++) {
177 for (j = 0; j < s->w*4; j+=4) {180 for (int j = 0; j < s->w*4; j+=4) {
178 d[j+0] = FFMAX(d[j+0] - s->fade[0], 0);181 if (d[j+0])
179 d[j+1] = FFMAX(d[j+1] - s->fade[1], 0);182 d[j+0] = FFMAX(d[j+0] - s->fade[0], 0);
180 d[j+2] = FFMAX(d[j+2] - s->fade[2], 0);183 if (d[j+1])
181 d[j+3] = FFMAX(d[j+3] - s->fade[3], 0);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);
182 }189 }
183 d += linesize;190 d += linesize;
184 }191 }
185 }192 }
193
194 return 0;
186}195}
187 196
188static int query_formats(AVFilterContext *ctx)197static int query_formats(AVFilterContext *ctx)
@@ -265,7 +274,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples) · 76 unmodified lines
265 }274 }
266 s->outpicref->pts = insamples->pts;275 s->outpicref->pts = insamples->pts;
267 276
268 fade(s);277 ff_filter_execute(ctx, fade, NULL, NULL, FFMIN(outlink->h, ff_filter_get_nb_threads(ctx)));
269 278
270 if (zoom < 1) {279 if (zoom < 1) {
271 float max = 0;280 float max = 0;
@@ -429,4 +438,5 @@ const AVFilter ff_avf_avectorscope = { · 157 unmodified lines
429 FILTER_INPUTS(audiovectorscope_inputs),438 FILTER_INPUTS(audiovectorscope_inputs),
430 FILTER_OUTPUTS(audiovectorscope_outputs),439 FILTER_OUTPUTS(audiovectorscope_outputs),
431 .priv_class = &avectorscope_class,440 .priv_class = &avectorscope_class,
441 .flags = AVFILTER_FLAG_SLICE_THREADS,
432};442};

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