summaryrefslogtreecommitdiff
path: root/camera/common/1.0/default/HandleImporter.cpp
diff options
context:
space:
mode:
authorEmilian Peev <epeev@google.com>2021-12-13 15:13:46 -0800
committerEmilian Peev <epeev@google.com>2022-01-05 15:46:50 -0800
commitb5f634fc37d70e9c595efa318f10b35e201180bd (patch)
treec39d801dbf3a1ee6d33bdb58a239266a95e393b6 /camera/common/1.0/default/HandleImporter.cpp
parentffd7f9ce4319ec9c227779770efb642e46dacd1d (diff)
Camera: Add device 3.8 and HDR10 native APIs
Initial set of native API extensions to support 10-bit output capable device: - Identification - Configuration - Data plumbing Bug: 195946346 Test: adb shell /data/nativetest64/VtsHalCameraProviderV2_4TargetTest/VtsHalCameraProviderV2_4TargetTest --gtest_filter=PerInstance/CameraHidlTest.process10BitDynamicRangeRequest/0_internal_0 Change-Id: I526120944232ce211259cbd215935db7e445a6c5
Diffstat (limited to 'camera/common/1.0/default/HandleImporter.cpp')
-rw-r--r--camera/common/1.0/default/HandleImporter.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/camera/common/1.0/default/HandleImporter.cpp b/camera/common/1.0/default/HandleImporter.cpp
index 7fcf52330c..fbe8686766 100644
--- a/camera/common/1.0/default/HandleImporter.cpp
+++ b/camera/common/1.0/default/HandleImporter.cpp
@@ -30,6 +30,7 @@ namespace helper {
using aidl::android::hardware::graphics::common::PlaneLayout;
using aidl::android::hardware::graphics::common::PlaneLayoutComponent;
using aidl::android::hardware::graphics::common::PlaneLayoutComponentType;
+using MetadataType = android::hardware::graphics::mapper::V4_0::IMapper::MetadataType;
using MapperErrorV2 = android::hardware::graphics::mapper::V2_0::Error;
using MapperErrorV3 = android::hardware::graphics::mapper::V3_0::Error;
using MapperErrorV4 = android::hardware::graphics::mapper::V4_0::Error;
@@ -123,6 +124,21 @@ YCbCrLayout HandleImporter::lockYCbCrInternal(const sp<M> mapper, buffer_handle_
return layout;
}
+bool isMetadataPesent(const sp<IMapperV4> mapper, const buffer_handle_t& buf,
+ MetadataType metadataType) {
+ auto buffer = const_cast<native_handle_t*>(buf);
+ mapper->get(buffer, metadataType, [] (const auto& tmpError,
+ const auto& tmpMetadata) {
+ if (tmpError == MapperErrorV4::NONE) {
+ return tmpMetadata.size() > 0;
+ } else {
+ ALOGE("%s: failed to get metadata %d!", __FUNCTION__, tmpError);
+ return false;
+ }});
+
+ return false;
+}
+
std::vector<PlaneLayout> getPlaneLayouts(const sp<IMapperV4> mapper, buffer_handle_t& buf) {
auto buffer = const_cast<native_handle_t*>(buf);
std::vector<PlaneLayout> planeLayouts;
@@ -449,6 +465,55 @@ int HandleImporter::unlock(buffer_handle_t& buf) {
return -1;
}
+bool HandleImporter::isSmpte2086Present(const buffer_handle_t& buf) {
+ Mutex::Autolock lock(mLock);
+
+ if (!mInitialized) {
+ initializeLocked();
+ }
+
+ if (mMapperV4 != nullptr) {
+ return isMetadataPesent(mMapperV4, buf, gralloc4::MetadataType_Smpte2086);
+ } else {
+ ALOGE("%s: mMapperV4 is null! Query not supported!", __FUNCTION__);
+ }
+
+ return false;
+}
+
+bool HandleImporter::isSmpte2094_10Present(const buffer_handle_t& buf) {
+ Mutex::Autolock lock(mLock);
+
+ if (!mInitialized) {
+ initializeLocked();
+ }
+
+ if (mMapperV4 != nullptr) {
+ return isMetadataPesent(mMapperV4, buf, gralloc4::MetadataType_Smpte2094_10);
+ } else {
+ ALOGE("%s: mMapperV4 is null! Query not supported!", __FUNCTION__);
+ }
+
+ return false;
+}
+
+bool HandleImporter::isSmpte2094_40Present(const buffer_handle_t& buf) {
+ Mutex::Autolock lock(mLock);
+
+ if (!mInitialized) {
+ initializeLocked();
+ }
+
+ if (mMapperV4 != nullptr) {
+ return isMetadataPesent(mMapperV4, buf, gralloc4::MetadataType_Smpte2094_40);
+ } else {
+ ALOGE("%s: mMapperV4 is null! Query not supported!", __FUNCTION__);
+ }
+
+ return false;
+}
+
+
} // namespace helper
} // namespace V1_0
} // namespace common