CCodec: fix C2OMXNode assumption that components are in the same process
Bug: 128213533
Test: atest CtsMediaTestCases:HeifWriterTest
Change-Id: Ieab560be49018dd500fe2d530aebb0649e62a8b5
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index 9c679aa..8474ce8 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -370,6 +370,10 @@
return err;
}
+ void onInputBufferDone(c2_cntr64_t index) override {
+ mNode->onInputBufferDone(index);
+ }
+
private:
sp<BGraphicBufferSource> mSource;
sp<C2OMXNode> mNode;
@@ -1583,6 +1587,13 @@
void CCodec::onInputBufferDone(uint64_t frameIndex, size_t arrayIndex) {
mChannel->onInputBufferDone(frameIndex, arrayIndex);
+ if (arrayIndex == 0) {
+ // We always put no more than one buffer per work, if we use an input surface.
+ Mutexed<Config>::Locked config(mConfig);
+ if (config->mInputSurface) {
+ config->mInputSurface->onInputBufferDone(frameIndex);
+ }
+ }
}
void CCodec::onMessageReceived(const sp<AMessage> &msg) {
@@ -1715,6 +1726,9 @@
++stream;
}
}
+ if (config->mInputSurface) {
+ config->mInputSurface->onInputBufferDone(work->input.ordinal.frameIndex);
+ }
mChannel->onWorkDone(
std::move(work), changed ? config->mOutputFormat : nullptr,
initData.hasChanged() ? initData.update().get() : nullptr);