2944 Commits

Author SHA1 Message Date
ibaker
f08eed4145 Add DRM event plumbing to Playlist and CompositeMediaSource
Related to issue:#6765

PiperOrigin-RevId: 300539527
2020-03-19 00:46:40 +00:00
ibaker
2bd4d61b9b Use a Multiset for reference counting in MediaSourceEventDispatcher
This avoids duplicate events being dispatched to object foo if
addListener(foo) is called more than once.

Part of issue:#6765

PiperOrigin-RevId: 300529733
2020-03-19 00:46:15 +00:00
tonihei
4d4e2cdd2a Reorder renderer enabling/disabling
We currently have the following logic to update renderers during
period transitions:
 1. Wait for the currently reading period to finish reading all its
    streams.
 	a. Advance reading period.
	b. Set all streams that can't be replaced to final.
	c. If streams can be replaced, replace them now.
 2. Wait until playback position reaches the transition point
 	a. Disable all unneeded renderers (or those that need
           re-enabling).
	b. Advance playing period.
	c. Enable all new renderers (i.e. all except the ones where
           we replaced streams directly in step 1c.

This logic causes delays because steps 2a and 2c can easily happen
before 2b. Doing this allows a smooth transition for cases where
renderers change or where they need to be re-enabled.

The new order after this change is:
 1. Wait for currently reading period to finish reading.
	a. Advance reading period.
	b. Set all streams that can't be replaced to final.
 2. Update reading renderers iteratively.
	a. If streams can be replaced, replace them asap.
	b. If renderes need to be disabled, do so as soon as the
	   respective renderer ended.
	c. Once step b is fully finished, enable or re-enable all new
           renderers.
 3. Wait unril playback position reaches the transition point AND
    all tasks in step 2 are done (i.e. all renderers are set up for the
    playing period).
        a. Advance playing period.

As a nice side effect, decoder enabled and disabled events are now
always reported for the reading period, which is more consistent with
other renderer callbacks.

PiperOrigin-RevId: 300526983
2020-03-19 00:46:07 +00:00
aquilescanta
1f202f0aee Make DataSource extend DataReader and upcast uses
This means DataSource.read now may throw InterruptedException.

PiperOrigin-RevId: 300523430
2020-03-19 00:45:59 +00:00
olly
16e6ea6e40 Fix spurious reset of PreparedState boolean flags
PiperOrigin-RevId: 300513930
2020-03-19 00:45:42 +00:00
tonihei
c85e5137f0 No-op change removing bookkeeping for enabled renderers.
This list was meant to simplify some usages where we only want to
make operations on enabled renderers. However, keeping this list
up-to-date is slightly error-prone (because renderers aren't added
and removed from this list next to the corresponding enable and disable
calls) and it makes it hard to do more fine-grained changes that only
enable or disabled a single renderer at a time.

PiperOrigin-RevId: 300513788
2020-03-19 00:45:34 +00:00
tonihei
82599960c2 Add public API for pauseAtEndOfMediaItem
Also adds tests covering the internal implementation.

Issue:#5660
PiperOrigin-RevId: 300513548
2020-03-19 00:45:26 +00:00
bachinger
527563da31 remove deprecated usage of PlaybackParameter
Removes usage of PlaybackParameters where it seems to be trivial.

PiperOrigin-RevId: 300435199
2020-03-19 00:45:18 +00:00
bachinger
072720270d remove PlaybackParameter dependency from MediaClock
After this change MediaClocks and ExoPlayerImplInternal don't depend on the deprecated PlaybackParameter anymore but only know about playbackSpeed.

PiperOrigin-RevId: 300428791
2020-03-19 00:45:09 +00:00
bachinger
683cb0260e add get/setPlaybackSpeed and listener callback
This change deprecates the PlaybackParameters and remove the skipSilenceField from the PlaybackParameters. This implies that enabling and disabling skipping silences needs to be done on the Player.AudioComponent after this change.

After submission of the change, all Player API changes are done which are required to bring playbackSpeed and skipSilenceEnabled in the converged Player API state.

PiperOrigin-RevId: 300420843
2020-03-19 00:45:01 +00:00
tonihei
7b82a3c889 Rollback of 5485133e5c
*** Original commit ***

Rollback of 949bbcfb2e

*** Original commit ***

Add masking for playWhenReady.

Masking is needed as soon as updates to a value can happen both in EPI
and EPII. PlayWhenReady is currently not masked because all updates
happen in EPI only. As soon as we allow pausing at certain times
(e.g. end of a stream), playWhenReady c...

***

PiperOrigin-RevId: 300330307
2020-03-11 16:27:58 +00:00
tonihei
5485133e5c Rollback of 949bbcfb2e
*** Original commit ***

Add masking for playWhenReady.

Masking is needed as soon as updates to a value can happen both in EPI
and EPII. PlayWhenReady is currently not masked because all updates
happen in EPI only. As soon as we allow pausing at certain times
(e.g. end of a stream), playWhenReady changes may be triggered by EPII
as well and that's why we need masking.

To know when the value actually changed, we also need to update the
internal state to include whether playback is supppressed.

***

PiperOrigin-RevId: 300303307
2020-03-11 16:27:25 +00:00
tonihei
949bbcfb2e Add masking for playWhenReady.
Masking is needed as soon as updates to a value can happen both in EPI
and EPII. PlayWhenReady is currently not masked because all updates
happen in EPI only. As soon as we allow pausing at certain times
(e.g. end of a stream), playWhenReady changes may be triggered by EPII
as well and that's why we need masking.

To know when the value actually changed, we also need to update the
internal state to include whether playback is supppressed.

PiperOrigin-RevId: 300284613
2020-03-11 16:27:16 +00:00
tonihei
c6e8e24ada Ensure seek and prepare positions never exceed period duration.
Exceeding the period duration may mean that that playback transitions
to another item even if the player is currently paused.

PiperOrigin-RevId: 300133655
2020-03-11 16:26:59 +00:00
tonihei
bb33d568ca Remove test-specific ActionSchedule tags
There is no need for that, updating them is often forgotten and
takes up too much line space. Replace by a single TAG per test class.

PiperOrigin-RevId: 300113072
2020-03-11 16:26:50 +00:00
olly
0d230d517a Miscellaneous cleanup related to recent changes
PiperOrigin-RevId: 300067561
2020-03-11 16:26:41 +00:00
bachinger
a5f0eb1e10 replace extension with mime type
This change uses mime types in a functionally equivalent way to how we used the extension hint so far.

Using a mimeType instead of the extension has some advantages. Most importantly mimeTypes are used by the cast SDK with which we want to achieve interoperability in the cast extension.

Using a mimeType instead of the extension hint further appears to be a bit more clear (which might be opinionated). Further mime types are a well known and widely used concept to identify file type on the internet and it provides asterix based generalizations (audio/*, */*) which could express the media type OTHER that ExoPlayer is using internally (no usage of asterix required so far though).

PiperOrigin-RevId: 300058945
2020-03-11 16:26:23 +00:00
bachinger
87405cb1c0 remove DefaultMediaSourceFactory.Delegate
PiperOrigin-RevId: 299943596
2020-03-10 10:21:37 +00:00
samrobinson
c976d16a74 Simplify WakeLockManager and WifiLockManager logic.
Disabling reference counting allows some checks to be removed.

This is a no-op.

PiperOrigin-RevId: 299829600
2020-03-10 10:21:20 +00:00
tonihei
1c03226fb3 Merge AudioFocusManager methods to simplify control flow.
handlePrepare/Stop/SetPlayReady can be merged together as they all
handle changes to the desires state of the player.

Also, simplify parts of the control flow by not mixing code that
determines if audio focus needs to be handled with code that actually
acquires or abandons the focus.

PiperOrigin-RevId: 299824857
2020-03-10 10:21:12 +00:00
olly
1ac7d377a6 Fix proguard comment for DefaultMediaSourceFactory
PiperOrigin-RevId: 299819656
2020-03-10 10:21:03 +00:00
tonihei
0a89d0e8c3 Add option to MergingMediaSource to adjust for period time diffs
Without this option it's impossible to merge periods covering
different timestamps (at least not without playback issues).

Issue:issue:#6103
PiperOrigin-RevId: 299817540
2020-03-10 10:20:55 +00:00
bachinger
041a0696b7 remove UriBundle
PiperOrigin-RevId: 299361095
2020-03-10 10:20:47 +00:00
Oliver Woodman
26d3914e43 Merge pull request #7051 from Cizor:dev-v2
PiperOrigin-RevId: 299357049
2020-03-10 10:20:37 +00:00
kimvde
c982f4c4a0 Add possibility to set the audio session id
Issue: #6975
PiperOrigin-RevId: 299328798
2020-03-10 10:20:27 +00:00
ibaker
ab21f710bb Add MediaSource.{add,remove}DrmEventListener
Pre-work for issue:#6765

PiperOrigin-RevId: 299322086
2020-03-10 10:20:18 +00:00
ibaker
c6bf6aae2a Rename DefaultDrmSessionEventListener to DrmSessionEventListener
Part of issue:#6765

PiperOrigin-RevId: 299319146
2020-03-10 10:20:10 +00:00
ibaker
eeab811301 Add EventDispatcher to DrmSession(Manager) acquire & release calls
This is passed in but not currently used. I'll use it in follow-up
changes.

Pre-work for issue:#6765

PiperOrigin-RevId: 299314341
2020-03-10 10:20:01 +00:00
aquilescanta
47b62e8c02 DataReader: replace InterruptedException with InterruptedIOException
PiperOrigin-RevId: 299092243
2020-03-10 10:19:45 +00:00
christosts
fbf865726c Fix flaky AsynchronousMediaCodecAdapterTest
PiperOrigin-RevId: 299057572
2020-03-10 10:19:36 +00:00
bachinger
4517829610 add DefaultMediaSourceFactory and use it in PlayerActivity
PiperOrigin-RevId: 298879027
2020-03-10 10:19:27 +00:00
tonihei
b5976a55ff Upgrade Kotlin annotations and fix gradle warnings
The new version fixes some warnings in Gradle builds. Also
add missing indirect compileOnly dependencies to fix some more warnings

Issue:issue:#7007
PiperOrigin-RevId: 298855510
2020-03-10 10:19:19 +00:00
tonihei
0339a33430 Rename EPII.copyWithNewPosition to handlePositionDiscontinuity
The new name better reflects the purpose of the method.

PiperOrigin-RevId: 298835578
2020-03-10 10:19:02 +00:00
aquilescanta
2b88961bc1 Add ExoMediaDrm.OnExpirationUpdateListener
Which mirrors MediaDrm.OnExpirationUpdateListener.

PiperOrigin-RevId: 298826713
2020-03-10 10:18:46 +00:00
tonihei
61935e14bf Add option to pause at end of stream to ExoPlayerImplInternal
This option marks streams as final such that renderers play them out
completely, then waits until this happened, and then sets the player
to paused. After that, the player can continue to read the next period
to quickly resume playback if needed.

PiperOrigin-RevId: 298824745
2020-03-10 10:18:37 +00:00
ibaker
e88e889c95 Extract MediaSourceEventDispatcher from MediaSourceEventListener
Update it to allow any listener class to be registered (and thus
require the caller of dispatch() to provide the type of listener
to call).

Maintain MediaSourceEventListener.EventDispatcher as a sub-class
for now so that all existing references continue to work. This
avoids creating a huge diff in one CL. The intention is to in-line
these incrementally.

This is pre-work for issue:#6765

PiperOrigin-RevId: 298818198
2020-03-10 10:18:29 +00:00
olly
d8ea1f60af Annotate tests to use Robolectric's LEGACY LooperMode.
The default Robolectric Looper simulation mode is changing to PAUSED from LEGACY.
The following tests fail in this new mode, and are thus being defaulted to LEGACY.

For more details see ​go/robolectric-legacy-looper-mode-lsc

Cleanup change automatically generated by error-prone refactoring
//third_party/android/androidx_test/tools/errorprone/java/androidx/test/tools/errorprone:LegacyLooperModeConverter_refactoring

Tested:
    TAP train for global presubmit queue
    http://test/OCL:297627974:BASE:298600828:1583273401491:7d94dbaa
PiperOrigin-RevId: 298809656
2020-03-10 10:18:05 +00:00
krocard
58f42e9f8b Annotate render's read source result
So that swich case has a warning if all case are not
covered.

PiperOrigin-RevId: 298574013
2020-03-10 10:17:48 +00:00
bachinger
d1bbd3507a add media item to create media sources
This change adds the createMediaSource(MediaItem mediaItem) method to the MediaSourceFactory interface. It doesn't deprecate createMediaSource(Uri uri) to keep the cl smaller. Deprecation and removing calls to the deprecated method from within the library and extension follow in a separate CL.

PiperOrigin-RevId: 298352442
2020-03-10 10:17:03 +00:00
tonihei
b095fd57e6 Extend test case to cover existing and potential bug conditions.
PiperOrigin-RevId: 298334500
2020-03-10 10:16:45 +00:00
ibaker
2f4e88d5af Remove ByteBufferBackingArray suppression from metadata decoders
PiperOrigin-RevId: 298312222
2020-03-10 10:16:25 +00:00
tonihei
a12d72c72c Fix flakiness in SimpleDecoderVideoRendererTest
The test had two problems:
 1. It posts messages using a Handler and we need to idle the main looper
    to actually deliver this message.
 2. SimpleDecoder uses a background thread that is not within our control
    from the test. Ensure the decoding happens after we queue input buffers
    by using a lock.

PiperOrigin-RevId: 298300175
2020-03-10 10:16:08 +00:00
andrewlewis
0b946ac317 Move max encoded audio rates to format utils
PiperOrigin-RevId: 298290511
2020-03-10 10:16:00 +00:00
olly
a6d0caaa3c Drop prefix test- from test methods under v2/library
This is one step toward following the google3's test naming convention.
See go/java-testing/getting_started#basic-test-template for details
why prefix test isn't necessary.

This CL is generated by following command
$ find -name '*Test.java' | xargs -I{} sed -i 's/^\ \ public\ void\ test\([A-Z]\)\(.*\)$/  public void \L\1\E\2/' {}

and then manually modified following tests where test method names conflict with test target.
- VorbisUtilTest
- VorbisReaderTest
- UtilTest
- DownloadManagerDashTest
- DefaultOggSeekerTest
- OggPageHeaderTest
- HlsMasterPlaylistParserTest

PiperOrigin-RevId: 298074653
2020-03-10 10:15:43 +00:00
bachinger
c1258e7e9f add getter/setter of skipSilenceEnable to AudioComponent
PiperOrigin-RevId: 298070828
2020-03-10 10:15:33 +00:00
Cizor
ebc765c3e1 Rendererd buffer count when tunneling enabled
Increasing buffer count when tunneling enabled, for video tracks.
Audio buffer count works fine for both modes.
2020-03-05 18:21:47 +05:30
olly
67b29bbe39 Format.Builder: Finish migration
Issue: #5978
PiperOrigin-RevId: 297876336
2020-02-28 18:43:04 +00:00
christosts
0649c7b958 MediaCodecRenderer: apply rendering limit on feed
PiperOrigin-RevId: 297873726
2020-02-28 18:42:56 +00:00
olly
4c1f0c40ce Format.Builder: Simplify some test classes
PiperOrigin-RevId: 297865356
2020-02-28 18:42:48 +00:00
andrewlewis
1ca9a061b1 Split AAC utils out of CodecSpecificDataUtil
PiperOrigin-RevId: 297823929
2020-02-28 18:42:30 +00:00