Showing the changes to libavfilter (1 of 1 file). Show all
Unified · Split
| @@ -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; |