codec2: Gralloc blob linear buffer allocator
Bug: 143180475
Test: make libcodec2_vndk
Change-Id: I55de82ec7029d0759c4cf914ad6c92e170277c78
diff --git a/media/codec2/vndk/C2AllocatorGralloc.cpp b/media/codec2/vndk/C2AllocatorGralloc.cpp
index fecbba3..78ac355 100644
--- a/media/codec2/vndk/C2AllocatorGralloc.cpp
+++ b/media/codec2/vndk/C2AllocatorGralloc.cpp
@@ -810,6 +810,70 @@
break;
}
+ case PixelFormat4::BLOB: {
+ void* pointer = nullptr;
+ if (mMapper2) {
+ if (!mMapper2->lock(const_cast<native_handle_t*>(mBuffer), grallocUsage,
+ {(int32_t)rect.left, (int32_t)rect.top, (int32_t)rect.width,
+ (int32_t)rect.height},
+ // TODO: fence
+ hidl_handle(),
+ [&err, &pointer](const auto& maperr, const auto& mapPointer) {
+ err = maperr2error(maperr);
+ if (err == C2_OK) {
+ pointer = mapPointer;
+ }
+ }).isOk()) {
+ ALOGE("failed transaction: lock(BLOB)");
+ return C2_CORRUPTED;
+ }
+ } else if (mMapper3) {
+ if (!mMapper3->lock(
+ const_cast<native_handle_t*>(mBuffer),
+ grallocUsage,
+ { (int32_t)rect.left, (int32_t)rect.top,
+ (int32_t)rect.width, (int32_t)rect.height },
+ // TODO: fence
+ hidl_handle(),
+ [&err, &pointer](const auto &maperr, const auto &mapPointer,
+ int32_t bytesPerPixel, int32_t bytesPerStride) {
+ err = maperr2error(maperr);
+ if (err == C2_OK) {
+ pointer = mapPointer;
+ }
+ (void)bytesPerPixel;
+ (void)bytesPerStride;
+ }).isOk()) {
+ ALOGE("failed transaction: lock(BLOB) (@3.0)");
+ return C2_CORRUPTED;
+ }
+ } else {
+ if (!mMapper4->lock(
+ const_cast<native_handle_t *>(mBuffer),
+ grallocUsage,
+ { (int32_t)rect.left, (int32_t)rect.top,
+ (int32_t)rect.width, (int32_t)rect.height },
+ // TODO: fence
+ hidl_handle(),
+ [&err, &pointer](const auto &maperr, const auto &mapPointer) {
+ err = maperr2error(maperr);
+ if (err == C2_OK) {
+ pointer = mapPointer;
+ }
+ }).isOk()) {
+ ALOGE("failed transaction: lock(BLOB) (@4.0)");
+ return C2_CORRUPTED;
+ }
+ }
+ if (err != C2_OK) {
+ ALOGD("lock failed: %d", err);
+ return err;
+ }
+
+ *addr = static_cast<uint8_t*>(pointer);
+ break;
+ }
+
case PixelFormat4::YCBCR_420_888:
// fall-through
case PixelFormat4::YV12: