3198 Commits

Author SHA1 Message Date
olly
9a4ec54bdf Propagate Format through extension video decoders
We currently propagate only ColorInfo, but propagating the whole Format
is generally useful (e.g., to get the frame-rate on the output side of
the decoder).

PiperOrigin-RevId: 310359650
2020-05-14 22:18:55 +01:00
ibaker
252bf43bf4 Stop parsing unsupported WebVTT CSS properties
The spec lists an exhaustive list of CSS properties that should be
recognised, all others must be ignored:
https://www.w3.org/TR/webvtt1/#the-cue-pseudo-element

PiperOrigin-RevId: 310353888
2020-05-14 22:18:46 +01:00
ibaker
99ebeaed17 Change the SubtitleView.Output interface
This allows properties to propagate when switching view types
(e.g. bottomPaddingFraction).

It also allows the style-stripping code to be pushed up to SubtitleView
and therefore shared.

PiperOrigin-RevId: 310353534
2020-05-14 22:18:37 +01:00
samrobinson
70273a0361 Assert incoming buffers are little endian in the DefaultAudioSink.
PiperOrigin-RevId: 310332895
2020-05-14 22:18:28 +01:00
christosts
4e8ea009b8 Fix AsynchronousMediaCodecBufferEnqueuerTest
Fixes AsynchronousMediaCodecBufferEnqueuerTest broken tests by
enqueueing input buffers that have previously been dequeued from the
MediaCodec.

The test assumes that the shadow MediaCodec implementation can dequeue
at least 10 input buffers before queueing them back. Although fragile,
it seems to work with the current robolectric shadow MediaCodec. This is
at the moment preferred compared to making the test more complicated.

PiperOrigin-RevId: 310325096
2020-05-14 22:18:09 +01:00
insun
85cf5768eb Let CastPlayer#getTrackSelector return null
Change CastPlayer#getTrackSelector to return null
instead of throwing exception.

PiperOrigin-RevId: 310319964
2020-05-14 22:18:00 +01:00
insun
c7f2df0fd9 Add Player#getTrackSelector()
PiperOrigin-RevId: 310242733
2020-05-14 22:17:51 +01:00
krocard
535e14cb4d Implement format to encoding for AAC
PiperOrigin-RevId: 310199693
2020-05-06 20:58:11 +01:00
krocard
a2ce75d836 AudioSink buffers should be in LITTLE_ENDIAN
Some part of the audio pipeline in the DefaultAudioSink
(PCM processors) are expecting little endian buffers.

As a result, in order to behave like MediaCodec,
make sure the passthrough MediaCodec-bypass pipeline
also processes little endian output buffers.

PiperOrigin-RevId: 310172464
2020-05-06 20:58:02 +01:00
krocard
efff7a9d22 Propagate sample rate and format deeper
#exo-offload

PiperOrigin-RevId: 310150780
2020-05-06 20:57:44 +01:00
ibaker
8077fe1bf1 Add media period info to DrmSessionEventListener methods
Part of issue:#6765

PiperOrigin-RevId: 310143494
2020-05-06 20:57:35 +01:00
krocard
34327bec5c Propagate the correct gapless values in passthrough
Previously the input format values were used,
but it could be incorrect if two format change were
occurring in quick successions.

PiperOrigin-RevId: 310142675
2020-05-06 20:57:26 +01:00
krocard
64b50ba9fc Clarify DRM passthrough comment
PiperOrigin-RevId: 310142362
2020-05-06 20:57:17 +01:00
tonihei
98f8862d1c Remove threading requirement from listener registration methods.
These methods operate on a thread-safe collection and are thus
inherently thread-safe. This simplifies some player setup configurations
where initial listeners are added on a background thread (e.g. when
using a dependency injection framework).

PiperOrigin-RevId: 310113181
2020-05-06 20:56:46 +01:00
tonihei
95ffc365ca Remove auto-notification of current cues when adding listener.
Users of addTextOutput should instead query the current cues if they
need them. This is more consistent with how other listeners are handled.

PiperOrigin-RevId: 310112241
2020-05-06 20:56:37 +01:00
olly
99b62a24d1 Rename VideoDecoderRenderer to VideoDecoderGLFrameRenderer
We currently have DecoderVideoRenderer and VideoDecoderRenderer, which
is very confusing! This one is package private, so we can rename it to
remove some of the confusion.

Also fix some nullness issues.

PiperOrigin-RevId: 309964088
2020-05-05 18:39:47 +01:00
bachinger
ab559eb373 Add media item property to Timeline.Window
PiperOrigin-RevId: 309949800
2020-05-05 18:39:25 +01:00
krocard
81a13a638d A passthrough codec is only needed for DRM
In passthrough MediaCodec is not used except if
the format has a DRM.

Nevertheless the code was still requiring that a
passthrough decoder be present even if it was not going to be
used (aka no drm).

PiperOrigin-RevId: 309947271
2020-05-05 18:39:16 +01:00
aquilescanta
635886449a Use DataSpec request headers in HttpMediaDrmCallback
PiperOrigin-RevId: 309944716
2020-05-05 18:38:59 +01:00
olly
ee14fe7adf Align Decoder(Audio|Video)Renderer decoder re-use logic
- Fix DecoderAudioRenderer to re-init codec if the DRM session changes.
- Add canKeepCodec to DecoderVideoRenderer. Previously it was assumed
  that the decoder could be re-used, but this will not be true in all
  cases for FfmpegVideoRenderer.

Issue: #7079
PiperOrigin-RevId: 309935278
2020-05-05 18:38:50 +01:00
tonihei
2e81186a33 Add timeout to TestExoPlayer runUntil methods.
If the condition isn't fulfilled, they currently block until the
test runner times out the test. Our usual approach is to timeout
in the test itself so that the error message is clearly showing the
blocked condition.

Also clean-up some documentation.

PiperOrigin-RevId: 309930198
2020-05-05 18:38:41 +01:00
samrobinson
d944f32f24 Change SilenceSkippingAudioProcessor to not rely on the frame MSB.
PiperOrigin-RevId: 309925306
2020-05-05 18:38:32 +01:00
krocard
918963c2b4 Do not use MediaCodec in passthrough mode.
Now that MediaCodec is not use in passthrough, no
MediaCodec should be created in this mode.

Additionally, do not instantiate a MediaCodec in passthrough

#exo-offload

PiperOrigin-RevId: 309916131
2020-05-05 18:38:23 +01:00
aquilescanta
fff3f99f4a Pass LoadErrorInfo to LoadErrorHandlingPolcy
Issue: #7309
PiperOrigin-RevId: 309749566
2020-05-05 18:37:57 +01:00
olly
862a6e4dd2 Pass appropriate frame-rate to Surface.setFrameRate
PiperOrigin-RevId: 309746009
2020-05-05 18:37:47 +01:00
tonihei
3c2e5df527 Update initial bitrate estimates.
PiperOrigin-RevId: 309720018
2020-05-05 18:37:12 +01:00
tonihei
5819b47f41 Use helper method for duplicated message sending logic.
PiperOrigin-RevId: 309709215
2020-05-05 18:36:54 +01:00
tonihei
3ebad15338 Fix usage of deprecated IntDef.
And allow default value constant to be assigned as valid value.

PiperOrigin-RevId: 309708888
2020-05-05 18:36:45 +01:00
tonihei
3100f5938d Reorder SimpleExoPlayer constructor calls.
We currently call the old (deprecated) from the new one and not
the other way round.

Also remove a duplicated method.

PiperOrigin-RevId: 309702752
2020-05-05 18:36:34 +01:00
olly
bb744e5f9b DownloadManager.Task: Remove top level thread interrupt
DownloadManager doesn't know enough about the Downloader implementations to
know that interrupting the thread is the right thing to do. In particular,
if a Downloader implementation wants to delegate work to additional worker
threads, then it will probably not want its main thread to be interrupted
on cancelation. Instead, it will want to cancel/interrupt its worker threads,
and keep its main thread blocked until work on those worker threads has
stopped (download() must not return whilst the Downloader is still touching
the cache).

This change moves control over what happens to the individual Downloader
implementations.

Issue: #5978
PiperOrigin-RevId: 309419177
2020-05-01 19:51:14 +01:00
olly
32516d85be Simplify thread interruption for downloads.
- Stop throwing InterruptedException from CacheUtil. When a CacheUtil operation
  throws or returns, the caller should always check its own state to determine
  whether they canceled the operation. If a caller is trying to catch
  InterruptedException separately to IOException to do something different in
  that case, they're probably doing the wrong thing. So it's simpler, and probably
  less error prone, just to throw an IOException in the case of interruption.
- Throwing InterruptedIOException is also consistent with what our Extractor and
  DataSource implementations do.

Issue: #5978
PiperOrigin-RevId: 309411556
2020-05-01 19:51:05 +01:00
olly
36b43780d3 Catch correct exception from Context.startService
Issue: #7306
PiperOrigin-RevId: 309392633
2020-05-01 19:50:34 +01:00
aquilescanta
0774ee1da9 Merge LoadErrorHandlingPolicy cleanup methods
Issue: #7309
PiperOrigin-RevId: 309387483
2020-05-01 19:49:24 +01:00
aquilescanta
956514ad9b Add internal demo flavor that uses MediaParser for progressive media
PiperOrigin-RevId: 309258505
2020-05-01 19:49:16 +01:00
tonihei
85bc1d6e14 Fix message indexing bug.
We keep an index hint for the next pending player message. This hint
wasn't updated correctly when messages are removed due to a timeline
update.

This change makes sure to only use the hint locally in one method so
that it doesn't need to be updated anywhere else and also adds the "hint"
suffix to the variable name to make it clearer that it's just a hint and
there are no guarantees this index actually exists anymore.

issue:#7278
PiperOrigin-RevId: 309217614
2020-05-01 19:48:14 +01:00
olly
1950905990 Don't allow bad MediaSource release implementation to crash player.
This also allows subsequent MediaSource instance in the list to still
be released successfully.

Issue: #7168
PiperOrigin-RevId: 309202170
2020-05-01 19:48:06 +01:00
aquilescanta
c4f65eb84a Add LoadErrorHandlingPolicy cleanup callbacks
Implementors should use the new callbacks to
clean up any resources associated with the
corresponding LoadEventInfo ids.

PiperOrigin-RevId: 309198455
2020-05-01 19:47:57 +01:00
olly
f6a2fad6b6 DownloadManagerTest: Clean up the tests themselves
PiperOrigin-RevId: 309022070
2020-05-01 19:47:40 +01:00
ibaker
b74b4f3c35 In-line WebvttSubtitleTest helper methods
testSubtitleEventTimes/IndicesHelper make assertions that only happen
to be the same because values in two different constants match up. It
seems much better to explicitly put the assertions in each test.

The other assert methods are just obscuring the underlying call to
Truth.

PiperOrigin-RevId: 309022044
2020-05-01 19:47:31 +01:00
ibaker
767b29f159 Implement the rest of WebVTT's line computation
Steps 4-10 of https://www.w3.org/TR/webvtt1/#cue-computed-line

This part is harder to fit into our code structure because it depends on
how many cues are simultaneously visible - so it has to go in
WebvttSubtitle not WebvttCueParser (which only deals with individual
cues in isolation).

This removes the `isNormal()` method that was trying to approximate
the correct behaviour.

PiperOrigin-RevId: 309021686
2020-05-01 19:47:23 +01:00
olly
c98caa86e9 DownloadManagerTest: Flatten downloader list
PiperOrigin-RevId: 308999582
2020-05-01 19:47:14 +01:00
olly
b65e682957 DownloadManagerTest: Disambiguate between download and removal
PiperOrigin-RevId: 308997845
2020-05-01 19:47:05 +01:00
olly
ec34c083f4 DownloadManagerTest: Make posting consistent
PiperOrigin-RevId: 308991602
2020-05-01 19:46:56 +01:00
andrewlewis
625c734726 Enable nullness checking for the IMA extension
adPlaybackState is now non-null, and the uninitialized case is covered by a new
boolean hasAdPlaybackState. Position progress updates are now non-null and
initialized with IMA's VIDEO_TIME_NOT_READY constant.

Also fix some misc code issues:
- Remove empty branch for SmoothStreaming (Android Studio warns about this).
- Tidy onTimelineChanged and onPositionDiscontinuity and the methods they call
  to improve naming.
- Remove logging for IMA events after release, as these methods are expected to
  be called in the current IMA SDK behavior.

PiperOrigin-RevId: 308977116
2020-05-01 19:46:22 +01:00
andrewlewis
dcbdbe5341 Fix handling of ad timelines without prerolls
The player's initial PlaylistTimeline has no ad cue points, so its first
MediaPeriodId has no nextAdGroupIndex. When the AdsMediaSource provides its
first timeline, the cue points become known. For the case where a preroll cue
point appeared, the preroll was detected due to isAd changing on the
MediaPeriodId.  For the case where a midroll/postroll cue point appeared, the
MediaPeriodId was actually treated as the same, which leads to keeping the
unclipped original MediaPeriod.

Fix this behavior by checking for nextAdGroupIndex becoming set or decreasing.

PiperOrigin-RevId: 308974490
2020-05-01 19:46:13 +01:00
bachinger
b22783f895 Rename sourceUri to uri
PiperOrigin-RevId: 308918151
2020-05-01 19:46:04 +01:00
ibaker
284b843da0 Add fall-back behaviour for vertical cues if rendering isn't supported
PiperOrigin-RevId: 308854072
2020-05-01 19:45:55 +01:00
olly
2d494861ec Cleanup and document TestDownloadManagerListener
PiperOrigin-RevId: 308843488
2020-05-01 19:45:29 +01:00
olly
8ab709c677 DownloadManagerTest: Remove DownloadRunner
Its only real purpose is to encapsulate a download ID, but it doesn't actually save
any code, and arguably makes it more complicated by having multiple lists of
Downloader instances, indexed by key, and also because it's another (undocumented)
class to understand.

This CL retains the multiple Downloader lists, but they will be flattened in a
child CL.

PiperOrigin-RevId: 308838026
2020-05-01 19:45:12 +01:00
olly
528104919f Add DownloadManager.getApplicationLooper
This is equivalent to the method ExoPlayer provides. It's nice for consistency,
and for retrieving the looper from test code.

PiperOrigin-RevId: 308830288
2020-05-01 19:44:54 +01:00