4323 Commits

Author SHA1 Message Date
tonihei
d4693980d6 Add Moto C+ to surface switching workaround.
Issue:#3835

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185501181
2018-02-20 10:49:52 +00:00
andrewlewis
4fec24294a Fix handling of ad tags where ad groups are out of order
IMA's cue points may not be in order, so sort them. It looks like IMA events use
time ordered ad indices, so it is not necessary to map between the original cue
point order and the time order.

Issue: #3716

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185495798
2018-02-20 10:49:52 +00:00
olly
3ec96aee17 Translation console import
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185409304
2018-02-20 10:49:52 +00:00
tonihei
6c82431e75 Move (almost all) remaining core library instrumentation tests to Robolectric.
There are 4 tests which can't currently be moved:
 - DownloadManagerTest explicitly uses the main looper which isn't easily
   supported because the test runs on this thread.
 - ContentDataSourceTest uses an AssetFileDescriptor which wraps a
   ParcelFileDescriptor. It seems Robolectric doesn't correctly forward the
   inner wrapped file descriptor leading to NPE.
 - CacheContentIndexTest and SimpleCacheSpanTest both work fine with Gradle
   but fail with seemingly valid test failures on Blaze.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185366678
2018-02-20 10:49:50 +00:00
andrewlewis
fbc6ed2e81 Set the expected ad group based on the content position
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185139106
2018-02-20 10:48:38 +00:00
andrewlewis
5fe235b7c1 Move two further methods from Timeline to AdPlaybackState
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185138158
2018-02-20 10:48:38 +00:00
tonihei
97999ef3b1 Fix bug in media period queue update at dynamic timeline changes.
If the period uid doesn't match, the update procedure currently doesn't
remove the correct periods. This may cause the player to get stuck or to play
the wrong periods.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185129503
2018-02-20 10:47:53 +00:00
aquilescanta
d274ca6750 Extend support of 608 captions in SEI messages
Issue:#3816

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185124378
2018-02-20 10:47:53 +00:00
andrewlewis
6aad066d51 Check sys.display-size on Philips ATVs
Device models are from
https://support.google.com/googleplay/answer/1727131?hl=en. It looks like among
these devices Build.MANUFACTURER can be set to either "PHILIPS" or "Philips",
based on looking at internal bug reports.

Issue: #3807

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185121182
2018-02-20 10:47:50 +00:00
andrewlewis
542855b6eb Link libopus statically with libopusJNI
We now build one .so file for the opus extension in the
internal build, so make the external build work the same way.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184962896
2018-02-20 10:46:54 +00:00
andrewlewis
36bf0b2658 Add issue link to release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184844870
2018-02-20 10:46:51 +00:00
andrewlewis
5c49633c30 Fix ad group skipping
Allow skipping an ad group when requested by IMA, even if we aren't currently
playing one, to handle cases where no ads in an ad group will load (so IMA
requests resuming content but we never managed to start playing an ad).

Use the known ad group index (rather than the expected one) when handling ad
group load errors. This ensures we skip the right ad group if we notify IMA of
playback errors for every ad in the ad group, then IMA notifies that the ad
group is empty via a load error.

Also make some other miscellaneous small fixes to ads code:

- Avoid warning about unexpected ad group indices more than once.
- Output a warning if the ad count in an ad group decreases.
- Remove unnecessary assertion.
- Fix getting the ad duration for ad indices that haven't loaded yet.
- Allow setting an ad group state to its current value.
- Fix javadoc for setting the ad resume position.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184831495
2018-02-20 10:45:26 +00:00
andrewlewis
84a105b031 Get the next ad index to play in MediaPeriodQueue
The ad index in the ad group may need to skip over ads that failed to load, so
it can't just be incremented any more.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184812556
2018-02-20 10:45:26 +00:00
aquilescanta
fea75f2e42 Prevent "unexpected read attempt" illegal state exception
When using cronet data source, calling read after the end of input has
been read will trigger this.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184667794
2018-02-20 10:45:26 +00:00
tonihei
784e8a6344 Support isAtomic flag in DynamicConcatenatingMediaSource.
This feature is supported in the ConcatenatingMediaSource and is easily copied to this
media source. Also adding tests to check whether the atomic property works in normal
concatenation and in also in nested use.

Also fixes a bug where timeline methods of the DeferredTimeline were not correctly
forwarded.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184526881
2018-02-20 10:45:26 +00:00
tonihei
fe98477045 Fix potential media source release before media period release.
This could happen when a media source is removed from a
DynamicConcatenatingMediaSource and one of its media periods is still active.
This media period is only removed by the player after the player received
a timeline update and thus we shouldn't release the removed child source
as long as it has active media periods.

Issue:#3796

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184522836
2018-02-20 10:45:26 +00:00
andrewlewis
7b19de2e99 Handle LOG AdEvents for ad group load errors.
If IMA loads an empty VAST document for an ad group it notifies via a LOG
AdEvent. Handle the event by updating the AdPlaybackState accordingly.

The error state will be handled in ExoPlayerImplInternal in a separate change.

Issue: #3584

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184516585
2018-02-20 10:45:26 +00:00
andrewlewis
4775b52741 Fix media period queue updating for ads
Resolve the media period for ad playback when resolving a subsequent period and
when receiving a timeline where the playing period in range (but wasn't before).

Fix the seek position calculation when a current ad must be skipped and is
followed by another ad.

Check MediaPeriodInfos match when checking MediaPeriodHolders, to handle cases
where a future ad should no longer be played. This may involve playing two
content media periods consecutively.

Issue: #3584

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184514558
2018-02-20 10:45:26 +00:00
eguven
b210c20e84 Fix not thread safe static buffer usage
DefaultExtractorInput.SCRATCH_SPACE buffer is used to skip data by
reading it into this buffer and discarding.

Simultaneous use of skip methods corrupts this buffer. Normally the
read data is discarded so it doesn't matter but the underlying
DataSource may use the buffer too. If it's a CacheDataSource it uses
this buffer to read data from upstream then write to cache.

Issue: #3762

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184502170
2018-02-20 10:45:26 +00:00
andrewlewis
2d76d63c3e Refer to E-AC3 JOC rather than Atmos in MIME type/comments
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184501752
2018-02-20 10:45:26 +00:00
anjalibh
1a6c8c6934 Reduce Libvpx output buffers to 8, to reduce the chances of out of memory errors.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184317120
2018-02-20 10:45:26 +00:00
andrewlewis
8bc5febbb8 Only override gapless data if set in ClippingMediaPeriod
This avoids reading a format that is not equal because of switching between
NO_VALUE and 0.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184298076
2018-02-20 10:45:26 +00:00
andrewlewis
258122c89c Interrupt the test thread for uncaught errors
This makes assertion errors in code running on the Looper less easy to miss.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184294290
2018-02-20 10:45:26 +00:00
andrewlewis
c03f326274 Update internal opus build
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184274139
2018-02-20 10:45:26 +00:00
andrewlewis
b44bf32f8b Handle repeat mode/shuffle mode changes in MediaPeriodQueue
This should be a no-op change.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184150266
2018-02-20 10:45:26 +00:00
olly
340501246b Fix dependency in cast extension
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184125114
2018-02-01 15:31:24 +00:00
tonihei
c8f39fe14d Update ExoPlayer doc to specifically discourage parallel access instead of allowing it.
Even if a developer synchronizes every method, thread safety is still not guaranteed
because the internal callback methods can't be synced from outside.

Issue:#3773

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184122072
2018-02-01 15:30:00 +00:00
olly
51963dea2e Clean up message naming in EPII
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184122057
2018-02-01 15:28:30 +00:00
olly
1950152378 Tweak download notifications
1. Add string for STATE_CANCELED. Lint doesn't like that the
   switch statement on the state IntDef doesn't have a case
   for STATE_CANCELED. May as well add one, even if we're not
   planning on our demo app showing notifications for this
   state.
2. Replace non-human-readable error message with one provided
   by ErrorMessageProvider.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184120892
2018-02-01 15:27:01 +00:00
olly
e8fb3078d6 Normalize language code independently of device language
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184120873
2018-02-01 15:25:31 +00:00
olly
696ebf3ded Suppress proguard notes about unresolved classes
In the case of the components we deliberately access via
reflection, it's normal that they might not be resolved
due to proguarding (i.e. if the app isn't being built to
include them). Don't note their omission.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184120611
2018-02-01 15:24:00 +00:00
olly
ca3be996bc Add proper exception checks when returning to native from Java.
The pending exception will be thrown upon returning to Java
from native, but we should return early rather than continuing
to execute the native method to the end so as to avoid undefined
behavior. Note that the return value is irrelevant (because the
pending exception will be thrown).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184119606
2018-02-01 15:22:32 +00:00
olly
1bf4926338 Stop using Map<Integer, X>
Lint recommends switching to SparseArray<X> instead.
This is done for the DASH case. For the Cast case it's
easier to use a switch statement.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184119312
2018-02-01 15:21:08 +00:00
olly
34b4c52a01 Disable InvalidPackage lint check for testutils
Note this case is special in that JUnit is an actual
compile dependency, as opposed to a testCompile or
androidTestCompile dependency.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184119235
2018-02-01 15:19:40 +00:00
tonihei
430579dcd9 Update developer guide for sending messages again.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184119097
2018-02-01 15:18:13 +00:00
olly
6ee87b7ad9 Remove static imports of constants with API level > 14
I think (?) they're harmless, but lint doesn't like them.
Using them within the class body means the TargetApi
annotation applies, which makes lint happy.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184117951
2018-02-01 15:16:45 +00:00
hoangtc
4f36ab203f Use new MediaCodec APIs in MediaCodecRenderer.
In MediaCodecRenderer, we currently uses codec.getInput/OutputBuffers event
though these APIs are deprecated and are not recommended from API 21+. This
change makes sure that:
- On API 20 and below, we will keep using codec.getInput/OutputBuffers.
- On API 21+, we will use getInput/OutputBuffer(index) APIs instead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184112329
2018-02-01 15:15:20 +00:00
olly
a7d4d2d21c Automated g4 rollback of changelist 184056034.
*** Reason for rollback ***

Broke everything

*** Original change description ***

Clean up message naming in EPII

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184061352
2018-02-01 15:13:51 +00:00
olly
fd10a3cbb0 Fix initial visibility of PlayerControlView
This applies when PlayerControlView is used as a standalone
component (not inside PlayerView). Previously hideAtMs was
set to 0, which caused the view to be immediatley hidden in
onAttachedToWindow. After this change the first time the view
is attached to the window is effectively treated as a "user
interaction" for the purposes of deciding when to timeout.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184056324
2018-02-01 15:12:23 +00:00
olly
2f932bfaf7 Clean up message naming in EPII
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184056034
2018-02-01 15:11:00 +00:00
strobe
fb0b7a7f86 Fix green bar bug
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184022988
2018-02-01 15:09:18 +00:00
tonihei
cb95f7e95b Make remaining media source reusable.
This make sure all media sources can be reprepared after being released.

Issue:#3498

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=183990416
2018-02-01 15:07:49 +00:00
tonihei
286977998d Fix bug in DynamicConcatenatingMediaSource at dynamic changes of empty timelines.
When the dynamic media source contains multiple empty timelines in a row and some
of them dynamically change to a non-empty timeline, the window and period indices
are not updated correctly because the index of the changed child source is wrong.

To fix this bug, the child index is added to the media period holder to have direct
access on the current child index to prevent ambiguity.

Furthermore, the uid is changed to be the hash code of the MediaSourceHolder not the
MediaSource itself to allow adding the same MediaSource twice without violating the
unique uid policy.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=183973462
2018-02-01 15:06:18 +00:00
aquilescanta
e7ba2caf47 Clear the media queue and stop casting on app pause
Simplifies the app and prevents inconsistent states between
both players and the media queue.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=183831329
2018-02-01 15:04:54 +00:00
tonihei
17edae6528 Make AdsMediaSource reusable.
Also fixes a bug where deferred media periods were kept in the list for
an unprepared media source although the media period was already released.

Issue:#3498

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=183800889
2018-02-01 15:03:26 +00:00
eguven
6709dc7f64 Enable caching for data loaded by ParsingLoadable
This enables caching manifest files for DASH, HLS and SmoothStreaming.

To disable caching a non cache DataSource should be provided for reading
manifest to the used MediaSource.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=183794252
2018-02-01 15:02:01 +00:00
eguven
168a5d63c5 Remove empty CachedContent in SimpleCache.releaseHoleSpan()
In startReadWrite*() methods a new CachedContent is created if the there
isn't one already for the given key. If the span is release without
writing any content, this fix removes the added CachedContent.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=183666821
2018-02-01 15:00:35 +00:00
eguven
1dde2adbf3 Add SegmentDownloader.getAllRepresentationKeys method
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=183656655
2018-02-01 14:59:11 +00:00
andrewlewis
b82178ecb4 Make ad state immutable and store state of each ad
Before this change, the ad playback state stored the number of played ads in
each ad group. There was no way to represent that an ad had failed to load (and
it wouldn't be possible just to increment the played ad count to signal a load
error because there might be an unplayed ad before the ad that failed to load).

Represent the state of each ad (unavailable, available, skipped, played, error)
in each ad group. In a later change the player will use this information to
update its loaded MediaPeriods in response to future ads failing to load.

Also make the AdPlaybackState immutable and remove copying/duplication of its
fields in the ad timeline and period.

Issue: #3584

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=183655308
2018-02-01 14:57:45 +00:00
olly
0c67a5783f Add descriptions for strings.
For our strings to be translated, we're required to provide
added context in the form of a description, and specify a
maximum length for the translated strings.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=183651515
2018-02-01 14:56:18 +00:00