- 24 Nov, 2020 6 commits
-
-
#exofixit PiperOrigin-RevId: 343857564
samrobinson committed -
This saves a few lines of code and is nicer. We already did make sure to update the notification only once by posting because of b/145521438. #exofixit PiperOrigin-RevId: 343852256
bachinger committed -
Don't refer to the "system's default charset", just specify UTF-8 explicitly. PiperOrigin-RevId: 343839878
ibaker committed -
#exofixit PiperOrigin-RevId: 343821736
olly committed -
The EventTime wasn't part of the onEvents callbacks so far because the individual events may have different event times (e.g. if they relate to different media periods). By adding a query method to obtain the EventTime by event type, we can solve this issue. #exofixit PiperOrigin-RevId: 343818819
tonihei committed -
Mentioning the realtionship on every other callback makes it easier for the casual developer to understand the relationship between the methods and discover the existence of onEvents. PiperOrigin-RevId: 343811032
tonihei committed
-
- 23 Nov, 2020 3 commits
-
-
Previously, VideoFrameReleaseTimeHelper didn't receive PTS values for frames that were skipped. This would lead to unnecessary sync loss when encountering such buffers, because the helper would see a frame-rate change (i.e., the next frame being significantly longer than previous ones). After this change, VideoFrameReleaseTimeHelper is notified of all frame PTS values, so it can retain sync in this case. This change also propagates onStarted and onPositionReset to the helper. This paves the way for decoupling frame-rate estimation from release adjustment sync. Note that currently, loss of sync effectively resets both. This is unnecessary. For example, if the renderer is paused and later resumed, then release adjustment sync needs to be reset, but any frame-rate estimate we have is still valid. PiperOrigin-RevId: 343803531
olly committed -
https://github.com/google/ExoPlayer/commit/8d84a50fa1c86f730105cd648bb2454f365830d4
*** Original commit *** Update Styled non bottom buttons to be borderless. This requires the parent of the background to draw and have padding large enough to support the size of the ripple. The bottom buttons must remained bordered as the space around them is constrained. *** PiperOrigin-RevId: 343531411
olly committed -
PiperOrigin-RevId: 343507207
tonihei committed
-
- 20 Nov, 2020 8 commits
-
-
RunnableFutureTask is not reusable. Trying to reuse it meant that a failure in one doWork() call would cause subsequent download() calls to (a) not block until the runnable has finished executing (does not apply when using a direct executor), and (b) throw the same failure as thrown from the first doWork() call. This could cause #8078 if the initial failure occurred before the content length was resolved. Retries are not blocked on their work completing due to (a), and the download would be marked as failed due to (b). The work itself could then resolve the content length, which causes the stack trace in this issue. Issue: #8078 PiperOrigin-RevId: 343498252
olly committed -
This callback allows listeners to know when all simultanous changes have been handled and the values reported through callbacks are again completely consistent with value obtained from Player getter calls. PiperOrigin-RevId: 343476639
tonihei committed -
PiperOrigin-RevId: 343467276
tonihei committed -
The demo app has two states for downloads, as per DownloadTracker.isDownloaded. It's either "downloaded or downloading" (isDownloaded returns true, and the UI shows a blue tick) or it's "not downloaded or failed (isDownloaded returns false, and the UI does not show a blue tick). toggleDownload is out of sync in that it treates "failed" as belonging to the first state rather than the second. This means tapping on the grey tick in the UI in this case appears to be a no-op (tapping it again will make something happen). This change aligns things by making toggleDownload re-download in the case a previous download failed. In the future we could consider having three states, so failed downloads could be disambiguated properly. Unclear whether it's a good complexity/benefit trade-off for the demo app though! #minor-release PiperOrigin-RevId: 343464364
olly committed -
When a stream has duplicate timestamps we currently discard to the last sample with the specified discardTo timestamp, but it should be the first one to adhere to the method doc and the intended usage. #minor-release PiperOrigin-RevId: 343458870
tonihei committed -
PiperOrigin-RevId: 343438203
sungsoo committed -
PiperOrigin-RevId: 343437513
sungsoo committed -
PiperOrigin-RevId: 343432873
sungsoo committed
-
- 19 Nov, 2020 9 commits
-
-
Background: 1. When the player has multiple audio renderers, by default they share a single AudioSink. 2. When any new renderer is enabled, all disabled renderers are reset prior to the new renderer being enabled. This is to give them a chance to free up resources in case the renderer being enabled needs them. These reset calls are expected to be no-ops for renderers that have never been enabled. The issue: The problematic case arises when there are two audio renderers and a third renderer (e.g., text) is being enabled. In this case, the disabled audio renderer's reset call ends up resetting the AudioSink that's shared with the enabled audio renderer. The enabled audio renderer is then unable to make progress, causing playback to freeze. This is a minimal fix that directly prevents the mentioned issue. There are multiple follow-ups that would probably make sense: 1. Having ExoPlayerImplInternal track which renderers need to be reset, and only resetting those renderers rather than all that are disabled. This seems like a good thing to do regardless, rather than relying on those calls being no-ops. 2. If we want to continue sharing AudioSink, we need to formalize this much better and make sure we have good test coverage. Messages like MSG_SET_VOLUME are also delivered to the AudioSink multiple times via each of the renderers, which works currently because DefaultAudioSink no-ops all but the first call in each case. This is pretty fragile though! Issue: #8203 #minor-release PiperOrigin-RevId: 343296081
olly committed -
Issue: #5011 PiperOrigin-RevId: 343277357
bachinger committed -
This isn't used any more, the last usage was removed in <unknown commit> PiperOrigin-RevId: 343266553
ibaker committed -
This is inline with other show-toast-on-error cases in this method, and avoids leaving the user on a completely black screen. Note that the maybeRequestReadExternalStoragePermission is an exception because it's not actually an error case. #minor-release PiperOrigin-RevId: 343264869
olly committed -
Real apps probably aren't going to be allowing playback speed to be set to anything other than the options listed in their UI, and so this is not worth the complexity. It also violates the idea that the UI should look the same regardless of when the player is set on the view, since if it's set and then the playback speed is changed to a listed option then the custom speed remains, where-as if the speed is changed to a listed option and then it's set, the custom speed will not be shown. PiperOrigin-RevId: 343260450
olly committed -
PiperOrigin-RevId: 343253445
ibaker committed -
https://github.com/google/ExoPlayer/commit/db8356a17c3c2b20f4fd1b107f2a34b8f067dca7
*** Original commit *** Suppress warnings in preparation for Checker Framework 3.7.1 upgrade. LSC: go/checker-lsc Tested: tap_presubmit: http://test/OCL:342788975:BASE:342885903:1605667635149:7731b723 Some tests failed; test failures are believed to be unrelated to this CL *** PiperOrigin-RevId: 343251530tonihei committed -
#minor-release Issue: #7898 PiperOrigin-RevId: 343251455
olly committed -
LSC: go/checker-lsc Tested: tap_presubmit: http://test/OCL:342788975:BASE:342885903:1605667635149:7731b723 Some tests failed; test failures are believed to be unrelated to this CL PiperOrigin-RevId: 343129490olly committed
-
- 18 Nov, 2020 14 commits
-
-
https://github.com/google/ExoPlayer/commit/f6928c0ef9a196fa0f6d298937ec207f4b1d3447
*** Original commit *** Keep download in completed state if only metadata is updated Issue: #8116 *** PiperOrigin-RevId: 343102068
olly committed -
https://github.com/google/ExoPlayer/commit/31430f1ac50db80cf618f3e2ee9de2e9159f2e4c
*** Original commit *** Suppress warnings in preparation for Checker Framework 3.7.1 upgrade. *** PiperOrigin-RevId: 343100646
tonihei committed -
PiperOrigin-RevId: 343096974
ibaker committed -
https://github.com/google/ExoPlayer/commit/5d9c2d7b6aa8a7d37128eedd2a90d8deeb9dd9fa
*** Original commit *** Suppress warnings in preparation for Checker Framework 3.7.1 upgrade. *** PiperOrigin-RevId: 343086403
tonihei committed -
https://github.com/google/ExoPlayer/commit/fa6e01312becc6662e83368e57dfa0c71de0dac6
*** Original commit *** Suppress warnings in preparation for Checker Framework 3.7.1 upgrade. *** PiperOrigin-RevId: 343085407
tonihei committed -
ExoPlayer's traditional HLS preparation works by loading a chunk from each track group, and then tries to use the sample information plus the master playlist information to generate the preparation's resulting TrackGroups. There are 3 possible scenarios: - Supported case: Each variant has a single codec string per track type. We can assign each track the codec string which matches the loaded sample's type. - Supported case: Each variant has more than one codec string, but each track group has a single track. This is the case when different languages use different codecs. In this case, we can assign whichever codec matches the loaded sample's mime type. - Unsupported case: Each variant has more than one codec string, and track groups contain more than one track. We are not able to safely map tracks to codec strings because that would require loading a chunk from each track (which would considerably delay preparation). Broken in: https://github.com/google/ExoPlayer/commit/4783c329cc545da4269a9401a4975a41e75f2f43 PiperOrigin-RevId: 343072201
aquilescanta committed -
PiperOrigin-RevId: 343003559
olly committed -
PiperOrigin-RevId: 342999709
olly committed -
PiperOrigin-RevId: 342999390
olly committed -
Allows to set a timeout for the setForegroundMode(false) call, different than releaseTimeoutMs. PiperOrigin-RevId: 342980350
olly committed -
PiperOrigin-RevId: 342952746
olly committed -
Right now we also notify while we are paused although this doesn't classify as a rebuffer. PiperOrigin-RevId: 342892667
tonihei committed -
This only has a couple of simple tests for now. We'll add more tests after we've written some concrete sub-class tests for various DataSource implementations. I've included a concrete FileDataSourceContractTest as a demonstration. PiperOrigin-RevId: 342851187
ibaker committed -
Determine whether a rebuffer occurred and if the playback is paused or resumed. PiperOrigin-RevId: 342849010
veronicaradu committed
-