camera2 (v)ndk: Add APIs for pre-allocation of surface buffers.
Clients may need to pre-allocate stream buffers in order to reduce
affects of buffer-allocation time such as frame jank till steady state
capture is reached (eg: for a repeating request).
The SDK already has an api which does this :
CameraCaptureSession.prepare(Surface). We're exposing a similar API to
the ndk/ vndk here.
Bug: 259735869
Test: NdkCameraDeviceTest.java
Change-Id: Iee8559fcebd61a6886f23779a05351b52633f851
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/services/camera/libcameraservice/aidl/AidlCameraDeviceCallbacks.cpp b/services/camera/libcameraservice/aidl/AidlCameraDeviceCallbacks.cpp
index 4c6d6f6..e648a36 100644
--- a/services/camera/libcameraservice/aidl/AidlCameraDeviceCallbacks.cpp
+++ b/services/camera/libcameraservice/aidl/AidlCameraDeviceCallbacks.cpp
@@ -178,8 +178,9 @@
return binder::Status::ok();
}
-binder::Status AidlCameraDeviceCallbacks::onPrepared(int32_t) {
- // not implemented
+binder::Status AidlCameraDeviceCallbacks::onPrepared(int32_t streamId) {
+ auto ret = mBase->onPrepared(streamId);
+ LOG_STATUS_ERROR_IF_NOT_OK(ret, "onPrepared")
return binder::Status::ok();
}
@@ -191,6 +192,7 @@
LOG_STATUS_ERROR_IF_NOT_OK(ret, "onRepeatingRequestError")
return binder::Status::ok();
}
+
binder::Status AidlCameraDeviceCallbacks::onRequestQueueEmpty() {
// not implemented
return binder::Status::ok();
diff --git a/services/camera/libcameraservice/aidl/AidlCameraDeviceUser.cpp b/services/camera/libcameraservice/aidl/AidlCameraDeviceUser.cpp
index d9ec0b6..b9f1224 100644
--- a/services/camera/libcameraservice/aidl/AidlCameraDeviceUser.cpp
+++ b/services/camera/libcameraservice/aidl/AidlCameraDeviceUser.cpp
@@ -56,6 +56,7 @@
mDeviceRemote(deviceRemote) {
mInitSuccess = initDevice();
}
+
bool AidlCameraDeviceUser::initDevice() {
// TODO: Get request and result metadata queue size from a system property.
int32_t reqFMQSize = CAMERA_REQUEST_METADATA_QUEUE_SIZE;
@@ -95,6 +96,11 @@
return ScopedAStatus::ok();
}
+ndk::ScopedAStatus AidlCameraDeviceUser::prepare(int32_t in_streamId) {
+ UStatus ret = mDeviceRemote->prepare(in_streamId);
+ return fromUStatus(ret);
+}
+
ndk::ScopedAStatus AidlCameraDeviceUser::submitRequestList(
const std::vector<SCaptureRequest>& in_requestList, bool in_isRepeating,
SSubmitInfo* _aidl_return) {
diff --git a/services/camera/libcameraservice/aidl/AidlCameraDeviceUser.h b/services/camera/libcameraservice/aidl/AidlCameraDeviceUser.h
index 41a3f43..afff197 100644
--- a/services/camera/libcameraservice/aidl/AidlCameraDeviceUser.h
+++ b/services/camera/libcameraservice/aidl/AidlCameraDeviceUser.h
@@ -84,6 +84,7 @@
MQDescriptor<int8_t, SynchronizedReadWrite>* _aidl_return) override;
ndk::ScopedAStatus isSessionConfigurationSupported(
const SSessionConfiguration& in_sessionConfiguration, bool* _aidl_return) override;
+ ndk::ScopedAStatus prepare(int32_t in_streamId) override;
ndk::ScopedAStatus submitRequestList(const std::vector<SCaptureRequest>& in_requestList,
bool in_isRepeating, SSubmitInfo* _aidl_return) override;
ndk::ScopedAStatus updateOutputConfiguration(