Commit graph

3802 commits

Author SHA1 Message Date
andrewlewis
5fd1601f91 Signal an ads identifier to the AdsLoader
In a later change, the AdPlaybackState will include the playing adsId (set by
the AdsLoader) and the ads loader will use this to determine what ad
information is associated with the playing/next periods, to allow loading ads
in playlists.

Apps can continue to pass just a URI for an ad tag with their MediaItem, in
which case the associated playlist will request that ad tag just and the same
state will be used for all occurrences of the ad tag.

This change has breaking changes to the AdsLoader interface and removes
deprecated ways of passing the ad tag, as it's very likely to go into a major
release anyway and not needing to handle the deprecated cases simplifies
ImaAdsLoader.

Issue: #3750
PiperOrigin-RevId: 340438580
2020-11-06 16:32:31 +00:00
ibaker
f937e40eab Make Tx3gDecoder fields final, and remove unnecessary null-check
PiperOrigin-RevId: 340412910
2020-11-06 16:32:22 +00:00
Samoylenko Dmitry
99ddb4037b Correctly handling Exception: java.nio.file.FileSystemException: No space left on device.
By default methods File.makeDir() and File.makeDirs() can return 'false' if file aleady exists or can not be created. Such silent ignore of the situation propagates misbehavior to the caller: CacheDataSink#173 : new FileOutputStream(file). And then it throws not correct exception type 'FileNotFoundException'. While correct exception should be 'no space left on the device'.

This can be fixed only with 'Files.createDirectories()' method that throws correct exception type.
2020-11-03 15:33:25 +03:00
olly
e139a4652a Short term fix for setFrameRate ISE when surface is not valid
PiperOrigin-RevId: 340314496
2020-11-02 23:02:27 +00:00
olly
2c7473dc05 Clean up logic for determining whether DRM reconfig needs codec re-init
1. Move logic to decide to re-initialize the codec rather than using
   MediaCodec.setMediaDrmSession if (a) PlayReady is in use, and (b)
   the new session is still provisioning. This would previously have
   happened asynchronously after an input format change, after the
   decoder has subsequently been flushed. After this change the logic
   executes synchronously when the input format changes. This helps
   with the ref'd bug, since we want to propagate reasons for codec
   re-initialization through inputFormatChanged events.
2. Whilst moving the logic for re-initialization if PlayReady is
   being used, I fixed a bug that would occur when switching from
   [PlayReady --> non-PlayReady]. Re-use doesn't work in this case.
   The old logic only checked for the [Something --> PlayReady] case.
3. Remove pointless codec flush if updating the DRM session having
   not queued anything to the codec.

PiperOrigin-RevId: 340299790
2020-11-02 23:02:16 +00:00
Oliver Woodman
e1211f9254 Merge pull request #8133 from xufuji456:dev-v2
PiperOrigin-RevId: 340254878
2020-11-02 23:01:45 +00:00
ibaker
8e9c5c67a3 Migrate Tx3gDecoderTest to Guava and SpannedSubject
#minor-release

PiperOrigin-RevId: 340249019
2020-11-02 23:01:35 +00:00
olly
1d12d03283 Clarify DRM error deferral comments
- I don't think the session recovering later would work, because
  the codec will be configured not to use it.
- I'm not sure session recovery makes sense in general, and our
  implementations do not do this. Document it as a terminal state
  for now.

PiperOrigin-RevId: 340204194
2020-11-02 23:01:25 +00:00
olly
be1fd23666 Rename setOperatingRate to setPlaybackSpeed
This avoids confusion that currently exists between "operating rate"
and "codec operating rate", which are different. It also tightens the
requirement of the value being passed to be more than a "hint". It's
already being used as more than a hint for setting the Surface frame
rate.

PiperOrigin-RevId: 340201829
2020-11-02 23:01:16 +00:00
olly
c1dc802050 Make defaultLicenseUrl optional
Some content types always provide the license URL in the media.
The PlayReady example in the demo app doesn't provide a default
license URL for this reason, as an example.

#minor-release

PiperOrigin-RevId: 340125784
2020-11-02 23:00:57 +00:00
samrobinson
9962cf015b Add SEF based test to MetadataRetrieverTest
PiperOrigin-RevId: 339885432
2020-11-02 23:00:20 +00:00
aquilescanta
04c56c44cf Publish components that depend on MediaParser
This change will be followed up by:
- Changes adding APIs to enable the use of MediaParser in each of the supported
  media sources.
- Changes removing TODOs related to the change of the stable SDK to API 30.

PiperOrigin-RevId: 339556777
2020-11-02 22:59:05 +00:00
samrobinson
c0a0708fc3 Extract SEF slow motion cues as Metadata
PiperOrigin-RevId: 339307746
2020-11-02 22:57:47 +00:00
tonihei
e57193676a Add min/max live offset to MediaItem.LiveConfiguration.
This allows the user and the media to define bounds in which the live offset
can vary.

Issue: #4904
PiperOrigin-RevId: 339214605
2020-11-02 22:57:19 +00:00
olly
d436a69d8f Centralize canKeepCodec logic
Logic for determining if (and how) decoders can be adapted is
currently split between renderers and MediaCodecInfo. This change
centralizes the majority of the logic in MediaCodecInfo.

This change also fixes a bug in MediaCodecAudioRenderer when computing
max values for the codec. Previously, max values would not be increased
to account for potential adaptation to another stream in the case that
the codec needs to be flushed for the adaptation to occur.

PiperOrigin-RevId: 339133416
2020-11-02 22:57:09 +00:00
olly
959851b190 Add MediaCodecInfoTest
PiperOrigin-RevId: 339107784
2020-11-02 22:56:59 +00:00
olly
e16ab27b63 No-op refactor of MediaCodecInfo.isSeamlessAdaptationSupported
PiperOrigin-RevId: 339084261
2020-11-02 22:56:30 +00:00
kimvde
80a37c7ed1 Rename MotionPhoto to MotionPhotoMetadata
This make it clear that this class does not contain any photo/video
data.

PiperOrigin-RevId: 339045203
2020-11-02 22:56:11 +00:00
andrewlewis
160ee9d890 Handle stream volume register/unregister errors
Issue: #8106
Issue: #8087
PiperOrigin-RevId: 338664455
2020-11-02 22:55:14 +00:00
xufuji456
4bc392a8ef fix the end point of span exceeds the length of SpannableStringBuilder 2020-10-29 15:12:49 +08:00
olly
e5434ff4d3 Add plumbing for decoderReleased analytics events
A subsequent CL will plumb a release reason through these
event paths.

PiperOrigin-RevId: 338655603
2020-10-23 13:55:09 +01:00
christosts
485949b56c Refactor AsynchronousMediaCoderAdapter
Refactor the AsynchronousMediaCoderAdapter and move the callback thread
out of the adapter so that implementation of async callback and and
async queueing are consistent design-wise.

PiperOrigin-RevId: 338637837
2020-10-23 13:55:00 +01:00
kimvde
521a220728 Avoid throwing for still photo metadata retrieval
PiperOrigin-RevId: 338497163
2020-10-23 13:54:31 +01:00
ibaker
18c6b16f91 Switch playback tests to single-parameter parameterized syntax
This is simpler than instantiating a single-element string array for
every parameter.

PiperOrigin-RevId: 338469324
2020-10-23 13:54:11 +01:00
kimvde
175b8eb69e Read Google Photos motion photo metadata
PiperOrigin-RevId: 338436906
2020-10-22 12:37:41 +01:00
bachinger
1051580a63 Improve naming of the methods of LivePlaybackSpeedControl
PiperOrigin-RevId: 338232327
2020-10-21 22:25:54 +01:00
tonihei
54506b506b Explicitly prevent callbacks after player is released
We currently implicitly rely on the internal playback thread to not send
new updates after the player got released. This may not always be ensured
since we let the release call timeout. For the timeout case, there may
still be a pending operation returning much later when it unstuck itself.

Fix this and potential other edge cases by explicitly removing all listeners
and preventing new listeners from being added after the release.

PiperOrigin-RevId: 338217220
2020-10-21 10:24:24 +01:00
olly
0ad33116b6 Simplify artwork selection in PlayerView
PiperOrigin-RevId: 338056357
2020-10-21 10:24:04 +01:00
Oliver Woodman
f1c3928bc9 Merge pull request #7867 from GeneticGenesis:pc/update-expected-http-statuses-for-failover
PiperOrigin-RevId: 338051017
2020-10-20 14:52:14 +01:00
ibaker
7ea1201bc2 Add playback tests for existing MP4 assets
Skip assets with >2 audio channels - this isn't
currently supported by ShadowAudioSystem. I'll add these when support is
available.

Also skip sample_ac4_protected.mp4 because DRM isn't supported in this
test environment either.

PiperOrigin-RevId: 338023738
2020-10-20 14:51:50 +01:00
ibaker
57e884b671 Add support for AC-3, AC-4, E-AC-3 and E-AC-3-JOC to playback tests
I added the TS playback tests for these assets without adding support
for the relevant MIME types to ShadowMediaCodec.

Also remove test assets with more than 2 audio channels - this isn't
currently supported by ShadowAudioSystem. I'll re-add these when support
is available.

PiperOrigin-RevId: 338023290
2020-10-20 14:51:41 +01:00
krocard
f54f763db5 AudioSink: Remove comment about unconfirmed crash
Consensus is that the NoClassDefFoundError does not
causes a crash but only a warning.

PiperOrigin-RevId: 338022354
2020-10-20 14:51:32 +01:00
Oliver Woodman
2f3fdf7c5b Merge pull request #8030 from yqritc:add-output-surface-workaround
PiperOrigin-RevId: 338016707
2020-10-20 14:51:20 +01:00
tonihei
febf5d2031 Use ListenerSet in AnalyticsCollector.
This ensures recursively sent events arrive in the correct order.

Issue: #8048
PiperOrigin-RevId: 337812882
2020-10-20 14:50:50 +01:00
tonihei
68cbf6ddf3 Move listener handling to common util class.
ExoPlayerImpl and CastPlayer repeat the same logic. Moving the listener
and event handling to a common util class allows to reuse the same code
and add unit tests for this logic.

The change is a functional no-op.

PiperOrigin-RevId: 337812358
2020-10-20 14:50:30 +01:00
krocard
e589d7238a Add a getter for sleeping for offload
This allows wakelock releases to be state based
instead of transition based.

#exo-offload

PiperOrigin-RevId: 337286501
2020-10-17 01:35:20 +01:00
ibaker
d97dd8d5eb Add playback tests for existing FLAC assets
PiperOrigin-RevId: 337280116
2020-10-17 01:35:11 +01:00
ibaker
74ac915124 Add playback tests for existing MP3 assets
PiperOrigin-RevId: 337279583
2020-10-17 01:35:01 +01:00
krocard
230f4e5bb5 Do not inherit directly from AudioTrack.StreamEventCallback
This was causing issues old devices where the class
inheriting StreamEventCallback was loaded even though
it was not used.

Instead use an anonymous class that seem to be loaded
more lazily.

PiperOrigin-RevId: 337252687
2020-10-17 01:34:43 +01:00
krocard
bb851c99b9 Add MiTV devices requiring the output surface workaround
Issue: #8014
PiperOrigin-RevId: 337142176
2020-10-17 01:34:33 +01:00
ibaker
2371b024dd Switch to an 'api' dependency on Guava
The 'implementation' dependency causes problems when resolving
ListenableFuture in contexts that also include the
com.google.guava:listenablefuture:1.0 dependency.

Issue: #7905
Issue: #7997
Issue: #7993
PiperOrigin-RevId: 337093024
2020-10-17 01:34:15 +01:00
christosts
c4b346e49d Integrate playback speed control in ExoPlayerImplInternal
Issue: #4904
PiperOrigin-RevId: 337048010
2020-10-17 01:33:37 +01:00
bachinger
bb7c934812 Add missing properties of MediaItem.Subtitle
Issue: #8044
PiperOrigin-RevId: 336955479
2020-10-17 01:32:59 +01:00
ibaker
d700627ec2 Move Robolectric-related test utils methods to robolectricutils module
This moves TestUtil#runMainLooperUntil and
TestUtil#createRobolectricConditionVariable to a new RobolectricUtil
class.

Also move testutil classes that use Robolectric-related utils classes
(e.g. TestPlayerRunHelper, TestDownloadManagerListener).

PiperOrigin-RevId: 336864959
2020-10-13 16:29:50 +01:00
samrobinson
9e1c6321ee Adjust static metadata logging to only list non-empty Metadata.
PiperOrigin-RevId: 336864814
2020-10-13 16:29:41 +01:00
christosts
8fdadade7b Add targetLiveOffsetUs parameter to LoadControl.shouldStartPlayback
This allows a LoadControl to start playback earlier if the target
live offset is very low.

Issue: #4904
PiperOrigin-RevId: 336863824
2020-10-13 16:29:31 +01:00
christosts
76b7f76437 Allow speed adjustments close to 1f in SonicAudioProcessor
Issue: #4904
PiperOrigin-RevId: 336841791
2020-10-13 16:29:22 +01:00
christosts
09598580f2 Allow to set live properties on DefaultMediaSourceFactory
Issue: #4904
PiperOrigin-RevId: 336841049
2020-10-13 16:29:13 +01:00
christosts
0756f304d6 Allow to configure custom LivePlaybackSpeedControl in player builders.
Use default implementation otherwise and forward chosen implementation to
internal player.

Issue: #4904
PiperOrigin-RevId: 336840530
2020-10-13 16:29:03 +01:00
christosts
867d27fa72 Add LivePlaybackSpeedControl interface and default implementation.
Issue: #4904
PiperOrigin-RevId: 336839908
2020-10-13 16:28:54 +01:00
olly
d47258381f Remove reflection and call Surface.setFrameRate directly
PiperOrigin-RevId: 336838201
2020-10-13 16:28:26 +01:00
ibaker
506e9e951f Use MP4VTT MIME type in DashManifestParser (again)
We stopped using using this MIME type in
74a9d8f680

This broke subtitle decoding in some cases (Issue: #7985), which I
fixed in
7b8895d655.

After some discussion we've decided SubtitleDecoderFactory shouldn't
depend on Format.containerMimeType (since the samples have already been
extracted by this point, so the container shouldn't matter). So this
change fixes DashManifestParser to use MimeTypes.APPLICATION_MP4VTT (and
reverts the no-longer-needed SubtitleDecoderFactory change).

PiperOrigin-RevId: 336668450
2020-10-13 16:27:58 +01:00
ibaker
ca3b420cf6 Split TestExoPlayer into Builder and RunHelper classes
TestExoPlayerBuilder can be used from both emulator and robolectric
tests, TestPlayerRunHelper uses Robolectric Looper behaviour, meaning
it can be moved to the robolectricutils module in a follow-up change.

PiperOrigin-RevId: 336634225
2020-10-13 16:27:39 +01:00
bachinger
cf2f9fd7b5 Fix flaky test case
PiperOrigin-RevId: 336558226
2020-10-13 16:27:29 +01:00
bachinger
0a9b11d3dd Make resetPosition reset the position if true
Issue: #8024
PiperOrigin-RevId: 335846035
2020-10-13 16:26:41 +01:00
andrewlewis
9753c3fcfb Add back copybara stripping
PiperOrigin-RevId: 335683390
2020-10-06 19:49:15 +01:00
tonihei
ed163db1c1 Enable detach surface timeout by default.
Experiments showed the timeout is beneficial to avoid ANRs and
we can thus enable the feature by default.

Also add configuration to set the timeout if required.

Issue: #5887
PiperOrigin-RevId: 335652506
2020-10-06 16:57:43 +00:00
andrewlewis
ac782235ca Fix miscellaneous nits/typos
PiperOrigin-RevId: 335642909
2020-10-06 16:57:31 +00:00
tonihei
008c80812b Enable release timeout by default and make config non-experimental.
Using a timeout prevents ANRs in cases where the underlying platform
gets blocked forever, so we enable this feature by default.

Issue: #4352
PiperOrigin-RevId: 335642485
2020-10-06 16:57:19 +00:00
andrewlewis
39277ebe95 Pass ad tags via AdsMediaSource
This is in preparation for supporting playlists of ads media sources using
ImaAdsLoader.

Existing ways of passing ad tags should still function but are deprecated (and
won't be supported with playlists).

Issue: #3750
PiperOrigin-RevId: 335618364
2020-10-06 14:31:50 +01:00
samrobinson
a552e35f6a Add getter and callbacks for static metadata retrieval.
Issue:#7266
PiperOrigin-RevId: 335416280
2020-10-06 14:31:32 +01:00
bachinger
067712f599 Fix flaky test
PiperOrigin-RevId: 334801561
2020-10-06 14:31:14 +01:00
andrewlewis
3e8dacc284 Move DataSource reading methods into Util
This will be used to read ads responses out of data: URLs in a subsequent
change.

PiperOrigin-RevId: 334778780
2020-10-06 14:30:56 +01:00
ibaker
907e2e0515 Tweak null-checking in TextRenderer#getNextEventTime()
`subtitle` is only guaranteed to be non-null if
`nextSubtitleEventIndex != C.INDEX_UNSET`. The null check added in
0efec5f6c1
was too early.

Issue: #8017
PiperOrigin-RevId: 334777742
2020-10-06 14:30:47 +01:00
ibaker
7b8895d655 Use Mp4WebvttDecoder for WebVTT content in DASH MP4 containers
This was broken by 74a9d8f680
because DashManifestParser switched to setting Format.sampleMimeType to
text/vtt while SubtitleDecoderFactory was still expecting
application/x-mp4-vtt. This change teaches SubtitleDecoderFactory to
check both Format.containerMimeType and Format.sampleMimeType.

I'll investigate a follow-up change to remove
MimeTypes.APPLICATION_MP4VTT completely (it's currently still used in
AtomParsers).

Issue: #7985
PiperOrigin-RevId: 334771672
2020-10-06 14:30:29 +01:00
claincly
4d3a781ca4 End to end playback test for gapless playback
In the test, a real instance of SimpleExoplayer plays two identical Mp3 files.
The GaplessMp3Decoder will write randomized data to decoder output on receiving
input. The test compares the bytes written by the decoder with the bytes
received by the AudioTrack, to verify that the trimming of encoder delay/
padding is correctly carried out.

Test mp3 has delay 576 frames and padding 1404 frames. File generated from:
ffmpeg -f lavfi -i "sine=frequency=1000:duration=1" test.mp3

This change needs robolectric version 4.5, which is not currently released (2020 Sep 30).

PiperOrigin-RevId: 334648486
2020-10-06 14:30:19 +01:00
ibaker
8cee5c5f6b Create a robolectricutils module
This holds shared test infrastructure that needs to depend on
Robolectric.

PiperOrigin-RevId: 334604041
2020-10-06 14:30:10 +01:00
christosts
a0d99a6ac8 Fix flaky unit tests
PiperOrigin-RevId: 334580007
2020-10-06 14:29:52 +01:00
yqritc
eaff9d5105 apply setOutputSurface workaround for more devices 2020-10-02 14:27:13 +09:00
ibaker
88999da3be Add playback tests for more TS assets
PiperOrigin-RevId: 334549894
2020-09-30 11:55:35 +01:00
andrewlewis
6b13640eeb Fix position ramping behavior with AudioTrack speed params
Non-realtime AudioTrack playback speed was not taken into account when
extrapolating the old mode's position, causing the position not to
advance smoothly.

This should be a no-op when not using AudioTrack playback params for
speed adjustment.

Issue: #7982
PiperOrigin-RevId: 334151163
2020-09-30 11:55:27 +01:00
Phil Cluff
1a63f9e3d2 Update HTTP status codes expected in failover scenarios. 2020-09-28 18:27:26 +01:00
christosts
397fe8f305 Bring back setRenderTimeLimitMs
PiperOrigin-RevId: 333712782
2020-09-25 16:34:10 +01:00
christosts
0066586499 Remove SynchronousMediaCodecBufferEnqueuer
Remove the SynchronousMediaCodecBufferEnqueuer interface
since we only keep the AsynchronousMediaCodecBufferEnqueuer
implementation.

PiperOrigin-RevId: 333701115
2020-09-25 16:33:42 +01:00
krocard
7dfdde9246 Retry AudioTrack init and write before throwing
Retry AudioTrack init and write for 100ms before
giving up and aborting playback.

This was tested by throwing every 2 init/write and
making sure playback did not stopped.

#exo-offload

PiperOrigin-RevId: 333536841
2020-09-25 16:33:33 +01:00
krocard
56cb327f1e Clarify offload stream event callback impl
#exo-offload

PiperOrigin-RevId: 333532900
2020-09-25 16:33:23 +01:00
krocard
55a13d8871 Callback on audio track failure
Intended for statistics now that all errors
are not surfaced to the app.

PiperOrigin-RevId: 333519898
2020-09-25 16:33:14 +01:00
krocard
fad2846d1c Workaround AudioTrack incorrect error code
#exo-offload

PiperOrigin-RevId: 333513385
2020-09-25 16:33:05 +01:00
krocard
aa7309cdea Release wakelock when sleeping for offload
#exo-offload

PiperOrigin-RevId: 333512383
2020-09-25 16:32:55 +01:00
krocard
d97af76280 Retry after offload playback failure
Do that by adding a recoverable state to
the ExoPlaybackException marking when
it is needed to recreate the renderers.

PiperOrigin-RevId: 333507849
2020-09-25 16:32:46 +01:00
christosts
3b14b05d93 Remove MediaCodecOperationMode
Remove MediaCodecOperationMode and replace it with a boolean
flag to enable/disable asynchronous queueing.

PiperOrigin-RevId: 333504817
2020-09-25 16:32:28 +01:00
krocard
dd99d23621 Remove unnecessary AudioTrack alias
Those aliases were introduced when the class
was also called AudioTrack.

PiperOrigin-RevId: 333499360
2020-09-25 16:32:18 +01:00
krocard
f37d79a4dd Callback when sleeping for offload and existing from it
#exo-offload

PiperOrigin-RevId: 333497538
2020-09-25 16:32:09 +01:00
tonihei
294ae10ef1 Change default of throwsWhenUsingWrongThread to true
Apps can still opt out for now, but this option will be removed in
the future.

Issue: #4463
PiperOrigin-RevId: 333489424
2020-09-25 16:32:00 +01:00
tonihei
66636f9ec0 Switch SntpClient to time.android.com and allow to set host.
PiperOrigin-RevId: 333480727
2020-09-25 16:31:38 +01:00
krocard
3be2463a94 Fix offload buffer full detection after setEndOfStream
This issue has been observed on a test app stress
testing setEndOfStream.

The issue has not been observed on ExoPlayer,
probably due to timing differences, but it is fixed
preventively.

#exo-offload

PiperOrigin-RevId: 333472136
2020-09-25 16:31:29 +01:00
tonihei
25e31743d3 Don't require the existence of the next period to wait for its stream.
We have a workaround for uneven sample stream durarions in playlists that
assumes a renderer allows playback if it's reading ahead or waiting for
the next stream.

652c2f9c18 changed this logic to no longer require to
wait until the next stream is prepared due to a change in how we advance
media periods in the queue. However, the code falsely still requires the
next stream to exist (even if it's not prepared). This can cause a stuck
buffering state when the difference in the duration of the streams is more
than what we buffer ahead because we never create the next stream in such
a case.

Note: DefaultMediaClock.shouldUseStandaloneClock has roughly the same logic
and also doesn't require the next stream to be present.

Also fix a test that seemed to rely on this stuck buffering case to test
stuck buffering detection. Changed the test to not read the end of stream
to ensure it runs into the desired stuck buffering case.

Issue:#7943
PiperOrigin-RevId: 333050285
2020-09-25 16:30:25 +01:00
ibaker
77d125b243 Use replace() instead of replaceAll() in SsaDecoder
We're not using regex so there's no need to use replaceAll()

PiperOrigin-RevId: 332865724
2020-09-21 22:58:28 +01:00
krocard
dc24274391 Recover from audio server crash while sleeping for offload
Without this patch, playback would be frozen indefinitely
until the user manually pauses and unpauses it.

This has the side effect of disabling offload until
the next stop due to the workaround of
disabling offload when it encounters a failure.

As an audio server crash is considered very
infrequent, especially in stable conditions like
an audio only playback, it is unlikely that disabling
offload is an issue.

PiperOrigin-RevId: 332857094
2020-09-21 22:58:19 +01:00
Oliver Woodman
cf3e61ae6f Merge pull request #7938 from bennettpeter:pullreq-ssa-subtitles
PiperOrigin-RevId: 332814223
2020-09-21 22:57:58 +01:00
kimvde
4aa3a0482d Add unit tests for Transformer
PiperOrigin-RevId: 332416139
2020-09-21 22:57:47 +01:00
ibaker
70ebe12ef9 Suppress Guava-related ProGuard/R8 warnings
I didn't copy-paste the whole of
https://github.com/google/guava/wiki/UsingProGuardWithGuava because
this line seems relevant based on our current usage.

Lots of that file seems to relate to classes that are strongly
discouraged on Android:
https://github.com/google/guava/wiki/Android#specifics

I've only added this to the `common` module, since everyone that uses
ExoPlayer must depend on that. This avoids duplicating this line into
every module that has a Guava dependency.

Also remove some other warning suppressions that are defined in both
`core` and `common`.

Issue: #7904
PiperOrigin-RevId: 332203086
2020-09-17 17:41:34 +01:00
Peter Bennett
efd5265e87 text: Fix handling of unbreakable-space in ssa subtitles
The character sequence \h is used for "unbreakable space".
Replace these sequences with space to avoid strings of \h
showing up on screen.
2020-09-17 11:21:30 -04:00
olly
f387574140 Fix OOM-is-prevented test OOM-ing :)
This test is intended to check that DefaultLoadControl will cause
playback to fail as "stuck buffering" rather than OOM-ing, in the
case that its target buffer size is reached and playback still
hasn't started.

Unfortunately, the target buffer size is ~130MB, and when running
on some setups an OOM actually ends up happening before this much
memory is allocated.

This change makes the target buffer size much smaller to avoid the
problem.

PiperOrigin-RevId: 331748208
2020-09-16 13:33:42 +01:00
olly
6be879c21b Clean up experimental offload Javadoc
PiperOrigin-RevId: 331591005
2020-09-16 13:33:33 +01:00
bachinger
91a491ea31 Add getMediaItemCount() and getMediaItemAt(int)
PiperOrigin-RevId: 331211708
2020-09-11 23:09:38 +01:00
olly
cdcb30ed21 Exclude Guava transitive annotation dependencies
PiperOrigin-RevId: 331148067
2020-09-11 16:01:15 +01:00
olly
f7ff5d59a4 Make BatchBufferTest allocate less memory
Setting to 2x BATCH_SIZE_BYTES

PiperOrigin-RevId: 331124129
2020-09-11 13:25:14 +01:00
olly
b9ed9ee379 Fix incorrect type when creating ExoPlaybackException
PiperOrigin-RevId: 331027732
2020-09-11 13:24:56 +01:00
bachinger
a3bac6b63e fix typo
PiperOrigin-RevId: 331025924
2020-09-11 13:24:48 +01:00
tonihei
157dffdca9 Don't keep 100MB static buffer in test.
This may remove available memory from other tests running in the same
process. Instead, create the huge buffer when needed so it can be GCed
immediately.

PiperOrigin-RevId: 330960844
2020-09-11 13:24:39 +01:00
tonihei
267cc53770 Release player in e2e playback tests.
Not releasing the player means the playback thread keeps running
and also keeps its entire allocated playback buffer.

PiperOrigin-RevId: 330958821
2020-09-11 13:24:30 +01:00
krocard
19e6de778d Introduce audio offload scheduling tests
PiperOrigin-RevId: 330918396
2020-09-11 13:24:13 +01:00
tonihei
362d4f5b16 Add convenience constructor methods.
When passing in ExtractorFactory instances to SimpleExoPlayer.Builder or
DefaultMediaSourceFactory, we currently need to pass in one other
instance (RenderersFactory or DataSource.Factory), that developers will
often set to its default. To avoid specifying these defaults, these new
convience methods allow to just set the ExtractorsFactory if required.

PiperOrigin-RevId: 330908002
2020-09-11 13:24:04 +01:00
andrewlewis
abc39088d0 Remove testutil dependency on Robolectric shadows
Move shadow-related utils for end-to-end tests into core test.

PiperOrigin-RevId: 330902696
2020-09-11 13:23:45 +01:00
kimvde
6abe6a676e Support android.resource URI scheme
Issue: #7866
PiperOrigin-RevId: 330736774
2020-09-09 17:43:15 +01:00
olly
9e42b24e26 Fix Javadoc for DefaultDataSourceFactory constructors
PiperOrigin-RevId: 330736458
2020-09-09 17:43:06 +01:00
olly
b2b08ade99 Make User-Agent optional
PiperOrigin-RevId: 330593247
2020-09-09 09:41:51 +01:00
tonihei
bfe17aee3e Support ExtractorFactory in DefaultMediaSourceFactory.
This allows to customize extractor flags more easily when setting up the player.

In addition, we need to provide a way to pass in the ExtractorFactory through
the constructor chain starting in SimpleExoPlayer so that removing the
DefaultExtractorsFactory is possible for R8.

PiperOrigin-RevId: 330472935
2020-09-09 09:41:42 +01:00
olly
04f67e4adc Simplify DefaultMediaSourceFactory ad configuration
- Use a setter, which is consistent with how other optional
  components are passed.
- Remove nesting where a provider provides another provider.
  Since AdSupportProvider then only provides one thing, it
  can be renamed to AdsLoaderProvider, which more clearly
  expresses what it provides.

PiperOrigin-RevId: 330396334
2020-09-07 20:43:41 +01:00
Oliver Woodman
442aa78196 Merge pull request #7814 from zubcoco:dev-v2
PiperOrigin-RevId: 330366909
2020-09-07 20:43:30 +01:00
olly
45dc66ef2f Clear CodecInfos on InputFormat if codec is null
In maybeInitCodecWithFallback, it caches availableCodecInfos with mediaCryptoRequiresSecureDecoder and inputFormat as inputs, and won't clear it if shouldInitCodec is false, resulting in a case where availableCodecInfos is not null and codec is null.
When we have a new format, it's reasonable to clear availableCodecInfos if codec is null. Otherwise we might not be able to properly initialize a new codec.

PiperOrigin-RevId: 329971796
2020-09-07 20:43:00 +01:00
christosts
8dcab1d20a Remove fragile tests
PiperOrigin-RevId: 329894431
2020-09-07 20:42:42 +01:00
olly
fe2fc8b73f Add useful DownloadRequest to MediaItem conversion method
PiperOrigin-RevId: 329722775
2020-09-07 20:42:14 +01:00
olly
8e5336c59e Dev guide: Start updating the download page
PiperOrigin-RevId: 329719402
2020-09-07 20:41:55 +01:00
christosts
29f2a31af7 Re-enable ignored unit tests
PiperOrigin-RevId: 329675833
2020-09-07 20:41:36 +01:00
gyumin
d155416c54 Add Util.postOrRun
To avoid repetition, it adds Util.postOrRun and replaces existing
instances with the util method.

PiperOrigin-RevId: 329472769
2020-09-07 20:40:04 +01:00
olly
17b370d00c Allow upstream discards from the SampleQueue by time.
Add a SampleQueue method to discard from the write side of the queue by timestamp

PiperOrigin-RevId: 329303714
2020-09-07 20:39:46 +01:00
olly
440fd1cf62 Some minor tweaks
1. Add EventLogger right away in PlayerActivity, else it doesn't log
   playWhenReady being initially set to true.
2. Remove EventLogger logging for the audio position advancing. It's
   redundant with isPlaying logging unless you're very specifically
   interested in the timing difference.
3. Remove unnecessary comment in Player.
4. Fix Timeline Javadoc.

PiperOrigin-RevId: 328983944
2020-09-07 20:39:36 +01:00
olly
e163fe6949 Optimize AAC seeking except for xHE-AAC
In 2.11.2 to 2.11.5, we considered all AAC streams as consisting
only of sync samples. In 2.11.6+, we considered no AAC streams as
consisting of sync samples, because the property is not guaranteed
specifically for xHE-AAC. This will have caused a small regression
is seek speed for some types of media.

This change brings back the optimization for AAC, specifically
excluding only xHE-AAC (and cases where we don't know what type of
AAC we're dealing with).

PiperOrigin-RevId: 328950697
2020-09-07 20:39:27 +01:00
christosts
3dbb4c4da9 Migrate test repeatModeChanges() to TestExoPlayer
PiperOrigin-RevId: 328918314
2020-09-07 20:39:18 +01:00
Corentin Zuber
7bfde6a5ea Fix comments 2020-09-03 10:19:55 +02:00
Corentin Zuber
50582417cb Authorize multiple preffered language and text 2020-08-27 16:50:28 +02:00
aquilescanta
91b3aad063 Make ExoPlayer.getPlaybackLooper never return null
Issue: #7807
PiperOrigin-RevId: 328726966
2020-08-27 14:41:42 +00:00
andrewlewis
74c493f51e Add back support for setting audio pitch
To play slow motion streams where the audio has been recorded at
slower speeds, it is necessary to be able to resample (rather than
time-stretch) the audio. This change undeprecates back the previously
deprecated PlaybackParameters class to allow apps to set pitch.

PiperOrigin-RevId: 328703116
2020-08-27 12:06:41 +01:00
Oliver Woodman
8b3422ba54 Merge pull request #7800 from TakuSemba:apply-output-surface-workaround
PiperOrigin-RevId: 328696935
2020-08-27 12:06:30 +01:00
bachinger
feb4cce2b2 Enable nullness test for CachedContent/CachedContentIndex
PiperOrigin-RevId: 328551668
2020-08-27 12:06:20 +01:00
claincly
20def699ad Fix test failure due to recent change to ShadowAudioTrack
<unknown commit> used a new API provided in API29+, changing this test's config to
use the newer SDK version.

TAP:https://test.corp.google.com/ui#d=targetZoomout&flags=CAMQAlhg&t=//third_party/java_src/android_libs/exoplayer/v2/library/core/src/test:test_com/google/android/exoplayer2/audio/MediaCodecAudioRendererTest
PiperOrigin-RevId: 328344926
2020-08-26 16:40:02 +01:00
ibaker
74f7ec729c Add playback tests for TS and MP4 samples that run on Robolectric
This commit introduces the infrastructure classes, and a couple of
illustrative usages.

PiperOrigin-RevId: 328301593
2020-08-26 16:39:49 +01:00
tonihei
a6ee778cfe Remove unnecessary ID suffix.
PiperOrigin-RevId: 328154018
2020-08-26 16:39:39 +01:00
tonihei
996e58973d Make renderer flush when setting pause-at-end more targeted.
We currently always reset everything if playingPeriod != readingPeriod.
However, this is only needed when the pausing is actually required, i.e.,
if the feature is enabled and we are in the last period of the window.

PiperOrigin-RevId: 328141242
2020-08-26 16:39:29 +01:00
andrewlewis
4b0e39e4b9 Add an event for the audio position advancing
Currently the audio renderer can become ready before the AudioTrack
actually has enough data to play something, which means that the
player may transition to the ready state before audio starts
playing. This makes the player's current state transition not very
useful for detecting when audio actually starts playing.

This change adds a new event to notify apps when the audio position
is increasing after a pause or seek/flush/reset event, and includes
an estimate of the system time at which audio playout started.

Issue: #7577
PiperOrigin-RevId: 327810040
2020-08-26 16:39:18 +01:00
takusemba
3f5c584574 apply output surface workaround for F02H, F03H 2020-08-25 14:53:57 +09:00
bachinger
e55b345595 Make all media source factories create a drm session
PiperOrigin-RevId: 327691347
2020-08-21 12:55:14 +01:00
andrewlewis
e2fc5c2190 Fix EventLogger audio underrun logging
PiperOrigin-RevId: 327610950
2020-08-21 12:51:23 +01:00
aquilescanta
79a846eb5e Fix check in placeholder session acquisition
PiperOrigin-RevId: 327223824
2020-08-21 12:49:16 +01:00
aquilescanta
41e6577dca Remove DrmSessionManager.acquirePlaceholderSession
In order to acquire a placeholder session, clients can call acquireSession
with a format with a null drmInitData.

PiperOrigin-RevId: 327220249
2020-08-21 12:49:06 +01:00
olly
7588c26b60 Remove support for cbc1 and cens encryptions schemes
PiperOrigin-RevId: 327199833
2020-08-21 12:48:39 +01:00
insun
b853978a91 Fix bug to show 'play' button at the end of stream
PiperOrigin-RevId: 327158791
2020-08-18 08:11:54 +01:00
olly
513b301e77 ExoPlaybackException: Align some method naming
PiperOrigin-RevId: 327003695
2020-08-17 16:14:39 +01:00
olly
7ef31e2208 Tweak DefaultMediaSourceFactory documentation
PiperOrigin-RevId: 327000958
2020-08-17 16:14:30 +01:00
olly
02ed809a18 Tweak offload disable Javadoc
PiperOrigin-RevId: 326998407
2020-08-17 16:14:21 +01:00
ibaker
f0ae8afd80 Separate the dump files from the test assets
This allows us to more easily create different dumps derived from the
same assets.

This moves media/source files from `assets/` to `assets/media/` and
dump files from `assets/` to `assets/extractordumps/` and
`assets/audiosinkdumps/` as appropriate. I intend to add
`assets/playbackdumps/` in a future CL.

PiperOrigin-RevId: 326986283
2020-08-17 16:13:53 +01:00
olly
94b66f4c24 Specify which function is triggering a TimeoutException
PiperOrigin-RevId: 326666629
2020-08-17 16:13:16 +01:00
andrewlewis
977f0d1ed0 Scale AudioTrack buffer size for AudioTrack speed adjustment
PiperOrigin-RevId: 326642908
2020-08-17 16:13:07 +01:00
samrobinson
eabc486b58 Keep AudioTrack on seek - experimental.
PiperOrigin-RevId: 326622573
2020-08-17 16:12:58 +01:00
andrewlewis
61abe5951a Use consistent naming for 'offload scheduling enabled'
PiperOrigin-RevId: 326413842
2020-08-17 16:11:35 +01:00
aquilescanta
cde795ea98 Fix typo in DrmSessionManager's javadoc
PiperOrigin-RevId: 326413433
2020-08-17 16:11:26 +01:00
aquilescanta
fcb263a407 Make DrmSessionManager take a Format instead of DrmInitData
Skipping acquirePlaceholderSession which will be removed
in a following change.

PiperOrigin-RevId: 326402746
2020-08-17 16:11:17 +01:00
andrewlewis
501f464217 Add support for using framework speed adjustment
AudioTrack.setPlaybackParams can be used to adjust playback speed.
This is preferable to application-level speed adjustment (currently
implemented in ExoPlayer) from API 23 because the speed change
occurs in the mixer, which means that the audio track buffer doesn't
need to drain out before the speed adjustment takes effect.

Issue: #7502
PiperOrigin-RevId: 326392301
2020-08-17 16:10:50 +01:00
olly
a0088f068a Change getMaxInputSize visibility.
PiperOrigin-RevId: 326341905
2020-08-17 16:10:31 +01:00
andrewlewis
6aeacd70bc Fix miscellaneous nits
PiperOrigin-RevId: 326208366
2020-08-17 16:09:19 +01:00
krocard
b02398ff75 Save input format in Configuration
This will allow for better exception
on AudioTrack error.

PiperOrigin-RevId: 326091883
2020-08-17 16:09:10 +01:00
andrewlewis
607e11718b Remove deprecated AudioSink methods
Also do some minor cleanup in DefaultAudioSink.

PiperOrigin-RevId: 326012441
2020-08-17 16:08:52 +01:00
olly
361e5d9326 Demo app: Fix DRM support check for ClearKey
Issue: Issue: #7735
PiperOrigin-RevId: 325900705
2020-08-17 16:08:15 +01:00
krocard
19db6feddb Use message to set offload scheduling
The code was mutating boolean across threads.

PiperOrigin-RevId: 325826214
2020-08-17 16:07:57 +01:00
krocard
192c1e5dee Improve OnExperimentalOffloadSchedulingEnabled name
For consistency with onShuffleModeEnabledChanged.

PiperOrigin-RevId: 325820951
2020-08-17 16:07:48 +01:00
samrobinson
63faf51c7e Change experimental method naming of setReleaseTimeoutMs.
PiperOrigin-RevId: 325795609
2020-08-17 16:07:39 +01:00
samrobinson
78424efc90 Change experimental method naming for throwWhenStuckBuffering.
PiperOrigin-RevId: 325795485
2020-08-17 16:07:29 +01:00
samrobinson
69c2a76d01 Change experimental method naming of set*MediaCodecOperationMode.
PiperOrigin-RevId: 325790799
2020-08-17 16:07:20 +01:00
krocard
6c3a011dc3 Listener for offload scheduling
Let the app know when offload scheduling is enabled or disabled.

PiperOrigin-RevId: 325790017
2020-08-17 16:07:11 +01:00
samrobinson
9a0203e954 Change experimental method naming for blockUntilDelivered.
PiperOrigin-RevId: 325786522
2020-08-17 16:07:02 +01:00
samrobinson
eb9463454b Change setBandwidthAllocationCheckpoints naming.
PiperOrigin-RevId: 325786473
2020-08-17 16:06:53 +01:00
samrobinson
6db25cdab6 Change experimental method naming for allowMultipleAdaptiveSelections
PiperOrigin-RevId: 325784936
2020-08-17 16:06:43 +01:00
samrobinson
b956f85b45 Change experimental method naming for enableOffloadScheduling.
PiperOrigin-RevId: 325784822
2020-08-17 16:06:34 +01:00
ibaker
28697b9b9e Fix DefaultTrackSelector docs on select*Track methods
formatSupport is a 2-dimensional int array but it's documented as
being indexed by 3 things. This seems to be a copy-paste mistake in
e97b8347eb

selectAllTracks() takes a 3-dimensional array with the same
3-indexed documentation, which makes sense there.

Also rename formatSupports -> formatSupport for consistency.

PiperOrigin-RevId: 325779435
2020-08-17 16:06:25 +01:00
ibaker
16d54f5e3d Add a sentence to TrackSelector javadoc calling out #invalidate()
PiperOrigin-RevId: 325767964
2020-08-17 16:06:15 +01:00
ibaker
5ed0c12ff0 Tweak how MediaCodecVideoRenderer renotifies the existing surface
Use a dedicated boolean to track if we've notified the current surface,
rather than re-using rendereredFirstFrameAfterReset.

PiperOrigin-RevId: 325757948
2020-08-17 16:06:06 +01:00
andrewlewis
acc8453628 Add support for audio-only ad display containers
Issue: #7689
PiperOrigin-RevId: 325752377
2020-08-17 16:05:56 +01:00
krocard
03a1a3ee82 Temporary disable offload after failure
PiperOrigin-RevId: 325429029
2020-08-07 19:04:37 +01:00
christosts
a5e6e3054d Offline DRM in main demo app
PiperOrigin-RevId: 325413035
2020-08-07 19:04:09 +01:00
christosts
c7a1151c2b Use MimeType.allSamplesAreSyncSamples in ClippingMediaPeriod
PiperOrigin-RevId: 325409392
2020-08-07 19:03:59 +01:00
tonihei
eee9b312dc Change default value of throwWhenStuckBuffering to true.
This change caused no problems and can be enabled by default.

PiperOrigin-RevId: 325264859
2020-08-07 19:03:30 +01:00
ibaker
092c66fac3 Rollback of 1ed5d8b563
*** Original commit ***

Rollback of bf5e6c7862

*** Original commit ***

Pass startPositionUs into Renderer.replaceStream

Plumb this down into BaseRenderer.onStreamChanged and use it when
deciding whether to render the first frame of a new period.

***

***

PiperOrigin-RevId: 325251261
2020-08-07 19:03:21 +01:00
olly
60630fe97b Upgrade some null checks to assertions
PiperOrigin-RevId: 325226353
2020-08-07 19:03:11 +01:00
ibaker
ea347a464a Rollback of 1ed5d8b563
*** Original commit ***

Rollback of bf5e6c7862

*** Original commit ***

Pass startPositionUs into Renderer.replaceStream

Plumb this down into BaseRenderer.onStreamChanged and use it when
deciding whether to render the first frame of a new period.

***

***

PiperOrigin-RevId: 325218588
2020-08-07 19:02:52 +01:00
olly
283bed8cb2 Fix ExoMediaCryptoType attachment
- Attach types for placeholder sessions. If a placeholder session will be
  attached and a downstream renderer doesn't know what to do with it, then
  this attachment is necessary to correctly determine that the renderer
  does not support the track.
- Attach types to sample formats. Without this, if playback fails due to
  a CryptoException, the ExoPlaybackException that gets thrown spuriously
  indicates that the format's DRM type was not supported.

PiperOrigin-RevId: 325214745
2020-08-07 19:02:42 +01:00
tonihei
94fb9adec1 Update initial bandwidth estimates.
Also include 5G-NSA estimates and update code to use immutable
structures to prevent external updates by the app.

PiperOrigin-RevId: 325196303
2020-08-07 19:02:04 +01:00
krocard
5342576e73 Use bypass for PCM if AudioTrack supports it
Codec bypass is now enabled for all formats
audio track supports.

PiperOrigin-RevId: 324987842
2020-08-07 19:01:35 +01:00
krocard
d2e50e40dc Use "Passthrough" terminology only for non-offload direct playback
The term "passthrough" was heavily overloaded. For clarity, split most
of its usage to different terms:
 * codec "bypass": no MediaCodec is used
 * "direct playback": no decoding occurs (but decryption may or may not)
 * "decrypt only codec": a MediaCodec used only to decrypt, not decode
 * "offload": playback to an offload AudioTrack.
 * "passthrough" is now only used in the sense of playing encoded audio
 * to a non offload AudioTrack.

PiperOrigin-RevId: 324984612
2020-08-07 19:01:25 +01:00
olly
c0ee267a6c Fix E-AC3 format propagation
Issue: Issue: #7611
PiperOrigin-RevId: 324884412
2020-08-07 19:00:57 +01:00
olly
71fd335bcd Simplify output format propagation
PiperOrigin-RevId: 324805335
2020-08-07 19:00:28 +01:00
olly
4d03d30890 Audio extension decoders: Pass decoder to getOutputFormat
It seems generally useful to have access to the decoder in
getOutputFormat. We're currently working around lack of access
by using member variables in the concrete audio extension
renderers. In the case of the Ffmpeg extension, holding a
reference to the decoder is preventing it from being garbage
collected when the decoder is released by the base class.

PiperOrigin-RevId: 324799670
2020-08-07 19:00:18 +01:00
tonihei
a6be8eeb6b Prevent extractor reuse after upstream discard.
After discarding upstream we shouldn't reuse the extractor from the
(newly) last media chunk because the extractor may have been reused
already by the discarded chunks.

Also add an assertion to SampleQueue that prevents the hard-to-detect
failure mode of overlapping sample byte ranges.

Issue: #7690
PiperOrigin-RevId: 324785093
2020-08-07 19:00:09 +01:00
tonihei
33af7a4536 Don't log mediaId in EventLogger and DefaultMediaSourceFactory.
The media id defaults to the URI that shouldn't be logged to logcat.

PiperOrigin-RevId: 324770157
2020-08-07 18:59:59 +01:00
olly
b2ea48f4e2 Fix parameter comments that don't match the formal parameter name
More information:
https://docs.google.com/a/google.com/document/d/1lzK04DqCZgjOoGQfBT053QIrCvlsyAAwLo0jfqcN6ds/edit?usp=sharing

Tested:
    TAP --sample ran all affected tests and none failed
    http://test/OCL:324422822:BASE:324408434:1596318556672:a8b3beed
PiperOrigin-RevId: 324621068
2020-08-07 18:59:40 +01:00
christosts
f4287ed070 Add a builder for DownloadRequest
PiperOrigin-RevId: 324616617
2020-08-07 18:59:30 +01:00
christosts
129ef7ccd4 DefaultMediaSourceFactory sets the offline license
PiperOrigin-RevId: 324610991
2020-08-07 18:59:21 +01:00
olly
be88143fcd Remove deprecated parts of demo app IntentUtil
PiperOrigin-RevId: 324604419
2020-08-07 18:59:11 +01:00
andrewlewis
9392dff225 Call VideoAdPlayerCallback.onLoaded
This callback was not notified before, which could theoretically lead to ad
loading timing out. In practice it doesn't currently happen because the timeout
appears to start when the ad cue point is reached, not when loadAd is called.

We notify onLoaded when the ad media period is prepared (for HTML5 the
recommendation is to notify on the HTMLMediaElement 'canplay' event, which this
roughly corresponds to).

PiperOrigin-RevId: 324568407
2020-08-07 18:58:31 +01:00
olly
a04769f2d5 Tweak DefaultDrmSessionManager Mode Javadoc
PiperOrigin-RevId: 324557397
2020-08-07 18:58:11 +01:00
tonihei
d625af67db Add load cancelation support to DASH and SS
Issue: #7244 added this feature to HLS. This change is the exact copy
in ChunkSampleStream to add the same support to the other adaptive
formats.

Note that ChunkSampleStream doesn't support slicing, so we can't cancel
a read-from chunk, and we need to prevent reading into an already
canceled chunk load so that the chunk can be automatically discarded
after the cancelation.

Issue: #2848
PiperOrigin-RevId: 324179972
2020-08-01 12:56:39 +01:00
ibaker
c8f039f0a9 Document that ConditionVariable instances start closed
PiperOrigin-RevId: 324002247
2020-08-01 12:56:21 +01:00
christosts
12bd36d41a Migrate test resettingMediaSourcesGivesFreshSourceInfo() to TestExoPlayer
PiperOrigin-RevId: 323985679
2020-08-01 12:56:03 +01:00
samrobinson
d6ee5b84d3 Group overloaded method together.
PiperOrigin-RevId: 323806853
2020-08-01 12:55:45 +01:00
krocard
6e3fc5e40a OMX.broadcom.video_decoder.tunnel.secure needs EOS workaround
The passthrough codec does not propagate
the EOS back to ExoPlayer.

Issue: https://github.com/google/ExoPlayer/issues/7647
PiperOrigin-RevId: 323758941
2020-08-01 12:55:18 +01:00
christosts
33360513a2 Migrate ExoPlayerTest.readAheadToEndDoesNotResetRenderer to TestExoplayer
PiperOrigin-RevId: 323758590
2020-08-01 12:55:09 +01:00
christosts
075ef824ec Migrate ExoPlayerTest.playShortDurationPeriods to use TestExoPlayer
PiperOrigin-RevId: 323754499
2020-08-01 12:55:00 +01:00
olly
7f10800e25 Restore wrapping of MediaCodec ISEs in MediaCodecDecoderException
Wrapping MediaCodec ISEs in MediaCodecDecoderException lets us attach
MediaCodecInfo, which contains lots of useful information such as the
MediaCodec name, the codec capabilities, etc.

PiperOrigin-RevId: 323575782
2020-08-01 12:54:51 +01:00
christosts
bcb9ad22af Migrate ExoPlayerTest to use TestExoPlayer.
Tests playSinglePeriodTimeline and playMultiPeriodTimeline are migrated
to use TestExoplayer.

PiperOrigin-RevId: 323546141
2020-08-01 12:54:42 +01:00
christosts
ce0f814b77 Migrate ExoPlayerTest.playEmptyTimeline to TestExoPlayer
PiperOrigin-RevId: 323544694
2020-08-01 12:54:33 +01:00
olly
dc10292708 Change getCodecOperatingRate visibility.
PiperOrigin-RevId: 323477041
2020-08-01 12:54:14 +01:00
olly
1ed5d8b563 Rollback of bf5e6c7862
*** Original commit ***

Pass startPositionUs into Renderer.replaceStream

Plumb this down into BaseRenderer.onStreamChanged and use it when
deciding whether to render the first frame of a new period.

***

PiperOrigin-RevId: 323447253
2020-07-28 00:00:36 +01:00
aquilescanta
684994fe61 Remove Renderer references to Format.drmInitData
PiperOrigin-RevId: 323392470
2020-07-28 00:00:27 +01:00
aquilescanta
51e65ff55a Remove canAcquireSession from DrmSessionManager
It's been replaced by getExoMediaCryptoType().

PiperOrigin-RevId: 323382332
2020-07-28 00:00:18 +01:00
ibaker
67408ca7fb Fix var-args warning in DownloadManagerTest
From Truth docs:
"To test that the iterable contains the same elements as an array,
prefer containsExactlyElementsIn(Object[]). It makes clear that the
given array is a list of elements, not an element itself. This helps
human readers and avoids a compiler warning."
https://truth.dev/api/1.0.1/com/google/common/truth/IterableSubject.html#containsExactly-java.lang.Object...-

PiperOrigin-RevId: 323367341
2020-07-28 00:00:01 +01:00
ibaker
fda3b3d8ec Use static imports for methods that make sense without their class name
PiperOrigin-RevId: 323349585
2020-07-27 23:59:52 +01:00
ibaker
ce2e6e2fd6 Hide ParsableByteArray#data behind a getter
This allows us to enforce the limit because the array can only be
reassigned through reset(byte[]) or reset(byte[], int) (which update
the limit)

PiperOrigin-RevId: 323339960
2020-07-27 23:59:34 +01:00
ibaker
478f59fd08 Replace ExoPlayer's functional types with Guava alternatives
This removes Supplier, Function and Predicate. Consumer is kept because
Guava doesn't have an equivalent (Java 8 does, but we can't use that
yet).

#exofixit

PiperOrigin-RevId: 323324392
2020-07-27 23:59:25 +01:00
claincly
ec78bde50c Add support for MediaCodecAudioRenderer to use float output
Enables the MediaCodec to use float PCM output when the sink supports
float PCM input

PiperOrigin-RevId: 322856138
2020-07-24 10:48:34 +01:00
andrewlewis
c271eb85fd Fix some nullness annotation warnings
PiperOrigin-RevId: 322780990
2020-07-24 10:47:49 +01:00
andrewlewis
2c82cfe5b0 Fix TextRenderer input buffer updates
PiperOrigin-RevId: 322780573
2020-07-24 10:47:40 +01:00
tonihei
50ddfccdb9 Use consistent scoring style in DefaultTrackSelector.
We currently mix point-based systems with Comparable-based systems.
This switches all scoring to using Comparable and modernizes it by
using ComparisonChain.

Using Comparator chains is more maintainable than point systems because
the reader doesn't have to think about all combinatorial combinations
of points.

PiperOrigin-RevId: 322766278
2020-07-24 10:47:31 +01:00
bachinger
d25178844c Enable nullness checking for CacheDataSource
PiperOrigin-RevId: 322763032
2020-07-24 10:47:22 +01:00
christosts
daa063a0f8 Migrate MediaPeriodQueueTest to LooperMode.PAUSED
PiperOrigin-RevId: 322760417
2020-07-24 10:47:04 +01:00
kimvde
2cf9d9b0c0 Add nullness annotations on MediaCodecRenderer processOutputBuffer
Issue: #7579
PiperOrigin-RevId: 322756102
2020-07-24 10:46:55 +01:00
olly
6d92eebe51 Revert Format back to only containing audio encoding for PCM
PiperOrigin-RevId: 322683545
2020-07-24 10:46:37 +01:00
olly
21fe2f1edf Make the output mode more explicit in DefaultAudioSink
PiperOrigin-RevId: 322609230
2020-07-24 10:46:19 +01:00
ibaker
bdadd572e2 Enable nullness checks for more easy files
PiperOrigin-RevId: 322586013
2020-07-24 10:46:10 +01:00
bachinger
787cfb94c5 Enable nullness checking for CacheDataSink
PiperOrigin-RevId: 322575337
2020-07-24 10:46:01 +01:00
ibaker
d33ba74a1d Rename tests to reference playback speed instead of parameters
Player#setPlaybackParameters (and all derived methods) is deprecated in
favour of Player#setPlaybackSpeed

#exofixit

PiperOrigin-RevId: 322568198
2020-07-24 10:45:52 +01:00
ibaker
3ad1b95460 Enable nullness checking for BaseRenderer
#exofixit

PiperOrigin-RevId: 322567104
2020-07-24 10:45:43 +01:00
ibaker
6e751c35c7 Enable nullness checking for DefaultMediaClock
PiperOrigin-RevId: 322542289
2020-07-24 10:45:34 +01:00
ibaker
0efec5f6c1 Enable nullness checks for the text package
PiperOrigin-RevId: 322539147
2020-07-24 10:45:24 +01:00
ibaker
1c6aaac958 Merge playback speed into PlaybackInfo and update EPI and EPII
PiperOrigin-RevId: 322539001
2020-07-24 10:45:15 +01:00
samrobinson
78260e2021 Replacing static arrays with switch statements in MediaCodecUtil.
PiperOrigin-RevId: 322537851
2020-07-24 10:45:06 +01:00
christosts
433734dce7 MediaCodecVideoRendererTest: remove LooperMode.LEGACY
PiperOrigin-RevId: 322536247
2020-07-24 10:44:57 +01:00
bachinger
f81a353bf8 Remove onMediaPeriodCreated/Released/ReadingStarted
These callbacks were only necessary to track the queue in AnalyticsCollector and there is no other known benefit of having them.

PiperOrigin-RevId: 322535274
2020-07-24 10:44:48 +01:00
samrobinson
193306f2f3 Ensure audio renderer exceptions report the correct format.
PiperOrigin-RevId: 322534950
2020-07-24 10:44:39 +01:00
andrewlewis
29db445c2c Switch operating rate bug ref to more relevant bug
PiperOrigin-RevId: 322533467
2020-07-24 10:44:21 +01:00
christosts
6ace2c9460 DefaultDownloaderFactory: upgrade deprecated call
Replace the use of Downloader deprecrated constructor calls.

PiperOrigin-RevId: 322357118
2020-07-24 10:43:53 +01:00
olly
d77ce9eda0 Remove deprecated calls to external APIs
PiperOrigin-RevId: 322346067
2020-07-24 10:43:44 +01:00
olly
7b4d7d9aa4 Remove invalid documentation that causes javadoc to crash
PiperOrigin-RevId: 322311636
2020-07-24 10:42:30 +01:00
tonihei
08f62efb88 Remove experimental time limit on renderer loop.
PiperOrigin-RevId: 322172767
2020-07-24 10:41:54 +01:00
christosts
aed5aca3dd ActionFileUpgradeUtil: add more tests action files
Add test action files for DASH, HLS,  SmoothStreaming and Progressive.

PiperOrigin-RevId: 322166875
2020-07-24 10:41:36 +01:00
tonihei
97cc355baf Fix bug in downloader proguard config.
The nested class names need to use a $ sign.

PiperOrigin-RevId: 322156862
2020-07-24 10:41:18 +01:00
olly
6eb706002a Migrate to Robolectric PAUSED looper mode: AudioFocusManagerTest
PiperOrigin-RevId: 322154193
2020-07-24 10:41:09 +01:00
olly
576ef82191 Remove explicit use of Robolectric PAUSED looper mode
It's now the default everywhere, so there's no need to specify it
explicitly.

PiperOrigin-RevId: 322153319
2020-07-24 10:41:00 +01:00
olly
302b5f2ba4 Remove unnecessary use of Robolectric LEGACY looper mode
CacheDataSourceTest2 works fine in PAUSED mode as well.

PiperOrigin-RevId: 322150471
2020-07-24 10:40:51 +01:00
bachinger
7c995a3cfa Fix javaDoc of onMediaItemTransition
PiperOrigin-RevId: 322145517
2020-07-24 10:40:42 +01:00
olly
0cd15d9158 Proactively check listener arguments are non-null
PiperOrigin-RevId: 322143359
2020-07-24 10:40:24 +01:00
aquilescanta
ecc834d704 Make DrmSessionManager.getExoMediaCryptoType cover placeholder sessions
getExoMediaCryptoType will only return null for drmInitData == null and
track types for which placeholder sessions are not used. This change
will allow renderers to abstract themselves from format.drmInitData.

PiperOrigin-RevId: 322131219
2020-07-24 10:39:57 +01:00
christosts
b7b3f4ea45 Remove unused MEDIA_ITEM_TRANSITION_REASON_SKIP
PiperOrigin-RevId: 322120882
2020-07-24 10:39:39 +01:00
christosts
b249480060 Offline: store MIME type and keySetId
Replace `type` with (optional) `mimeType` and add `keySetId` in
DownloadRequest. The DownloadHelper infers the downloading method (DASH,
HLS, SmoothStreaming or Progressive) from the content's MIME type and
URI.

PiperOrigin-RevId: 322117384
2020-07-24 10:39:30 +01:00
olly
12559bbc8d DefaultAudioSink: Make PCM vs non-PCM code paths clearer
This change replaces a lot of individual isInputPcm branching with a single,
larger branch.

PiperOrigin-RevId: 321763040
2020-07-24 10:38:17 +01:00
olly
a6640ae377 Stop merging methods through AnalyticsCollector/AnalyticsListener
PiperOrigin-RevId: 321595514
2020-07-24 10:37:59 +01:00
tonihei
3b26c218e1 Deduplicate clear playlist code for stop(true) calls.
The logic to clear the playlist is currently duplicated in various
reset methods so that calls to player.stop(true) can clear the playlist.

This can be deduplicated by clearing the playlist as a seperate
operation that reuses the existing code.

PiperOrigin-RevId: 321578759
2020-07-24 10:37:50 +01:00
ibaker
161dea661f Assorted deprecation fixes/migrations/suppressions
These were missed on the first pass

PiperOrigin-RevId: 321553847
2020-07-24 10:37:41 +01:00
bachinger
c0204bfdc4 Throw when window uid changes for unexpected reasons
PiperOrigin-RevId: 321553397
2020-07-24 10:37:23 +01:00
ibaker
ab95e3f388 Migrate usages of deprecated SimpleCache constructors
I duplicated some methods in SimpleCacheTest to ensure we keep testing
the deprecated code paths for now.

PiperOrigin-RevId: 321548802
2020-07-24 10:37:14 +01:00