
We currently have the following logic to update renderers during period transitions: 1. Wait for the currently reading period to finish reading all its streams. a. Advance reading period. b. Set all streams that can't be replaced to final. c. If streams can be replaced, replace them now. 2. Wait until playback position reaches the transition point a. Disable all unneeded renderers (or those that need re-enabling). b. Advance playing period. c. Enable all new renderers (i.e. all except the ones where we replaced streams directly in step 1c. This logic causes delays because steps 2a and 2c can easily happen before 2b. Doing this allows a smooth transition for cases where renderers change or where they need to be re-enabled. The new order after this change is: 1. Wait for currently reading period to finish reading. a. Advance reading period. b. Set all streams that can't be replaced to final. 2. Update reading renderers iteratively. a. If streams can be replaced, replace them asap. b. If renderes need to be disabled, do so as soon as the respective renderer ended. c. Once step b is fully finished, enable or re-enable all new renderers. 3. Wait unril playback position reaches the transition point AND all tasks in step 2 are done (i.e. all renderers are set up for the playing period). a. Advance playing period. As a nice side effect, decoder enabled and disabled events are now always reported for the reading period, which is more consistent with other renderer callbacks. PiperOrigin-RevId: 300526983
ExoPlayer library
The ExoPlayer library is split into multiple modules. See ExoPlayer's top level README for more information about the available library modules and how to use them.