Unified · Split
| @@ -138,6 +138,7 @@ static int mix_frames(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) · 137 unmodified lines | ||
| 138 | 138 | ThreadData *td = arg; |
| 139 | 139 | AVFrame **in = td->in; |
| 140 | 140 | AVFrame *out = td->out; |
| 141 | + const float *weights = s->weights; | |
| 141 | 142 | int i, p, x, y; |
| 142 | 143 | |
| 143 | 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 | 150 | for (y = slice_start; y < slice_end; y++) { |
| 150 | 151 | for (x = 0; x < s->linesize[p]; x++) { |
| 151 | − int val = 0; | |
| 152 | + float val = 0.f; | |
| 152 | 153 | |
| 153 | 154 | for (i = 0; i < s->nb_inputs; i++) { |
| 154 | 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 | 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 | 172 | for (y = slice_start; y < slice_end; y++) { |
| 172 | 173 | for (x = 0; x < s->linesize[p] / 2; x++) { |
| 173 | − int val = 0; | |
| 174 | + float val = 0.f; | |
| 174 | 175 | |
| 175 | 176 | for (i = 0; i < s->nb_inputs; i++) { |
| 176 | 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 | 185 | dst += out->linesize[p] / 2; |