gralloc/metadata: Add support for single buffer mode
Add support for setting single buffer mode on a buffer via gralloc
perform from gfx
Change-Id: I7640b3b984ebc1c4c8fcaedfb3e222ec989a84cb
diff --git a/libgralloc/gralloc_priv.h b/libgralloc/gralloc_priv.h
index 38a6235..efc7d67 100644
--- a/libgralloc/gralloc_priv.h
+++ b/libgralloc/gralloc_priv.h
@@ -88,6 +88,7 @@
#define GRALLOC_MODULE_PERFORM_GET_RGB_DATA_ADDRESS 10
#define GRALLOC_MODULE_PERFORM_GET_IGC 11
#define GRALLOC_MODULE_PERFORM_SET_IGC 12
+#define GRALLOC_MODULE_PERFORM_SET_SINGLE_BUFFER_MODE 13
/* OEM specific HAL formats */
diff --git a/libgralloc/mapper.cpp b/libgralloc/mapper.cpp
index 8d8532b..5e8e59f 100644
--- a/libgralloc/mapper.cpp
+++ b/libgralloc/mapper.cpp
@@ -480,6 +480,15 @@
}
} break;
+ case GRALLOC_MODULE_PERFORM_SET_SINGLE_BUFFER_MODE:
+ {
+ private_handle_t* hnd = va_arg(args, private_handle_t*);
+ bool *enable = va_arg(args, bool*);
+ if (private_handle_t::validate(hnd)) {
+ return res;
+ }
+ setMetaData(hnd, SET_SINGLE_BUFFER_MODE, enable);
+ } break;
default:
break;
}
diff --git a/libqdutils/qdMetaData.cpp b/libqdutils/qdMetaData.cpp
index a66704e..626f250 100644
--- a/libqdutils/qdMetaData.cpp
+++ b/libqdutils/qdMetaData.cpp
@@ -102,6 +102,9 @@
case SET_IGC:
data->igc = *((IGC_t *)param);
break;
+ case SET_SINGLE_BUFFER_MODE:
+ data->isSingleBufferMode = *((bool *)param);
+ break;
default:
ALOGE("Unknown paramType %d", paramType);
break;
diff --git a/libqdutils/qdMetaData.h b/libqdutils/qdMetaData.h
index 532a6d8..ef299f6 100644
--- a/libqdutils/qdMetaData.h
+++ b/libqdutils/qdMetaData.h
@@ -97,6 +97,9 @@
uint32_t s3dFormat;
/* VENUS output buffer is linear for UBWC Interlaced video */
uint32_t linearFormat;
+ /* Set by graphics to indicate that this buffer will be written to but not
+ * swapped out */
+ bool isSingleBufferMode;
};
enum DispParamType {
@@ -114,6 +117,7 @@
S3D_FORMAT = 0x800,
LINEAR_FORMAT = 0x1000,
SET_IGC = 0x2000,
+ SET_SINGLE_BUFFER_MODE = 0x4000,
};
struct private_handle_t;