[FFmpeg-cvslog] avfilter/vf_v360: improve tetrahedron input format at frame borders

Paul B Mahol git at videolan.org
Sat Feb 29 15:40:53 EET 2020


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sat Feb 29 14:22:51 2020 +0100| [2dfd9445ff9b69a2b826e7b4c21c316689000147] | committer: Paul B Mahol

avfilter/vf_v360: improve tetrahedron input format at frame borders

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2dfd9445ff9b69a2b826e7b4c21c316689000147
---

 libavfilter/vf_v360.c | 37 +++++++++++++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 2 deletions(-)

diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c
index 1cdbaf7330..90e45b4fd0 100644
--- a/libavfilter/vf_v360.c
+++ b/libavfilter/vf_v360.c
@@ -622,6 +622,39 @@ static inline int mod(int a, int b)
     }
 }
 
+/**
+ * Reflect y operation.
+ *
+ * @param y input vertical position
+ * @param h input height
+ */
+static inline int reflecty(int y, int h)
+{
+    if (y < 0) {
+        return -y;
+    } else if (y >= h) {
+        return 2 * h - 1 - y;
+    }
+
+    return y;
+}
+
+/**
+ * Reflect x operation.
+ *
+ * @param x input horizontal position
+ * @param y input vertical position
+ * @param w input width
+ * @param h input height
+ */
+static inline int reflectx(int x, int y, int w, int h)
+{
+    if (y < 0 || y >= h)
+        return w - 1 - x;
+
+    return mod(x, w);
+}
+
 /**
  * Convert char to corresponding direction.
  * Used for cubemap options.
@@ -2746,8 +2779,8 @@ static int xyz_to_tetrahedron(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] = reflectx(ui + j - 1, vi + i - 1, width, height);
+            vs[i][j] = reflecty(vi + i - 1, height);
         }
     }
 



More information about the ffmpeg-cvslog mailing list