History

avfilter/vf_mix: improve speed of processing

Paul B Mahol committed 4 years ago

Commit 0da255d1 parent e235c761 file · +7 −6Browse files

Unified · Split

libavfilter/vf_mix.c+7−6
@@ -138,6 +138,7 @@ static int mix_frames(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) · 137 unmodified lines
138 ThreadData *td = arg;138 ThreadData *td = arg;
139 AVFrame **in = td->in;139 AVFrame **in = td->in;
140 AVFrame *out = td->out;140 AVFrame *out = td->out;
141 const float *weights = s->weights;
141 int i, p, x, y;142 int i, p, x, y;
142 143
143 if (s->depth <= 8) {144 if (s->depth <= 8) {
@@ -148,15 +149,15 @@ static int mix_frames(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) · 4 unmodified lines
148 149
149 for (y = slice_start; y < slice_end; y++) {150 for (y = slice_start; y < slice_end; y++) {
150 for (x = 0; x < s->linesize[p]; x++) {151 for (x = 0; x < s->linesize[p]; x++) {
151 int val = 0;152 float val = 0.f;
152 153
153 for (i = 0; i < s->nb_inputs; i++) {154 for (i = 0; i < s->nb_inputs; i++) {
154 uint8_t src = in[i]->data[p][y * in[i]->linesize[p] + x];155 uint8_t src = in[i]->data[p][y * in[i]->linesize[p] + x];
155 156
156 val += src * s->weights[i];157 val += src * weights[i];
157 }158 }
158 159
159 dst[x] = av_clip_uint8(val * s->wfactor);160 dst[x] = av_clip_uint8(lrintf(val * s->wfactor));
160 }161 }
161 162
162 dst += out->linesize[p];163 dst += out->linesize[p];
@@ -170,15 +171,15 @@ static int mix_frames(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) · 7 unmodified lines
170 171
171 for (y = slice_start; y < slice_end; y++) {172 for (y = slice_start; y < slice_end; y++) {
172 for (x = 0; x < s->linesize[p] / 2; x++) {173 for (x = 0; x < s->linesize[p] / 2; x++) {
173 int val = 0;174 float val = 0.f;
174 175
175 for (i = 0; i < s->nb_inputs; i++) {176 for (i = 0; i < s->nb_inputs; i++) {
176 uint16_t src = AV_RN16(in[i]->data[p] + y * in[i]->linesize[p] + x * 2);177 uint16_t src = AV_RN16(in[i]->data[p] + y * in[i]->linesize[p] + x * 2);
177 178
178 val += src * s->weights[i];179 val += src * weights[i];
179 }180 }
180 181
181 dst[x] = av_clip(val * s->wfactor, 0, s->max);182 dst[x] = av_clip(lrintf(val * s->wfactor), 0, s->max);
182 }183 }
183 184
184 dst += out->linesize[p] / 2;185 dst += out->linesize[p] / 2;

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