overlay: writeback: Add API to set output format, get writeback FB fd
Add support for setting writeback output format.
Modify the getter to query the driver for output format
if not already done.
Add API to retrieve writeback fb node's fd.
Change-Id: I4a3681b6501c41a094e4cd840591b707b4d7ed66
diff --git a/liboverlay/overlayWriteback.cpp b/liboverlay/overlayWriteback.cpp
index 1d58ece..f1f0eb5 100644
--- a/liboverlay/overlayWriteback.cpp
+++ b/liboverlay/overlayWriteback.cpp
@@ -84,7 +84,6 @@
ALOGE("%s failed to init %s", __func__, Res::fbPath);
return;
}
- queryOutputFormat();
startSession();
}
@@ -190,15 +189,33 @@
return writeSync(mWbMem.getDstFd(), mWbMem.getOffset());
}
-void Writeback::queryOutputFormat() {
- struct msmfb_metadata metadata;
- memset(&metadata, 0 , sizeof(metadata));
- metadata.op = metadata_op_wb_format;
- if (ioctl(mFd.getFD(), MSMFB_METADATA_GET, &metadata) < 0) {
- ALOGE("Error retrieving MDP Writeback format");
- return;
+bool Writeback::setOutputFormat(int mdpFormat) {
+ if(mdpFormat != mOpFmt) {
+ struct msmfb_metadata metadata;
+ memset(&metadata, 0 , sizeof(metadata));
+ metadata.op = metadata_op_wb_format;
+ metadata.data.mixer_cfg.writeback_format = mdpFormat;
+ if (ioctl(mFd.getFD(), MSMFB_METADATA_SET, &metadata) < 0) {
+ ALOGE("Error setting MDP Writeback format");
+ return false;
+ }
+ mOpFmt = mdpFormat;
}
- mOpFmt = metadata.data.mixer_cfg.writeback_format;
+ return true;
+}
+
+int Writeback::getOutputFormat() {
+ if(mOpFmt < 0) {
+ struct msmfb_metadata metadata;
+ memset(&metadata, 0 , sizeof(metadata));
+ metadata.op = metadata_op_wb_format;
+ if (ioctl(mFd.getFD(), MSMFB_METADATA_GET, &metadata) < 0) {
+ ALOGE("Error retrieving MDP Writeback format");
+ return -1;
+ }
+ mOpFmt = metadata.data.mixer_cfg.writeback_format;
+ }
+ return mOpFmt;
}
//static