- 16 Apr, 2021 4 commits
-
-
Even when fixed to the US locale (and thus avoiding surprising behaviour in e.g. Turkish locale with "i" and "I") there are unexpected behaviours when upper and lower casing non-ASCII characters. For example it's sometimes not symmetric, e.g.: "ẞ".toLowerCase() -> "ß" "ß".toUpperCase() -> "SS" In all the ExoPlayer usages we are either dealing with known-ASCII strings (e.g. MIME types) or comparing against ASCII constant strings anyway, so it seems easier to just use Guava's ASCII-only class in these cases. Util.toUpperInvariant() is null-tolerant, while Ascii.toLowercase() is not. Most usages in this change are clearly non-null. The BandwidthMeter usages aren't annotated @Nullable, but the current code *would* work if countryCode was null in both cases. These methods will now throw NPE if they're passed null. PiperOrigin-RevId: 368816287
ibaker committed -
PiperOrigin-RevId: 368803206
Oliver Woodman committed -
PiperOrigin-RevId: 368789636
jaewan committed -
This is necessary to migrate apps which are using ExoPlayer.Builder.experimentalSetForegroundModeTimeoutMs from ExoPlayerImpl to SimpleExoPlayer. PiperOrigin-RevId: 368657557
kimvde committed
-
- 15 Apr, 2021 12 commits
-
-
* The Google Java Style Guide requires that each switch statement includes a default statement group, even if it contains no code. (This requirement is lifted for any switch statement that covers all values of an enum.) (see http://go/bugpattern/MissingDefault) This CL looks good? Just LGTM and Approve it! This CL doesn’t look good? This is what you can do: * Suggest a fix on the CL (go/how-to-suggest-fix). * Revert this CL, by replying "REVERT: <provide reason>" * File a bug under go/error-prone-bug for category ErrorProneStyle if the change looks generally problematic. * Revert this CL and not get a CL that cleans up these paths in the future by replying "BLOCKLIST: <provide reason>". This is not reversible! We recommend to opt out the respective paths in your CL Robot configuration instead: go/clrobot-opt-out. This CL was generated by CL Robot - a tool that cleans up code findings (go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/java/com/google/android/libraries/exoplayer/METADATA which is reachable following include_presubmits from //depot/google3/third_party/java_src/android_libs/exoplayer/METADATA. Anything wrong with the signup? File a bug at go/clrobot-bug. #codehealth PiperOrigin-RevId: 368586454
olly committed -
PiperOrigin-RevId: 368585664
andrewlewis committed -
Discontinuity reasons may not be precisely obtained for remote player. 'Remote Player' means that playback is owned by another app or device and the same playback can be controller by other clients simultaneously. The MediaController is an example. If the remote playback doesn't provide discontinuity reason, then player cannot differentiate between automatic playback transition and seekTo() from another client. This CL tweaks the discontinuity reason definitions, so reasons can be obtained without remote playback's support. This doesn't effect the local Players, such as SimpleExoPlayer. PiperOrigin-RevId: 368579577
jaewan committed -
PiperOrigin-RevId: 368453894
jaewan committed -
PiperOrigin-RevId: 368448442
olly committed -
PiperOrigin-RevId: 368437660
krocard committed -
PiperOrigin-RevId: 368428647
krocard committed -
PiperOrigin-RevId: 368420961
olly committed -
Even when fixed to the US locale (and thus avoiding surprising behaviour in e.g. Turkish locale with "i" and "I") there are unexpected behaviours when upper and lower casing non-ASCII characters. For example it's sometimes not symmetric, e.g.: "ẞ".toLowerCase() -> "ß" "ß".toUpperCase() -> "SS" In all the ExoPlayer usages we are either dealing with known-ASCII strings (e.g. MIME types) or comparing against ASCII constant strings anyway, so it seems easier to just use Guava's ASCII-only class in these cases. This change also includes some null-twiddling, because Util.toLowerInvariant() is null tolerant, while Ascii.toLowerCase() is not. Most of the usages were already non-null, and it was easy enough to change the remaining ones to be so by simple reordering of statements. I'll make an equivalent change for Util.toUpperInvariant() next. PiperOrigin-RevId: 368419813
ibaker committed -
PiperOrigin-RevId: 368418142
krocard committed -
Some usage of += had to be changed to use .add because GString can be implitly converted to String and back, but it is not the case for List<GString> and List<String>. PiperOrigin-RevId: 368416727
krocard committed -
PiperOrigin-RevId: 368413660
krocard committed
-
- 14 Apr, 2021 3 commits
-
-
PiperOrigin-RevId: 368388742
andrewlewis committed -
PiperOrigin-RevId: 368383121
jaewan committed -
It provides a way to associate PlaybackState with the current media item. Startblock: <unknown commit> is submitted PiperOrigin-RevId: 368354775
gyumin committed
-
- 13 Apr, 2021 13 commits
-
-
Use unitless numbers for WebView line-height values See https://developer.mozilla.org/en-US/docs/Web/CSS/line-height#prefer_unitless_numbers_for_line-height_values
Denise LaFayette committed -
PiperOrigin-RevId: 368235728
bachinger committed -
PiperOrigin-RevId: 368226576
ibaker committed -
Previously, we had separate MSG_SET_SURFACE and MSG_SET_VIDEO_DECODER_OUTPUT_BUFFER_RENDERER messages for setting different types of supported output. Use of these constants to switch between outputs during use of a player was confusing because not all video renderers support both message types. To switch from VideoDecoderOutputBufferRenderer to a Surface, it was sufficient just to send MSG_SET_SURFACE, since all video renderers support this and clear any other output that might be set. Conversely, to switch in the opposite direction, just sending a MSG_SET_VIDEO_DECODER_OUTPUT_BUFFER_RENDERER was not sufficient, because not all video renderers handle this message to clear any previous output. Hence it was necessary to explicitly clear a previously set surface using a separate MSG_SET_SURFACE message. Passing two messages to switch the output may prevent renderers from implementing the output switch efficiently. This change passes all outputs using a single message type, and requires that all renderers treat unsupported outputs as though null were passed (i.e., they clear any existing output). There are some other miscellaneous improvements: 1. Non-surface outputs are now passed to onRenderedFirstFrame. This fixes a bug in SimpleExoPlayer's onRenderedFirstFrame, where previously it could not correctly equality check the output corresponding to the event to its current output in the VideoDecoderOutputBufferRenderer case. 2. Fix SimpleExoPlayer to report surface size changes for the VideoDecoderOutputBufferRenderer case. Even though the surface is rendered to indirectly in this case, we can still query (and listen to changes to) the surface's size. PiperOrigin-RevId: 368215850
olly committed -
#minor-release Issue: #8781 PiperOrigin-RevId: 368212289
ibaker committed -
String.equalsIgnoreCase depends on the device locale and is discouraged. #minor-release PiperOrigin-RevId: 368211677
ibaker committed -
If this condition isn't true, the player may enter a cycle of discarding and reloading the same format. As minDurationToRetainAfterDiscard is a parameter likely left at its default, and minDurationForQualityIncrease is likely adjusted more often, we correct the value in the problematic case and log a warning instead of asserting it outright to prevent unnecessary app breakages. Issue: #8807 PiperOrigin-RevId: 368207417
tonihei committed -
PiperOrigin-RevId: 368204261
bachinger committed -
Issue: #8755 PiperOrigin-RevId: 368204094
ibaker committed -
This is the right thing to do, as per the GLSurfaceView documentation. This adds (previously omitted) calls to VideoDecoderGLSurfaceView. PiperOrigin-RevId: 368202523
olly committed -
Other properties of SphericalGLSurfaceView (e.g., setDefaultStereoMode) are not plumbed through the PlayerView components, and it doesn't scale to plumb through all properties of all of the SurfaceView types. Applications can instead do: ``` ((SphericalGLSurfaceView) playerView.getVideoSurfaceView()) .setUseSensorRotation(useSensorRotation); ``` PiperOrigin-RevId: 368196537olly committed -
The cronet extension now uses gradle dependencies. PiperOrigin-RevId: 368195878
andrewlewis committed -
PiperOrigin-RevId: 368014991
olly committed
-
- 12 Apr, 2021 4 commits
-
-
PiperOrigin-RevId: 367994410
marcbaechinger committed -
PiperOrigin-RevId: 367992096
gyumin committed -
There is no use case left where we couldn't use a better alternative (either looping in the player, using the Player playlist API, or ConcatenatingMediaSource for advanced cases) PiperOrigin-RevId: 367990981
tonihei committed -
Prior to this change, there were some unrealistic quirks in our Robolectric tests. For example, onRenderedFirstFrame would be called when using FakeVideoRenderer, despite no output to render the frame to ever being set. This change improves the realism of these tests. These changes are required for some improvements being made to how outputs are set on video renderers. PiperOrigin-RevId: 367652169
olly committed
-
- 09 Apr, 2021 4 commits
-
-
PiperOrigin-RevId: 367596648
gyumin committed -
This was added in https://github.com/google/ExoPlayer/commit/9609af3c23383f2fd5571662d271c3013875705d as part of a LSC. The RequiresNonNull annotation doesn't work anymore (it doesn't recognize the outer class member and instead tries to find the same variable on the inner class). So instead of suppressing the warning of the non-fulfilled precondition, we can just check the non-nullness directly and remove the precondition. PiperOrigin-RevId: 367593941
tonihei committed -
This brings in another fix for `NullPointerExceptions` within `WebView` callbacks in the IMA SDK, related to companion ads. Issue: #8447 #minor-release PiperOrigin-RevId: 367591047
andrewlewis committed -
Move AdsLoader inner classes that are also required by the UI module into common. PiperOrigin-RevId: 367414679
olly committed
-