avfilter/vf_v360: improve interpolation for equirect input at poles

This commit is contained in:
Paul B Mahol 2020-02-29 22:27:11 +01:00
parent be82dc175b
commit 8f3df1dd4d
1 changed files with 18 additions and 2 deletions

View File

@ -639,6 +639,22 @@ static inline int reflecty(int y, int h)
return y;
}
/**
* Reflect x operation for equirect.
*
* @param x input horizontal position
* @param y input vertical position
* @param w input width
* @param h input height
*/
static inline int ereflectx(int x, int y, int w, int h)
{
if (y < 0 || y >= h)
x += w / 2;
return mod(x, w);
}
/**
* Reflect x operation.
*
@ -1745,8 +1761,8 @@ static int xyz_to_equirect(const V360Context *s,
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
us[i][j] = mod(ui + j - 1, width);
vs[i][j] = av_clip(vi + i - 1, 0, height - 1);
us[i][j] = ereflectx(ui + j - 1, vi + i - 1, width, height);
vs[i][j] = reflecty(vi + i - 1, height);
}
}