IOMX: allow configuration after going to loaded state
This was disallowed recently but we still use it as MediaCodcec.stop
only goes to loaded state, and does not free component.
Bug: 31450460
Change-Id: I72e092e4e55c9f23b1baee3e950d76e84a5ef28d
diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp
index 457b03b..f39dc82 100644
--- a/media/libstagefright/omx/OMXNodeInstance.cpp
+++ b/media/libstagefright/omx/OMXNodeInstance.cpp
@@ -273,8 +273,8 @@
status_t OMXNodeInstance::sendCommand(
OMX_COMMANDTYPE cmd, OMX_S32 param) {
if (cmd == OMX_CommandStateSet && param != OMX_StateIdle) {
- // We do not support returning from unloaded state, so there are no configurations past
- // first StateSet command. However, OMXCodec supports meta configuration past Stateset:Idle.
+ // Normally there are no configurations past first StateSet; however, OMXCodec supports
+ // meta configuration past Stateset:Idle.
mSailed = true;
}
const sp<GraphicBufferSource> bufferSource(getGraphicBufferSource());
@@ -591,7 +591,7 @@
params, portIndex, false /* copyToOmx */, false /* copyFromOmx */, data);
} else {
buffer_meta = new BufferMeta(
- params, portIndex, false /* copyFromOmx */, false /* copyToOmx */, NULL);
+ params, portIndex, false /* copyToOmx */, false /* copyFromOmx */, NULL);
}
OMX_BUFFERHEADERTYPE *header;
@@ -1153,6 +1153,13 @@
&& arg2 == OMX_StateExecuting) {
bufferSource->omxExecuting();
}
+
+ // allow configuration if we return to the loaded state
+ if (event == OMX_EventCmdComplete
+ && arg1 == OMX_CommandStateSet
+ && arg2 == OMX_StateLoaded) {
+ mSailed = false;
+ }
}
// static