4323 Commits

Author SHA1 Message Date
andrewlewis
8edecd5ccb Update Matroska video codec FourCCs
Issue: #5503
PiperOrigin-RevId: 235523955
2019-03-06 16:55:19 +00:00
andrewlewis
f394697d4a Fix updating rate with codec reuse while disabled
While disabled the renderer does not have non-null stream formats. This means
that setting the operating rate could cause a NullPointerException if there was
a codec for reuse.

Check for being enabled/started before trying to set the operating rate. After
the renderer is enabled it should receive a new input format which will update
the operating rate as needed.

PiperOrigin-RevId: 235494384
2019-03-06 16:55:02 +00:00
andrewlewis
caeaa9574e Avoid draining audio processors while reset
If the DefaultAudioSink was reconfigured in a way that was compatible with the
previous configuration just after having been reset, we would try to drain audio
processors despite not having an AudioTrack. This could result in a
NullPointerException if speed adjustment was active.

Fix this behavior by only trying to drain audio processors if we actually have
an AudioTrack.

PiperOrigin-RevId: 235355466
2019-03-06 16:54:44 +00:00
aquilescanta
eea1ce3e0a Fix channel count propagation on HLS traditional preparation
PiperOrigin-RevId: 235189983
2019-03-06 16:54:08 +00:00
olly
3e03e71cf9 Start enabling database based SimpleCache indexing
- Expose constructor (package private for now, for tests only)
- Add some tests for cache initialization
- Add some TODOs for handling initialization failure

PiperOrigin-RevId: 235188386
2019-03-06 16:53:51 +00:00
olly
ff7f0304e5 Automated g4 rollback of changelist 235153912.
*** Reason for rollback ***

Breaks ExoPlayer's gradle build

*** Original change description ***

Migrate Mockito Matchers.{hamcrestMethods} to MockitoHamcrest.{hamcrestMethods}

All methods accepting a hamcrest Matcher in org.mockito.Matchers have been changed
to only accept an ArgumentMatcher. The corresponding methods are now available on
MockitoHamcrest.

For more information see http://go/mockito-2-lsc

Tested:
    TAP --sample for global presubmit queue
    http://test/OCL:235033293:BASE:234998256:1550793421835:c2ccbbda

***

PiperOrigin-RevId: 235186705
2019-03-06 16:53:32 +00:00
aquilescanta
6682580ad7 Extract HlsMediaChunk#feedDataToExtractor method
Deduplicates the call to Extractor#read and sorrounding logic.

PiperOrigin-RevId: 235165499
2019-03-06 16:53:15 +00:00
olly
325029d58e Migrate Mockito Matchers.{hamcrestMethods} to MockitoHamcrest.{hamcrestMethods}
All methods accepting a hamcrest Matcher in org.mockito.Matchers have been changed
to only accept an ArgumentMatcher. The corresponding methods are now available on
MockitoHamcrest.

For more information see http://go/mockito-2-lsc

Tested:
    TAP --sample for global presubmit queue
    http://test/OCL:235033293:BASE:234998256:1550793421835:c2ccbbda
PiperOrigin-RevId: 235153912
2019-03-06 16:52:58 +00:00
andrewlewis
8746d4a885 Automated g4 rollback of changelist 230206675.
*** Reason for rollback ***

Reverting as this may break playback on other Amlogic devices and/or playback of non-interlaced content.

*** Original change description ***

Add max video size workaround for Amlogic decoder.

The Amlogic awesome decoder reduces the video size of interlaced videos by half
if the internal configuration isn't force reset with new maximum input size
values. The product of these new values must exceed 1920x1088 to force the
reset.

Issue:#5003

***

PiperOrigin-RevId: 234967314
2019-02-21 11:56:10 +00:00
aquilescanta
6b4c48a329 Replace initLoadCompleted with initDataLoadRequired
PiperOrigin-RevId: 234966936
2019-02-21 11:56:10 +00:00
andrewlewis
253ea78679 Register the overlay view as non-obstructing
Currently IMA determines that the overlay is obstructing, even
if it's empty. Register it as friendly, which means we're
assuming that anything the apps puts in it is necessary for
playback.

PiperOrigin-RevId: 234963065
2019-02-21 11:56:10 +00:00
olly
1450b3713f Suppress warnings emitted by Checker Framework version 2.6.0
PiperOrigin-RevId: 234917536
2019-02-21 11:56:02 +00:00
aquilescanta
e502672b89 Encapsulate the key cache in HlsChunkSource
PiperOrigin-RevId: 234773649
2019-02-20 13:57:01 +00:00
aquilescanta
16f41dbaab Fix HlsSampleStream#read non-fatal lack of mapping
HlsSampleStream#read should return end of stream when
there is no mapping for the sample stream, instead of
nothing read. This allows the player to transition to
ended.

Issue:#5524
PiperOrigin-RevId: 234764027
2019-02-20 13:56:26 +00:00
olly
2685b8bd90 Support multiple instances of database features
- Use Cache UID for CacheContentIndex and CacheFileMetadataIndex. This
  enables SD card swapping for a single device.
- I'm hopeful of finding a way to get the Cache UID to DefaultDownloadIndex
  so we can do the same there.

PiperOrigin-RevId: 234662753
2019-02-20 13:56:08 +00:00
olly
bfc60e1694 Set vertical orientation by default in TrackSelectionView
Horizontal orientation doesn't make sense. I thought about
overriding the setter to throw something, but it's probably
not worth the extra lines.

PiperOrigin-RevId: 234632530
2019-02-20 13:55:33 +00:00
aquilescanta
28434cff4c Support customization of the PlaylistStuckException waiting period
Issue:#5487
PiperOrigin-RevId: 234586819
2019-02-19 15:56:35 +00:00
aquilescanta
a174af0d70 Remove deprecated HLS-related constructors
PiperOrigin-RevId: 234586744
2019-02-19 15:56:17 +00:00
aquilescanta
774c01d020 Make MimeType top level check related methods more robust
Throwing an IllegalArgumentException doesn't help the method signature.

PiperOrigin-RevId: 234579722
2019-02-19 13:23:19 +00:00
andrewlewis
8e7ae9201a Bump version for 2.9.6 release
PiperOrigin-RevId: 234578712
2019-02-19 13:23:19 +00:00
olly
0622afe170 Migrate to androidx
Issue: #5489
PiperOrigin-RevId: 234507428

Add missing annotation dependency

Issue: #5489
PiperOrigin-RevId: 234566177
2019-02-19 13:22:54 +00:00
eguven
03e28d4689 Support stopping/starting single downloads
Also added intent actions to stop/start one or all downloads.

Issue: #4433
Issue: #4860
PiperOrigin-RevId: 234481515
2019-02-18 18:45:49 +00:00
andrewlewis
2b67f2a626 Avoid crashing process on OOM
Catch OutOfMemoryErrors and surface them as unexpected ExoPlaybackExceptions.

PiperOrigin-RevId: 234481140
2019-02-18 17:40:48 +00:00
aquilescanta
0ceff589b3 HLS Bugfix: Avoid loading initialization segment when reusing extractor
This bug affects any playlist that uses initialization segments. In practice,
almost exclusively fragmented mp4 segmented playlists are affected.

The bottom line is that extractors are chosen for reuse after the
initialization segment connection is open. However, reused extractors
do not need re-parsing the init segment, so loading the initialization is
wasteful.

PiperOrigin-RevId: 234479467
2019-02-18 17:40:48 +00:00
andrewlewis
e97910a694 Fix seek exception unit
PiperOrigin-RevId: 234475237
2019-02-18 17:40:48 +00:00
andrewlewis
5d8e1784b9 Fix MIME type for divx in Matroska
Issue: #3863
PiperOrigin-RevId: 234453728
2019-02-18 17:40:48 +00:00
tonihei
c6195dbbaf Handle recreation of TrackSelectionView instances.
TrackSelectionView requires an initialization with a call to init(...).
That's why we shouldn't let the view retain its view hierarchy automatically
as the views won't be backed by data if restored. Instead add a listener
which lets the containing activity/fragment save and restore the state if
needed.

PiperOrigin-RevId: 234152491
2019-02-18 17:40:48 +00:00
andrewlewis
bcadb47a74 Fix typo
PiperOrigin-RevId: 234137695
2019-02-18 17:40:48 +00:00
eguven
b69041bea2 Prevent NullPointerException exceptions in SimpleCache initialization
This is a temporary fix to prevent NullPointerException exceptions.
Though writing to cache will still fail if the cache folder isn't a real
folder.

There are a few thing we can try:
* The listing might be failing because the cache folder is just created.
We can wait and try again.
* If the cache folder is a regular file, we can try deleting and creating
a folder with the same name.

PiperOrigin-RevId: 234121925
2019-02-18 17:40:48 +00:00
aquilescanta
8982da4b75 Support encrypted initialization segment
Defined in RFC 8216 Section 4.3.2.5.

Issue:#5441
PiperOrigin-RevId: 234114119
2019-02-18 17:40:48 +00:00
andrewlewis
31911ca54a Drain audio processors on reconfiguration
Previously we would get a new AudioTrack and flush all audio processors if any
AudioProcessor needed to be flushed on reconfiguration. This was problematic for
the case of TrimmingAudioProcessor because it could become active or inactive
due to transitioning to a period with gapless metadata or without it (we don't
keep it active all the time because it is wasteful to populate its end buffer
for content that is not gapless).

This change handles the case where we don't need an AudioTrack but
AudioProcessors do need to be flushed. In this case we drain all the audio
processors when next handling data then switch to the new configuration.

This avoids truncation when period transitions change whether
TrimmingAudioProcessor is active but don't require a new AudioTrack, and is also
a step towards draining the AudioTrack when transitioning between periods if we
do need a new AudioTrack.

To do this, it needs to be possible to drain any pending output data from an
AudioProcessor after it's configured to a new format, so this change makes sure
AudioProcessors allow calling playToEndOfStream and getOutput after
reconfiguration and before flush.

PiperOrigin-RevId: 234033552
2019-02-18 17:40:48 +00:00
andrewlewis
83545fb7b2 Factor out common audio processor functionality
PiperOrigin-RevId: 234025553
2019-02-18 17:40:48 +00:00
andrewlewis
03006f0595 Fix some AudioProcessor nits
- Fix nullness warnings
- Fix annotations
- Make TeeAudioProcessor flush its sink for every format change

PiperOrigin-RevId: 234017068
2019-02-18 17:40:48 +00:00
andrewlewis
3e6cf42f83 Factor out default audio sink configuration
This cleanup is in preparation for draining audio processors on reconfiguration
to a format that doesn't require a new AudioTrack to be created.

PiperOrigin-RevId: 233990983
2019-02-18 17:40:48 +00:00
aquilescanta
12ed18c74c Add encryption information to initialization segments
PiperOrigin-RevId: 233953493
2019-02-18 17:40:48 +00:00
aquilescanta
04e6061498 Reduce the number of parameters required to create an HlsMediaChunk
PiperOrigin-RevId: 233765839
2019-02-18 17:40:48 +00:00
tonihei
edabbd52d0 Update Robolectric and Truth.
PiperOrigin-RevId: 233612344
2019-02-18 15:59:32 +00:00
eguven
5782bbc6e5 Use DownloadState in DownloadManager
PiperOrigin-RevId: 233587184
2019-02-18 15:59:17 +00:00
tonihei
399a963e02 Revert removal of single track option in TrackSelectionView.
PiperOrigin-RevId: 233584155
2019-02-18 15:59:12 +00:00
olly
c66d26b601 Fix EventMessage timestamp issue
Stop encoding/decoding presentation time as part of the message.
What's actually in emsg boxes is a presentation time delta,
which is why it's only 32 bits, and hence why it doesn't handle
large absolute timestamps. We were using this field to hold
absolute timestamps only for the purpose of passing presentation
times from DashManifestParser.parseEvent back to the calling
method. After this change, we return Pair<Long, EventMessage>
instead.

Issue: #5490
PiperOrigin-RevId: 233561731
2019-02-18 15:58:47 +00:00
andrewlewis
ad69a93708 Handle alternative DV MIME types
Also detect ISOBMFF brand for DV when sniffing.

PiperOrigin-RevId: 233433449
2019-02-18 15:58:42 +00:00
olly
a21572f0dd Fix minor issues and lint errors
PiperOrigin-RevId: 233428556
2019-02-18 15:58:37 +00:00
eguven
6a7157de11 Fix flaky test DownloadManager.differentDownloadActionsMerged
PiperOrigin-RevId: 233421480
2019-02-18 15:58:32 +00:00
olly
6d461f5b25 Fix PlayerNotificationManager lint error
builder.mActions is marked as @RestrictTo(LIBRARY_GROUP). We'll
just have to put up with notification flicker on KitKat if the
actions change.

PiperOrigin-RevId: 233420076
2019-02-18 15:58:27 +00:00
andrewlewis
56944caa21 Allow registration of control overlays for ad viewability
Switch from passing an ad UI ViewGroup to passing an object that can also
provide information about controls overlays.

Also switch to using a dedicated overlay for ads instead of the overlay frame
layout, which apps have easy access to.

PiperOrigin-RevId: 233393500
2019-02-18 15:58:06 +00:00
olly
8401097ead Upgrade gradle plugin and friends
PiperOrigin-RevId: 233390513
2019-02-18 15:57:55 +00:00
tonihei
abb53d7ce7 Support multiple overrides in TrackSelectionView and factor out Builder.
Supporting multiple overrides allows to select tracks from multiple groups, if
enabled. As more options are added, the creation of the dialog is moved to a
separate builder class.

PiperOrigin-RevId: 233366282
2019-02-18 15:57:44 +00:00
andrewlewis
ef139b2e31 Add an overlay FrameLayout for ad UI
This will be used instead of the current overlay FrameLayout (which apps can
interact with directly).

PiperOrigin-RevId: 233077175
2019-02-18 15:57:29 +00:00
andrewlewis
9b6caf9eda Merge #5438: Dolby Vision
Imported from GitHub PR https://github.com/google/ExoPlayer/pull/5438

Plus the following changes:
- Only support profile 5 (handling other profiles requires
  backward-compatibility changes in the renderer which are left for a later
  change.)
- Only add KEY_PROFILE to the codec configuration MediaFormat for Dolby Vision.
- In MediaCodecUtil support all DV profiles that Android has constants for. This
  includes ones that are "not supported for new applications". Since we don't
  extract these profiles, this is currently only for the benefit of custom
  extractors.
- Misc code style fixes and reordering for consistency.

Merge 37878b975c2bc082b0568e21cbe62bfcef97c10d into 67be9e77834c0dc9d2b5d462c01c2f39718c8817

PiperOrigin-RevId: 233066799
2019-02-18 15:57:14 +00:00
olly
434b5a3029 Enable use of database storage in CachedContentIndex
It's not yet enabled in the SimpleCache layer, however, so
this is a no-op change.

PiperOrigin-RevId: 233064490
2019-02-18 15:57:09 +00:00