TL;DR: we should check if there are new frames available to queue to the
ExternalTextureProcessor before actually queueing a frame.
The overall flow on the external texture processor:
- `SurfaceTexture.onFrameAvailable` is called on `ExtTexMgr`, and
- it calls `updateTexImage()`, and sets `frame`
- it calls `maybeQueueFrameToExtTexProc()`
- the frame is queued to `ExtTexProc` if `frame` is set
- From `ExtTexProc.queueInputFrame()`:
- notifies the `frameProcessorListener` of available frame
- notifies the `inputListener` of `onReadyToAcceptInputFrame`
- (`ExtTexMgr` is the listener), it calls `maybeQueueFrameToExtTexProc()`
again
-- Parallelly --
- `ExtTexProc` calls `inputListener.onInputFrameProcessed`, when the frame is
released
- (`ExtTexMgr` is the listener), sets `frame` to `null`
*Problem*
This logic relies on `frame` to be cleared at the right time.
In transformer, it's OK b/c `ExtTexProc` release the frame immediately in
`queueInputFrame()` and calls `onInputFrameProcessed` which also reset `frame`
But in previewing, the frame is not released for a while, up to 10 ms.
In this case, `frame` will not reset in this 10 ms, and
`maybeQueueFrameToExtTexProc()` is repeatedly queueing the same input frame.
PiperOrigin-RevId: 470211620
(cherry picked from commit a8c54dd3)
| Name |
Last commit
|
Last Update |
|---|---|---|
| .github/ISSUE_TEMPLATE | Loading commit data... | |
| .idea | Loading commit data... | |
| demos | Loading commit data... | |
| docs | Loading commit data... | |
| extensions | Loading commit data... | |
| google3/third_party/java_src/android_libs/media/libraries/effect | Loading commit data... | |
| gradle/wrapper | Loading commit data... | |
| library | Loading commit data... | |
| playbacktests | Loading commit data... | |
| robolectricutils | Loading commit data... | |
| testdata | Loading commit data... | |
| testutils | Loading commit data... | |
| .gitignore | Loading commit data... | |
| CONTRIBUTING.md | Loading commit data... | |
| LICENSE | Loading commit data... | |
| README.md | Loading commit data... | |
| RELEASENOTES.md | Loading commit data... | |
| SECURITY.md | Loading commit data... | |
| build.gradle | Loading commit data... | |
| common_library_config.gradle | Loading commit data... | |
| constants.gradle | Loading commit data... | |
| core_settings.gradle | Loading commit data... | |
| gradle.properties | Loading commit data... | |
| gradlew | Loading commit data... | |
| gradlew.bat | Loading commit data... | |
| javadoc_combined.gradle | Loading commit data... | |
| javadoc_library.gradle | Loading commit data... | |
| javadoc_util.gradle | Loading commit data... | |
| media3-migration.sh | Loading commit data... | |
| missing_aar_type_workaround.gradle | Loading commit data... | |
| publish.gradle | Loading commit data... | |
| settings.gradle | Loading commit data... |