Use timestamp instead of frame number when generating test pattern.
Frame number is reset upon reconfiguration and causes test pattern
to be generated from point 0 as well.
Bug: 301023410
Test: manually with OpenCamera
Change-Id: Ib037293117b8ce4f143af2d36fa6aa94845c5efb
diff --git a/services/camera/virtualcamera/VirtualCameraTestInstance.cc b/services/camera/virtualcamera/VirtualCameraTestInstance.cc
index bae871d..1eac4fe 100644
--- a/services/camera/virtualcamera/VirtualCameraTestInstance.cc
+++ b/services/camera/virtualcamera/VirtualCameraTestInstance.cc
@@ -107,7 +107,7 @@
}
// Render the test pattern and update timestamp.
- testPatternProgram.draw(frameNumber++);
+ testPatternProgram.draw(ts);
eglDisplayContext.swapBuffers();
lastFrameTs = getCurrentTimestamp();
}
diff --git a/services/camera/virtualcamera/util/EglProgram.cc b/services/camera/virtualcamera/util/EglProgram.cc
index 7498fbc..9c97118 100644
--- a/services/camera/virtualcamera/util/EglProgram.cc
+++ b/services/camera/virtualcamera/util/EglProgram.cc
@@ -229,13 +229,12 @@
kTextureCoords.size(), kTextureCoords.data());
}
-bool EglTestPatternProgram::draw(int frameNumber) {
+bool EglTestPatternProgram::draw(const std::chrono::nanoseconds timestamp) {
// Load compiled shader.
glUseProgram(mProgram);
checkEglError("glUseProgram");
- // Compute point in complex plane corresponding to fractal for this frame number.
- float time = float(frameNumber) / 120.0f;
+ float time = float(timestamp.count() / 1e9) / 10;
const std::complex<float> c(std::sin(time) * 0.78f, std::cos(time) * 0.78f);
// Pass "C" constant value determining the Julia set to the shader.
diff --git a/services/camera/virtualcamera/util/EglProgram.h b/services/camera/virtualcamera/util/EglProgram.h
index d09f11e..a88308d 100644
--- a/services/camera/virtualcamera/util/EglProgram.h
+++ b/services/camera/virtualcamera/util/EglProgram.h
@@ -18,6 +18,7 @@
#define ANDROID_COMPANION_VIRTUALCAMERA_EGLPROGRAM_H
#include <array>
+#include <chrono>
#include "GLES/gl.h"
@@ -46,7 +47,7 @@
public:
EglTestPatternProgram();
- bool draw(int frameNumber);
+ bool draw(std::chrono::nanoseconds timestamp);
private:
int mPositionHandle = -1;