History

avfilter/vf_geq: fix interpolation with 1 pixel width/height

Fixes ticket #9740.

Marton Balint committed 2 years ago

Commit b0093ab1 parent 64330e31 file · +12 −8Browse files

Unified · Split

libavfilter/vf_geq.c+12−8
@@ -112,8 +112,12 @@ static inline double getpix(void *priv, double x, double y, int plane) · 111 unmodified lines
112112 return 0;
113113
114114 if (geq->interpolation == INTERP_BILINEAR) {
115− xi = x = av_clipd(x, 0, w - 2);
116− yi = y = av_clipd(y, 0, h - 2);
115+ int xn, yn;
116+
117+ xi = x = av_clipd(x, 0, w - 1);
118+ yi = y = av_clipd(y, 0, h - 1);
119+ xn = FFMIN(xi + 1, w - 1);
120+ yn = FFMIN(yi + 1, h - 1);
117121
118122 x -= xi;
119123 y -= yi;
@@ -122,17 +126,17 @@ static inline double getpix(void *priv, double x, double y, int plane) · 2 unmodified lines
122126 const uint16_t *src16 = (const uint16_t*)src;
123127 linesize /= 2;
124128
125− return (1-y)*((1-x)*src16[xi + yi * linesize] + x*src16[xi + 1 + yi * linesize])
126− + y *((1-x)*src16[xi + (yi+1) * linesize] + x*src16[xi + 1 + (yi+1) * linesize]);
129+ return (1-y)*((1-x)*src16[xi + yi * linesize] + x*src16[xn + yi * linesize])
130+ + y *((1-x)*src16[xi + yn * linesize] + x*src16[xn + yn * linesize]);
127131 } else if (geq->bps == 32) {
128132 const float *src32 = (const float*)src;
129133 linesize /= 4;
130134
131− return (1-y)*((1-x)*src32[xi + yi * linesize] + x*src32[xi + 1 + yi * linesize])
132− + y *((1-x)*src32[xi + (yi+1) * linesize] + x*src32[xi + 1 + (yi+1) * linesize]);
135+ return (1-y)*((1-x)*src32[xi + yi * linesize] + x*src32[xn + yi * linesize])
136+ + y *((1-x)*src32[xi + yn * linesize] + x*src32[xn + yn * linesize]);
133137 } else if (geq->bps == 8) {
134− return (1-y)*((1-x)*src[xi + yi * linesize] + x*src[xi + 1 + yi * linesize])
135− + y *((1-x)*src[xi + (yi+1) * linesize] + x*src[xi + 1 + (yi+1) * linesize]);
138+ return (1-y)*((1-x)*src[xi + yi * linesize] + x*src[xn + yi * linesize])
139+ + y *((1-x)*src[xi + yn * linesize] + x*src[xn + yn * linesize]);
136140 }
137141 } else {
138142 xi = av_clipd(x, 0, w - 1);

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