C = bsrc[-stride];
bsrc[0] += C;
A = bsrc[0];
- for (i = 1; i < width; i++) {
+ for (i = 1; i < FFMIN(width, 16); i++) { /* scalar loop (DSP need align 16) */
B = bsrc[i - stride];
bsrc[i] += mid_pred(A, B, (uint8_t)(A + B - C));
C = B;
A = bsrc[i];
}
+ if (width > 16)
+ c->llviddsp.add_median_pred(bsrc + 16, bsrc - stride + 16,
+ bsrc + 16, width - 16, &A, &B);
+
bsrc += stride;
// the rest of lines use continuous median prediction
for (j = 2; j < slice_height; j++) {
C = bsrc[-stride2];
bsrc[0] += C;
A = bsrc[0];
- for (i = 1; i < width; i++) {
+ for (i = 1; i < FFMIN(width, 16); i++) { /* scalar loop (DSP need align 16) */
B = bsrc[i - stride2];
bsrc[i] += mid_pred(A, B, (uint8_t)(A + B - C));
C = B;
A = bsrc[i];
}
+ if (width > 16)
+ c->llviddsp.add_median_pred(bsrc + 16, bsrc - stride2 + 16,
+ bsrc + 16, width - 16, &A, &B);
+
c->llviddsp.add_median_pred(bsrc + stride, bsrc - stride,
bsrc + stride, width, &A, &B);
bsrc += stride2;