MediaCodec: Use IProducerListener and MediaCodec's generation number
Use MediaCodec's generation number. And use IProducerListener when
connect to the surface if Codec implementation provides the listener.
Bug: 254050314
Test: atest android.media.decoder.cts.AdaptivePlaybackTest
Change-Id: If04c1b7be1cc7db39099c57a8905a702113833c5
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index cd3a80f..c102c4b 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -862,6 +862,8 @@
sp<Surface> surface;
if (msg->findObject("native-window", &obj)) {
surface = static_cast<Surface *>(obj.get());
+ int32_t generation;
+ (void)msg->findInt32("native-window-generation", &generation);
// setup tunneled playback
if (surface != nullptr) {
Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
@@ -896,7 +898,7 @@
}
}
}
- setSurface(surface);
+ setSurface(surface, (uint32_t)generation);
}
Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
@@ -2033,7 +2035,7 @@
}
}
-status_t CCodec::setSurface(const sp<Surface> &surface) {
+status_t CCodec::setSurface(const sp<Surface> &surface, uint32_t generation) {
bool pushBlankBuffer = false;
{
Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
@@ -2062,7 +2064,7 @@
}
pushBlankBuffer = config->mPushBlankBuffersOnStop;
}
- return mChannel->setSurface(surface, pushBlankBuffer);
+ return mChannel->setSurface(surface, generation, pushBlankBuffer);
}
void CCodec::signalFlush() {