Message ID | 20240509064918.6654-4-cus@passwd.hu |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel,1/4] avfilter/vsrc_testsrc: do not round down width and height for color src | expand |
On Thu, May 09, 2024 at 08:49:18AM +0200, Marton Balint wrote: > Fixes ticket #9740. > > Signed-off-by: Marton Balint <cus@passwd.hu> > --- > libavfilter/vf_geq.c | 20 ++++++++++++-------- > 1 file changed, 12 insertions(+), 8 deletions(-) > > diff --git a/libavfilter/vf_geq.c b/libavfilter/vf_geq.c > index dbe50e5250..12604d44a2 100644 > --- a/libavfilter/vf_geq.c > +++ b/libavfilter/vf_geq.c > @@ -112,8 +112,12 @@ static inline double getpix(void *priv, double x, double y, int plane) > return 0; > > if (geq->interpolation == INTERP_BILINEAR) { > - xi = x = av_clipd(x, 0, w - 2); > - yi = y = av_clipd(y, 0, h - 2); > + int xn, yn; > + > + xi = x = av_clipd(x, 0, w - 1); > + yi = y = av_clipd(y, 0, h - 1); > + xn = av_clip(xi + 1, 0, w - 1); > + yn = av_clip(yi + 1, 0, h - 1); xi + 1 should not need cliping, a FFMIN() should be enough thx [...]
On Sat, 11 May 2024, Michael Niedermayer wrote: > On Thu, May 09, 2024 at 08:49:18AM +0200, Marton Balint wrote: >> Fixes ticket #9740. >> >> Signed-off-by: Marton Balint <cus@passwd.hu> >> --- >> libavfilter/vf_geq.c | 20 ++++++++++++-------- >> 1 file changed, 12 insertions(+), 8 deletions(-) >> >> diff --git a/libavfilter/vf_geq.c b/libavfilter/vf_geq.c >> index dbe50e5250..12604d44a2 100644 >> --- a/libavfilter/vf_geq.c >> +++ b/libavfilter/vf_geq.c >> @@ -112,8 +112,12 @@ static inline double getpix(void *priv, double x, double y, int plane) >> return 0; >> >> if (geq->interpolation == INTERP_BILINEAR) { >> - xi = x = av_clipd(x, 0, w - 2); >> - yi = y = av_clipd(y, 0, h - 2); >> + int xn, yn; >> + >> + xi = x = av_clipd(x, 0, w - 1); >> + yi = y = av_clipd(y, 0, h - 1); >> + xn = av_clip(xi + 1, 0, w - 1); >> + yn = av_clip(yi + 1, 0, h - 1); > > xi + 1 should not need cliping, a FFMIN() should be enough Ok, will apply the series with that change. Thanks, Marton
diff --git a/libavfilter/vf_geq.c b/libavfilter/vf_geq.c index dbe50e5250..12604d44a2 100644 --- a/libavfilter/vf_geq.c +++ b/libavfilter/vf_geq.c @@ -112,8 +112,12 @@ static inline double getpix(void *priv, double x, double y, int plane) return 0; if (geq->interpolation == INTERP_BILINEAR) { - xi = x = av_clipd(x, 0, w - 2); - yi = y = av_clipd(y, 0, h - 2); + int xn, yn; + + xi = x = av_clipd(x, 0, w - 1); + yi = y = av_clipd(y, 0, h - 1); + xn = av_clip(xi + 1, 0, w - 1); + yn = av_clip(yi + 1, 0, h - 1); x -= xi; y -= yi; @@ -122,17 +126,17 @@ static inline double getpix(void *priv, double x, double y, int plane) const uint16_t *src16 = (const uint16_t*)src; linesize /= 2; - return (1-y)*((1-x)*src16[xi + yi * linesize] + x*src16[xi + 1 + yi * linesize]) - + y *((1-x)*src16[xi + (yi+1) * linesize] + x*src16[xi + 1 + (yi+1) * linesize]); + return (1-y)*((1-x)*src16[xi + yi * linesize] + x*src16[xn + yi * linesize]) + + y *((1-x)*src16[xi + yn * linesize] + x*src16[xn + yn * linesize]); } else if (geq->bps == 32) { const float *src32 = (const float*)src; linesize /= 4; - return (1-y)*((1-x)*src32[xi + yi * linesize] + x*src32[xi + 1 + yi * linesize]) - + y *((1-x)*src32[xi + (yi+1) * linesize] + x*src32[xi + 1 + (yi+1) * linesize]); + return (1-y)*((1-x)*src32[xi + yi * linesize] + x*src32[xn + yi * linesize]) + + y *((1-x)*src32[xi + yn * linesize] + x*src32[xn + yn * linesize]); } else if (geq->bps == 8) { - return (1-y)*((1-x)*src[xi + yi * linesize] + x*src[xi + 1 + yi * linesize]) - + y *((1-x)*src[xi + (yi+1) * linesize] + x*src[xi + 1 + (yi+1) * linesize]); + return (1-y)*((1-x)*src[xi + yi * linesize] + x*src[xn + yi * linesize]) + + y *((1-x)*src[xi + yn * linesize] + x*src[xn + yn * linesize]); } } else { xi = av_clipd(x, 0, w - 1);
Fixes ticket #9740. Signed-off-by: Marton Balint <cus@passwd.hu> --- libavfilter/vf_geq.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)