cameraserver: Fix HIDL vs AIDL CameraBlobId discrepancy; Move HIDL into seperate source files.
- Have cameraserver fix the discrepancy between HIDL and AIDL CameraBlobId enum backing type.
- Move HIDL specific code into seperate source files (preparation for b/219020552).
Bug: 219020552
Bug: 229688810
Test: build; use GCA (basic validity)
Test: atest DngCreatorTest.java#testRaw16JpegConsistency (both HIDL and AIDL GCH)
Change-Id: I317c434d22e5e93e7e4cf5ab3aebc4efc93d2d46
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/services/camera/libcameraservice/api2/CompositeStream.h b/services/camera/libcameraservice/api2/CompositeStream.h
index d32b71c..600bd28 100644
--- a/services/camera/libcameraservice/api2/CompositeStream.h
+++ b/services/camera/libcameraservice/api2/CompositeStream.h
@@ -117,41 +117,6 @@
// Composite streams should behave accordingly.
void enableErrorState();
- // Utility class to lock and unlock a GraphicBuffer
- class GraphicBufferLocker {
- public:
- GraphicBufferLocker(sp<GraphicBuffer> buffer) : _buffer(buffer) {}
-
- status_t lockAsync(void** dstBuffer, int fenceFd) {
- if (_buffer == nullptr) return BAD_VALUE;
-
- status_t res = OK;
- if (!_locked) {
- status_t res = _buffer->lockAsync(GRALLOC_USAGE_SW_WRITE_OFTEN,
- dstBuffer, fenceFd);
- if (res == OK) {
- _locked = true;
- }
- }
- return res;
- }
-
- ~GraphicBufferLocker() {
- if (_locked && _buffer != nullptr) {
- auto res = _buffer->unlock();
- if (res != OK) {
- ALOGE("%s: Error trying to unlock buffer: %s (%d)", __FUNCTION__,
- strerror(-res), res);
- }
- }
- }
-
- private:
- sp<GraphicBuffer> _buffer;
- bool _locked = false;
- };
-
-
wp<CameraDeviceBase> mDevice;
wp<camera3::StatusTracker> mStatusTracker;
wp<hardware::camera2::ICameraDeviceCallbacks> mRemoteCallback;
diff --git a/services/camera/libcameraservice/api2/DepthCompositeStream.cpp b/services/camera/libcameraservice/api2/DepthCompositeStream.cpp
index aa057c7..048d85d 100644
--- a/services/camera/libcameraservice/api2/DepthCompositeStream.cpp
+++ b/services/camera/libcameraservice/api2/DepthCompositeStream.cpp
@@ -18,6 +18,9 @@
#define ATRACE_TAG ATRACE_TAG_CAMERA
//#define LOG_NDEBUG 0
+#include <aidl/android/hardware/camera/device/CameraBlob.h>
+#include <aidl/android/hardware/camera/device/CameraBlobId.h>
+
#include "api1/client2/JpegProcessor.h"
#include "common/CameraProviderManager.h"
#include "utils/SessionConfigurationUtils.h"
@@ -30,6 +33,9 @@
namespace android {
namespace camera3 {
+using aidl::android::hardware::camera::device::CameraBlob;
+using aidl::android::hardware::camera::device::CameraBlobId;
+
DepthCompositeStream::DepthCompositeStream(sp<CameraDeviceBase> device,
wp<hardware::camera2::ICameraDeviceCallbacks> cb) :
CompositeStream(device, cb),
@@ -367,7 +373,7 @@
return res;
}
- size_t finalJpegSize = actualJpegSize + sizeof(struct camera_jpeg_blob);
+ size_t finalJpegSize = actualJpegSize + sizeof(CameraBlob);
if (finalJpegSize > finalJpegBufferSize) {
ALOGE("%s: Final jpeg buffer not large enough for the jpeg blob header", __FUNCTION__);
outputANW->cancelBuffer(mOutputSurface.get(), anb, /*fence*/ -1);
@@ -383,10 +389,10 @@
ALOGV("%s: Final jpeg size: %zu", __func__, finalJpegSize);
uint8_t* header = static_cast<uint8_t *> (dstBuffer) +
- (gb->getWidth() - sizeof(struct camera_jpeg_blob));
- struct camera_jpeg_blob *blob = reinterpret_cast<struct camera_jpeg_blob*> (header);
- blob->jpeg_blob_id = CAMERA_JPEG_BLOB_ID;
- blob->jpeg_size = actualJpegSize;
+ (gb->getWidth() - sizeof(CameraBlob));
+ CameraBlob *blob = reinterpret_cast<CameraBlob*> (header);
+ blob->blobId = CameraBlobId::JPEG;
+ blob->blobSizeBytes = actualJpegSize;
outputANW->queueBuffer(mOutputSurface.get(), anb, /*fence*/ -1);
return res;
diff --git a/services/camera/libcameraservice/api2/HeicCompositeStream.cpp b/services/camera/libcameraservice/api2/HeicCompositeStream.cpp
index 5da77d6..54cc27a 100644
--- a/services/camera/libcameraservice/api2/HeicCompositeStream.cpp
+++ b/services/camera/libcameraservice/api2/HeicCompositeStream.cpp
@@ -23,7 +23,8 @@
#include <pthread.h>
#include <sys/syscall.h>
-#include <android/hardware/camera/device/3.5/types.h>
+#include <aidl/android/hardware/camera/device/CameraBlob.h>
+#include <aidl/android/hardware/camera/device/CameraBlobId.h>
#include <libyuv.h>
#include <gui/Surface.h>
#include <utils/Log.h>
@@ -41,8 +42,8 @@
#include "HeicEncoderInfoManager.h"
#include "HeicCompositeStream.h"
-using android::hardware::camera::device::V3_5::CameraBlob;
-using android::hardware::camera::device::V3_5::CameraBlobId;
+using aidl::android::hardware::camera::device::CameraBlob;
+using aidl::android::hardware::camera::device::CameraBlobId;
namespace android {
namespace camera3 {
@@ -1161,10 +1162,10 @@
// Fill in HEIC header
uint8_t *header = static_cast<uint8_t*>(dstBuffer) + mMaxHeicBufferSize - sizeof(CameraBlob);
- struct CameraBlob *blobHeader = (struct CameraBlob *)header;
+ CameraBlob *blobHeader = (CameraBlob *)header;
// Must be in sync with CAMERA3_HEIC_BLOB_ID in android_media_Utils.cpp
blobHeader->blobId = static_cast<CameraBlobId>(0x00FE);
- blobHeader->blobSize = fSize;
+ blobHeader->blobSizeBytes = fSize;
res = native_window_set_buffers_timestamp(mOutputSurface.get(), inputFrame.timestamp);
if (res != OK) {
@@ -1426,15 +1427,15 @@
size_t expectedSize = 0;
// First check for EXIF transport header at the end of the buffer
- const uint8_t *header = appSegmentBuffer + (maxSize - sizeof(struct CameraBlob));
- const struct CameraBlob *blob = (const struct CameraBlob*)(header);
+ const uint8_t *header = appSegmentBuffer + (maxSize - sizeof(CameraBlob));
+ const CameraBlob *blob = (const CameraBlob*)(header);
if (blob->blobId != CameraBlobId::JPEG_APP_SEGMENTS) {
- ALOGE("%s: Invalid EXIF blobId %hu", __FUNCTION__, blob->blobId);
+ ALOGE("%s: Invalid EXIF blobId %d", __FUNCTION__, blob->blobId);
return 0;
}
- expectedSize = blob->blobSize;
- if (expectedSize == 0 || expectedSize > maxSize - sizeof(struct CameraBlob)) {
+ expectedSize = blob->blobSizeBytes;
+ if (expectedSize == 0 || expectedSize > maxSize - sizeof(CameraBlob)) {
ALOGE("%s: Invalid blobSize %zu.", __FUNCTION__, expectedSize);
return 0;
}
@@ -1637,7 +1638,7 @@
maxAppsSegment = entry.data.u8[0] < 1 ? 1 :
entry.data.u8[0] > 16 ? 16 : entry.data.u8[0];
}
- return maxAppsSegment * (2 + 0xFFFF) + sizeof(struct CameraBlob);
+ return maxAppsSegment * (2 + 0xFFFF) + sizeof(CameraBlob);
}
void HeicCompositeStream::updateCodecQualityLocked(int32_t quality) {