AImageReaderVendorTest: Add check for callbacks.
Bug: 119838731
Test: AImageReaderVendorTest
Change-Id: I6bea0aa21aa8159aabf03ba1dd8cba27d7db1355
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/camera/ndk/ndk_vendor/tests/AImageReaderVendorTest.cpp b/camera/ndk/ndk_vendor/tests/AImageReaderVendorTest.cpp
index b1e501b..579412e 100644
--- a/camera/ndk/ndk_vendor/tests/AImageReaderVendorTest.cpp
+++ b/camera/ndk/ndk_vendor/tests/AImageReaderVendorTest.cpp
@@ -209,7 +209,18 @@
int takePicture() {
int seqId;
- return ACameraCaptureSession_capture(mSession, nullptr, 1, &mStillRequest, &seqId);
+ return ACameraCaptureSession_capture(mSession, &mCaptureCallbacks, 1, &mStillRequest,
+ &seqId);
+ }
+
+ bool checkCallbacks(int pictureCount) {
+ std::lock_guard<std::mutex> lock(mMutex);
+ if (mCompletedCaptureCallbackCount != pictureCount) {
+ ALOGE("Completed capture callaback count not as expected. expected %d actual %d",
+ pictureCount, mCompletedCaptureCallbackCount);
+ return false;
+ }
+ return true;
}
static void onDeviceDisconnected(void* /*obj*/, ACameraDevice* /*device*/) {}
@@ -246,6 +257,26 @@
bool mIsCameraReady = false;
const char* mCameraId;
+ int mCompletedCaptureCallbackCount = 0;
+ std::mutex mMutex;
+ ACameraCaptureSession_captureCallbacks mCaptureCallbacks = {
+ // TODO: Add tests for other callbacks
+ this, // context
+ nullptr, // onCaptureStarted
+ nullptr, // onCaptureProgressed
+ // onCaptureCompleted, called serially, so no lock needed.
+ [](void* ctx , ACameraCaptureSession *, ACaptureRequest *,
+ const ACameraMetadata *) {
+ CameraHelper *ch = static_cast<CameraHelper *>(ctx);
+ std::lock_guard<std::mutex> lock(ch->mMutex);
+ ch->mCompletedCaptureCallbackCount++;
+ },
+ nullptr, // onCaptureFailed
+ nullptr, // onCaptureSequenceCompleted
+ nullptr, // onCaptureSequenceAborted
+ nullptr, // onCaptureBufferLost
+ };
+
};
class ImageReaderTestCase {
@@ -445,34 +476,36 @@
AImageReader_BufferRemovedListener mReaderDetachedCb{this, onBufferRemoved};
};
-int takePictures(uint64_t readerUsage, int readerMaxImages, bool readerAsync, int pictureCount) {
+bool takePictures(uint64_t readerUsage, int readerMaxImages, bool readerAsync, int pictureCount) {
int ret = 0;
-
ImageReaderTestCase testCase(
kTestImageWidth, kTestImageHeight, kTestImageFormat, readerUsage, readerMaxImages,
readerAsync);
ret = testCase.initImageReader();
if (ret < 0) {
- return ret;
+ ALOGE("Unable to initialize ImageReader");
+ return false;
}
CameraHelper cameraHelper(testCase.getNativeWindow());
ret = cameraHelper.initCamera();
if (ret < 0) {
- return ret;
+ ALOGE("Unable to initialize camera helper");
+ return false;
}
if (!cameraHelper.isCameraReady()) {
ALOGW("Camera is not ready after successful initialization. It's either due to camera on "
"board lacks BACKWARDS_COMPATIBLE capability or the device does not have camera on "
"board.");
- return 0;
+ return true;
}
for (int i = 0; i < pictureCount; i++) {
ret = cameraHelper.takePicture();
if (ret < 0) {
- return ret;
+ ALOGE("Unable to take picture");
+ return false;
}
}
@@ -485,7 +518,8 @@
break;
}
}
- return testCase.getAcquiredImageCount() == pictureCount ? 0 : -1;
+ return testCase.getAcquiredImageCount() == pictureCount &&
+ cameraHelper.checkCallbacks(pictureCount);
}
class AImageReaderWindowHandleTest : public ::testing::Test {
@@ -504,7 +538,7 @@
for (auto& readerMaxImages : {1, 4, 8}) {
for (auto& readerAsync : {true, false}) {
for (auto& pictureCount : {1, 4, 8}) {
- if (takePictures(readerUsage, readerMaxImages, readerAsync, pictureCount)) {
+ if (!takePictures(readerUsage, readerMaxImages, readerAsync, pictureCount)) {
ALOGE("Test takePictures failed for test case usage=%" PRIu64 ", maxImages=%d, "
"async=%d, pictureCount=%d",
readerUsage, readerMaxImages, readerAsync, pictureCount);