Log pixel format metric for encoders using surface.
Send pixel format update from GraphicBufferSource to C2OMXNode. CCodec check pixel format with that in C2OMXNode while receiving kWorkDone.
Bug: 270518245
Test: manual
Merged-in: I3b425089bef72e66af69dd4b4fd28211ca41b223
Change-Id: I3b425089bef72e66af69dd4b4fd28211ca41b223
(cherry picked from commit 2a8d88348559a0d5e7232c2d5c507539d8db7675)
diff --git a/media/codec2/sfplugin/C2OMXNode.cpp b/media/codec2/sfplugin/C2OMXNode.cpp
index 92cfe31..bba022b 100644
--- a/media/codec2/sfplugin/C2OMXNode.cpp
+++ b/media/codec2/sfplugin/C2OMXNode.cpp
@@ -202,8 +202,10 @@
android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ALWAYS);
mQueueThread->run("C2OMXNode", PRIORITY_AUDIO);
- Mutexed<android_dataspace>::Locked ds(mDataspace);
- *ds = HAL_DATASPACE_UNKNOWN;
+ android_dataspace ds = HAL_DATASPACE_UNKNOWN;
+ mDataspace.lock().set(ds);
+ uint32_t pf = PIXEL_FORMAT_UNKNOWN;
+ mPixelFormat.lock().set(pf);
}
status_t C2OMXNode::freeNode() {
@@ -521,8 +523,8 @@
ALOGD("dataspace changed to %#x pixel format: %#x", dataSpace, pixelFormat);
mQueueThread->setDataspace(dataSpace);
- Mutexed<android_dataspace>::Locked ds(mDataspace);
- *ds = dataSpace;
+ mDataspace.lock().set(dataSpace);
+ mPixelFormat.lock().set(pixelFormat);
return OK;
}
@@ -559,6 +561,10 @@
return *mDataspace.lock();
}
+uint32_t C2OMXNode::getPixelFormat() {
+ return *mPixelFormat.lock();
+}
+
void C2OMXNode::setPriority(int priority) {
mQueueThread->setPriority(priority);
}
diff --git a/media/codec2/sfplugin/C2OMXNode.h b/media/codec2/sfplugin/C2OMXNode.h
index 6669318..c8ce336 100644
--- a/media/codec2/sfplugin/C2OMXNode.h
+++ b/media/codec2/sfplugin/C2OMXNode.h
@@ -99,6 +99,11 @@
android_dataspace getDataspace();
/**
+ * Returns dataspace information from GraphicBufferSource.
+ */
+ uint32_t getPixelFormat();
+
+ /**
* Sets priority of the queue thread.
*/
void setPriority(int priority);
@@ -112,6 +117,7 @@
uint32_t mHeight;
uint64_t mUsage;
Mutexed<android_dataspace> mDataspace;
+ Mutexed<uint32_t> mPixelFormat;
// WORKAROUND: timestamp adjustment
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index abfac8b..e2512dc 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -431,6 +431,10 @@
return mNode->getDataspace();
}
+ uint32_t getPixelFormat() override {
+ return mNode->getPixelFormat();
+ }
+
private:
sp<HGraphicBufferSource> mSource;
sp<C2OMXNode> mNode;
@@ -2510,6 +2514,8 @@
uint32_t pf = PIXEL_FORMAT_UNKNOWN;
if (!config->mInputSurface) {
pf = mChannel->getBuffersPixelFormat(config->mDomain & Config::IS_ENCODER);
+ } else {
+ pf = config->mInputSurface->getPixelFormat();
}
if (pf != PIXEL_FORMAT_UNKNOWN) {
mMetrics->setInt64(kCodecPixelFormat, pf);
diff --git a/media/codec2/sfplugin/InputSurfaceWrapper.h b/media/codec2/sfplugin/InputSurfaceWrapper.h
index 44ba78a..4bf6cd0 100644
--- a/media/codec2/sfplugin/InputSurfaceWrapper.h
+++ b/media/codec2/sfplugin/InputSurfaceWrapper.h
@@ -28,7 +28,8 @@
class InputSurfaceWrapper {
public:
InputSurfaceWrapper()
- : mDataSpace(HAL_DATASPACE_UNKNOWN) {
+ : mDataSpace(HAL_DATASPACE_UNKNOWN),
+ mPixelFormat(PIXEL_FORMAT_UNKNOWN) {
}
virtual ~InputSurfaceWrapper() = default;
@@ -112,8 +113,14 @@
*/
virtual android_dataspace getDataspace() { return mDataSpace; }
+ /**
+ * Returns pixel format information from GraphicBufferSource.
+ */
+ virtual uint32_t getPixelFormat() { return mPixelFormat; }
+
protected:
android_dataspace mDataSpace;
+ uint32_t mPixelFormat;
};
} // namespace android