- 24 Jan, 2020 20 commits
-
-
Once EOS has been read, that will be returned every time readData is called. EOS needs to be an item in the items. PiperOrigin-RevId: 290715513
samrobinson committed -
PiperOrigin-RevId: 290712014
ibaker committed -
This avoids keeping a redundant (and potentially out of sync) copy of the same info in builderLength. PiperOrigin-RevId: 290709360
ibaker committed -
I needed to use Cue.Builder instead of just SpannableStringBuilder for the regionOutput values, so I could attach the vertical info where appropriate (since this is a property of the Cue, not a span). PiperOrigin-RevId: 290709294
ibaker committed -
PiperOrigin-RevId: 290629644
ibaker committed -
If an exception is thrown between updating the timeline and updating the position in playbackInfo, the state may be inconsistent. Exceptions are expected to be thrown while updating the player state and we should handle such cases in a consistent way. Similar to how we handle the same situation in seekToInternal, the state is updated in a final block such that it gets updated to the latest state even if an error occurs. Moving both the timeline and position update together also ensures they always stay consistent. PiperOrigin-RevId: 290624020
tonihei committed -
This restructure moves all the position resolving code to a static method and removes the dependency of the MediaPeriodQueue on having an up-to-date timeline. Both steps allow simplified reasoning about the code as the static method can't change the state of the player, and there is no risk the queue can use the wrong timeline. These propoerties allow to fix a bug causing inconsistent states in a follow-up step. PiperOrigin-RevId: 290616395
tonihei committed -
Allows items to be added to the queue once the sample stream has already been created. Means tests can simulate data not all being available at the start. PiperOrigin-RevId: 290613392
samrobinson committed -
Also de-dupe a couple of case statements PiperOrigin-RevId: 290610993
ibaker committed -
PiperOrigin-RevId: 290610936
ibaker committed -
PiperOrigin-RevId: 290610312
ibaker committed -
It's never assigned or accessed from outside the class. It was added in <unknown commit> then the accessor was removed in <unknown commit> PiperOrigin-RevId: 290601998
ibaker committed -
PiperOrigin-RevId: 290600248
andrewlewis committed -
This makes MPEG audio utilities similar to utilities we have for WAV, AC-3 etc., and moves them out of the extractor package so that an extractor module can be split out without needing to have a class in the extractor package in the common library. PiperOrigin-RevId: 290595089
andrewlewis committed -
All these genres are currently causing a warning and are not added to the Metadata.Entry. PiperOrigin-RevId: 290594810
tonihei committed -
https://github.com/google/ExoPlayer/commit/72437e44424c8b0049c21842d08e9719e529d5b0
*** Original commit *** Rollback of https://github.com/google/ExoPlayer/commit/ff89170b008b8b3438b7c002a156fbfb41c05174 *** Original commit *** Fix some logic in AnalyticsCollector. All events issued from ExoPlayerImpl (i.e. Player.EventListener events) currently try to use the media period data from the playing media period as set in the playback thread queue. This is only correct as long as there no pending masking operations in ExoPlayerImpl. That's why we currently disable this whenever the timeline is... *** PiperOrigin-RevId: 290593700
tonihei committed -
+ force arm (over thumb) mode for 32-bit builds -O2 improves performance ~30-40% over the default -Oz depending on the resolution; this is similar to what is done for vp9 which uses -O3. PiperOrigin-RevId: 290318121
olly committed -
https://github.com/google/ExoPlayer/commit/ff89170b008b8b3438b7c002a156fbfb41c05174
*** Original commit *** Fix some logic in AnalyticsCollector. All events issued from ExoPlayerImpl (i.e. Player.EventListener events) currently try to use the media period data from the playing media period as set in the playback thread queue. This is only correct as long as there no pending masking operations in ExoPlayerImpl. That's why we currently disable this whenever the timeline is empty or a seek is pending. Since adding all the playlist API methods to the player, this is no longer the right choice. Moreover,... *** PiperOrigin-RevId: 290312118
bachinger committed -
Currently both are updated by separate setters. If an exception is thrown between the two setters, the state may not be consistent. Avoid this problem by always setting them together. PiperOrigin-RevId: 290293600
tonihei committed -
All events issued from ExoPlayerImpl (i.e. Player.EventListener events) currently try to use the media period data from the playing media period as set in the playback thread queue. This is only correct as long as there no pending masking operations in ExoPlayerImpl. That's why we currently disable this whenever the timeline is empty or a seek is pending. Since adding all the playlist API methods to the player, this is no longer the right choice. Moreover, we don't have a definite API that tells AnalyticsCollector when a playlist API call has been handled (and we don't want to have one). We can fix this by always using the current Player position information as the source of truth (instead of the media period queue). This is definitely more correct and also works while a masking operation is pending. To fill in the additional information from the media period queue, we can look up a matching media period. This may not be the first one in the list if an operation is pending. The new methods are similar to the previous tryResolveWindowIndex method, but: 1. They are always used (i.e. the current Player state is the main source of truth) 2. They also check the correct ad playback state, that was just ignored previously. PiperOrigin-RevId: 290284916
tonihei committed
-
- 17 Jan, 2020 7 commits
-
-
PiperOrigin-RevId: 290276507
olly committed -
Currently seeks are basically ignored. However, it's more realistic to re-queue the single sample if the seek is to position 0. PiperOrigin-RevId: 290273564
tonihei committed -
https://github.com/google/ExoPlayer/commit/3c56b113e43812f188bdd9750f48897e812697ce
*** Original commit *** Rollback of https://github.com/google/ExoPlayer/commit/d48dc4c15933dd8354cbcc6260c48565bb850e15 *** Original commit *** Move getting-stuck-prevention into DefaultLoadControl. We recently added code that prevents getting stuck if the buffer is low and the LoadControl refuses to continue loading (https://github.com/google/ExoPlayer/commit/b84bde025258e7307c52eaf6bbe58157d788aa06). Move this logic into DefaultLoadControl to keep the workaround, and also apply the maximum buffer size check in bytes if enabled. ExoPlayerImplInternal will now throw if a... *** PiperOrigin-RevId: 290273295
tonihei committed -
- Add additional Listener methods to DownloadManager, to inform of changes to whether the downloads are paused or waiting for requirements. - Only schedule the Scheduler if we really are waiting for requirements. - Only restart the service if we're no longer waiting for requirements, and if there are queued downloads that will now be restarted. Previously the service would be restarted whenever the requirements were met, regardless of whether there was any work to do. - Restart service if it might be stopping, as well as if it's already stopped. Also restart service if there's a download state change to a state for which the service should be started, if. Issue: #6798 PiperOrigin-RevId: 290270547
olly committed -
First cl towards DefaultMediaSourceFactory (<unknown commit>) does not change the MediaSourceFactory interface except adding @Nullable anotations to setters. PiperOrigin-RevId: 290269640
bachinger committed -
PiperOrigin-RevId: 290269098
olly committed -
Doing so prevent Codec which is a big object with JNI to be garbage collected. As the codec can not be hold in the listener, there is no way to call release, as it must be called on the same codec. As a result the release method is also removed. The downside is that at runtime some callbacks may be dropped but it should be a short transitive state. This also simplifies lifecycle of the listener as the client does not have to know if release needs to be called or not. An alternative would have been to hold a weak ref, but I deemed it too complicated for the runtime gain. PiperOrigin-RevId: 290231659
krocard committed
-
- 16 Jan, 2020 13 commits
-
-
Issue: #6155 PiperOrigin-RevId: 290117324
olly committed -
PiperOrigin-RevId: 290079840
kimvde committed -
This avoids allocating a Runnable. PiperOrigin-RevId: 290079660
krocard committed -
This fixes an issue where a DownloadService implementation that allows foreground but doesn't provide a scheduler would not be restarted in the case that it was still in memory but classed as idle by the platform. It also speeds up service restart in the case that a scheduler is provided. Issue: #6798 PiperOrigin-RevId: 290068960
olly committed -
This method has two use cases: 1. Seeking. Calls are immediately preceded by a call to rewind(), and the returned value isn't important unless it's ADVANCED_FAILED (i.e. the caller is only interested in success and failure). 2. Advancing. The return value is important unless it's ADVANCED_FAILED, in which case the caller wants to treat it as 0. This change creates separate methods for each use case. The new seekTo methods automatically rewind and return a boolean. The updated advanceTo method returns 0 directly in cases where ADVANCED_FAILED was returned. Arguments that were always hard-coded to true by callers have also been removed. This change is a step toward one possible solution for #6155. How we'll solve that issue is still up for discussion, but this change seems like one we should make regardless! Issue: #6155 PiperOrigin-RevId: 290053743
olly committed -
- DownloadManagerHelper now passes all downloads to the DownloadService when the service is attached (and once the downloads are known). The service then starts the foreground notification updater if necessary. This fixes the ref'd issue. - Don't call getScheduler() if the service is background only. This was already documented to be the case on the DownloadService constructor. - If the service is started in the foreground on SDK level 26 and higher, satisfy the condition to move the service to the foreground in onStartCommand rather than in stop(). It's much more obviously correct, and should produce the same end result. Issue: #6798 PiperOrigin-RevId: 290050024
olly committed -
PiperOrigin-RevId: 290041295
Oliver Woodman committed -
Currently the following sequence of events happens at automatic period transitions: 1. Update queue (=release old playing period) 2. Disable unused renderers 3. Enable newly needed renderers This order requires difficult to follow workarounds in AnalyticsCollector for all events related to step 2 (disable renderers). The current media period has already been advanced so can't be used. The current workaround saves the last known playing media period that was published as part of a PlaybackInfo update in ExoPlayerImpl. This works in most cases, but is inherently wrong because the published state in ExoPlayerImpl may be completely unrelated to the updates happening on the playback thread (e.g. if many other operations are pending). Simplify and fix this problem by changing the order of the events above: 1. Disable unused renderers. 2. Update queue 3. Enable newly needed renderers. This way the current playing media period can be used for both renderer disable and renderer enable events, thus it's correct in all cases and the workaround in AnalyticsCollector can be removed. PiperOrigin-RevId: 290037225
tonihei committed -
Whenever we set the maskingWindowIndex, we also need to set the masking period index and the masking position. Otherwise it may cause exception when the period index is used together with the masking timeline. PiperOrigin-RevId: 290036973
tonihei committed -
PiperOrigin-RevId: 290032841
Oliver Woodman committed -
PiperOrigin-RevId: 290027772
tonihei committed -
PiperOrigin-RevId: 289859343
olly committed -
This optimization allows a ChunkSampleStream to output track formats as soon as they're parsed during an InitializationChunk load, rather than waiting until after the InitializationChunk load is completed. In DASH VOD, a single InitializationChunk typically loads the moov and sidx atoms in that order. Hence for long form content where the sidx is a non-trivial size, this may result in the track formats being output a non-negligible period of time sooner than was previously the case. This allows downstream renderers to start codec initialization sooner, potentially decreasing startup latency. For a single test stream on a fast & stable network, this pretty consistently reduced elapsed time until both audio and video codecs have been initialized from ~0.5s to ~0.3 seconds on a Galaxy S8. For 5 test runs without and with these patches, the eventTime logged by EventLogger for the second decoder init were: Without (secs): 0.47 0.47 0.45 0.48 0.46 With (secs) : 0.32 0.33 0.34 0.31 0.40 PiperOrigin-RevId: 289845089
olly committed
-