Log pixel format metric for decoders and non-surface mode encoders.
Test: manual
Bug: 270518245
Merged-In: I0d3fabcca632d974ecd7d86305b3dfef4eee895f
Change-Id: I0d3fabcca632d974ecd7d86305b3dfef4eee895f
diff --git a/media/codec2/sfplugin/CCodecBuffers.h b/media/codec2/sfplugin/CCodecBuffers.h
index 6335f13..cbef644 100644
--- a/media/codec2/sfplugin/CCodecBuffers.h
+++ b/media/codec2/sfplugin/CCodecBuffers.h
@@ -81,6 +81,16 @@
*/
void handleImageData(const sp<Codec2Buffer> &buffer);
+ /**
+ * Get the first pixel format of a metric session.
+ */
+ virtual uint32_t getPixelFormatIfApplicable();
+
+ /**
+ * Reset the pixel format when a new metric session started.
+ */
+ virtual bool resetPixelFormatIfApplicable();
+
protected:
std::string mComponentName; ///< name of component for debugging
std::string mChannelName; ///< name of channel for debugging
@@ -938,12 +948,17 @@
size_t numActiveSlots() const final;
+ uint32_t getPixelFormatIfApplicable() override;
+
+ bool resetPixelFormatIfApplicable() override;
+
protected:
sp<Codec2Buffer> createNewBuffer() override;
private:
FlexBuffersImpl mImpl;
std::shared_ptr<LocalBufferPool> mLocalBufferPool;
+ uint32_t mPixelFormat;
};
class DummyInputBuffers : public InputBuffers {
@@ -1064,7 +1079,8 @@
public:
FlexOutputBuffers(const char *componentName, const char *name = "Output[]")
: OutputBuffers(componentName, name),
- mImpl(mName) { }
+ mImpl(mName),
+ mPixelFormat(0) { }
status_t registerBuffer(
const std::shared_ptr<C2Buffer> &buffer,
@@ -1107,8 +1123,20 @@
*/
virtual std::function<sp<Codec2Buffer>()> getAlloc() = 0;
+ uint32_t getPixelFormatIfApplicable() override;
+
+ bool resetPixelFormatIfApplicable() override;
private:
FlexBuffersImpl mImpl;
+
+ uint32_t mPixelFormat;
+
+ /**
+ * extract pixel format from C2Buffer when register.
+ *
+ * \param buffer The C2Buffer used to extract pixel format.
+ */
+ bool extractPixelFormatFromC2Buffer(const std::shared_ptr<C2Buffer> &buffer);
};
class LinearOutputBuffers : public FlexOutputBuffers {