Commit graph

5911 commits

Author SHA1 Message Date
tonihei
561949a225 Remove AnalyticsCollector.Factory.
This factory was only needed in the past when we didn't have
AnalyticsCollector.setPlayer. Code becomes easier to use without this factory.

PiperOrigin-RevId: 261081860
2019-08-01 20:36:40 +01:00
olly
526cc72e04 WavExtractor: Skip to data start position if position reset to 0
PiperOrigin-RevId: 260970865
2019-08-01 20:36:21 +01:00
olly
288aa52dec Clean up some Ogg comments & document granulePosition
PiperOrigin-RevId: 260947018
2019-08-01 20:36:02 +01:00
olly
80ab74748d Mp3Extractor: Avoid outputting seek frame as a sample
This could previously occur when seeking back to position=0

PiperOrigin-RevId: 260933636
2019-08-01 20:35:43 +01:00
olly
af8f67c068 Don't print warning when skipping RIFF and FMT chunks
They're not unexpected!

PiperOrigin-RevId: 260907687
2019-08-01 20:35:25 +01:00
tonihei
6f2e24915d Add @NonNullApi and annotate two packages with it.
This new annotation declares everything as non-null by default and can be
used as a package annotation in package-info.java.

In this change the core lib offline package and the mediasession extension is
annotated that way as initial example usage.

PiperOrigin-RevId: 260894548
2019-08-01 20:35:06 +01:00
olly
78350cd17d Update javadoc for TrackOutput#sampleData to make it more clear that implementors aren't expected to rewind with setPosition()
PiperOrigin-RevId: 260718614
2019-08-01 20:34:47 +01:00
tonihei
ce2e2797cb Improve DefaultMediaClock behaviour.
DefaultMediaClock has currently two non-ideal behaviours:
1. One part of checking if it should use the renderer clock is checking whether
   the associated renderer finished reading its stream. This only makes sense
   if the renderer isn't already reading ahead into the next period. This can
   be solved by forwarding if we are reading ahead to the sync command.
2. When switching from stand-alone to renderer clock we assume they are
   exactly at the same position. This is true in theory, but in practise there
   may be small differences due to the different natures of these clocks. To
   prevent jumping backwards in time, we can temporarily stop the stand-alone
   clock and only switch once the renderer clock reached the same position.

PiperOrigin-RevId: 260690468
2019-08-01 20:34:28 +01:00
tonihei
39d5867c97 Make blocking fixed track bandwidth the default and remove experimental flag.
PiperOrigin-RevId: 260682878
2019-08-01 20:34:08 +01:00
aquilescanta
40926618ad Return the removed media source from ConcatenatingMediaSource.removeMediaSource
PiperOrigin-RevId: 260681773
2019-08-01 20:33:48 +01:00
Venkatarama NG. Avadhani
27a4f96cb1 Clean up FLAC picture parsing 2019-07-30 12:15:36 +05:30
andrewlewis
3051e5e9ad Ensure the SilenceMediaSource position is in range
Issue: #6229
PiperOrigin-RevId: 260500986
2019-07-29 21:28:06 +01:00
olly
d77d661e52 Default viewport constraints to match primary display
PiperOrigin-RevId: 260479923
2019-07-29 21:27:46 +01:00
tonihei
7703676c87 Swap reading and playing media period updates.
Both periods are rarely updated in the same iteration. If they are, advancing
the reading period first seems more logical and also more efficient as it may
avoid one extra doSomeWork iteration.

PiperOrigin-RevId: 260463735
2019-07-29 21:27:25 +01:00
tonihei
846e0666df Restructure updatePeriods code for better readability.
Moved update of reading and playing periods in their own respective method.
This is a no-op change.

PiperOrigin-RevId: 260463668
2019-07-29 21:27:06 +01:00
Venkatarama NG. Avadhani
ea64ecf2c4 Parse Picture Metadata in FLAC 2019-07-29 14:34:35 +05:30
olly
09835c454b Bump version to 2.10.4
PiperOrigin-RevId: 260164426
2019-07-27 22:54:38 +01:00
andrewlewis
6f7b765a1c Fix handling of channel count changes with speed adjustment
When using speed adjustment it was possible for playback to get stuck at a
period transition when the channel count changed: SonicAudioProcessor would be
drained at the point of the period transition in preparation for creating a new
AudioTrack with the new channel count, but during draining the incorrect (new)
channel count was used to calculate the output buffer size for pending data from
Sonic. This meant that, for example, if the channel count changed from stereo to
mono we could have an output buffer size that stored an non-integer number of
audio frames, and in turn this would cause writing to the AudioTrack to get
stuck as the AudioTrack would prevent writing a partial audio frame.

Use Sonic's current channel count when draining output to fix the issue.

PiperOrigin-RevId: 260156541
2019-07-27 22:54:19 +01:00
olly
9c41bcfe24 Add A10-70L to output surface workaround
Issue: #6222
PiperOrigin-RevId: 260146226
2019-07-26 16:34:39 +01:00
sofijajvc
1b9e2497ff Add comment about AV1 levels
PiperOrigin-RevId: 259918196
2019-07-26 16:34:01 +01:00
tonihei
074307dd4c Improve knowledge of last playing period in AnalyticsCollector.
We keep track of the last publicly known playing period to report it as part
of events happening after the period has been released.

In cases where a period briefly becomes the playing one and is released
immediately afterwards, we currently don't save it as the "last known playing
one". Improve that by saving an explicit reference.

Issue:#5407
PiperOrigin-RevId: 259737218
2019-07-26 16:33:41 +01:00
tonihei
59331c3c88 Report mediaPeriodCreated/Released in MaskingMediaSource.
Creating a period in MaskingMediaSource may result in delayed event reporting
depending on when the actual period gets created. To avoid event reporting
inaccuracies, report the mediaPeriodCreated and mediaPeriodReleased events
directly.

Issue:#5407
PiperOrigin-RevId: 259737170
2019-07-26 16:33:22 +01:00
tonihei
a0ca79abcc Fix doc for preferred audio and text language.
Both tags allow any BCP47 compliant code, not just the ISO 639-2/T ones.

PiperOrigin-RevId: 259714587
2019-07-24 12:34:11 +01:00
tonihei
e84d88e90f Simplify and improve text selection logic.
This changes the logic in the following ways:
 - If no preferred language is matched, prefer better scores for the selected
   audio language.
 - If a preferred language is matched, always prefer the better match
   irrespective of default or forced flags.
 - If a preferred language score and the isForced flag is the same, prefer
   tracks with a better selected audio language match.

PiperOrigin-RevId: 259707430
2019-07-24 12:33:55 +01:00
Toni
feb807897f Merge pull request #6178 from xirac:feature/text-track-score
PiperOrigin-RevId: 259707359
2019-07-24 12:33:39 +01:00
andrewlewis
7d2bfdfc62 Add AudioFocusGain IntDef in AudioFocusManager
PiperOrigin-RevId: 259687632
2019-07-24 12:33:19 +01:00
tonihei
39574b5a61 Make one of the ExoPlayerTest tests more sensible.
Some variables were defined although they are the default and other things
were set-up in a non-sensible way, e.g. asserting that audio is selected
although no audio renderer is available, or using unset duration for
everything.

PiperOrigin-RevId: 259532782
2019-07-23 23:17:31 +01:00
aquilescanta
3c3777d4de Fix release of DecryptableSampleQueueReaders in ProgressiveMediaPeriod
PiperOrigin-RevId: 259523450
2019-07-23 23:16:52 +01:00
aquilescanta
2a8cf2f5ef Plumb DrmSessionManager into HlsMediaSource
PiperOrigin-RevId: 259520431
2019-07-23 23:16:33 +01:00
andrewlewis
e6bafec418 Deduplicate ID3 header constants
PiperOrigin-RevId: 259479785
2019-07-23 23:16:13 +01:00
aquilescanta
3a53543a9a Move HLS DrmInitData adjustment to the writing side
+ Emulates what's done for ID3 stripping.
+ Also avoid a copy if fields will not change because of the
  copy.

PiperOrigin-RevId: 259369101
2019-07-23 23:15:54 +01:00
Yannick RUI
8b554dc30a Improve code readability and fix an issue with text tracks that should not be selected 2019-07-19 08:38:47 +02:00
Oliver Woodman
0e7f015020 Merge pull request #6042 from Timbals:dev-v2
PiperOrigin-RevId: 258812820
2019-07-18 19:40:36 +01:00
olly
421f6e0303 Add AV1 HDR profile recognition
Recognize AV1ProfileMain10HDR when getting codec profile and level.

PiperOrigin-RevId: 258799457
2019-07-18 19:40:13 +01:00
tonihei
08624113d4 Correctly mask playback info changes in ExoPlayerImpl.
PlaybackInfo changes are one of the last ones not masked and reported in the same
way as all other changes.

The main change to support this is to also mask the parameters set in
DefaultAudioSink.

PiperOrigin-RevId: 258787744
2019-07-18 19:39:53 +01:00
tonihei
aeb2fefe48 Further language normalization tweaks for API < 21.
1. Using the Locale on API<21 doesn't make any sense because it's a no-op
   anyway. Slightly restructured the code to avoid that.
2. API<21 often reports languages with non-standard underscores instead of
   dashes. Normalize that too.
3. Some invalid language tags on API>21 get normalized to "und". Use original
   tag in such a case.

Issue:#6153
PiperOrigin-RevId: 258773463
2019-07-18 19:39:33 +01:00
andrewlewis
e4f849076c Remove unused extractor constructors
PiperOrigin-RevId: 258754710
2019-07-18 14:16:49 +01:00
olly
c67f18764f Move Format equality check back to write side of sample queue
PiperOrigin-RevId: 258752996
2019-07-18 14:16:29 +01:00
olly
e25340be3d Pass format instead of codec string when getting profile and level
AV1 profile recognition requires additional info contained in format.

PiperOrigin-RevId: 258746315
2019-07-18 14:16:09 +01:00
tonihei
c779e84cbb Switch language normalization to 2-letter language codes.
2-letter codes (ISO 639-1) are the standard Android normalization and thus we
should prefer them to 3-letter codes (although both are technically allowed
according the BCP47).

This helps in two ways:
 1. It simplifies app interaction with our normalized language codes as the
    Locale class makes it easy to convert a 2-letter to a 3-letter code but
    not the other way round.
 2. It better normalizes codes on API<21 where we previously had issues with
    language+country codes (see tests).
 3. It allows us to normalize both ISO 639-2/T and ISO 639-2/B codes to the same
    language.

PiperOrigin-RevId: 258729728
2019-07-18 14:15:50 +01:00
aquilescanta
80d5dabd52 Fix DataSchemeDataSource re-opening and range requests
Issue:#6192
PiperOrigin-RevId: 258592902
2019-07-18 14:15:31 +01:00
andrewlewis
bee35ed9d7 Fix DeprecationMismatch errors
PiperOrigin-RevId: 258590215
2019-07-18 14:15:12 +01:00
tonihei
049f3cf5cd Keep default start position (TIME_UNSET) as content position for preroll ads.
If we use the default start position, we currently resolve it immediately
even if we need to play an ad first, and later try to project forward again
if we believe that the default start position should be used.

This causes problems if a specific start position is set and the later
projection after the preroll ad shouldn't take place.

The problem is solved by keeping the content position as TIME_UNSET (= default
position) if an ad needs to be played first. The content after the ad can
then be resolved to its current default position if needed.

PiperOrigin-RevId: 258583948
2019-07-18 14:14:52 +01:00
olly
1a479387f2 Fix the equals check
PiperOrigin-RevId: 258574110
2019-07-18 14:14:33 +01:00
olly
a3ded59f28 Check codec profile/level for AV1
Add appropriate unit tests.

PiperOrigin-RevId: 258552404
2019-07-18 14:14:14 +01:00
olly
5e4f52541d Extend RK video_decoder workaround to newer API levels
Issue: #6184
PiperOrigin-RevId: 258527533
2019-07-18 14:13:55 +01:00
tonihei
01376443b3 Add MediaSource.enable/disable.
These methods helps to indicate that a media source isn't used to create new
periods in the immediate term and thus limited resources can be released.

PiperOrigin-RevId: 258373069
2019-07-18 14:13:36 +01:00
olly
7760eca238 Deep compare formats in SampleMetadataQueue instead of shallow compare
PiperOrigin-RevId: 258285645
2019-07-18 14:12:55 +01:00
tonihei
2b5c42e027 Fix some inline parameter name comments.
The name of this parameter recently changed in 3fe0b1a6fe and I forgot
to change these inline comment usages.

PiperOrigin-RevId: 258160659
2019-07-18 14:12:11 +01:00
Yannick RUI
1909987dc8 Change all the conditions and scores that are currently in the constructor of TextTrackScore to comparisons in TextTrackScore.compareTo 2019-07-15 16:05:01 +02:00
Yannick RUI
af98883a7b Reintroducing existing logic as requested here https://github.com/google/ExoPlayer/pull/6178#pullrequestreview-261298162 2019-07-15 11:35:32 +02:00
tonihei
bbcd1126b2 Remove DownloadService from nullness blacklist.
PiperOrigin-RevId: 258038961
2019-07-14 16:25:37 +01:00
tonihei
3fe0b1a6fe Rename SourceInfoRefreshListener to MediaSourceCaller.
This better reflects its usage as a caller identifier and not just a listener.

PiperOrigin-RevId: 257827188
2019-07-14 16:25:18 +01:00
aquilescanta
510f1883b0 Plumb DrmSessionManager into ProgressiveMediaSource
PiperOrigin-RevId: 257777513
2019-07-14 16:24:59 +01:00
tonihei
df81bd6a68 Make ExtractorMediaSource a CompositeMediaSource instead of just wrapping.
It's easy to forget to forward methods when using basic wrapping. For example,
ExtractorMediaSource.addEventListener is currently a no-op because it's not
forwarded.

PiperOrigin-RevId: 257757556
2019-07-14 16:24:39 +01:00
tonihei
ccc82cdb4a Remove some remaining references to manifests.
PiperOrigin-RevId: 257757496
2019-07-14 16:24:21 +01:00
Oliver Woodman
56a922c121 Merge pull request #6151 from ittiam-systems:bug-5527
PiperOrigin-RevId: 257668797
2019-07-14 16:24:02 +01:00
aquilescanta
b9ab0cf137 Plumb DrmSessionManager into SsMediaSource
PiperOrigin-RevId: 257624043
2019-07-14 16:23:19 +01:00
aquilescanta
bbcd46e98a Change HlsSampleStreamWrapper.prepareWithMasterPlaylistInfo to take a TrackGroup[]
Non-functional change. Makes it easier to add the ExoMediaCrypto type information
to the formats.

PiperOrigin-RevId: 257598282
2019-07-14 16:23:00 +01:00
aquilescanta
3f24d4433a Optimize DrmSession reference replacement
Potentially avoids up to two calls to synchronized methods

PiperOrigin-RevId: 257578304
2019-07-14 16:22:41 +01:00
aquilescanta
91750b8009 Plumb DrmSessionManager into DashMediaSource
PiperOrigin-RevId: 257576791
2019-07-14 16:22:22 +01:00
aquilescanta
6796b179a6 Make onInputFormatChanged methods in Renderers take FormatHolders
PiperOrigin-RevId: 257478434
2019-07-14 16:22:02 +01:00
aquilescanta
972c6c2f5c Avoid acquiring DrmSessions using the dummy DrmSessionManager
This is a temporary workaround until we have migrated all MediaSources uses.
This change avoids having to migrate all uses of MediaSources immediately.

PiperOrigin-RevId: 257459138
2019-07-14 16:21:43 +01:00
aquilescanta
d4e3e8f2e0 Add overridingDrmInitData to DecryptableSampleQueueReader
To use in HLS when session keys are provided

PiperOrigin-RevId: 257421156
2019-07-14 16:21:04 +01:00
bachinger
49a2e5a5cb add manifest to Timeline.Window
- Remove manifest argument from callbacks of Player.EventListener and
  SourceInfoRefreshListener. Instead make it accessible through
  Player.getCurrentManifest() and Timeline.Window.manifest.
- Fix all MediaSource implementation to include the manifest in the
  Timeline instead of passing it to the SourceInfoRefreshListener.
- Refactor ExoPlayerTestRunner, FakeTimeline, FakeMediaSource to
  reflect these changes and make tests pass.

PiperOrigin-RevId: 257359662
2019-07-14 16:20:45 +01:00
Yannick RUI
29a099cf03 Switch text track score from the score based logic to a comparison based logic similar to the one we use for audio track selection (see AudioTrackScore). 2019-07-12 13:28:41 +02:00
Venkatarama NG. Avadhani
4b776ffe42 Refactor FlacStreamInfo to FlacStreamMetadata 2019-07-11 11:43:55 +05:30
Venkatarama NG. Avadhani
fb1f91b2a1 Clean up vorbis comment extraction 2019-07-11 11:43:55 +05:30
Venkatarama NG. Avadhani
77e1e4cc1e Add vorbis comments support to flac extractor
Decode and add vorbis comments from the flac file to metadata.

 #5527
2019-07-09 17:25:21 +05:30
olly
65d9c11027 Bump version to 2.10.3
PiperOrigin-RevId: 257161518
2019-07-09 11:54:39 +01:00
olly
b3d258b6cf Fix race condition in DownloadHelper
Sending MESSAGE_PREPARE_SOURCE should happen last in the constructor.
It was previously happening before initialization finished (and in
particular before pendingMediaPeriods was instantiated).

Issue: #6146
PiperOrigin-RevId: 257158275
2019-07-09 11:41:54 +01:00
tonihei
e3af045adb CEA608: Fix repeated Special North American chars.
We currently handle most the control code logic after handling special
characters. This includes filtering out repeated control codes and checking
for the correct channel. As the special character sets are control codes as well,
these checks should happen before parsing the characters.

Issue:#6133
PiperOrigin-RevId: 256993672
2019-07-08 19:42:09 +01:00
olly
ecd88c71d2 Remove some UI classes from nullness blacklist
PiperOrigin-RevId: 256751627
2019-07-08 19:41:47 +01:00
tonihei
d66f0c51a4 CEA608: no-op readability clean-up
PiperOrigin-RevId: 256676196
2019-07-05 17:33:30 +01:00
olly
fbb76243bd Clean up DRM post requests
- Explicitly specify HTTP_METHOD_POST (previously this was
  implicit as a result of the body data being non-null)
- Use null when there's no body data (it's converted to
  null inside of the DataSpec constructor anyway)

PiperOrigin-RevId: 256573384
2019-07-05 17:33:13 +01:00
olly
924cfac966 Remove more low hanging fruit from nullness blacklist
PiperOrigin-RevId: 256573352
2019-07-05 17:32:55 +01:00
tonihei
81e7b31be1 Apply playback parameters in a consistent way.
Currently, we sometimes apply new playback parameters directly and sometimes
through the list of playbackParameterCheckpoints. Only when using the checkpoints,
we also reset the offset and corresponding position for speedup position
calculation. However, these offsets need to be changed in all cases to prevent
calculation errors during speedup calculation[1].

This change channels all playback parameters changes through the checkpoints to
ensure the offsets get updated accordingly. This fixes an issue introduced in
31911ca54a.

[1] - The speed up is calculated using the ratio of input and output bytes in
SonicAudioProcessor.scaleDurationForSpeedUp. Whenever we set new playback
parameters to the audio processor these two counts are reset. If we don't reset
the offsets too, the scaled timestamp can be a large value compared to the input
and output bytes causing massive inaccuracies (like the +20 seconds in the
linked issue).

Issue:#6117
PiperOrigin-RevId: 256533780
2019-07-05 17:32:21 +01:00
tonihei
0145edb60d Move MediaSource masking code into separate class.
The masking logic for unprepared MediaSources is currently part of
ConcatanatingMediaSource. Moving it to its own class nicely separates the
code responsibilities and allows reuse.

PiperOrigin-RevId: 256360904
2019-07-05 17:31:11 +01:00
olly
7964e51e0e Remove more classes from nullness blacklist
PiperOrigin-RevId: 256202135
2019-07-05 17:30:19 +01:00
aquilescanta
7408b4355a Add DRM format support checks for MediaSource provided DRM
PiperOrigin-RevId: 256161522
2019-07-02 17:50:06 +01:00
Oliver Woodman
16bf7f9106 Merge pull request #5908 from sr1990:dev-v2
PiperOrigin-RevId: 256147805
2019-07-02 17:49:45 +01:00
olly
6febc88dce FLV extractor fixes
1. Only output video starting from a keyframe
2. When calculating the timestamp offset to adjust live streams to start
   at t=0, use the timestamp of the first tag from which a sample is actually
   output, rather than just the first audio/video tag. The test streams in
   the referenced GitHub issue start with a video tag whose packet type is
   AVC_PACKET_TYPE_SEQUENCE_HEADER (i.e. does not contain a sample) and whose
   timestamp is set to 0 (i.e. isn't set). The timestamp is set correctly on
   tags that from which a sample is actually output.

Issue: #6111
PiperOrigin-RevId: 256147747
2019-07-02 17:49:24 +01:00
tonihei
04959ec648 Remove unnecessary variables from ConcatenatingMediaSource.
The total window and period count, as well as the period offset for each holder
are not actually needed and can be removed.

Also added a TODO to remove two other variables if possible.

PiperOrigin-RevId: 255945584
2019-07-02 17:48:04 +01:00
tonihei
71de1d37ac Don't consume touch events if no controller is attached.
Issue:#6109
PiperOrigin-RevId: 255933121
2019-07-02 17:47:45 +01:00
andrewlewis
6fe70ca43d Use the floor of the frame rate for capability checks
PiperOrigin-RevId: 255584000
2019-07-02 17:47:26 +01:00
andrewlewis
244c202c56 Fix hidden API warnings from Metalava
PiperOrigin-RevId: 255442455
2019-07-02 17:46:49 +01:00
tonihei
2a765f6b5a Visibility clean-up: Don't extend visibility of protected methods in overrides.
PiperOrigin-RevId: 255412493
2019-07-02 17:46:30 +01:00
tonihei
1bd73eb70e Cleanup: Remove DynamicConcatenatingMediaSource
PiperOrigin-RevId: 255410268
2019-07-02 17:46:10 +01:00
olly
cf68d4eb47 Cleanup: Remove deprecated text and metadata output interfaces
PiperOrigin-RevId: 255380951
2019-07-02 17:45:51 +01:00
olly
1d36edc214 Remove unnecessary FileDescriptor sync
PiperOrigin-RevId: 255380796
2019-07-02 17:45:32 +01:00
olly
2a366e76b7 Cleanup: Remove deprecated message sending functionality
PiperOrigin-RevId: 255379393
2019-07-02 17:45:13 +01:00
olly
c974f74b1f Cleanup: Remove deprecated DataSpec.postBody
PiperOrigin-RevId: 255378274
2019-07-02 17:44:55 +01:00
olly
3c2afb16e6 Cleanup: Remove deprecated ChunkSampleStream constructor
PiperOrigin-RevId: 255377347
2019-07-02 17:44:36 +01:00
tonihei
8faac0344b Fix checkerframework 2.8.2 warnings.
The updated version issues more warnings than before.
Most of the changes are related to annotation placement.

PiperOrigin-RevId: 255371743
2019-07-02 17:44:17 +01:00
olly
40d44c48e5 Add threading model note to hello-word page
Also add layer of indirection between code and the guide, to
make moving content easier going forward.

PiperOrigin-RevId: 255182216
2019-07-02 17:43:58 +01:00
tonihei
4e504bc485 Rename DeferredMediaPeriod to MaskingMediaPeriod.
This better reflects its usage and fits into our general naming pattern.

PiperOrigin-RevId: 255157159
2019-07-02 17:43:38 +01:00
olly
883b3c8783 Update isMediaCodecException to return true for generic ISE on API 21+ if the
stack trace contains MediaCodec.

PiperOrigin-RevId: 254781909
2019-07-02 17:43:19 +01:00
aquilescanta
0ddd3c2bd0 Implement DecryptableSampleQueueReader.isReady
PiperOrigin-RevId: 254746146
2019-07-02 17:43:00 +01:00
sr1990
ec6604b4f7 [Patch V4] Support signalling of last segment number via supplemental descriptor in mpd. 2019-06-26 20:29:37 -07:00
sr1990
5f6a7fc7f1 [Patch V3] Support signalling of last segment number via supplemental descriptor in mpd. 2019-06-22 18:56:06 -07:00
aquilescanta
88f1dfcbc1 Add generic DrmSessionManager.getDummyDrmSessionManager
PiperOrigin-RevId: 254372134
2019-06-21 18:23:39 +01:00
aquilescanta
04aaf25aa2 Add DecryptableSampleQueueReader
Reads from a SampleQueue, associating each read format with a
DrmSession, if needed.

PiperOrigin-RevId: 254192562
2019-06-21 18:23:20 +01:00
aquilescanta
acad64cae8 Rename FormatHolder.decryptionResourceIsProvided to FormatHolder.includesDrmSession
PiperOrigin-RevId: 254187403
2019-06-21 18:23:01 +01:00
Oliver Woodman
ae969397bb Merge pull request #6055 from xirac:dev-v2
PiperOrigin-RevId: 254182080
2019-06-21 18:22:42 +01:00
tonihei
1701a5f329 PUBLIC: Update ExoPlayer dependency and remove legacy method.
PiperOrigin-RevId: 254172906
2019-06-21 18:22:20 +01:00
aquilescanta
6838b0b29c Relax DrmSessionManager-in-Renderer requirement for MediaSource-provided DRM
PiperOrigin-RevId: 254048233
2019-06-21 18:21:41 +01:00
tonihei
ba5e2a4a77 Fix test build.
Builds now fail when raw generics are used.

PiperOrigin-RevId: 253969682
2019-06-19 16:37:54 +01:00
bachinger
aaf57c76cf allow multiple style rules in a STYLE block of a webvtt file
PiperOrigin-RevId: 253959976
2019-06-19 16:37:35 +01:00
bachinger
1952988f84 keep notification when stop(false) is called
ISSUE: #6041
PiperOrigin-RevId: 253958225
2019-06-19 16:37:15 +01:00
olly
b9859c4787 [Checker Framework Upgrade] Suppress warnings emitted by Checker Framework version 2.8.2
More information (LSC)
https://docs.google.com/document/d/16tpK6aXqN68PvTyvt4siM-m7f0NXi_8xEeitLDzr8xY/edit?usp=sharing

Tested:
    tap_presubmit: http://test/OCL:253818309:BASE:253788332:1560879553629:9dc07a48
    Some tests failed; test failures are believed to be unrelated to this CL
PiperOrigin-RevId: 253858263
2019-06-19 16:36:56 +01:00
tonihei
9ed7b42af6 Prevent negative renderer timestamps when seeking back.
We are currently queuing periods in a way such that the new start position
lines up with the end of the previous period (to ensure continuous playback).
However, if the start position of the new period is larger than the total of
all previously played period durations, we may end up with negative renderer
timestamps when seeking back to the beginning of this new period. Negative
timestamps should be avoided as most decoders have problems handling them
correctly.

This change forces a renderer reset if we detect such a seek to a negative
renderer time and also resets the renderer offset to 0 every time all
renderers are disabled, as this is the only time where we can savely change
the offset of an existing media period.

Also, if playback starts with an ad, we choose the content position as
renderer offset to prevent the whole issue from occurring for the seek-behind-
midroll case.

Issue:#6009
Issue:#5323
PiperOrigin-RevId: 253790054
2019-06-18 17:49:29 +01:00
olly
38000b8786 Let AudioTrack write headers on SDK_INT >= 26
Issue: #6031
PiperOrigin-RevId: 253784986
2019-06-18 17:49:10 +01:00
aquilescanta
5aeaa6e8bf Fix application of maxAudioBitrate for adaptive audio track groups
Issue:#6006
PiperOrigin-RevId: 253781533
2019-06-18 17:48:51 +01:00
tonihei
b89dc8fbfd Prevent negative total buffered duration at the point where it is calculated.
In some edge cases the renderer position may be slightly ahead of the
buffered position and the total buffered duration is thus negative. We already
filter that in ExoPlayerImpl for the publicly accessible value. However, we
forward the unfiltered value to other components like the LoadControl, which
may be confusing.

Issue:#6015
PiperOrigin-RevId: 253780460
2019-06-18 17:48:32 +01:00
aquilescanta
e174d8a989 Remove unused variable
PiperOrigin-RevId: 253762488
2019-06-18 17:48:14 +01:00
tonihei
0a74e36f7b Gracefully handle revoked ACCESS_NETWORK_STATE permission.
This permission has normal access right and can't be revoked by the user.
However, an app can choose to revoke it when using ExoPlayer, e.g. if
no network is required and the app doesn't want to list this permission.

Support this use case by gracefully catching the exception in the relevant
places.

Issue:#6019
PiperOrigin-RevId: 253759332
2019-06-18 17:47:56 +01:00
aquilescanta
af5eb5e552 Add DummyDrmSessionManager
Avoids nullable DrmSessionManagers and simplifies sample reading.
To be used as default value for MediaSources.

PiperOrigin-RevId: 253624465
2019-06-18 17:47:37 +01:00
aquilescanta
3204cf8ffa Make DrmSessionException extend IOException
Makes it throwable from SampleStream.maybeThrowError

PiperOrigin-RevId: 253600396
2019-06-18 17:47:19 +01:00
tonihei
1266d5967b Fix all FIXME comments.
These are mostly nullability issues.

PiperOrigin-RevId: 253537068
2019-06-18 17:45:59 +01:00
Yannick RUI
b29731d501 Parse text track subtype into Format.roleflags. 2019-06-18 11:27:37 +02:00
Tim Balsfulland
04524a688d
Add convenience constructors for notification channel descriptions 2019-06-15 15:59:57 +02:00
Toni
da1f3f01fa Merge pull request #6036 from angelrc96:dev-v2
PiperOrigin-RevId: 253228214
2019-06-14 16:50:13 +01:00
arodriguez
2ce28a1620 Support for UDP data source 2019-06-14 16:34:53 +01:00
aquilescanta
3fcae68432 Add flags to DrmSessionManager
PiperOrigin-RevId: 253006112
2019-06-14 16:34:53 +01:00
olly
cc337a3e2d Update nullness annotations.
PiperOrigin-RevId: 252127811
2019-06-14 16:33:47 +01:00
tonihei
3bff79f56f Wrap MediaCodec exceptions in DecoderException and report as renderer error.
We currently report MediaCodec exceptions as unexpected exceptions instead of
as renderer error. All such exceptions are now wrapped in a new DecoderException
to allow adding more details to the exception.

PiperOrigin-RevId: 252054486
2019-06-14 16:33:47 +01:00
olly
8a2871ed51 Allow protected access to surface in MediaCodecVideoRenderer
PiperOrigin-RevId: 251961318
2019-06-14 16:33:10 +01:00
olly
1fb105bbb2 Attach timestamp to ExoPlaybackException
PiperOrigin-RevId: 251748542
2019-06-14 16:32:51 +01:00
arodriguez
28ee05f657 Support for UDP data source 2019-06-14 08:24:31 +02:00
sr1990
5b02f92dad [Patch V2] Support signalling of last segment number via supplemental descriptor in mpd 2019-06-10 22:22:15 -07:00
olly
624bb6b8d1 Attach timestamp to ExoPlaybackException
PiperOrigin-RevId: 251748542
2019-06-06 17:36:22 +01:00
olly
cfa837df5c Don't throw DecoderQueryException from getCodecMaxSize
It's only thrown in an edge case on API level 20 and below. If it
is thrown it causes playback failure when playback could succeed,
by throwing up through configureCodec.

It seems better just to catch the exception and have the codec be
configured using the format's own width and height.

PiperOrigin-RevId: 251745539
2019-06-06 17:36:03 +01:00
tonihei
be88499615 Display last frame when seeking to end of stream.
We currently don't display the last frame because the seek time is behind the
last frame's timestamps and it's thus marked as decodeOnly.

This case can be detected by checking whether all data sent to the codec is
marked as decodeOnly at the time we read the end of stream signal. If so, we
can re-enable the last frame. This should work for almost all cases because the
end-of-stream signal is read in the same feedInputBuffer loop as the last
frame and we therefore haven't released the last frame buffer yet.

Issue:#2568
PiperOrigin-RevId: 251425870
2019-06-06 17:34:47 +01:00
olly
9ca6f60c3a Preserve postBody in CacheDataSource when reading from upstream.
Set appropriate Content-Type when posting clientAbrState proto in post body.

PiperOrigin-RevId: 251322860
2019-06-06 17:34:08 +01:00
olly
a9de1477ee Bump to 2.10.2
PiperOrigin-RevId: 251216822
2019-06-03 19:15:42 +01:00
olly
b47f37fbcd Add HlsTrackMetadataEntry.toString
It's printed out by EventLogger, and currently looks pretty ugly

PiperOrigin-RevId: 250772010
2019-06-03 19:15:23 +01:00
aquilescanta
7e187283cd Add MediaSource-provided-DRM support to Renderer implementations
PiperOrigin-RevId: 250719155
2019-06-03 19:15:04 +01:00
tonihei
090f359895 Make parallel adaptive track selection more robust.
Using parallel adaptation for Formats without bitrate information currently
causes an exception. Handle this gracefully and also cases where all formats
have the same bitrate.

Issue:#5971
PiperOrigin-RevId: 250682127
2019-05-30 15:28:23 +01:00
eguven
f9d6f314e2 Fix misreporting cached bytes when caching is paused
When caching is resumed, it starts from the initial position. This makes
more data to be reported as cached.

Issue:#5573
PiperOrigin-RevId: 250678841
2019-05-30 15:28:23 +01:00
tonihei
fd1179aaa1 Add remaining PlaybackStatsListener metrics.
This adds all the non-playback-state metrics, like format, error, bandwidth and
renderer performance metrics.

PiperOrigin-RevId: 250668854
2019-05-30 15:28:23 +01:00
tonihei
77595da159 Add initial PlaybackStats listener version.
This version includes all playback state related metrics and the general
listener set-up.

PiperOrigin-RevId: 250668729
2019-05-30 15:28:23 +01:00
olly
6e7012413b Keep controller visible on d-pad key events
PiperOrigin-RevId: 250661977
2019-05-30 15:26:32 +01:00
tonihei
b8ec05aea1 Handle gzip in DefaultHttpDataSource.
Setting the requested encoding in all cases ensures we receive the relevant
response headers indicating whether gzip was used. Doing that allows to
detect the content length in cases where gzip was requested, but the server
replied with uncompressed content.

PiperOrigin-RevId: 250660890
2019-05-30 15:26:32 +01:00
eguven
00b26a51df Modify DashDownloaderTest to test if content length is stored
PiperOrigin-RevId: 250655481
2019-05-30 15:26:32 +01:00
eguven
e2452f8103 Simplify CacheUtil
PiperOrigin-RevId: 250654697
2019-05-30 15:26:32 +01:00
eguven
42ba6abf5a Fix CacheUtil.cache() use too much data
cache() opens all connections with unset length to avoid position errors.
This makes more data then needed to be downloading by the underlying
network stack.

This fix makes makes it open connections for only required length.

Issue:#5927
PiperOrigin-RevId: 250546175
2019-05-30 15:26:32 +01:00
olly
ed5ce2396d SimpleCache: Tweak comments related to blocking
"Write case, lock not available" was a bit confusing. When the
content is not cached and the lock is held, it's neither a read
or a write case. It's a "can't do anything" case. When blocking,
it may subsequently turn into either a read or a write.

PiperOrigin-RevId: 250530722
2019-05-30 15:26:32 +01:00
aquilescanta
71418f9411 Fix TTML bitmap subtitles
+ Use start for anchoring, instead of center.
+ Add the height to the TTML bitmap cue rendering layout.

Issue:#5633
PiperOrigin-RevId: 250519710
2019-05-30 15:26:32 +01:00
olly
1151848f59 No-op move of span touching into helper method
PiperOrigin-RevId: 250519114
2019-05-30 15:26:32 +01:00
andrewlewis
09b00c7fb0 Allow passthrough of E-AC3-JOC streams
PiperOrigin-RevId: 250517338
2019-05-30 15:26:32 +01:00
olly
94d668567c Migrate org.mockito.Matchers#any* to org.mockito.ArgumentMatchers
The former is deprecated and replaced by the latter in Mockito 2. However, there is a
functional difference: ArgumentMatchers will reject `null` and check the type
if the matcher specified a type (e.g. `any(Class)` or `anyInt()`). `any()` will
remain to accept anything.

PiperOrigin-RevId: 250458607
2019-05-30 15:25:28 +01:00
aquilescanta
8912db5ed9 Remove DecryptionResource
Reference count was built into DrmSession

PiperOrigin-RevId: 250449988
2019-05-30 15:25:28 +01:00
andrewlewis
90325c699e Allow enabling decoder fallback in DefaultRenderersFactory
Also allow enabling decoder fallback with MediaCodecAudioRenderer.

Issue: #5942
PiperOrigin-RevId: 250301422
2019-05-30 15:25:28 +01:00
aquilescanta
04f3888550 Add allowOnlyClearBuffers to SampleQueue#read
Removes the need for duplicate calls to SampleQueue#read when
implementing DecryptionResources acquisition in the MediaSources.

PiperOrigin-RevId: 250298175
2019-05-30 15:25:28 +01:00
aquilescanta
47cc567dca Add reference counting to DrmSession
This CL should not introduce any functional changes.

PiperOrigin-RevId: 250277165
2019-05-30 15:25:28 +01:00
aquilescanta
6b68bc0c9d Fix anchor usage in SubtitlePainter's setupBitmapLayout
According to Cue's constructor (for bitmaps) documentation:
+ cuePositionAnchor does horizontal anchoring.
+ cueLineAnchor does vertical anchoring.

Usage is currently inverted.

Issue:#5633
PiperOrigin-RevId: 250253002
2019-05-30 15:25:28 +01:00
olly
3afdd7ac5a Put @Nullable annotation in the right place
PiperOrigin-RevId: 249828748
2019-05-30 15:10:55 +01:00
olly
11c0c6d266 Reset upstream format when empty track selection happens
PiperOrigin-RevId: 249819080
2019-05-30 15:10:40 +01:00
tonihei
3e990a3d24 Fix nullness warning for MediaSource/MediaPeriod classes.
PiperOrigin-RevId: 249652301
2019-05-30 15:10:24 +01:00
olly
14c46bc406 Remove contentTypePredicate from DataSource constructors
The only known use case for contentTypePredicate is to catch
the case when a paywall web page is returned via a DataSource,
rather than the data that was being requested. These days streaming
providers should be using HTTPS, where this problem does not exist.
Devices have also gotten a lot better at showing their own
notifications when paywalls are detected, which largely mitigates
the need for the app to show a more optimal error message or
redirect the user to a browser.

It therefore makes sense to deprioritize this feature. In
particular by removing the arg from constructors, where nearly
all applications are probably passing null.

PiperOrigin-RevId: 249634594
2019-05-30 15:10:08 +01:00
aquilescanta
8d329fb41f Move DefaultDrmSession resource acquisition to acquire
PiperOrigin-RevId: 249624318
2019-05-23 13:30:38 +01:00
olly
2f12374f1a Fix IndexOutOfBounds when there are no available codecs
PiperOrigin-RevId: 249610014
2019-05-23 13:30:24 +01:00
tonihei
cfefdbc134 Release DownloadHelper automatically if preparation failed.
This prevents further unexpected updates if the MediaSource happens to
finish its preparation at a later point.

Issue:#5915
PiperOrigin-RevId: 249439246
2019-05-23 13:29:49 +01:00
olly
118218cc73 Remove cronet extension nullness blacklist
PiperOrigin-RevId: 249432337
2019-05-23 13:29:35 +01:00
olly
f74d2294be Remove media-session extension nullness blacklist
PiperOrigin-RevId: 249431620
2019-05-23 13:29:19 +01:00
olly
10ee7d8e86 Remove more classes from nullness blacklist
PiperOrigin-RevId: 249431027
2019-05-23 13:29:05 +01:00
olly
d836957138 Remove some DataSource implementations from nullness blacklist
PiperOrigin-RevId: 249419193
2019-05-23 13:28:50 +01:00
olly
21be284318 Replace runtime lookups of string integer codes
Make these values compile-time constants, which can be inlined.

PiperOrigin-RevId: 249327464
2019-05-23 13:28:06 +01:00
olly
3efe320535 Remove deprecated DataSource constructors
PiperOrigin-RevId: 249276112
2019-05-23 13:27:36 +01:00
olly
37fc1d879d Propagate attributes to DefaultTimeBar
Issue: #5765
PiperOrigin-RevId: 249251150
2019-05-23 13:26:50 +01:00
andrewlewis
491edd1edc Update surface directly from SphericalSurfaceView
The SurfaceListener just sets the surface on the VideoComponent, but
SphericalSurfaceView already accesses the VideoComponent directly so it seems
simpler to update the surface directly.

PiperOrigin-RevId: 249242185
2019-05-23 13:26:19 +01:00
tonihei
9aeaf2dbb0 Add ResolvingDataSource for just-in-time resolution of DataSpecs.
Issue:#5779
PiperOrigin-RevId: 249234058
2019-05-21 13:53:14 +01:00
andrewlewis
468296c2bc Suppress remaining ConstantCaseForConstant warnings
PiperOrigin-RevId: 249217126
2019-05-21 13:52:59 +01:00
andrewlewis
f3f885c6aa Update a reference to SimpleExoPlayerView
PiperOrigin-RevId: 249068395
2019-05-21 13:52:30 +01:00
bachinger
a458635540 Add ProgressUpdateListener
Issue: #5834
PiperOrigin-RevId: 249067445
2019-05-21 13:52:14 +01:00
tonihei
07c4569b5f Limit tests with specific SDK level to max=TARGET_SDK.
The unspecified default is the highest available SDK which may be larger
than TARGET_SDK (as specified by the manifest).

PiperOrigin-RevId: 249064173
2019-05-21 13:51:59 +01:00
tonihei
33c677846a Use versioned manifest in all Robolectric tests.
We are currently defaulting to targetSdk=1 as no targetSdk is specified. Only
tests which explicitly ask for another SDK use another test SDK. With the
versioned manifest, all tests run using the targetSDK by default.

PiperOrigin-RevId: 249060796
2019-05-21 13:51:43 +01:00
Oliver Woodman
e39996e95f Merge pull request #5907 from adamjrichter:dev-v2
PiperOrigin-RevId: 249044271
2019-05-20 15:40:01 +01:00
andrewlewis
bfeec25b2a Add SilenceMediaSource
Issue: #5735
PiperOrigin-RevId: 248745617
2019-05-20 15:13:36 +01:00
sr1990
2091aa5cf9 Support signalling of last segment number via supplemental descriptor in mpd 2019-05-18 19:49:14 -07:00
andrewlewis
835d1f3afe Fix platform scheduler javadoc
PiperOrigin-RevId: 248503971
2019-05-16 13:40:42 +01:00
olly
b5a512b673 Bump release to 2.10.1 and update release notes
PiperOrigin-RevId: 248503235
2019-05-16 13:40:23 +01:00
Adam Richter
7f79db0724 Split a few assertThat(a && b).isTrue() calls into separate assertions for more precise diagnostics. 2019-05-15 13:44:26 -07:00
eguven
4ca670bed3 Use MediaSourceFactory interface to simplify DownloadHelper
PiperOrigin-RevId: 248367983
2019-05-15 20:13:59 +01:00
olly
8edce41ff3 Add simpler HttpDataSource constructors
PiperOrigin-RevId: 248350557
2019-05-15 18:14:25 +01:00
aquilescanta
cf389268b0 Add links to the developer guide in some READMEs
PiperOrigin-RevId: 248221982
2019-05-15 18:14:07 +01:00
olly
9d450e52f2 Allow empty values in ICY metadata
Issue: #5876
PiperOrigin-RevId: 248119726
2019-05-15 18:13:49 +01:00
bachinger
14915fd148 Fix rendering DVB subtitle on API 28.
Issue: #5862
PiperOrigin-RevId: 248112524
2019-05-15 18:13:31 +01:00
aquilescanta
50c9ae0efc Assume that encrypted content requires secure decoders in renderer support checks
Issue:#5568
PiperOrigin-RevId: 247973411
2019-05-15 18:13:12 +01:00
olly
0612d9f6d5 Allow line terminators in ICY metadata
Issue: #5876
PiperOrigin-RevId: 247935822
2019-05-15 18:12:35 +01:00
andrewlewis
a849f43e6d Work around broken raw audio decoder on Oppo R9
Issue: #5782
PiperOrigin-RevId: 247934223
2019-05-15 18:12:16 +01:00
tonihei
90fc659b75 Fix Javadoc links.
PiperOrigin-RevId: 247630389
2019-05-15 18:10:44 +01:00
tonihei
23fa53bf0b Add setCodecOperatingRate workaround for 48KHz audio on ZTE Axon7 mini.
Issue:#5821
PiperOrigin-RevId: 247621164
2019-05-15 18:10:26 +01:00
tonihei
34dd4b1441 Fix NPE in HLS deriveAudioFormat.
Issue:#5868
PiperOrigin-RevId: 247613811
2019-05-15 18:10:07 +01:00
aquilescanta
3b60584813 Add a release callback to DefaultDrmSession
In preparation for reference counting in DrmSession

PiperOrigin-RevId: 247428114
2019-05-15 18:09:30 +01:00
andrewlewis
0a6f81a2cc Update player accessed on wrong thread URL
PiperOrigin-RevId: 247418601
2019-05-15 18:09:12 +01:00
tonihei
3a3a941abd Ensure messages get deleted if they throw an exception.
If a PlayerMessage throws an exception, it is currently not deleted from the
list of pending messages. This may be problematic as the list of pending
messages is kept when the player is retried without reset and the message is
sent again in such a case.

PiperOrigin-RevId: 247414494
2019-05-15 18:08:53 +01:00
andrewlewis
887116cd2d Increase gapless trim sample count
PiperOrigin-RevId: 247348352
2019-05-15 18:08:30 +01:00
tonihei
b3ae1d3fed Add option to clear all downloads.
Adding an explicit option to clear all downloads prevents repeated database
access in a loop when trying to delete all downloads.

However, we still create an arbitrary number of parallel Task threads for this
and seperate callbacks for each download.

PiperOrigin-RevId: 247234181
2019-05-15 18:08:08 +01:00
tonihei
7d5558881d Fix two ad insertion related bugs in DefaultPlaybackSessionManager.
1. A content session after an ad has been played was not re-marked as active,
   leading to new ad session being marked as active too early.
2. Switching from content to post-roll ended the content session because
   the return value of getAdGroupTimeUs of C.TIME_END_OF_SOURCE was not
   handled. Using the nextAdGroupIndex instead.

PiperOrigin-RevId: 246977327
2019-05-15 18:07:49 +01:00
Oliver Woodman
2a0ead1b29 Merge pull request #5760 from matamegger:feature/hex_format_tags_in_url_template
PiperOrigin-RevId: 246733842
2019-05-05 19:42:42 +01:00
olly
f4968e1a8e Update translations
PiperOrigin-RevId: 246729123
2019-05-05 18:18:53 +01:00
olly
1ef49ed205 Fix broken Javadoc
PiperOrigin-RevId: 246728418
2019-05-05 18:18:34 +01:00
olly
b53ac32b8c Prevent CachedContentIndex.idToKey from growing without bound
PiperOrigin-RevId: 246727723
2019-05-05 18:18:15 +01:00
olly
1292a35ec6 Add a couple of assertions to DownloadManager set methods
PiperOrigin-RevId: 246491511
2019-05-03 19:35:13 +01:00
olly
76184deb21 Minor download documentation tweaks
PiperOrigin-RevId: 246333281
2019-05-03 19:34:53 +01:00
tonihei
5992699d91 Post-submit fixes for eed5d957d8.
One wrong return value, a useless assignment, unusual visibility of private
class fields and some nullability issues.

PiperOrigin-RevId: 246282995
2019-05-02 13:05:52 +01:00
olly
de7c62a915 Remove unnecessary logging
As justification for why we should not have this type of logging,
it would scale up to about 13K LOC, 1800 Strings, and 36K (after
pro-guarding - in the case of the demo app) if we did it through
the whole code base*. It makes the code messier to read, and in
most cases doesn't add significant value.

Note: I left the Scheduler logging because it logs interactions
with some awkward library components outside of ExoPlayer, so is
perhaps a bit more justified.

* This is a bit unfair since realistically we wouldn't ever add
  lots of logging into trivial classes. But I think it is fair
  to say that the deltas would be non-negligible.

PiperOrigin-RevId: 246181421
2019-05-02 13:05:32 +01:00
olly
ea0efa7464 Periodically persist progress to index whilst downloading
PiperOrigin-RevId: 246173972
2019-05-02 13:05:13 +01:00
olly
eed5d957d8 Rework DownloadManager to fix remaining TODOs
- Removed DownloadInternal and its sometimes-out-of-sync
  duplicate state
- Fixed downloads being in STOPPED rather than QUEUED state
  when the manager is paused
- Fixed setMaxParallelDownloads to start/stop downloads if
  necessary when the value changes
- Fixed isWaitingForRequirements

PiperOrigin-RevId: 246164845
2019-05-02 13:04:54 +01:00
Oliver Woodman
faecef0bef Merge pull request #5807 from zsmatyas:dev-v2
PiperOrigin-RevId: 246132620
2019-05-02 13:04:34 +01:00
olly
f8cd770d84 Migrate from is(Not)SameAs to is(Not)SameInstanceAs.
They behave identically, and the old names are being removed.

Open-source note: The new methods are available in Truth as of version 0.44.

END_PUBLIC

More information:
  go/issameas-lsc

Tested:
    TAP --sample ran all affected tests and none failed
    http://test/OCL:246024032:BASE:246042619:1556672975894:513e7746
PiperOrigin-RevId: 246101315
2019-05-02 13:04:11 +01:00
tonihei
c480818249 Fix some random AndroidStudio warnings.
PiperOrigin-RevId: 245956915
2019-04-30 22:08:07 +01:00
tonihei
0bb32a8f09 Add IntDef for Player states.
PiperOrigin-RevId: 245925254
2019-04-30 22:07:47 +01:00
aquilescanta
f64011ae04 Prevent index out of bounds exceptions in some live HLS scenarios
Can happen if the load position falls behind in every playlist and
when we try to load the next segment, the adaptive selection logic
decides to change variant.

Issue:#5816
PiperOrigin-RevId: 245923006
2019-04-30 22:07:28 +01:00
olly
802ebc8db1 DownloadManager improvements
- Do requirements TODO
- Add useful helper method to retrieve not met requirements
- Fix WritableDownloadIndex Javadoc

PiperOrigin-RevId: 245922903
2019-04-30 22:07:09 +01:00
olly
51914f8f82 Rename DownloadThread to Task
This resolves some naming confusion that previously existed
as a result of DownloadThread also being used for removals.
Some related variables (e.g. activeDownloadCount) would refer
to both download and removal tasks, whilst others
(e.g. maxParallelDownloads) would refer only to downloads.
This change renames those that refer to both to use "task"
terminology.

This change also includes minor test edits.

PiperOrigin-RevId: 245913671
2019-04-30 22:06:49 +01:00
tonihei
1fb128df36 Move playback session manager to core library.
This allows to use the session management capabilities for other analytics
purposes.

PiperOrigin-RevId: 245710588
2019-04-30 22:06:11 +01:00
Zsolt Matyas
3e14ce1094 Code changes suggested by tonihei 2019-04-29 12:56:25 -07:00
Zsolt Matyas
2f356badd2 Handling XDS and TEXT modes
[Problem]
There are 3 services / modes transported on line 21:
- Captioning
- TEXT (generally not program related)
- XDS (eXtended Data Services)

Bytes belonging to the unsupported modes are interleaved with the
bytes of the captioning mode.
See Chapter 7, Chapter 8.5 and Chapter 8.6 of the CEA608 Standard for
more details.

[Solution]
Drop all bytes belonging to unsupported modes.

[Test]
- All streams containing only captioning services should not be influenced
- Test all 4 CEA 608 channels with live over-the-air content and
using all available TEXT and XDS streams.
2019-04-26 14:56:34 -07:00
andrewlewis
1bc279795b Log warnings when extension libraries can't be used
Issue: #5788
PiperOrigin-RevId: 245440858
2019-04-26 18:35:15 +01:00
olly
2b0b6e1b2e Move DownloadManager internal logic into isolated inner class
There are no logic changes here. It's just moving code around and removing
the "internal" part of names where no longer required.

PiperOrigin-RevId: 245407238
2019-04-26 18:34:37 +01:00
olly
f37b28f12e Post maxParallelDownload and minRetryCount changes
PiperOrigin-RevId: 245405316
2019-04-26 18:34:18 +01:00
olly
643e187d99 Add missing getters and clarify STATE_QUEUED documentation
PiperOrigin-RevId: 245401274
2019-04-26 18:33:59 +01:00
eguven
01ad1c1a84 Add simpler DownloadManager constructor
PiperOrigin-RevId: 245397736
2019-04-26 18:33:39 +01:00
eguven
3382c74488 Allow content id to be set in DownloadHelper.getDownloadRequest
PiperOrigin-RevId: 245388082
2019-04-26 18:33:21 +01:00
eguven
708cad6b28 Add DownloadHelper.createMediaSource utility method
PiperOrigin-RevId: 245243488
2019-04-26 18:33:02 +01:00
tonihei
21b2a471bb Toggle playback controls according to standard Android click handling.
We currently toggle the view in onTouchEvent ACTION_DOWN which is non-standard
and causes problems when used in a ViewGroup intercepting touch events.

Switch to standard Android click handling instead which is also what most
other player apps are doing.

Issue:#5784
PiperOrigin-RevId: 245219728
2019-04-26 18:32:42 +01:00
andrewlewis
009d629650 Check codec profiles/levels for VP9
Also add some unit tests for codecs strings parsing.

PiperOrigin-RevId: 245210490
2019-04-26 18:31:45 +01:00
eguven
0ff47a8c0d Add DownloadService SET_REQUIREMENTS action
PiperOrigin-RevId: 245014381
2019-04-26 18:31:26 +01:00
olly
d60b6d64ab Migrate from containsAllOf to containsAtLeast.
The two behave identically, and containsAllOf is being removed.

More information:
  go/containsall-lsc

Tested:
    TAP --sample for global presubmit queue
    http://test/OCL:244737393:BASE:244782138:1555991083653:3080d7c7
PiperOrigin-RevId: 244886736
2019-04-26 18:31:06 +01:00
olly
ba94f9dc01 Migrate from isNotSameAs to isNotSameInstanceAs.
The two behave identically, and isNotSameAs is being removed.

More information:
  go/issameas-lsc

Tested:
    TAP --sample for global presubmit queue
    http://test/OCL:244736857:BASE:244751659:1555988098671:1e0f72c5
PiperOrigin-RevId: 244886651
2019-04-26 18:30:46 +01:00
eguven
03313fb5e2 Add option to add entries in an ActionFile to DownloadIndex as completed
PiperOrigin-RevId: 244864742
2019-04-26 18:30:27 +01:00
tonihei
06586b75b0 Fix bug which logs errors twice if stack traces are disabled.
Disabling stack trackes currently logs messages twice, once with and once
without stack trace.

PiperOrigin-RevId: 244853127
2019-04-26 18:30:08 +01:00
tonihei
4507c6870d Move away from AndroidX bundled Truth to be closer to head revision.
The AndroidX bundled version (0.42) lags behind the most up-to-date public
release (0.44) making it more difficult to stay close to the actual head
revision which is used internally.

PiperOrigin-RevId: 244848568
2019-04-26 18:29:49 +01:00
tonihei
3acd8a6048 Remove unused PlaybackInfo.resetToNewPosition
PiperOrigin-RevId: 244838165
2019-04-26 18:29:30 +01:00
tonihei
9441f72445 Always update loading period in handleSourceInfoRefreshed.
This ensures we keep the loading period in sync with the the playing period in
PlybackInfo, when the latter changes to something new.

PiperOrigin-RevId: 244838123
2019-04-26 18:29:11 +01:00
olly
3e9a45b9d3 Fix DownloadManagerDashTest tests
Also re-enable two of them, although note that the fix here is
not related to the flakiness that caused them to be disabled.
I'm re-enabling them since much has changed in DownloadManager,
and the hope is that these tests are no longer flaky.

PiperOrigin-RevId: 244826225
2019-04-26 18:28:51 +01:00
tonihei
9725132e3c Update default min duration for playbacks with video to match max duration.
Experiments show this is beneficial for rebuffers with only minor impact
on battery usage.

Configurations which explicitly set a minimum buffer duration are unaffected.

Issue:#2083
PiperOrigin-RevId: 244823642
2019-04-26 18:28:32 +01:00
andrewlewis
b01075f325 Play out remaining data on reconfiguration
Before this change we'd release the audio track and create a new one as soon
as audio processors had drained when reconfiguring.

Fix this behavior by stop()ing the AudioTrack to play out all written data.

Issue: #2446
PiperOrigin-RevId: 244812402
2019-04-26 18:27:53 +01:00
olly
748a29e8f5 Further improve DownloadService action names & methods
- We had buildAddRequest and sendNewDownload. Converged to
  buildAddDownload and sendAddDownload.
- Also fixed a few more inconsistencies, and brought the
  action constants into line as well.

PiperOrigin-RevId: 244274041
2019-04-18 23:45:49 +01:00
olly
bab7b9e9a1 Fix lint warnings for 2.10
PiperOrigin-RevId: 244268855
2019-04-18 23:24:49 +01:00
olly
864b59080a Clean up database tables for launch
PiperOrigin-RevId: 244267255
2019-04-18 23:24:30 +01:00
olly
82061e9afb Improve progress reporting logic
- Listener based reporting of progress allows the content length
  to be persisted into the download index (and notified via a
  download state change) as soon as it's available.
- Moved contentLength back into Download proper. It should only
  ever change once, so I'm not sure it belongs in the mutable part
  of Download.
- Made a DownloadProgress class, for naming sanity.

PiperOrigin-RevId: 244242487
2019-04-18 23:24:11 +01:00
olly
0ccda60ab4 Support multiple DefaultDownloadIndex instances
PiperOrigin-RevId: 244226680
2019-04-18 23:23:52 +01:00
olly
e9413b0d41 Simplify DownloadManager constructors
PiperOrigin-RevId: 244223870
2019-04-18 23:23:33 +01:00
olly
62964026b9 Rename start/stopDownloads to resume/pauseDownloads
PiperOrigin-RevId: 244216620
2019-04-18 23:23:14 +01:00
olly
82af6899a0 Rename manualStopReason to stopReason
PiperOrigin-RevId: 244210737
2019-04-18 23:22:55 +01:00
eguven
f9f009645d Add missing DownloadService build*Intent and startWith* methods
PiperOrigin-RevId: 244196081
2019-04-18 23:22:35 +01:00
aquilescanta
4ea2463856 Avoid selecting a forced text track that doesn't match the audio selection
Assuming there is no text language preference.

PiperOrigin-RevId: 244176667
2019-04-18 15:18:48 +01:00
andrewlewis
fe65f002a5 Move E-AC3 workaround out of MediaCodecUtil
PiperOrigin-RevId: 244173887
2019-04-18 15:18:29 +01:00
andrewlewis
6665af5b7b Support additional DV profiles that require fallback
PiperOrigin-RevId: 244170391
2019-04-18 15:18:10 +01:00
eguven
50c9fe6294 Fix flaky DownloadManagerDashTest
PiperOrigin-RevId: 244170179
2019-04-18 15:17:52 +01:00
aquilescanta
f6de1aa242 Add test for HlsTrackMetadataEntry population in the HlsPlaylistParser
PiperOrigin-RevId: 244168713
2019-04-18 15:17:33 +01:00
andrewlewis
2347bd2c99 Prioritize decoders with format support
PiperOrigin-RevId: 244167456
2019-04-18 15:17:14 +01:00
andrewlewis
a985ca93c5 Extend Bluetooth dead audio track workaround to Q
PiperOrigin-RevId: 244139959
2019-04-18 15:16:55 +01:00
aquilescanta
92269ff774 Make MediaCodecRenderer#onInputFormatChanged take a FormatHolder
PiperOrigin-RevId: 244056421
2019-04-18 15:16:17 +01:00
olly
4d6aca7629 Remove TODOs we're not going to do
1. customCacheKey for DASH/HLS/SS is now asserted against
   in DownloadRequest
2. Merging of event delivery in DownloadManager is very
   tricky to get right and probably not a good idea

PiperOrigin-RevId: 244048392
2019-04-18 15:15:58 +01:00
eguven
f001e49295 Small javadoc fix for DownloadManager constructors
PiperOrigin-RevId: 244009343
2019-04-18 15:15:39 +01:00
olly
e290f883d1 Disable cache span touching for offline
Currently SimpleCache will touch cache spans whenever it reads
from them. With legacy SimpleCache setups this involves a potentially
expensive file rename. With new SimpleCache setups it involves
a more efficient but still non-free database write.

For offline use cases, and more generally any use case where the
eviction policy doesn't use last access timestamps, touching is
not useful. This change allows the evictor to specify whether it
needs cache spans to be touched or not. SimpleCache will only touch
spans if the evictor requires it.

Note: There is a potential change in behavior in cases where a
cache uses an evictor that doesn't need cache spans to be touched,
but then later switches to an evictor that does. The new evictor
may temporarily make sub-optimal eviction decisions as a result.
I think this is a very fair trade-off, since this scenario is
unlikely to occur much, if at all, in practice, and even if it
does occur the result isn't that bad.
PiperOrigin-RevId: 244005682
2019-04-18 15:15:20 +01:00
olly
c9470296ab Fix playback of badly clipped MP3 streams
Issue: #5772
PiperOrigin-RevId: 243987497
2019-04-18 15:14:23 +01:00
olly
2feadc9762 Add WritableDownloadIndex interface
One goal we forgot about a little bit was to allow applications
to provide their own index implementation. This requires the
writable side to also be defined by an interface.

PiperOrigin-RevId: 243979660
2019-04-18 15:14:04 +01:00
andrewlewis
e0c8af5190 Reset playback info but not position/state in release
ImaAdsLoader gets the player position after the app releases
the player to support resuming ads at their current position
if the same ads loader is reused.

PiperOrigin-RevId: 243969916
2019-04-18 15:13:45 +01:00
eguven
d92e6bfaf8 Assert customCacheKey is null for DASH, HLS and SmoothStreaming downloads
PiperOrigin-RevId: 243954989
2019-04-18 15:13:26 +01:00
olly
af5131e393 Rename Shadow*Looper classes (PR#4868)
ShadowLooper -> ShadowLegacyLooper
ShadowRealisticLooper -> ShadowPausedLooper
ShadowBaseLooper -> ShadowLooper

And all public methods from ShadowLegacyLooper get pushed up to ShadowLooper

Pull Request: https://github.com/robolectric/robolectric/pull/4868

Copybara: OK

Also adjust Google3 tests  using custom looper shadows where necessary.
Convert exoplayer to paused looper to eliminate reliance on custom shadows

PiperOrigin-RevId: 243839311
2019-04-18 15:13:07 +01:00
tonihei
8e7a2ba958 Don't reset masking position when prepare fails.
The removed condition only applies when prepare fails and no timeline was or
is known. We should keep a pending seek position in such a case. The internal
player does the same thing already.

PiperOrigin-RevId: 243819466
2019-04-18 15:12:07 +01:00
olly
ee08e7dcac Fix key and accessibility scrubbing
Issue: #5767
PiperOrigin-RevId: 243811443
2019-04-16 16:42:08 +01:00
eguven
5856e75781 Rename DownloadAction to DownloadRequest
PiperOrigin-RevId: 243806888
2019-04-16 16:41:29 +01:00
eguven
c2c7c43a36 Remove redundant proguard files
PiperOrigin-RevId: 243781000
2019-04-16 15:28:39 +01:00
olly
9c759a867b Prepare SimpleCache for 2.10.0 release
- Expose constructors that take DatabaseProvider. Deprecate those
  that do not.
- Expose Cache.getUid. This will likely be used for naming of the
  tables accessed by DefaultDownloadIndex .

PiperOrigin-RevId: 243637786
2019-04-16 15:28:01 +01:00
andrewlewis
45348a97a9 Fix Atom ConstantCaseForConstant suppression
PiperOrigin-RevId: 243636923
2019-04-16 15:27:41 +01:00
aquilescanta
68bd5da3cb Fix DecryptionResource.Owner#onLastReferenceReleased type
PiperOrigin-RevId: 243632134
2019-04-16 15:27:22 +01:00
olly
7b84a1ead7 DownloadManager.getCurrentDownloads: Return list instead of array
- Allows enforcing immutability, which in a future CL will allow
  avoiding allocating a new array/list on every call.
- Also some left over doc cleanup from the DownloadState rename.

PiperOrigin-RevId: 243627352
2019-04-16 15:27:03 +01:00
aquilescanta
9ddd39c1c0 Add the HlsMetadataEntry from the Master playlist to the Hls tracks
PiperOrigin-RevId: 243624081
2019-04-16 15:26:44 +01:00
eguven
ba91501751 Add DownloadService.invalidateForegroundNotification
ISSUE: #4563
PiperOrigin-RevId: 243616444
2019-04-16 15:26:05 +01:00
olly
18dd3fdb46 Bump release to 2.10.0 and update release notes
PiperOrigin-RevId: 243592790
2019-04-16 15:25:47 +01:00
tonihei
1ee51518ae Use new exoplayer.dev domain everywhere.
The old domain automatically forwards to the new one. For consistency, change
all doc and code references regardless.

Also adds GitHub CNAME config file which configures our page for the custom
domain.

PiperOrigin-RevId: 243592110
2019-04-16 15:25:27 +01:00
tonihei
75238e5e4f Remove duplications from handleSourceInfoRefreshed.
handleSourceInfoRefreshed checks for various conditions which may trigger a
change in position. In all cases, we need to resolve the new position for ads,
and if the corresponding MediaPeriods already exist, perform the seek to the new
position.

This change simplified the code by
 1. Moving all conditions in a single if-else structure which just determines
    the new playback position. This makes it easier to read and to follow.
 2. Doing the subsequent seek and position update in one final step to remove
    duplicated code.

As a side effect, it also improves some edge cases. For example when skipping
an ad to an already prebuffered period, we now properly update the existing
prebuffered period.

PiperOrigin-RevId: 243588014
2019-04-16 15:25:08 +01:00
aquilescanta
1bf1790edc Extract factory method for FragmentedMp4Extractor in DefaultHlsExtractorFactory
PiperOrigin-RevId: 243582468
2019-04-16 15:24:48 +01:00
olly
2e3eac25b7 Cleanly detach DownloadThreads on release
- Make a best effort to avoid posting MSG_DOWNLOAD_THREAD_STOPPED
  if the internal thread has already quit. Doing so is harmless,
  but causes an error in Logcat. We used to generate this warning
  quite a bit in ExoPlayerImplInternal as well, and we got quite
  a few issues filed about it, so best to avoid it if possible.
- Null out the back reference DownloadThread holds to its manager
  on release. This avoids a potential issue where a download thread
  can prevent GC of its manager if it doesn't cancel quickly.
  There's similar logic (with a similar comment) in Loader.LoadTask.

PiperOrigin-RevId: 243365143
2019-04-13 01:45:59 +01:00
aquilescanta
97acc681d1 Add HlsMetadataEntries to HlsMasterPlaylist's variants and renditions
PiperOrigin-RevId: 243304549
2019-04-13 01:43:21 +01:00
olly
b2c29da6b3 Finalize DownloadManager interface
- Rename getAllDownloads to getCurrentDownloads to make it clear
  that it doesn't include completed and failed downloads
- Change getDownloadCount to isWaitingForRequirements, which is
  what it's used for. Added TODO to make it returns the right thing

PiperOrigin-RevId: 243257856
2019-04-13 01:43:02 +01:00
tonihei
c1e25f7768 Add check for retryDelayMs==C.TIME_UNSET in DASH and SS manifest onLoadError.
If the returned retry delay is unset, we should use a DONT_RETRY_FATAL action
instead and dispatch the event with the "canceled" flag.

PiperOrigin-RevId: 243251554
2019-04-13 01:42:42 +01:00
olly
a588717b46 Move download state transitions into DownloadManager
Non-trivial download state transitions are currently split across
DownloadManager and Download. These transitions are part of the
same state machine, so it's clearer if they're all in the same place
(i.e. DownloadManager, since this is the component that transitions
downloads between states).

PiperOrigin-RevId: 243249915
2019-04-13 01:42:22 +01:00
olly
f623a9dea0 Reduce use of DownloadInternal in DownloadManager
The only state DownloadInternal holds is duplicate of state contained
in Download, but can confusingly be temporarily out of sync. This is
error prone because it's easy to use the wrong variable (e.g.
download.state vs state). DownloadInternals methods are called into
and call out into DownloadManager, which makes some code paths that
are quite hard to follow.

It's possible to simplify DownloadManager quite a lot by removing the
duplicated state in DownloadInternal, at which point DownloadInternal's
methods flatten into DownloadManager, which can just hold an internal
list of Downloads directly.

This is a first step, which makes it clear that DownloadThready only
needs its immutable DownloadAction + an isRemove flag.

PiperOrigin-RevId: 243245288
2019-04-13 01:42:02 +01:00
aquilescanta
bd841b18f2 Add DecryptionResource to FormatHolder
PiperOrigin-RevId: 243243975
2019-04-13 01:41:42 +01:00
aquilescanta
936bc244b6 Add an HLS metadata entry sublcass to populate HLS track formats
Include information to facilitate adaptive track selection in HLS.

PiperOrigin-RevId: 243238232
2019-04-13 01:41:23 +01:00
aquilescanta
9cfac7ea07 Rename CryptoResource to DecryptionResource
PiperOrigin-RevId: 243237265
2019-04-13 01:41:03 +01:00
andrewlewis
53934c13b2 Select non-primary tunneling decoder
Issue: #3100
Issue: #5547
PiperOrigin-RevId: 243181217
2019-04-13 01:40:43 +01:00
olly
b84c51434f Deprecate ActionFile and simplify upgrading
PiperOrigin-RevId: 243085292
2019-04-13 01:40:24 +01:00
olly
112117a1ac Reorder DownloadManager methods
Put methods into a more sensible order (the same order as
in the switch statement, which is a more natural order with
e.g. initialize coming first and release coming last).

PiperOrigin-RevId: 242891742
2019-04-13 01:40:04 +01:00
olly
9779d71a1d Fix stopping downloads
- Changed startDownloads/stopDownloads back to their previous behavior
  of starting and stopping all downloads at the manager level.
- Made setManualStopReason methods for the new case of setting a manual
  stop reason or some or all downloads.
- Added plumbing to specify an initial manual stop reason when adding a
  new download, without also overwriting the manual stop reasons of all
  other preexisting downloads. Using the value is left as a TODO pending
  a bit of further cleanup that'll make it easier.

PiperOrigin-RevId: 242891688
2019-04-13 01:39:44 +01:00
olly
68993f233d Improve DownloadNotificationHelper
- Remove completed downloads from progress notification.
- Treat restarting as a downloading, When there are both
remove and download tasks ongoing, we prefer to show a
download notification to a remove one. A restarting task
encapsulates is basically a (remove+download) task. Given
our preference, we should treat it as a download rather
than as a removal.

PiperOrigin-RevId: 242867228
2019-04-13 01:39:24 +01:00
tonihei
c830c8dc63 Use LoadErrorHandlingPolicy.getRetryDelayMsFor for DASH/SS manifest loads.
Both manifest loads currently use the default retry delay although a
LoadErrorHandlingPolicy is provided to the MediaSource.

PiperOrigin-RevId: 242852672
2019-04-13 01:39:05 +01:00
olly
30beb9b300 Add DownloadAction merge tests
PiperOrigin-RevId: 242851294
2019-04-13 01:38:45 +01:00
eguven
8688bd2d88 Rename DownloadState to Download
PiperOrigin-RevId: 242839480
2019-04-13 01:38:25 +01:00
tonihei
f0cd144baf Update UI translations.
We have new strings for track role types.

PiperOrigin-RevId: 242829944
2019-04-13 01:38:05 +01:00
olly
3f565c33be Simplify offline Requirements
- Remove NETWORK_TYPE_NOT_ROAMING and NETWORK_TYPE_METERED
  because JobScheduler doesn't support them, and they're
  probably not useful to many people (data when roaming is
  normally enabled/disabled at the OS level, and restricting
  to *only* metered networks seems niche)
- Convert network requirements proper flags
- Stop persisting requirements in DownloadIndex. The direction
  we're headed to solve the manager start/stop problem is
  going to involve state in DownloadManager determining whether
  downloads actually start, and if we're doing that then it's
  no worse to do it for this as well

PiperOrigin-RevId: 242713196
2019-04-13 01:37:44 +01:00
tonihei
9e6f9ee9dd Remove DataSpec self-links.
We usually avoid linking to the same page. Replacing all {@link DataSpec}
with just "data spec" accordingly.

PiperOrigin-RevId: 242689537
2019-04-13 01:37:24 +01:00
aquilescanta
9779b34885 Fix Parcelable.Creator#newArray implementations
PiperOrigin-RevId: 242686312
2019-04-13 01:37:05 +01:00
olly
d3b63a97ad Remove DownloadAction serialization
Implement Parcelable instead, which is a more intented way of
passing structured data via Intents.

PiperOrigin-RevId: 242646441
2019-04-13 01:36:46 +01:00
tonihei
14d40b0faf Fix test which is relying on wrong Robolectric behavior.
Robolectric calls messages posted to the main thread immediately inline. This
will change in the upcoming release and will break tests implicitly relying
on that behavior.

Update ConcatenatingMediaSourceTest to actually wait for the posted message.

PiperOrigin-RevId: 242631531
2019-04-13 01:36:27 +01:00
olly
18dcad9b8d Simplify DownloadState to contain its DownloadAction
This makes sense now that DownloadAction is only for downloading,
and not also for removal.

PiperOrigin-RevId: 242561575
2019-04-13 01:36:07 +01:00
aquilescanta
73acdcf1e2 Add a flag to enable the preemptive 608 track in HLS
By passing false, users can disable the preemptive 608 track.

Issue:#5736
PiperOrigin-RevId: 242476274
2019-04-13 01:35:47 +01:00
olly
9a03e73b7a Remove ActionFile serialization, which is no longer used
PiperOrigin-RevId: 242465135
2019-04-13 01:35:28 +01:00
olly
e7d717b96c Sanitize naming of keys variable.
PiperOrigin-RevId: 242460786
2019-04-13 01:35:07 +01:00
olly
a0c21461aa Ensure getAllDownloadStates order is stable
HashMap.values does not guarantee a stable order, but our tests
assert that the order is stable. It's probably a nice property
that the order is the same as that in which downloads are added,
so this change makes the order stable, with that order.

A future change will likely improve the way this works, by
changing the internal thread "downloads" variable to have type
ArrayList<Download>, at which point the internal thread can just
pass a read-only copy of its list to the main thread whenever a
state changes.

PiperOrigin-RevId: 242460725
2019-04-13 01:34:47 +01:00
bachinger
8b766ba4b8 Use FLAG_UPDATE_CURRENT for PendingIntents of playback commands.
ISSUE: #5734
PiperOrigin-RevId: 242459668
2019-04-13 01:34:27 +01:00
olly
47601980d9 Use DownloadAction.id properly
- Fix ID being dropped when DownloadAction is serialized and
  de-serialized as it's passed to DownloadService
- Properly set DownloadAction.id when building an action from
  a DownloadState
- Make ID a required constructor argument. Else it's too easy
  to not propagate it by accident.

PiperOrigin-RevId: 242457831
2019-04-13 01:34:07 +01:00
andrewlewis
401e20d9c8 Signal fallback via renderer constructor
Remove MediaCodecSelector.DEFAULT_WITH_FALLBACK, as codec selectors
will need to be able to return a list of decoder infos even when not
using fallback in a later change. Instead signal that fallback should
be used via a renderer constructor.

Fallback is always disabled for audio.

PiperOrigin-RevId: 242454172
2019-04-13 01:33:47 +01:00
bachinger
baf00406c0 Provide option to include next/prev button in lock screen/compact mode.
Issue: #5616
PiperOrigin-RevId: 242452686
2019-04-13 01:33:28 +01:00
tonihei
a6d52d4ae7 Update initial bitrate estimates.
PiperOrigin-RevId: 242449883
2019-04-13 01:33:08 +01:00
tonihei
2d7b9d876f Allow ContainerMediaChunks to provide their own TrackOutputProvider.
Adding a protected method for that allows to supply a customized
TrackOutputProvider to the ExtractorWrapper used by the ContainerMediaChunk
(e.g. for logging purposes).

The alternative would be to provide a  TrackOutputProvider through the
ChunkSampleStream constructor, but the extra initialization taking place
in the ChunkSampleStream constructor would need to move somewhere else and
some methods of BaseMediaChunkOutput would need to move to the
TrackOutputProvider interface. This seems too much effort for niche
customization case.

PiperOrigin-RevId: 242448776
2019-04-13 01:32:48 +01:00
olly
66e416b615 Fix bug when caching from non-zero position
The position should be subtracted from the total content length
retrieved from the cache in this case, both for iteration and for
filling out counters.contentLength (for the latter, note not
doing it this way is inconsistent with what happens when dataSpec
length is set to a known value).

PiperOrigin-RevId: 242445034
2019-04-13 01:32:28 +01:00
olly
0daaba443c Get rid of DownloadState.STATE_REMOVED
It's a transient state whose only use is when passing a removed
download to onDownloadStateChanged. It's a bit strange to have it
as a proper state, since we end up asserting that it's an invalid
value in other places.

This change adds an explicit onDownloadRemoved, which allows
removal of the transient STATE_REMOVED, related assertions, and
uncertainty when dealing with an @State variable whether it's
necessary to handle it being STATE_REMOVED.

PiperOrigin-RevId: 242444128
2019-04-13 01:32:08 +01:00
olly
925dd5aa12 Fix most remaining issues with DownloadManager threading
PiperOrigin-RevId: 242439330
2019-04-13 01:31:48 +01:00
eguven
c17c722158 Make DataIndex accessing code run on internal thread
This is the last cl of a series of cls that will convert DownloadManager
threading model as public methods post actions on an internal thread
which then do the work.

PiperOrigin-RevId: 242437229
2019-04-13 01:31:28 +01:00
Matthias Tamegger
55154ad475 Allow hex format tags when parsing url templates 2019-04-12 10:49:48 +02:00
tonihei
346c72c00e Move PriorityTaskManager from DefaultLoadControl to SimpleExoPlayer.
The priority task manager only needs to listen to loading state changes and
is independent of the rest of DefaultLoadControl. This also fixes problems
where the player stops loading without consultin the LoadControl.

PiperOrigin-RevId: 242098374
2019-04-05 21:14:09 +01:00
eguven
37bab0a98d Temporally make DataIndex accessing code run on main thread
This is the second cl of a series of cls that will convert DownloadManager
threading model as public methods post actions on an internal thread
which then do the work.

PiperOrigin-RevId: 241773765
2019-04-05 21:13:12 +01:00
eguven
27884c70f8 Make DownloadState counters mutable
PiperOrigin-RevId: 241763220
2019-04-05 21:12:35 +01:00
bachinger
b10f4023f0 handle meta atom as a full box when parsing mp4
Issues: #5698, #5694
PiperOrigin-RevId: 241762106
2019-04-05 21:12:16 +01:00
aquilescanta
95f65e5258 Add abstract superclass for Crypto resources
Necessary for implementing scheme-independant resource management.

Example: A media source needs to have ownership of a crypto resource
while samples are in buffer (but not yet in the renderer).
PiperOrigin-RevId: 241698575
2019-04-05 20:54:35 +01:00
eguven
8480a4b44d Add Downloader.getCounters method
PiperOrigin-RevId: 241636860
2019-04-05 20:50:59 +01:00
olly
ee7bf4b0ee Make callback Handler instantiation consistent
Most of our components that have Handler instances for calling
back to application code instantiate the Handler using Util.getLooper
in the constructor. This makes the two components that do
something else consistent with that model.

PiperOrigin-RevId: 241545575
2019-04-05 20:50:40 +01:00
olly
7c265dfb3a Detect external surround sound on Amazon devices
PiperOrigin-RevId: 241544595
2019-04-05 20:50:22 +01:00
eguven
9b064fb9d5 Use CachingCounters in SegmentDownloader
PiperOrigin-RevId: 241543543
2019-04-05 20:50:03 +01:00
eguven
d5b19694fa Add percentage field to CacheUtil.CachingCounters
PiperOrigin-RevId: 241524766
2019-04-05 20:49:44 +01:00
olly
42b641221c Provide flag to disable throwing of cache initialization exceptions
PiperOrigin-RevId: 241497141
2019-04-05 20:49:06 +01:00
andrewlewis
9dc22c3086 Enable HDMV DTS stream detection if a flag is set
Issue: #5330
PiperOrigin-RevId: 241381723
2019-04-01 21:06:59 +01:00
bachinger
2dc07fc461 assert userAgent is not empty when constructing a DefaultHttpDataSourceFactory
Issue: #5706
PiperOrigin-RevId: 241360166
2019-04-01 20:33:19 +01:00
bachinger
e612511afc take byte offset into account when unsynchronizing an id3 frame
Issue #5673

PiperOrigin-RevId: 241328598
2019-04-01 20:32:40 +01:00
tonihei
5fd4fddfac Use system Locale language to select audio track.
If no track matches the preferred language or no preferred language is provided,
use the system Locale language as the next decision criterion.

PiperOrigin-RevId: 241322703
2019-04-01 20:32:21 +01:00
Oliver Woodman
334da7deb9 Merge pull request #5390 from zsmatyas:dev-v2
PiperOrigin-RevId: 241308265
2019-04-01 20:31:39 +01:00
olly
592b5eafee Support multiple CC channels in DASH
Issue: #5656
PiperOrigin-RevId: 241235377
2019-04-01 20:31:18 +01:00
olly
5db33deef4 HLS: Fix playlist tracker bundle lookup
As of 99f89132c2 an identity check isn't sufficient for the lookup.

PiperOrigin-RevId: 240989848
2019-03-29 16:51:57 +00:00
olly
99f89132c2 Remove HlsUrl and introduce HlsMasterPlaylist.mediaPlaylistUrls
- This removes the need for Variant and Rendition to have a common
  base class, allowing the url field to be marked as @Nullable in
  Rendition but not in Variant.
- The addition of mediaPlaylistUrls is needed for the new StreamKey
  indexing for HLS. It's also convenient in a couple of places (e.g.
  HlsDownloader), where a list of all media playlist URLs is needed.
- Lots of places where HlsUrl was passed only needed the actual
  URL (not the Format, which is the other piece of HlsUrl). Passing
  just the URL is a little simpler, and resolves some of the naming
  confusion.

Issue: #5596
Issue: #2600
PiperOrigin-RevId: 240970466
2019-03-29 16:51:42 +00:00
olly
2623b4b382 Pre-resolve HlsUrl urls
This is to make it possible to use equality of HlsUrl.url fields
to determine whether two HlsUrls point at the same media playlist.
This doesn't work currently because it's possible to mix absolute
and relative urls, which will not be equal until after the relative
url is resolved against the playlist baseUrl.

Issue: #5596
Issue: #2600
PiperOrigin-RevId: 240966503
2019-03-29 16:51:27 +00:00
tonihei
32924e3f17 Use role flags in DefaultTrackNameProvider.
Also make combination of language and role flags the default over the label,
as it's more readable and auto-translated into other languages.

PiperOrigin-RevId: 240801070
2019-03-29 16:51:12 +00:00
tonihei
28ea31cd4c Use Closeable interface for DownloadStateCursor to simplify closing.
PiperOrigin-RevId: 240775823
2019-03-29 16:50:57 +00:00
tonihei
e8cf67c0cd Allow simplified custom adaptive track selection factories.
Custom factories currently need to copy most of the code in the
AdaptiveTrackSelection.Factory to make use of the same functionality.
Simplify this by allowing to overwrite the factory.

PiperOrigin-RevId: 240773271
2019-03-29 16:50:42 +00:00
tonihei
bb48dc9916 Close cursor in DownloadManager.
Not closing the cursor crashes the demo app when in run in StrictMode.

PiperOrigin-RevId: 240768493
2019-03-29 16:50:27 +00:00
eguven
b1a13f9651 Create internal methods that will run on internal thread
This is the first of a series of cls that will convert DownloadManager
threading model as public methods post actions on an internal thread
which then do the work.

PiperOrigin-RevId: 240743400
2019-03-29 16:50:11 +00:00
aquilescanta
62f719f3ee Remove some long-deprecated DefaultDrmSessionManager constructors
PiperOrigin-RevId: 240742207
2019-03-29 16:49:56 +00:00
olly
0810fe9159 Remove "variant" terminology from HlsChunkSource
HlsChunkSource may also be downloading segments from demuxed
renditions, which are not variants.

PiperOrigin-RevId: 240625139
2019-03-29 16:49:41 +00:00
olly
65bab95f72 Add video and closed caption renditions to HlsMasterPlaylist
Still skipping any renditions that have a null URL, which means that
closedCaptions in particular is always empty. This restriction will
be removed in a subsequent change, which will also remove muxedAudioFormat
and muxedAudioCaptions from HlsMasterPlaylist and instead derive them
from the Variant and Rendition information in HlsMediaPeriod.

Issue: #5596
Issue: #2600
PiperOrigin-RevId: 240623500
2019-03-29 16:49:26 +00:00
olly
6e6df6a2f0 Improve DownloadService notification documentation
The one functional change here is to require subclasses to implement getForegroundNotification. It seems easier and less error prone to
force developers to implement it than it does to document the cases
in which they need to override it (which is most cases).

PiperOrigin-RevId: 240566737
2019-03-29 16:49:11 +00:00
eguven
facd32e65e Remove DownloadAction.createRemoveAction
PiperOrigin-RevId: 240557315
2019-03-29 16:48:55 +00:00
eguven
d4f5c9c721 Remove DownloadHelper.getRemoveAction
PiperOrigin-RevId: 240444051
2019-03-29 16:48:40 +00:00
olly
9d99f92146 Improve DownloadService action documentation
PiperOrigin-RevId: 240440477
2019-03-29 16:48:24 +00:00
olly
e3a8429ee2 More faithfully parse content of HLS master playlists
- Split HlsUrl into Rendition and Variant
- Add Rendition/Variant specific information to the new types

Issue: #5596
PiperOrigin-RevId: 240419763
2019-03-29 16:48:09 +00:00
eguven
ae5e5f7efc Stop using remove DownloadActions in DownloadManager
PiperOrigin-RevId: 240376409
2019-03-29 16:47:53 +00:00
eguven
709a712a5f DownloadAction custom id
PiperOrigin-RevId: 240363716
2019-03-29 16:47:38 +00:00
olly
30d66f5031 Rollback of be69d5b747
Issue: #5596

This arguably made a worse problem than it solved, and also I think subtly broken HLS
downloads by changing which renditions HlsMasterPlaylist.copy would retain in some
cases. Reverting as a mini step toward removing smart logic from the HLS playlist parser.

*** Original commit ***

Expand check for muxed audio media tags to include uris that match variants

Issue:#5313

***

PiperOrigin-RevId: 240348969
2019-03-26 15:37:24 +00:00
olly
07e3509dd9 Support providing all keys via EXT-X-SESSION-KEY tags
PiperOrigin-RevId: 240333415
2019-03-26 13:18:48 +00:00
eguven
c04f5b9c5d Add DownloadManager.removeDownload method
PiperOrigin-RevId: 240330799
2019-03-26 13:18:30 +00:00
eguven
3919f3843d Make DownloadManager use DownloadIndex
PiperOrigin-RevId: 240320220
2019-03-26 13:18:11 +00:00
olly
e4b49477ec Some nullability cleanup for HLS playlists
PiperOrigin-RevId: 240318686
2019-03-26 13:17:52 +00:00
tonihei
679b628326 Add experimental option for multiple parallel adaptive track selections.
If enabled, DefaultTrackSelector returns multiple groups with more than one
track. AdaptiveTrackSelection then decides on the order in which the tracks
are changed such that the BandwidthProvider for each selection can figure out
the allocated bandwidth.

PiperOrigin-RevId: 240150206
2019-03-26 10:41:41 +00:00
aquilescanta
32347362f4 Select text track matching selected audio language when selecting forced text tracks
PiperOrigin-RevId: 240133676
2019-03-26 10:41:28 +00:00
olly
e91eec7cf8 Make DownloadThread extend Thread
PiperOrigin-RevId: 240120782
2019-03-26 10:41:14 +00:00
tonihei
b0bb6ec8a5 Allow to set selection reason and data when specifying an override.
It's currently very difficult to actually set a reason for track selection
triggered by a SelectionOverride. It would require creating a new custom
TrackSelection.Factory where the reason gets injected somehow before the
override is specified on the player.

Simplify this whole procedure by allowing to set the reason directly and
forward this reason to all fixed selections created based on this override.

PiperOrigin-RevId: 240114942
2019-03-26 10:41:00 +00:00
eguven
6f9d33dbd3 Add DefaultDownloadIndex setManualStopReason variant for single download
PiperOrigin-RevId: 240108843
2019-03-26 10:40:46 +00:00
tonihei
afd9014b82 Ignore AC-3 tracks with fscod=3.
3 ("11") is the reserved code for fscod in AC3. The spec says that "If the
reserved code is indicated, the decoder should not attempt to decode audio and
should mute."

We currently throw an exception as we try to access an array with an invalid
index. Now ignoring the track instead by invalidating the format.

Issue:#5638
PiperOrigin-RevId: 240106255
2019-03-26 10:40:32 +00:00
Toni
5da4c67c8a Merge pull request #5303 from DolbyLaboratories:dev-v2-ac4
PiperOrigin-RevId: 239957730
2019-03-26 10:40:18 +00:00
olly
77d597de5f Parse CHARACTERISTICS attribute for EXT-X-MEDIA tags
PiperOrigin-RevId: 239844963
2019-03-22 19:57:01 +00:00
aquilescanta
cdd433acda Disambiguate comment in Ac3Reader
PiperOrigin-RevId: 239810798
2019-03-22 19:56:43 +00:00
tonihei
e5aed73fba Switch format language tag to use full BCP 47 codes.
This allows to distinguish between regional variants and scripts.

We still need to normalize the language code itself to make track selection
independent of the whether 2 or 3 letter codes are used.

PiperOrigin-RevId: 239783115
2019-03-22 19:56:25 +00:00
tonihei
3543116da4 Prevent seeking when ICY metadata is present.
Any seek map with non-zero offsets breaks playback with ICY metadata as
the metadata is no longer read from the correct position.

Issue:#5658
PiperOrigin-RevId: 239605839
2019-03-22 19:56:06 +00:00
aquilescanta
b7299a1164 DefaultTrackSelector: make audio track selections before text
PiperOrigin-RevId: 239594105
2019-03-22 19:55:48 +00:00
tonihei
a989304a4d Add missing thread verification to SimpleExoPlayer.release().
This call also needs to be made from the right thread to prevent messages
from getting lost and causing ANRs.

PiperOrigin-RevId: 239564573
2019-03-22 19:55:30 +00:00
olly
68ef1d3e97 Temporarily disable cache UID creation.
PiperOrigin-RevId: 239476751
2019-03-20 23:35:31 +00:00
olly
3abf5ed143 Automated g4 rollback of changelist 239294713.
*** Reason for rollback ***

Trying to forward fix instead.

*** Original change description ***

Automated g4 rollback of changelist 237051112.

*** Original change description ***

Add SimpleCache deletion functionality

This is needed now that index data may be stored outside
of the cache directory.

***

***

PiperOrigin-RevId: 239429430
2019-03-20 23:35:18 +00:00
aquilescanta
f7f5009883 Add workaround for PlayReady issue with setMediaDrmSession
PiperOrigin-RevId: 239403506
2019-03-20 23:28:47 +00:00
Oliver Woodman
a86a9137be Merge pull request #5578 from szaboa:dev-v2-5529
PiperOrigin-RevId: 239398940
2019-03-20 23:28:28 +00:00
olly
448ca0cf7f Sanitize internal parameter ordering in Format
This is a precursor to merging https://github.com/google/ExoPlayer/pull/5578

PiperOrigin-RevId: 239371046
2019-03-20 23:28:05 +00:00
olly
d775b9b412 Automated g4 rollback of changelist 237051112.
*** Original change description ***

Add SimpleCache deletion functionality

This is needed now that index data may be stored outside
of the cache directory.

***

PiperOrigin-RevId: 239294713
2019-03-20 23:26:49 +00:00
andrewlewis
2b42f0d35a Remove unnecessary check
PiperOrigin-RevId: 239149688
2019-03-20 23:26:49 +00:00
aquilescanta
c81c14ae86 Work around lack of LA_URL attributes in PlayReady key requests init data
PiperOrigin-RevId: 239066912
2019-03-20 23:26:49 +00:00
eguven
b5e4523b58 Remove index modifier methods from DownloadIndex interface
PiperOrigin-RevId: 239045412
2019-03-20 23:26:49 +00:00
eguven
d85ee01ae7 Convert DownloadManager.Listener methods no-op default methods
PiperOrigin-RevId: 239019504
2019-03-20 23:26:49 +00:00
eguven
d229e1f405 Add helper methods to check existence and delete ActionFiles
PiperOrigin-RevId: 239002281
2019-03-20 23:26:49 +00:00
andrewlewis
a5616cb552 Extract AV1 streams in DASH (fMP4/Matroska)
PiperOrigin-RevId: 238983394
2019-03-20 23:26:49 +00:00
eguven
3e4c15aa15 Add methods to DefaultDownloadIndex to set manual stop reason and not met requirements
PiperOrigin-RevId: 238960156
2019-03-20 23:26:49 +00:00
olly
2959b5f9c2 Roll forward of 238625384.
PiperOrigin-RevId: 238666870
2019-03-20 23:26:49 +00:00
olly
a291d6221f Automated g4 rollback of changelist 238625384.
*** Original change description ***

Allow exoplayer/v2 mockito2

***

PiperOrigin-RevId: 238626401
2019-03-20 23:26:49 +00:00
olly
07702cecdd Allow exoplayer/v2/ mockito2
PiperOrigin-RevId: 238625384
2019-03-20 23:26:10 +00:00
andrewlewis
f9055396b8 Post errors before calling stopInternal
When an error occurs we call stopInternal, and this clears the MediaPeriodQueue,
which in turn releases media period holders and notifies that media periods have
been released. AnalyticsCollector updates its information about media periods
using the media period release events, which means that if we post the source
error after stopInternal posts its events we can't determine what media period
the source error corresponds to.

Move error notifications before calling stopInternal, so that
AnalyticsCollector's model of the media period queue contains the loading period
at the point when it handles the error.

For consistency also move the other (non-source) error notifications to match
the new ordering.

PiperOrigin-RevId: 238559324
2019-03-15 04:54:22 +00:00
eguven
d088be7acc Remove DownloadState.stopFlags
PiperOrigin-RevId: 238442845
2019-03-15 04:54:04 +00:00
tonihei
d93ee00d19 Add convenience method to DownloadHelper to add selection for single renderer.
This simplifies the DownloadHelper code in the demo app and is generally
useful for more specific updates with SelectionOverrides.

PiperOrigin-RevId: 238228276
2019-03-15 04:53:29 +00:00
tonihei
8e80acd18f Use androidx.test and extensions.
This replaces the deprecated usages of RobolectricTestRunner and
RuntimeEnvironent and fully migrates the tests to androidx.

PiperOrigin-RevId: 238011667
2019-03-15 04:53:12 +00:00
eguven
9c6c74d564 Fix merging download action to completed and stop flag set download
PiperOrigin-RevId: 238002393
2019-03-15 04:52:54 +00:00
andrewlewis
76e9950409 Make MatroskaExtractor.seek() non-final
Now that this class can be extended, it makes sense for subclasses to be able
to clear state in seek().

PiperOrigin-RevId: 237902276
2019-03-15 04:52:37 +00:00
andrewlewis
7acc0ee798 Fix ProgressiveMediaSource DefaultExtractorsFactory proguarding
PiperOrigin-RevId: 237900673
2019-03-15 04:52:19 +00:00
tonihei
7bf963c06c Add unit tests for buffer-based ABR.
PiperOrigin-RevId: 237803831
2019-03-15 04:52:01 +00:00
tonihei
57e2ec6a1d Actually use view atrribute for min update interval.
We didn't read the attribute value so far.

PiperOrigin-RevId: 237420697
2019-03-15 04:51:08 +00:00
Oliver Woodman
89908794e6 Merge pull request #5496 from szaboa:dev-v2-5040
PiperOrigin-RevId: 237412166
2019-03-15 04:50:32 +00:00
andrewlewis
3ea6d78ee7 Add some tests for DefaultAudioSink
PiperOrigin-RevId: 237247769
2019-03-15 04:50:12 +00:00
tonihei
1aad0f8e22 Don't throw in ProgressiveMediaPeriod.onLoadCompleted.
We may currently throw if the load completes before we finished preparation.
Don't throw and instead check for this condition in maybeThrowPrepareError.

PiperOrigin-RevId: 237237000
2019-03-15 04:49:54 +00:00
olly
851134ec16 Derive Format.frameRate for MP4 videos
Issue: #5598
PiperOrigin-RevId: 237067179
2019-03-15 04:49:36 +00:00
Arnold Szabo
d7c2519a5d Fixes according to the code review 2019-03-07 00:09:11 +02:00
olly
f35dbeb567 TrackSelectionView: Default to Auto when last check box deselected
PiperOrigin-RevId: 237052890
2019-03-06 17:29:18 +00:00
aquilescanta
97ea23fb89 Fix load error handling call in ProgressiveMediaPeriod
PiperOrigin-RevId: 237052069
2019-03-06 17:29:18 +00:00
olly
a8d8f610ba Add SimpleCache deletion functionality
This is needed now that index data may be stored outside
of the cache directory.

PiperOrigin-RevId: 237051112
2019-03-06 17:29:18 +00:00
tonihei
ea42bfbf34 Don't retry UnexpectedLoaderExceptions.
These are thrown for non-IOException encountered during loading. Also, they
are thrown from an unexpected position and retrying is likely to fail anyway
because the Extractor is left in an unrecoverable state.

PiperOrigin-RevId: 237043948
2019-03-06 17:29:18 +00:00
olly
ab5dae64b9 Make sure we handle SQLiteException and other IO errors properly
SQLiteException is a runtime exception, which makes it easy to
forget to handle it. This change converts SQLiteExceptions into
a checked exception, which is then handled appropriately.

PiperOrigin-RevId: 237038793
2019-03-06 17:29:18 +00:00
andrewlewis
dd06a2d5f1 Fix integer bitrate division
PiperOrigin-RevId: 237028164
2019-03-06 17:29:18 +00:00
aquilescanta
155a129d2c Make flags-only DecoderInputBuffer hold all flags
Currently a flags-only DecoderInputBuffer may hold only the end-of-stream
flag. This change makes flags-only buffer read any kind of flag set in
the next sample. If no sample is available RESULT_NOTHING_READ is
returned.

PiperOrigin-RevId: 237027581
2019-03-06 17:29:18 +00:00
andrewlewis
febb8c589e Improve handling of failed NAL prefix reads
nalPrefix.readUnsignedIntToInt() will throw if the unsigned output doesn't fit
in an int. Before this change, in the error case we'd retry reading from after
the NAL prefix position. Throw a ParserException so that reading an obviously
invalid NAL prefix will be treated as a fatal exception by the default load
error handling policy.

PiperOrigin-RevId: 236839690
2019-03-06 17:29:18 +00:00
tonihei
36060e36cb Fix TrackSelectionView selection/deselection again.
There are 6 different situations which are now more explicitly covered to
ensure we handle them correctly:
1. Radio button (non-adaptive, single group only)
   Selected -> Do nothing.
   Unselected -> Replace override with selected track.
2. Check box (non-adaptive, but multi-group allowed)
   Selected -> Remove track (and override). If last one, set isDisabled flag.
   Unselected -> Replace override with selected track.
3. Check box (adaptive allowed, single or multi group)
   Selected -> Remove track. If last, remove override and maybe set isDisabled.
   Unselected -> Add track to override.

PiperOrigin-RevId: 236668642
2019-03-06 17:29:18 +00:00
tonihei
641c1d2af4 Properly release DownloadHelper and TrackSelectionDialog.
The release needs to post to the MediaSource thread and also needs to post
back to the DownloadHelper thread to prevent sending updates after release has
been called. The point where we release the downloadHelper also needs to
dismiss the dialog in case the creation has already been queued before the
release.

PiperOrigin-RevId: 236652309
2019-03-06 17:29:18 +00:00
aquilescanta
8a2fc55c49 Fix load error handling policy invocation
PiperOrigin-RevId: 236648435
2019-03-06 17:29:18 +00:00
tonihei
28c7cb3716 Reset period position when resetState=True.
This is more in line with "forgetting all previous state" as documented for
resetState=True. Also only apply the current position as initial seek position
in this case.
PiperOrigin-RevId: 236623630
2019-03-06 17:29:18 +00:00
aquilescanta
7a1b8a9585 Extract method in MediaCodecRenderer
Deduplicates a bit of code

PiperOrigin-RevId: 236621851
2019-03-06 17:29:18 +00:00
tonihei
8fce3ce678 Do not throw in resolveSeekPosition on playback thread.
We currently throw if a pending seek position was valid when the user issued
it on the app thread, but can't be resolved on the playback thread because the
timeline changed in the meantime. Throwing in this case seems wrong as the
user could not have known about the issue (and the seek position was actually
valid). Also, in other cases where the currently playing period is no longer
in the new timeline, we gracefully use a subsequent period or transition to
ENDED state instead of throwing. So it seems more consistent to transition to
ENDED state as well.

PiperOrigin-RevId: 236274862
2019-03-06 17:29:18 +00:00
tonihei
b48ceb19bd Remove unneccessary deprecated constants and classes.
This constants and classes are defined by the same name in the super class and
thus can be safely removed.

PiperOrigin-RevId: 236136197
2019-03-06 17:29:18 +00:00
tonihei
3eeb3acb3b Remove nullness suppressions.
These were added in an internal clean-up and are better fixed than suppressed.

PiperOrigin-RevId: 236118715
2019-03-06 17:29:18 +00:00
tonihei
84e20216d7 Do not allow deselection of radio button.
Instead just set the currently clicked item as override. If the already
selected button is clicked, the override is reset with the same value.

PiperOrigin-RevId: 236118429
2019-03-06 17:29:18 +00:00
tonihei
0bb123aa4c TrackSelectionView: Use same "isAdaptive" logic in updateViews and onClick.
We currently do not show check boxes if the renderer does not support adaptive
switches between tracks in one group. However, we assume check boxes in the
onClick method.

Use same logic for both methods to be consistent.

PiperOrigin-RevId: 236118372
2019-03-06 17:29:18 +00:00
tonihei
2ae07936ba Handle !resetPosition as initial seek position.
The flag in ExoPlayer.prepare is documented as keeping the current window
index and window position. We are currently using the current period UID and
period position instead. This causes problems when the media source is changed
but the position is not reset.

Using the initial seek position instead ensures we actually use the window
index and position.

Issue:#5520
PiperOrigin-RevId: 236101024
2019-03-06 17:29:18 +00:00
tonihei
377e550d0f Improve new error type documentation and prevent NPE in error listener.
Adding new error types may cause issues when listeners assume a fixed set of
error types and don't handle arbitrary defaults.

Fixing error handling in one case and improving documentation to make people
aware of the issue.

PiperOrigin-RevId: 236093265
2019-03-06 17:29:18 +00:00
tonihei
92a7bb534a Remove wrong documentation.
This is a left-over from the past and is no longer true.

PiperOrigin-RevId: 236089921
2019-03-06 17:29:18 +00:00
olly
b25d2c9978 Adding @SuppressWarnings for the latest stable SDK Q drop
Global Presubmit : https://test.corp.google.com/ui#id=OCL:235456897:BASE:235767406:1551211793273:aa1704f6

LSC doc: go/android-sdk-lsc

PiperOrigin-RevId: 235812819
2019-03-06 17:29:18 +00:00
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
Arnold Szabo
854419962a Merge role and accessibility fields into RoleFlags 2019-03-05 23:38:49 +02:00
Arnold Szabo
58d746ecaa Add IntDef for role and accessibility descriptor's value, parse these also for video / audio tracks 2019-03-03 20:26:31 +02:00
Arnold Szabo
43ea388098 Remove old parseRole method that looked only for main 2019-02-28 00:11:04 +02:00
Arnold Szabo
06ed877845 Pass role and accessibility descriptor values from adaptation set to format 2019-02-27 23:53:52 +02: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 67be9e7783

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
andrewlewis
9c3ac92ae8 Allow extension of MatroskaExtractor
Subclasses can handle arbitrary elements.

PiperOrigin-RevId: 233057241
2019-02-18 15:57:04 +00:00
aquilescanta
36da5fb511 Group audio renditions by name
Allows the player to adapt between audio renditions with different
names.

PiperOrigin-RevId: 233052105
2019-02-18 15:56:59 +00:00
olly
fd979790f2 Some no-op CacheContentIndex cleanup
Push Cipher and SecretKeySpec instantiation into AtomicFileStorage,
since SQLiteStorage no longer needs them.

PiperOrigin-RevId: 233043754
2019-02-18 15:56:49 +00:00
olly
42e691519a Generate per-cache unique identifier.
PiperOrigin-RevId: 233030337
2019-02-18 15:56:44 +00:00
andrewlewis
dec00997e3 Remove deprecated ImaAdsMediaSource and constructors
Given the change to require setPlayer on AdsLoaders, it seems like a good
opportunity to clean up deprecated ads-related symbols.

PiperOrigin-RevId: 233020171
2019-02-18 15:56:39 +00:00
olly
1a5bf28669 Cleanup for database on internal storage
PiperOrigin-RevId: 232923385
2019-02-18 15:56:34 +00:00
olly
dd99fdcb82 Changes for SQLite databases on internal storage
- Remove ability to encrypt content index for SQLite storage
- Remove hack for specifying arbitrary database location

PiperOrigin-RevId: 232863763
2019-02-18 15:56:29 +00:00
olly
a7324061b3 Fix proguard configuration
PiperOrigin-RevId: 232835218
2019-02-18 15:56:24 +00:00
tonihei
f898bddbfc Do not prepare MediaPeriods in a loop.
They may prepare immediately and let pendingMediaPeriods become empty before
all other periods are even created.

PiperOrigin-RevId: 232675283
2019-02-18 15:56:13 +00:00
Arnold Szabo
eaf0d40886 Extract time bar delay calculations to a static method 2019-02-16 12:17:09 +02:00
Arnold Szabo
ecfce46296 Changes according to the code review 2019-02-13 19:31:11 +02:00
Arnold Szabo
62e6455dce Taking consideration the current position before calculating the delay before the next update 2019-02-12 23:02:34 +02:00
Arnold Szabo
c905891d10 Taking into consideration the media's duration when updating the time bar 2019-02-10 21:43:34 +02:00
zsmatyas
fd4998bcca
Merge branch 'dev-v2' into dev-v2 2019-02-07 13:13:47 -08:00
olly
a6c1dbe156 Implement CacheFileMetadataIndex using SQLite
PiperOrigin-RevId: 232670039
2019-02-06 15:47:08 +00:00
eguven
7eed60c9e3 Add DownloadManager.stopDownloads(int manualStopReason)
Also removed STOP_FLAG_DOWNLOAD_MANAGER_NOT_READY.

PiperOrigin-RevId: 232669463
2019-02-06 15:46:57 +00:00
olly
bdc87a4fc7 API and plumbing for indexing file metadata (length + timestamp)
When SimpleCache uses a CacheFileMetadataIndex, it will be able to avoid
querying file.length() and renaming files, both of which are expensive
operations on some file systems.

PiperOrigin-RevId: 232664255
2019-02-06 15:46:47 +00:00
olly
3845304e58 Shard SimpleCache files into 10 sub-directories
Issue: #4253
PiperOrigin-RevId: 232659869
2019-02-06 15:46:37 +00:00
andrewlewis
2169b9417f Fix HEVC level error logging
PiperOrigin-RevId: 232651944
2019-02-06 15:46:27 +00:00
olly
ebfbb4f915 Hide progress bar for end state download notifications
Now we're reusing the builder, it's necessary to set maxProgress
back to 0 to avoid the progress bar appearing for end state
notifications.

PiperOrigin-RevId: 232520007
2019-02-06 15:46:18 +00:00
aquilescanta
fc2a99a688 Generalize selectedVariantIndices in preparation for non-main adaptation
After this change, multiple HlsSampleStreamWrappers may contain an apdaptive
track group.

PiperOrigin-RevId: 232507292
2019-02-06 15:45:54 +00:00
olly
6b81d9e7a4 Fix DownloadHelper for some HLS streams
onContinueLoadingRequested can occur during preparation, so
MediaPreparer needs to handle it.

PiperOrigin-RevId: 232507267
2019-02-06 15:45:44 +00:00
olly
e3981ec484 Fix notifications to avoid flicker on KitKat
On KitKat you need to reuse the same notification builder when
generating a notification that's intended to replace a previous
one. See:

https://stackoverflow.com/questions/6406730/updating-an-ongoing-notification-quietly

PiperOrigin-RevId: 232503682
2019-02-06 15:45:24 +00:00
olly
391f2bb6c2 Remove indirection in DefaultDownloadIndex
DefaultDownloadIndex is currently just forwarding all calls to its
inner class. getDownloadTable() handles initialization, but this
doesn't really seem different to having an initialization method. It
doesn't guarantee initialization happens, since a bad method
implementation could try and access downloadTable directly, just as
a bad method implementation could forget to call the initialization
method. Hence this change removes the indirection.

PiperOrigin-RevId: 232482228
2019-02-06 15:45:10 +00:00
eguven
c0e6cd1b17 Add DownloadState.mergeAction method
This method is needed by DownloadManager.

PiperOrigin-RevId: 232447145
2019-02-06 15:44:45 +00:00
olly
67be9e7783 Merge #5462: Making easier to set the playClearSampleWithoutKeys to renderers
Imported from GitHub PR https://github.com/google/ExoPlayer/pull/5462

Pull request for the following issue: #5421
Merge d9d88b079c4ca0533a836b2715a65b924babbb89 into a738191627

PiperOrigin-RevId: 232335113
2019-02-04 19:40:22 +00:00
tonihei
3818d7329d Use ExoPlayer's AnalyticsListener and AnalyticsCollector.
This combines all the different listeners in ExoVideosPlayerV2 into one and
moves the PlaybackLogger class towards ExoPlayer's AnalyticsCollector with
the same purpose.

In the future this allows two things:
 1. Gradually move LogginClient implementations to AnalyticsListener to
    prevent custom event forwarding.
 2. Using ExoPlayer's QoE extension (which is also an AnalyticsListener).

PiperOrigin-RevId: 232321182
2019-02-04 19:40:06 +00:00
tonihei
7a4cf96f4a Improve housekeeping of ConcatenatingMediaSource callbacks.
When calling releaseSource(), all pending messages will be removed. That means
that all action-on-completion callbacks which are somewhere in flight are
just dropped without being called. This change adds code to keep track of the
current state of each callback to allow all of them being called when the
source is released.

Issue:#5464
PiperOrigin-RevId: 232312528
2019-02-04 19:39:54 +00:00
eguven
a5d64463c7 Make DownloadTracker use DownloadIndex
DownloadTracker will stop updating DownloadIndex when DownloadManager
starts using the same DownloadIndex.

PiperOrigin-RevId: 232306803
2019-02-04 19:39:34 +00:00
olly
fb99c26426 Implement CacheContentIndex storage switching
This change enables transitioning to/from different Storage
implementations, to allow experimentally enabling (and if
necessary, disabling) SQLiteStorage. All that's left to do
is the final wiring to turn it on

PiperOrigin-RevId: 232304458
2019-02-04 19:39:24 +00:00
olly
f1ded9c3c2 Wider fix for OMX.SEC.mp3.dec issue
Issue: #4519
PiperOrigin-RevId: 232299233
2019-02-04 19:39:13 +00:00
eguven
5e311fc82a Refactor DownloadManage to simplify DownloadThread management
Now DownloadManager is responsible for starting and stopping DownloadThreads.

PiperOrigin-RevId: 232278072
2019-02-04 19:39:00 +00:00
ybai001
55ed5cfac6 Set ac4-is sync only if SDK_INT <= 28 2019-02-01 09:03:40 +08:00
andrewlewis
a738191627 Remove remainder of skip button focus hack
PiperOrigin-RevId: 231772920
2019-01-31 14:06:38 +00:00
aquilescanta
503c17d2ed Add constraint based track selection for ExoCast
PiperOrigin-RevId: 231764284
2019-01-31 14:06:28 +00:00
olly
d0b3d1cf63 Add additional device to output surface workaround
Issue: #4468
PiperOrigin-RevId: 231759438
2019-01-31 14:06:17 +00:00
olly
ef6725bf48 Bump version for 2.9.5 release
PiperOrigin-RevId: 231744540
2019-01-31 14:06:02 +00:00
ybai001
8f32c29cc6 Update code based on code review result
* remove field mimeType in Ac4Util.java
 * change constant CHANNEL_COUNT_2 to private in Ac4Util.java
2019-01-31 11:31:19 +08:00
aquilescanta
2bd12c2270 Move DefaultTrackSelector.Parameters out of DefaultTrackSelector
Including ParametersBuilder and TrackSelectionOverride.

PiperOrigin-RevId: 231609249
2019-01-30 20:32:08 +00:00
olly
ab67ab1aea Implement database CachedContentIndex.Storage
PiperOrigin-RevId: 231600104
2019-01-30 16:38:37 +00:00
eguven
c9b848e500 Synchronously change to next state from downloading state
PiperOrigin-RevId: 231586206
2019-01-30 16:38:26 +00:00
aquilescanta
dc7bc4785e Update ProgressiveMediaSource note
PiperOrigin-RevId: 231567138
2019-01-30 16:38:05 +00:00
olly
0dd305461d Clarity improvement: Use named variables
PiperOrigin-RevId: 231425073
2019-01-30 16:37:52 +00:00
andrewlewis
52ff1820df Fix buffered position when loading has not completed
If there is data after the last samples in the container, we may request
continue loading after the last samples have been read but before the load has
completed. In this situation the buffered position is returned as
Long.MAX_VALUE, which prevents continuing loading, yet the media period is not
treated as fully buffered because its buffered position is not
C.TIME_END_OF_SOURCE.

PiperOrigin-RevId: 231406964
2019-01-29 16:46:27 +00:00
tonihei
f4e7af3fd0 Handle duration change in updateQueuedPeriods.
We can keep the reading media period and continue playing if we haven't read
beyond the new duration. Otherwise, we can keep the period, but need to reset
the renderers as we already read too far.

PiperOrigin-RevId: 231406252
2019-01-29 16:46:16 +00:00
olly
d49e7ebae2 Fix nullness checks (pending stub to fix it properly)
PiperOrigin-RevId: 231396213
2019-01-29 16:46:04 +00:00
olly
e0711c64b8 DatabaseFileProvidingContext: Support older API levels
On older API levels it's also necessary to implement
openOrCreateDatabase, to be called by SQLiteOpenHelper.

PiperOrigin-RevId: 231387559
2019-01-29 16:45:52 +00:00
olly
45433869e5 Rename ExtractorMediaSource to ProgressiveMediaSource
It better describes what the class does. More importantly, we've had
inconsistent class names since we added offline support, for which we
added ProgressiveDownloader ("ExtractorDownloader" doesn't make any
sense). We could really do with aligning the names for clarity.

(Sorry)

PiperOrigin-RevId: 231387268
2019-01-29 16:45:42 +00:00
tonihei
ef8335fc50 Ensure normalized language code is used everywhere and update documentation.
Issue:#2867
PiperOrigin-RevId: 231385677
2019-01-29 16:45:32 +00:00
tonihei
6983f92ffd Add convenience methods to select multiple audio or text tracks for downloading.
These methods take a list of languages to be downloaded and add selections for
each of the languages.

PiperOrigin-RevId: 231385632
2019-01-29 16:45:22 +00:00
tonihei
71d77d7fa0 Remove DownloadHelper subclasses and use static methods instead.
The subclasses only call specific constructor combinations and can easily
replaced by static methods.

PiperOrigin-RevId: 231385606
2019-01-29 16:45:10 +00:00
tonihei
0a8ae74217 Update DownloadHelper to use MediaSource and MediaPeriod directly.
This requires to prepare the media source and the periods in a small helper similar
to the metadata retriever. It also gets rid of the need to have abstract protected
methods to load the manifest, to extract the track groups and to convert to stream keys,
as this can now be handled by the media period.

PiperOrigin-RevId: 231385590
2019-01-29 16:44:56 +00:00
tonihei
32b40502fc Add HlsMediaPeriod getStreamKeys implementation and tests.
PiperOrigin-RevId: 231385563
2019-01-29 16:44:46 +00:00
tonihei
6a52cd7445 Ensure HlsMediaPeriod works with playlists without variants.
Currently, we remove all variants if none of the stream keys contains any
variants. This causes HlsMediaPeriod to throw exceptions as it expects at least
one variant.

Change it to support master playlists without variants.

PiperOrigin-RevId: 231385547
2019-01-29 16:44:36 +00:00
tonihei
9779f2c358 Add DashMediaPeriod getStreamKeys implementation and test.
PiperOrigin-RevId: 231385518
2019-01-29 16:44:25 +00:00
tonihei
92bf8e918c Change getStreamKeys to take a list of TrackSelections.
Converting a single track selection to stream keys is only possible if the output
is independent from other track selections being made.

This is not the case for DASH and HLS embedded track groups which should select the
already selected primary track if possible (and thus needs to know  whether a primary
track group is selected).

Also, update the test method to take a period index.

PiperOrigin-RevId: 231385490
2019-01-29 16:44:15 +00:00
tonihei
f74e0eb992 Add back deprecated MediaSource.prepareSource for ExoPlayerSampleExtractor.
This should be removed after releasing.

PiperOrigin-RevId: 231380393
2019-01-29 16:44:04 +00:00
olly
39505452de Make VersionTable static
The way it is currently, it's very unclear that an operation on the
version table will correctly belong to a transaction in code such as
this, taken from DefaultDownloadIndex:

writableDatabase.beginTransaction();
try {
  writableDatabase.execSQL(...);
  versionTable.setVersion(...);
  writableDatabase.setTransactionSuccessful();
} finally {
  writableDatabase.endTransaction();
}

This change explicitly passes the database, to make it obvious that
the operation will really go into the same transaction:

writableDatabase.beginTransaction();
try {
  writableDatabase.execSQL(....);
  VersionTable.setVersion(writableDatabase, ...);
  writableDatabase.setTransactionSuccessful();
} finally {
  writableDatabase.endTransaction();
}

PiperOrigin-RevId: 231374933
2019-01-29 16:43:52 +00:00
eguven
bac8dfea12 Add DownloadState not met requirement stop flags
PiperOrigin-RevId: 231223201
2019-01-29 16:43:42 +00:00
olly
19144c4c73 Allow to disable libyuv dependency on LIBVPX
Goal: reduce binary size.
PiperOrigin-RevId: 231198579
2019-01-29 16:43:32 +00:00
andrewlewis
866835ea03 Fix float output capability check
Float output is only possible from API 21, but the high-res int
to float conversion path was checking for 32-bit PCM not float
output capability.

PiperOrigin-RevId: 231172495
2019-01-29 16:43:20 +00:00
olly
6b068c6ffb Clarify LoopingMediaSource documentation
PiperOrigin-RevId: 231171425
2019-01-29 16:43:11 +00:00
olly
3c6b72ee29 Fix nullness test
PiperOrigin-RevId: 230889470
2019-01-29 16:43:00 +00:00
olly
a1c13ca6f5 Hack to instantiate ExoDatabaseProvider without a context
This will allow CachedContentIndex to start using database
storage without us having to change the SimpleCache and
CachedContentIndex constructors to require a Context or a
DatabaseProvider.

PiperOrigin-RevId: 230884501
2019-01-29 16:42:50 +00:00
tonihei
582adb748a Decouple end position from MediaPeriodId again.
If are allowing changing durations of periods, we shouldn't use the end position
of clipped content as part of the id as it may change. This change moves the end
position back to MediaPeriodInfo and adds the next ad group index to the id
instead to ensure we still have unique ids for all content parts.

PiperOrigin-RevId: 230878389
2019-01-29 16:42:29 +00:00
aquilescanta
6dde1e67d3 Parse CHANNELS attribute from EXT-X-MEDIA
PiperOrigin-RevId: 230743198
2019-01-29 16:42:18 +00:00
aquilescanta
9d19a7a4b6 Move parseSelectionFlags with the rest of the parse{attribute} methods
PiperOrigin-RevId: 230734189
2019-01-29 16:42:07 +00:00
aquilescanta
642a0275d8 Propagate ExoCast errors receiver from the receiver app
PiperOrigin-RevId: 230717561
2019-01-29 16:41:55 +00:00
olly
355b3d6334 Increase minSdkVersion to 16
The combination of pre-16 API levels accounting for ~0.5% of the device
population, and that the most important components in ExoPlayer (e.g.
the MediaCodec renderers) have always required API level 16, mean it's
very unlikely this will negatively impact on anyone.

PiperOrigin-RevId: 230701808
2019-01-29 16:41:45 +00:00
olly
2c54b83464 Move CachedContentIndex storage behind an interface
This interface will get an SQLite implementation in a subsequent CL

PiperOrigin-RevId: 230693881
2019-01-29 16:41:34 +00:00
olly
f182c0c116 Centralize serialization in CachedContentIndex
We need to support serialization to/from an SQLite table. The
model of passing something around for each class to write into
doesn't work well for SQL, and it would be messy to have two
different structural designs for serialization. This change
centralizes the logic in CachedContentIndex, where a centralized
SQL based version can more easily sit alongside it.

PiperOrigin-RevId: 230692291
2019-01-29 16:41:24 +00:00
tonihei
49b9775d08 Add getReadingPositionUs to Renderer.
This method is a generalization of the existing hasReadStreamToEnd. It is
useful to determine whether a renderer already read beyond a new duration of
a period.

PiperOrigin-RevId: 230689165
2019-01-29 16:41:13 +00:00
tonihei
d7b3820175 Make updateQueuedPeriods more readable and fix bug.
1. The method kept track of the current period index to check if the next
period is still in the correct period. This is unneccessary since we no longer
use the period index but the actual uid in MediaPeriodId and mismatches are
already detected by canKeepMediaPeriodHolder.
2. We updated the MediaPeriodIndfo twice: once in getFollowingMediaPeriodInfo
and once in getUpdatedMediaPeriodInfo. That's confusing and difficult to
follow. The only difference is that getUpdatedMediaPeriodInfo keeps the
content position while getFollowingMediaPeriodInfo resets it. This is made more
explicit for readability.
3. The durations compatibility check for all following periods was broken as
it compared the same durations (partly due to the confusion caused by 2.)

PiperOrigin-RevId: 230519295
2019-01-29 16:40:51 +00:00
olly
3a54d744b9 Default to respecting the DataSpec cache fragmentation flag
Issue: #4253
PiperOrigin-RevId: 230497544
2019-01-29 16:40:41 +00:00
olly
4182f37b6e Make notification dismissible iff player is active
Seems like more useful default behaviour

PiperOrigin-RevId: 230356813
2019-01-29 16:40:20 +00:00
olly
de3a749b97 Fix scheduler NPE in DownloadService
PiperOrigin-RevId: 230260266
2019-01-29 16:40:09 +00:00
olly
29711b922d Cancel notification on dismiss
This doesn't happen automatically after all on older devices

PiperOrigin-RevId: 230251258
2019-01-29 16:39:56 +00:00
ybai001
e462c6aab7 Add AC-4 format support
* Add AC-4 MIME type definition
 * Add AC-4 format support in Mp4Extractor and TsExtractor
 * Add AC-4 Extractor
 * Add AC-4 playback support in MPEG-4, MPEG-DASH, TS and HLS
2019-01-25 16:32:45 +08:00
tonihei
923aa420df Use loading period event time for fatal load errors.
ExoPlaybackExceptions of type SOURCE are always associated with the loading
period and thus we can use the event time for the loading period in
onPlayerError. Renderer and unexpected exceptions are still associated with the
currently playing period.

Issue:#5407
PiperOrigin-RevId: 230216253
2019-01-21 14:10:49 +00:00
olly
c2f6dd6b0a Only allow one layer of sub-directories in the cache for now
PiperOrigin-RevId: 230209898
2019-01-21 12:58:16 +00:00
tonihei
e4eaaedad3 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: 230206675
2019-01-21 12:58:06 +00:00
olly
fb6154a905 Wipe database on downgrade
PiperOrigin-RevId: 230203593
2019-01-21 12:57:56 +00:00
aquilescanta
93e24561bb Add DefaultTsPayloadReaderFactory flag to ignore HDMV DTS streams
Prevents collisions with SCTE-35 subtitles.

Issue:#5330
PiperOrigin-RevId: 230195494
2019-01-21 12:57:46 +00:00
olly
82da627c1a Split out shared database components for reuse in caching
PiperOrigin-RevId: 229946997
2019-01-21 12:57:35 +00:00
tonihei
02dc937c78 Fix flaky DownloadIndexUtilTest.
PiperOrigin-RevId: 229934901
2019-01-21 12:57:25 +00:00
olly
14eb561e38 Use MediaCrypto.setMediaDrmSession to avoid black flicker
Issue: #3561
PiperOrigin-RevId: 229934093
2019-01-21 12:57:04 +00:00
tonihei
23c07e5c4d Update buffer-based ABR to not select track in constructor.
This mimicks a similar change in the default AdaptiveTrackSelection.
Also adds an option to cap initial format height.

PiperOrigin-RevId: 229923149
2019-01-21 12:56:33 +00:00
tonihei
ac86d3b5f6 Add missing @Nullable to SimpleExoPlayer fields and methods.
Issue:#5402
PiperOrigin-RevId: 229758525
2019-01-17 17:26:35 +00:00
tonihei
22413b8037 Add start position to MediaSource.createPeriod.
That's the same position set in MediaPeriod.prepare (where it may be removed
in the future).

Having the position at an earlier point is necessary to fix an
issue with lazy preparation in ConcatenatingMediaSource where the prepare
position was assumed to be known but MediaPeriod.prepare hasn't been called
yet.

Issue:#5350
PiperOrigin-RevId: 229756637
2019-01-17 17:26:24 +00:00
bachinger
76baa5724c solve nullness check warnings with asserts
PiperOrigin-RevId: 229755532
2019-01-17 17:26:14 +00:00
eguven
f2139d1b71 Add DownloadIndexUtil
This class includes helper methods to upgrade ActionFiles
and custom download records to DownloadIndex.

PiperOrigin-RevId: 229744441
2019-01-17 17:26:01 +00:00
bachinger
16a185de1d make PlayerNotificationListener better suited for foreground services
Issue: #5301
Issue: #4988
Issue: #4813
Issue: #5344
Issue: #5117
PiperOrigin-RevId: 229603354
2019-01-17 14:37:23 +00:00
eguven
ec77f737ee Make DownloadManager watch requirements directly
PiperOrigin-RevId: 229544734
2019-01-17 14:37:12 +00:00
bachinger
8adc16a623 allow developers to set the subText of the notifcation
Issue: #5344
PiperOrigin-RevId: 229527963
2019-01-17 14:37:00 +00:00
Zsolt Matyas
2621d962e7 CEA608: handling channel bits properly
[Problem]
CC1 is shown even when CC2-3-4 is selected

[Solution]
 * use incoming channel and frame information
 * Misc Codes need to handle use Frame information
 * Add checks everywhere

[Test]
* Live channels and already existing test should not show any difference
in behavior when CC1 is selected.
* Live channels might have CC2-CC3-CC4
* Sarnoff test content has specific test cases for channel support
2019-01-16 16:30:46 -08:00
tonihei
ca7675ceae Fix bug where missing switch adaptation set causes multiple identical track groups.
When the extra adaptation set of a switch group isn't defined in the manifest, we
currently assume it's the first adaptation group. This either leads to wrong grouping
or duplicate track groups.

Such a case may easily happen if the manifest is filtered such that only one of the
switch adaptation sets will be present in the manifest.

PiperOrigin-RevId: 229365379
2019-01-15 15:24:16 +00:00
tonihei
c6092bbb43 Fix typo.
PiperOrigin-RevId: 229365333
2019-01-15 15:24:03 +00:00
olly
36883e6277 Bump version for 2.9.4 release
PiperOrigin-RevId: 229364563
2019-01-15 15:03:35 +00:00
Oliver Woodman
3b5e8ada31 Merge pull request #5355 from zsmatyas:dev-v2
PiperOrigin-RevId: 229364147
2019-01-15 15:03:24 +00:00
tonihei
b97b35e2e0 Add buffer flag for last sample to improve buffered position calculation.
The buffered position is currently based on the mimimum queued timestamp of
all AV tracks. If the tracks have unequal lengths, one track continues loading
without bounds as the "buffered position" will always stay at the shorter
track's duration.

This change adds an optional buffer flag to mark the last sample of the
stream. This is set in the Mp4Extractor only so far. ExtractorMediaSource
uses this flag to ignore AV streams in the buffered duration calculation if
they already finished loading.

Issue:#3670
PiperOrigin-RevId: 229359899
2019-01-15 14:29:07 +00:00
tonihei
fcda01eb5c Remove messages on release of ConcatenatingMediaSource.
That was previously handled by the player. But since we switched to Handler
messages instead of player messages, we should do that manually.

PiperOrigin-RevId: 229341747
2019-01-15 14:28:56 +00:00
tonihei
1900e94144 Do not select a track in AdaptiveTrackSelection constructor.
This is not necessary as the track selection needs to be updated with
updateSelectedTrack anyway. It's also error-prone as the selection code
calls into a protected method of a not fully initialized class.

PiperOrigin-RevId: 229331669
2019-01-15 14:28:46 +00:00
olly
9ab08bbe5d Fix DRM protected SmoothStreaming with subtitles
Issue: #5378
PiperOrigin-RevId: 229261658
2019-01-14 23:58:45 +00:00
olly
0bfbcea632 Reset requiresSecureDecoder boolean on codec release
PiperOrigin-RevId: 229253065
2019-01-14 23:58:35 +00:00
olly
1b62277a0b Disable cache fragmentation except for progressive
DataSpec.FLAG_ALLOW_CACHE_FRAGMENTATION is added to indicate to the
cache when fragmentation is allowed. This flag is set for progressive
requests only.

To avoid breaking changes, CacheDataSink defaults to ignoring the flag
(and enabling fragmentation) for now. Respecting the flag can be
enabled manually. DownloaderConstructorHelper enables respecting of
the flag.

Issue: #4253
PiperOrigin-RevId: 229176835
2019-01-14 23:58:25 +00:00
tonihei
86637facdd Don't forget isSeekable in ExtractorMediaSource.
We currently forget whether a source is seekable at re-preparation. This was
implemented intentionally this way under the assumption that we really can't seek
until we have loaded the seek map again. However, seek operations are only
allowed after a media period is prepared. So there is no harm in remembering
whether a source is seekable.

This problem currently prevents reusing ClippingMediaSources with
ExtractorMediaSource and a non-zero start clip position.

Issue: #5351
PiperOrigin-RevId: 229169441
2019-01-14 23:58:15 +00:00
andrewlewis
f44fc542bb Blacklist OMX.SEC.mp3.dec for more devices
Issue: #4519
PiperOrigin-RevId: 229145790
2019-01-14 23:58:05 +00:00
olly
1f03093dc5 DRM: Pass sessionId rather than MediaCrypto
ExoMediaCrypto.requiresSecureDecoderComponent() is removed, and
FrameworkMediaCrypto.forceAllowInsecureDecoderComponents is made
public to allow determining whether a secure decoder is required
to be implemented in MediaCodecRenderer.

PiperOrigin-RevId: 228909771
2019-01-14 23:57:55 +00:00
olly
2d30d66746 Fix release of DRM sessions
There were some edge cases in which we'd forget to release DRM
sessions. For example if we read a format and acquired a
pendingDrmSession (in onInputFormatChanged), then immediately
read another format and overwrote pendingDrmSession, we'd
forget to release the one that's been overwritten.

This change hopefully makes release much clearer. We keep a list
of all drm sessions we're currently holding. Whenever we update
either drmSession or pendingDrmSession, we release any other
sessions that are in the list.

PiperOrigin-RevId: 228905465
2019-01-14 23:57:45 +00:00
eguven
71d4f39400 Call Listener methods on the thread started RequirementsWatcher
PiperOrigin-RevId: 228701917
2019-01-14 23:57:34 +00:00
eguven
92bec21c03 Add DownloadIndex and DefaultDownloadIndex
DownloadIndex will be used to store and query DownloadStates.

PiperOrigin-RevId: 228673766
2019-01-14 23:57:24 +00:00
tonihei
637b52ae0e Add missing call to timeline.getWindow.
The window object is used without being filled with data. This used to work
well for most cases as the same live stream is sending regular updates and the
first update is almost never used if it's not the first item in a playlist.

It causes problems when the first timeline update of a live stream is actually
used for playback (e.g. when the live stream is lazily prepared in a playlist
and played first).

PiperOrigin-RevId: 228530232
2019-01-14 23:57:14 +00:00
Zsolt Matyas
fff602358f CEA608: Limiting duplicated command checks to immediate frames
Reported in https://github.com/google/ExoPlayer/issues/3860
For failing examples see the github link above.

[Problem]
We drop matching control codes even if they are not received on
consecutive frames.

The specification says
"(4) If the first transmission of a control code pair passes parity,
it is acted upon within one video frame. If the NEXT frame contains
a perfect repeat of the same pair, the redundant code is ignored."

Keyword is the NEXT. The frames must arrive immediately after
each other.

See https://www.law.cornell.edu/cfr/text/47/79.101

[Solution]
Set an additional flag when any data is processed. Control code
duplication checks should be limited only for the first control
byte pairs processed after any control code.

[Test]
Sarnoff tests have equivalent CEA708 and CEA608 Streams.
2019-01-10 12:15:14 -08:00
Oliver Woodman
e0c6f538af Merge pull request #5201 from zsmatyas:dev-v2
PiperOrigin-RevId: 228341073
2019-01-08 17:17:59 +00:00
eguven
0b56a03880 Use stop flag to prevent download start when not initialization/released
PiperOrigin-RevId: 228324452
2019-01-08 17:17:47 +00:00
olly
255a34d367 Noop cleanup of Cea608Decoder.CueBuilder
PiperOrigin-RevId: 228309236
2019-01-08 17:17:37 +00:00
olly
6e127d0152 SimpleCache: Scan sub-directories during initialization
This is the initialization part of mitigating issue #4253. The
remaining work is on the writing side, and is simply a case of
having startFile return File instances that are sharded into
sub-directories. We still need to decide what scheme we want
to use for doing that.

Issue: #4253
PiperOrigin-RevId: 228306327
2019-01-08 17:17:27 +00:00
olly
194caf23e5 Doc fix.
PiperOrigin-RevId: 228296962
2019-01-08 17:17:16 +00:00
olly
8c47b02083 Reduce number of calls to File.length()
Calls to File.length() can be O(N) where N is the number of files
in the containing folder. This is believed to be true for at least
FAT32. Repeated calls for the same file tend to be faster,
presumably due to caching in the file system, however are still
surprisingly expensive. Hence minimizing the number of calls is
preferable.

Issue: #4253
PiperOrigin-RevId: 228179921
2019-01-08 07:38:31 +00:00
aquilescanta
be69d5b747 Expand check for muxed audio media tags to include uris that match variants
Issue:#5313
PiperOrigin-RevId: 228155222
2019-01-08 07:38:21 +00:00
aquilescanta
147deafd01 Increase search size in mp4 sniffing once moov has been found
Issue:#5320
PiperOrigin-RevId: 228142567
2019-01-08 07:38:11 +00:00
tonihei
e8a7cb2546 Remove player and isTopLevelSource parameters from MediaSource.prepare.
They are not longer needed anywhere, are error-prone (because of threading
requirements), and complicate testing and using MediaSources without a player.

PiperOrigin-RevId: 227871157
2019-01-08 07:38:00 +00:00
tonihei
6828797555 Pass Handler together with Runnable callbacks for playlist commands.
We currently either use the app thread returned by the player or the thread
the commands are called on depending on whether the media source is already
prepared or not.

This change lets the application decide which callback thread to use. As a
side effect, we also don't longer need access the player instance passed to
MediaSource.prepare.

PiperOrigin-RevId: 227871111
2019-01-08 07:37:50 +00:00
andrewlewis
14027bc98e Treat AVERROR_INVALIDDATA as non-fatal
Also configure the FFmpeg context to ignore errors as far as possible (this
appears to have an effect only for certain decoders).

Issue: #5293
PiperOrigin-RevId: 227851397
2019-01-08 07:37:30 +00:00
andrewlewis
5efbcb4443 Fix nullness issue
PiperOrigin-RevId: 227822937
2019-01-08 07:37:13 +00:00
andrewlewis
ed1f41db1b Parse frame rate from 'mdta' metadata
PiperOrigin-RevId: 227813461
2019-01-08 07:37:01 +00:00
aquilescanta
d30375c9a1 Prevent IllegalStateException in Mp4 sniffing
If a negative value is read, sniffing should just fail.

PiperOrigin-RevId: 227689568
2019-01-08 07:34:33 +00:00
eguven
781ba39097 Disabled test case due to flakiness
PiperOrigin-RevId: 227682600
2019-01-08 07:34:24 +00:00
eguven
a940d8bc9d Use removing and restarting state internally in DownloadManager
PiperOrigin-RevId: 227682159
2019-01-08 07:34:14 +00:00
tonihei
c130723929 Replace isTopLevelSource check by period count check in AdsMediaSource.
The top level requirement only tried to ensure that the entire timeline only
has one period. This is already asserted by ImaAdsLoader. AdsMediaSource
itself works fine as long as the wrapped timeline has one period only. This
is now asserted instead.

PiperOrigin-RevId: 227682141
2019-01-08 07:34:03 +00:00
tonihei
e4ad90efd0 Set Player separately in AdsLoader interface.
Passing the player through MediaSource.prepare is only needed for the AdsLoader
and complicates other usages of MediaSource. Providing the player directly to
the AdsLoader is also in line with the usage pattern of PlayerView and other
components.

Also rename methods to start/stop to better reflect their usage.

PiperOrigin-RevId: 227682112
2019-01-08 07:33:52 +00:00
aquilescanta
bfc8f9c4d8 Enable setOutputSurfaceWorkaround for Huawei P10 lite
Issue:#5312
PiperOrigin-RevId: 227673949
2019-01-08 07:33:42 +00:00
aquilescanta
7f266ceb33 Fix bug when calculating EOF position in mp4 sniffing
PiperOrigin-RevId: 227668426
2019-01-08 07:33:32 +00:00
eguven
7ae768376c Prepare DownloadState for upcoming changes
Made DownloadState top level class.
Replaced action field DownloadAction fields.
Added removing, removed and restarting states.
Renamed started state to downloading.

PiperOrigin-RevId: 227664735
2019-01-08 07:33:23 +00:00
tonihei
803b878a8a Use Handler instead of ExoPlayer messages in ConcatenatingMediaSource
ExoPlayer methods must not be called from any thread besides the specified
app thread. Therefore we shouldn't use them here. Using a regular Handler
instead is fully equivalent.

Issue:#5240
PiperOrigin-RevId: 227650489
2019-01-08 07:33:13 +00:00
andrewlewis
440824ae5c Fix replacement char check
PiperOrigin-RevId: 227646358
2019-01-08 07:33:01 +00:00
olly
0ed7ddecd7 Reduce the number of cache files
- Increase the default cache file size to 5MB
- Recommended a minimum cache file size of 2MB to discourage
  applications from specifying values small enough such that
  unreasonably large numbers of cache files are generated
- Allow maxCacheFileSize=C.LENGTH_UNSET, equivalent to setting it
  to MAX_VALUE. This is just for API consistency with other APIs
  we have that accept LENGTH_UNSET

Issue: #4253
PiperOrigin-RevId: 227524233
2019-01-08 07:32:51 +00:00
olly
ae65bcecd4 Move syncFileDescriptor to use an experimental method
PiperOrigin-RevId: 227520168
2019-01-08 07:32:41 +00:00
olly
3a9557c72f Don't pass maxCacheFileSize to CacheEvictor if real size is unknown
CacheEvictor.onStartFile currently receives a length, which is the
maximum size of the content that might be written. The LRU cache
evictor will make sure there's sufficient space for the specified
size. If the actual size of the content is unknown, CacheDataSink
passes maxCacheFileSize.

The current behavior isn't ideal. It seems valid for a developer to
specify maxCacheFileSize=Long.MAX_VALUE if they don't want any
file fragmentation in the cache. However if they then attempt to
cache something with unknown length, LRU cache will try and make
room for content of length Long.MAX_VALUE, and end up evicting the
entire cache to do so.

This change alters the logic so a length is only passed if the
actual size of the content is known. In other cases C.LENGTH_UNSET
is now passed. The LRU evictor will not evict until after the file
is committed. Note a custom LRU evictor could still opt to evict to
ensure some application specified amount of space, if that's the
desired behavior.

PiperOrigin-RevId: 227509525
2019-01-08 07:32:21 +00:00
andrewlewis
fc6a1ea522 Handle rectangular rotation projections in Matroska
See also https://github.com/Matroska-Org/matroska-specification/issues/269.

PiperOrigin-RevId: 226758584
2019-01-08 07:31:59 +00:00
tonihei
9728ac54ba Improve doc for setKeepContentOnPlayerReset.
This also applies when seeking or transitioning to unprepared media, which
isn't clear from the current documentation.

Issue:#5267
PiperOrigin-RevId: 226486685
2019-01-08 07:31:49 +00:00
eguven
3c0107752a Add STOPPED state to DownloadManager
PiperOrigin-RevId: 226460891
2019-01-08 07:31:39 +00:00
ybai001
ae40208d92 Add AC-4 format support
* Add AC-4 MIME type definition
 * Add AC-4 format support in Mp4Extractor and TsExtractor
 * Add AC-4 Extractor
 * Add AC-4 playback support in MPEG-4, MPEG-DASH, TS and HLS
2018-12-26 16:53:37 +08:00
olly
f4d741a565 Bump for 2.9.3
PiperOrigin-RevId: 226356810
2018-12-20 21:14:04 +00:00
olly
a16f4aec90 Fix out of data Javadoc
PiperOrigin-RevId: 226356758
2018-12-20 21:13:52 +00:00
andrewlewis
d3ecbf75b2 Fix buffer size for renderers with TRACK_TYPE_NONE
This includes NoSampleRenderers.

PiperOrigin-RevId: 226323693
2018-12-20 21:13:42 +00:00
andrewlewis
bad8ec5952 Relax audio decoder capability checks
Issue: #5145
PiperOrigin-RevId: 226297129
2018-12-20 12:44:18 +00:00
olly
4f8b098307 Blacklist OMX.SEC.mp3.dec for more devices
Issue #4519

PiperOrigin-RevId: 226205245
2018-12-19 21:29:27 +00:00
Oliver Woodman
be2636c365 Merge pull request #4993 from saschpe:icy
PiperOrigin-RevId: 226031838
2018-12-18 19:46:54 +00:00
andrewlewis
0e8e9621c0 Use the true bitrate for CBR MP3 seeking
PiperOrigin-RevId: 225989898
2018-12-18 19:46:43 +00:00
eguven
ee2e89e0cd Remove DownloadManager Download interim state when created
When a Download is created it's set to queued state but doesn't notify
listeners about this state. DownloadManager checks if it can start the
download. After this checks it notifies the listeners.

With this change Download can immediately check if it can be started and
sends correct notification.

PiperOrigin-RevId: 225967129
2018-12-18 19:46:33 +00:00
Oliver Woodman
4d282b2278 Merge pull request #5216 from mseroczynski:dev-v2
PiperOrigin-RevId: 225966289
2018-12-18 19:46:23 +00:00
eguven
3dc72a690c Remove targetState in DownloadManager.Download
PiperOrigin-RevId: 225849846
2018-12-18 19:46:08 +00:00
eguven
3d6707e2c4 Don't create Downloads until DownloadManager is initialized
PiperOrigin-RevId: 225824428
2018-12-18 19:45:58 +00:00
tonihei
ee14b1fa40 Add test for SsMediaPeriod.getStreamKeys
PiperOrigin-RevId: 225811310
2018-12-18 19:45:29 +00:00
aquilescanta
8202cb2d2a Mitigate the need for FLAG_ALLOW_NON_IDR_KEYFRAMES
Use random access indicator in transport streams

Issue:#1967
Issue:#2020
Issue:#2182
Issue:#2469
Issue:#2581
Issue:#2748
Issue:#2939
Issue:#2979
Issue:#3316
Issue:#3574
Issue:#3709
Issue:#3747
Issue:#4103
Issue:#4184
Issue:#4355
Issue:#4538
Issue:#4719
Issue:#4861
Issue:#4925
Issue:#4951
Issue:#5108
Issue:#5186
PiperOrigin-RevId: 225798044
2018-12-18 19:45:18 +00:00
olly
d5e53d11f7 Add Player.MetadataComponent for completeness
PiperOrigin-RevId: 225795581
2018-12-18 19:45:06 +00:00
eguven
9198e4cf7a Make RequirementsWatcher notify listener on not met requirements change
PiperOrigin-RevId: 225557638
2018-12-18 19:44:53 +00:00
eguven
28dca0b339 Add method to Requirements to get not met requirements
PiperOrigin-RevId: 225549778
2018-12-18 19:44:43 +00:00
Michał Seroczyński
9fa2525225 Merge remote-tracking branch 'origin/dev-v2' into dev-v2 2018-12-17 12:50:20 +01:00
Michał Seroczyński
4aabff9634 Blacklist OMX.SEC.mp3.dec and OMX.brcm.audio.mp3.decoder on Samsung devices 2018-12-17 12:50:11 +01:00
Michał Seroczyński
49a99beaef
Merge branch 'dev-v2' into dev-v2 2018-12-17 11:19:50 +01:00
Michał Seroczyński
3390b21618 Blacklist OMX.SEC.mp3.dec and OMX.brcm.audio.mp3.decoder on Samsung devices 2018-12-17 10:58:27 +01:00
Oliver Woodman
254589cbe8 Merge pull request #5066 from szaboa:feature/1583_support_png_ttml
PiperOrigin-RevId: 225531695
2018-12-14 15:42:57 +00:00
tonihei
173ddd6ee7 Add simplified adaptive media source stream key filter to factory classes.
This change only simplifies the API by using the ManifestParser internally.

PiperOrigin-RevId: 225516193
2018-12-14 15:42:36 +00:00
olly
845f54a467 Remove Cache.[get|set]ContentLength
Problem: There is nothing in the Cache interface that enforces that
these methods are implemented by reading/writing content metadata,
however our own code (CacheDataSource) relies on this property since
it mixes use of [get|set]ContentLength and use of metadata. Using
metadata is the right approach because it minimizes the number of
index writes (e.g. it allows the redirect URI and the content length
to be committed by a single write).

Solution: Remove [get|set]ContentLength, which are redundant anyway,
and use metadata everywhere. Also expose the keys being used through
the public API; there's no particular reason why they shouldn't be.
We previously had an API for getting and setting content length, but
no API for getting and setting redirect uri.
PiperOrigin-RevId: 225383211
2018-12-14 15:42:26 +00:00
andrewlewis
03d6f1370b Add Nexus Player to output surface workaround
PiperOrigin-RevId: 225383173
2018-12-14 15:42:17 +00:00
olly
c2c5e560e9 Add missing ..
PiperOrigin-RevId: 225379305
2018-12-14 15:42:07 +00:00
tonihei
9ed2a393b0 Add FilterableMediaPeriod interface and SmoothStreaming implementation.
This interface allows to put the mapping from tracks to StreamKeys in the same place
where we map manifest to tracks.

PiperOrigin-RevId: 225377033
2018-12-14 15:41:57 +00:00
olly
9c4258fef9 Clarify that the shutter can prevent flicker
PiperOrigin-RevId: 225374071
2018-12-14 15:41:47 +00:00
eguven
383df3f0c3 Add start and update time fields to DownloadState
PiperOrigin-RevId: 225363788
2018-12-14 15:41:37 +00:00
tonihei
36f2bead16 Clarify StreamKey documentation.
StreamKey makes only sense in the context of a specific manifest type and its only
used for manifest filtering.

PiperOrigin-RevId: 225360357
2018-12-14 15:41:28 +00:00
eguven
41f76bdb53 Convert DownloadState id to String
For now this id can not be set by client but auto generated using
content cache key and uri.

PiperOrigin-RevId: 225356645
2018-12-14 15:41:18 +00:00
olly
044066f4b1 Add 4K Bravia to output surface workaroud
PiperOrigin-RevId: 225344232
2018-12-14 15:41:08 +00:00
Oliver Woodman
3bfe103b82 Merge pull request #5245 from natario1:videosize-override
PiperOrigin-RevId: 225187852
2018-12-14 15:40:57 +00:00
tonihei
c03b7e32e2 Remove TrackKey and its remaining usages.
This is no longer needed as the public API uses TrackSelection as the way to specify
selected tracks.

PiperOrigin-RevId: 225158867
2018-12-14 15:40:36 +00:00
eguven
8cedfc46fb Add failureReason to DownloadState
PiperOrigin-RevId: 225154121
2018-12-14 15:40:26 +00:00
eguven
4bf42bd2ad Rename TaskState to DownloadState
PiperOrigin-RevId: 225145311
2018-12-14 15:40:16 +00:00
eguven
230a798f23 Create only one task for all DownloadActions for the same content
PiperOrigin-RevId: 225060323
2018-12-14 15:40:06 +00:00
olly
05bfeca50b Enable setOutputSurfaceWorkaround for dangal
Issue: #5169
PiperOrigin-RevId: 225025357
2018-12-14 15:39:53 +00:00
tonihei
defbd04675 Update StartDownloadDialogHelper to use TrackSelectionView.
This is now possible as the download helper uses a track selector.

PiperOrigin-RevId: 225014517
2018-12-14 15:39:43 +00:00
tonihei
8d137c2e61 Fix manifest uri in SsDownloadHelper.
This is the same as in SsMediaSource.

PiperOrigin-RevId: 225001911
2018-12-14 15:39:33 +00:00
olly
2f365e5a4b Don't write CachedContentIndex to disk on key removal
Issue: #5136
PiperOrigin-RevId: 224857629
2018-12-14 15:39:13 +00:00
Mattia Iavarone
c819856530 Add protected method to override the AspectRatioFrameLayout aspect ratio 2018-12-12 11:48:42 +01:00
tonihei
6a6b211233 Update DownloadHelper constructors and their usage in the demo app.
PiperOrigin-RevId: 224797598
2018-12-10 18:17:52 +00:00
olly
a02dba210c Remove no-longer-true documentation
PiperOrigin-RevId: 224793600
2018-12-10 18:17:52 +00:00
eguven
b23b86d137 Apply EOS flush workaround to stvm8 devices
Issue:#5203
PiperOrigin-RevId: 224726041
2018-12-10 18:17:52 +00:00
eguven
480bb50b54 Add DownloadActionUtil class
PiperOrigin-RevId: 224647076
2018-12-10 18:17:52 +00:00
tonihei
22948f2eda Use TrackSelector in DownloadHelper.
This adds the basic track selection capabilties (including tests).
The new capabilities are not exposed yet through the DownloadHelper implementations
and there will also be more helper methods (e.g. to select multiple audio lanuages at
once).

PiperOrigin-RevId: 224518477
2018-12-10 18:17:52 +00:00
eguven
771aa080f6 Add totalBytes to TaskState
PiperOrigin-RevId: 224506700
2018-12-10 18:17:52 +00:00
eguven
17e8c55425 Extract DownloadThread class from DownloadManager.Task
PiperOrigin-RevId: 224492268
2018-12-10 18:17:52 +00:00
tonihei
c48b77d1ec Use media source tag in dummy timeline.
This is now possible as it's directly accessible from the media source.

Issue:#5177
Issue:#5155
PiperOrigin-RevId: 224321917
2018-12-10 18:17:52 +00:00
tonihei
5776bed190 TrackSelection.Factory clean-up.
We currently have two factory methods where it is completely unclear which one needs
to be overridden.

This change deprecates the old one, adds a Util method to easily map back from the new
to the old behaviour, and updates all implementations of the now deprecated method in
our code.

PiperOrigin-RevId: 224303560
2018-12-10 18:08:50 +00:00
andrewlewis
9a5096ee64 Disable post processing on Nvidia devices
PiperOrigin-RevId: 224291309
2018-12-10 18:08:44 +00:00
Michał Seroczyński
ea2d1f89b7 Blacklist OMX.SEC.mp3.dec and OMX.brcm.audio.mp3.decoder on Samsung devices 2018-12-07 15:49:19 +01:00
Zsolt Matyas
80807534f0 CEA608: Match alignment of consecutive lines in POP-ON mode
[Problem]
As the alignment of each lineas are calculated individually, the
artificially introduced CENTER and RIGHT alignments can be mixed
with each other and with the default LEFT alignment. The mixed results
look worse than just using the original DEFAULT, and the readability
is radically decreased.

[Solution]
Pre-calculate the alignment for each line, and use the leftmost of them
for all lines. The intention of caption provider could be different, but
the worst case scenario is that we revert back everything to LEFT
alignment that is the only option in the CEA608 standard so we
show everything at the exact location it is set in the content.
The readability is never worse than the one given by the content
provider.

[Test]
This should influence CEA608 pop-up cations only. (Not roll up).
Test various live channels with this change.
Note: Beginning of commercials tend to have PAINT-ON mode as that
is immediately showing incoming characters, not just at the end
of the line like POP-on mode.
2018-12-05 13:02:16 -08:00
Oliver Woodman
556dd7e9e0 Merge pull request #5187 from BrainCrumbz:feat/get-tag
PiperOrigin-RevId: 224166374
2018-12-05 17:49:07 +00:00
tonihei
b993367a3b Add util method to extract renderer capabilities.
This instantiates the renderers and extract the capabilities. None of the known
renderes incurs any overhead during instantiation.

PiperOrigin-RevId: 224118511
2018-12-05 17:48:58 +00:00
Oliver Woodman
0d79208cd6 Merge pull request #5147 from zsmatyas:dev-v2
PiperOrigin-RevId: 224114911
2018-12-05 17:48:52 +00:00
olly
22a8aa311b Clean up requesting non-media segments in downloader implementations
- Enable GZIP for media playlist + encryption key chunk requests in
  HLS, as we do during playback
- Pass around DataSpecs rather than Uris. This will be needed for if
  we add manifest cacheKey support (which seems like a good idea for
  completeness, if nothing else)

PiperOrigin-RevId: 224057139
2018-12-05 17:48:45 +00:00
olly
f8b85739b1 Fix race condition that could cause downloader not to be canceled
PiperOrigin-RevId: 224048465
2018-12-05 17:48:39 +00:00
olly
5bbe3ae7d6 Cache data with unknown length by default
We currently default to not caching data if the content length
cannot be resolved once the DataSource has been open. The
reason for this is to avoid caching progressive live streams.
By doing this we were accidentally not caching in other places
where caching is possible, such as DASH/SS/HLS segments during
playback if the server doesn't include a Content-Length header.
Also HLS encryption key chunks, which were very unlikely to be
cached during playback because we explicitly set FLAG_ALLOW_GZIP
(which normally stops content length from resolving) without
setting FLAG_ALLOW_CACHING_UNKNOWN_LENGTH.

It seems like a good idea to flip the default at this point,
and explicitly disable caching in the one case where we want
that to happen.

PiperOrigin-RevId: 223994110
2018-12-05 17:48:34 +00:00
tonihei
976a21f139 Add no-op defaults to Video(Audio)RendererEventListener.
This is in line with how Player.EventListener and AnalyticsListener methods are
defined and helps to only implement the callbacks needed.

PiperOrigin-RevId: 223991262
2018-12-05 17:48:28 +00:00
tonihei
8a566fb330 Converge DownloadHelper implementations.
Moving most of the logic to the base DownloaderHelper helps to implement track
selection for downloading in a single place instead of multiple places.

PiperOrigin-RevId: 223964869
2018-12-05 17:48:18 +00:00
olly
8de149eb78 Use custom cache key factory for removal as well as downloading
Issue #5013

PiperOrigin-RevId: 223838303
2018-12-04 06:02:33 +00:00
olly
87a74ee021 Simplify DownloadManager.Task to use external state
PiperOrigin-RevId: 223797364
2018-12-04 06:02:28 +00:00
olly
f196630863 Remove contentId from Representation creators/constructor
PiperOrigin-RevId: 223796377
2018-12-04 06:02:23 +00:00
eguven
500b1faf14 Add Downloader.getTotalBytes() method
PiperOrigin-RevId: 223787832
2018-12-04 06:02:18 +00:00
tonihei
9f1e32f112 Add experimental flag to AdaptiveTrackSelection.Factory to block fixed track bandwidth
This option to block bandwidth already exists on the AdaptiveTrackSelection itself
but it's not currently possible to forward the total fixed track bandwidth
automatically.

PiperOrigin-RevId: 223785139
2018-12-04 06:02:13 +00:00
olly
24f2cbb215 updateQueuedPeriods(): If known duration changed for a media period, remove all media periods after
PiperOrigin-RevId: 223603915
2018-12-04 06:02:07 +00:00
GiuseppePiscopo
a11a8716ef feat(MediaSource): provide getTag default implementation 2018-12-03 18:24:38 +01:00
GiuseppePiscopo
b278b02816 chore(MediaSource): move getTag after removeEventListener 2018-12-03 18:21:37 +01:00
GiuseppePiscopo
8a359bb1fb feat(MediaSource): client code can get the tag of a MediaSource 2018-12-03 15:17:36 +01:00
olly
ffbb0da893 Prevent Cea608Decoder from generating Subtitles with null Cues list.
PiperOrigin-RevId: 223580953
2018-12-01 00:08:21 +00:00
olly
d98ab35a61 Add several devices to setOutputSurface workaround:
- Asus ZenFone GO (ASUS_X00AD_2)
- Sugar S9 (i9031)
- Redmi Note 3 (kate)

These devices trigger native crashes similar to
https://github.com/google/ExoPlayer/issues/4460

I'm not sure why Asus Zenfone Go (model: ZB500KL, device: ASUS_X00AD_2) was removed here
73af056da3

PiperOrigin-RevId: 223580393
2018-12-01 00:08:16 +00:00
olly
d650f8e0e3 Remove ability to inject content-id via DashManifestParser
It doesn't make sense for multi-period manifest

PiperOrigin-RevId: 223537958
2018-12-01 00:08:10 +00:00
olly
a1b8e17ed1 Remove Representation.contentId. It doesn't really make sense.
PiperOrigin-RevId: 223535353
2018-12-01 00:08:05 +00:00
tonihei
8ffef3d632 Add clarification to TextOutput doc.
The list may be empty if no cues are available.

PiperOrigin-RevId: 223527105
2018-12-01 00:07:59 +00:00
olly
88af944891 Move CachedContentIndex and SimpleCacheSpan tests to robolectric
PiperOrigin-RevId: 223518390
2018-12-01 00:07:48 +00:00
olly
beae7c9df5 Don't resolve UtcTiming element for static manifests
It doesn't do anything useful in this case.

PiperOrigin-RevId: 223516909
2018-11-30 16:13:52 +00:00
tonihei
ea483f8c8e Fix some potential Uri nullness violations.
PiperOrigin-RevId: 223476569
2018-11-30 16:13:42 +00:00
andrewlewis
282cf303a4 Fix clearkey DRM UUID passed to MediaCrypto
PiperOrigin-RevId: 223324279
2018-11-29 12:35:30 +00:00
andrewlewis
699fee9727 Replace remaining stbl assertions with warnings
Issue: #5162
PiperOrigin-RevId: 223193019
2018-11-29 12:35:12 +00:00
olly
f45943b4fb Bump for 2.9.2
PiperOrigin-RevId: 223141203
2018-11-28 11:44:41 +00:00
andrewlewis
510749fa15 Handle metadata failing to decode in MetadataRenderer
Issue: #5149
PiperOrigin-RevId: 223121651
2018-11-28 09:32:17 +00:00
olly
05a79a417a Fall back to TYPE_ROTATION_VECTOR if TYPE_GAME_ROTATION_VECTOR unavailable
Issue: #5119
PiperOrigin-RevId: 222978448
2018-11-27 15:46:10 +00:00
olly
1ce33362c9 Strip private ID3 data from HLS sample formats
Issue: #5063
PiperOrigin-RevId: 222975020
2018-11-27 15:45:58 +00:00
olly
6819192690 Clean up CacheDataSourceTest
PiperOrigin-RevId: 222965111
2018-11-27 15:45:51 +00:00
olly
aacb212c17 Remove duplicate CacheAsserts class
PiperOrigin-RevId: 222963935
2018-11-27 15:45:45 +00:00
olly
e317305909 Remove custom data from remove actions
A remove action will eventually just be the unique ID of the download
that should be removed. This is a step toward that goal.

PiperOrigin-RevId: 222832456
2018-11-27 15:45:38 +00:00
Zsolt Matyas
d1e49f2074 CEA608: PAINT-ON Mode must keep the last shown captions on the screen
[Problem]
PAINT-ON mode is not implemented. From the compliance tests:
* RDC command has no effect except to select paint-on style.
* Next data are written directly to the display upon receipt.
* If other captioning is already on the screen, the four-row
limit is still in effect.

[Solution]
It is a rare use case, we do not support overriding characters in
existing cueBuilders as PAINT-ON would require. But several
compliance tests check if the screen is cleared when the mode
switch happens. We must keep the old captions when switching
to PAINT-ON mode

[Test]
- Live Over-the-Air content, beginning of commercials often uses
PAINT-ON mode
2018-11-26 11:39:02 -08:00
olly
f4d9deddaf Remove spurious VisibleForTesting annotation
It needs to have package visiblity, otherwise nothing can use it.

PiperOrigin-RevId: 222821546
2018-11-26 16:40:40 +00:00
olly
a31a3f3c73 Simplify DownloadActionTest legacy tests using assets
PiperOrigin-RevId: 222819933
2018-11-26 16:40:34 +00:00
olly
3e150b54f4 Assume text tracks in protected SmoothStreaming are not protected
Issue: #4838
PiperOrigin-RevId: 222805051
2018-11-26 16:40:21 +00:00
olly
d6b6600a28 Fix unnecessary media playlist requests when playing live streams
Issue: #5059
PiperOrigin-RevId: 222803511
2018-11-26 16:40:14 +00:00
olly
40c65dbcea Move deserialization code to a more natural location
- Add DownloadAction.fromByteArray for symmetry with toByteArray
- Make DownloadService call fromByteArray, for symmetry with calls
  to toByteArray

PiperOrigin-RevId: 222801703
2018-11-26 16:40:08 +00:00
Oliver Woodman
5284ad2e41 Merge pull request #5144 from google:dev-v2-vttfix
PiperOrigin-RevId: 222798467
2018-11-26 11:06:10 +00:00
olly
17eadcc433 Fix Cea608 caption valid
PiperOrigin-RevId: 222797622
2018-11-26 11:05:55 +00:00
Oliver Woodman
166acad93d Noop fix to WebvttDecoder
We already have tests for comment blocks, and they already
pass because we discard the comment when we fail to parse it
as a cue. We should just skip it directly, however.
2018-11-26 10:50:49 +00:00
olly
799bf16764 Pull reading of data bytes back above if(...){continue} clauses
PiperOrigin-RevId: 222633838
2018-11-23 17:59:27 +00:00
Oliver Woodman
e2e1c459c8 Merge #5140: Cea608 - Check parity and valid bits
Imported from GitHub PR https://github.com/google/ExoPlayer/pull/5140

https://github.com/google/ExoPlayer/pull/5086 moved onto the right branch.
Merge 8822e188d24c1d9b3ed101918763b16e46c8debc into 0c385a854d

PiperOrigin-RevId: 222633340
2018-11-23 17:47:40 +00:00
olly
1216068255 Add Lint.IfChange/ThenChange for repeat modes
PiperOrigin-RevId: 222630411
2018-11-23 17:40:54 +00:00
olly
ea8696d820 Ensure changes are reflected into attrs
PiperOrigin-RevId: 222628386
2018-11-23 17:40:42 +00:00
BrainCrumbz
d3095cccfe Merge #5126: fix(playlist): always call onCompletion when moving media sources
Imported from GitHub PR https://github.com/google/ExoPlayer/pull/5126

Closes #5125
Merge 55a4c1e15de7f100f37e38119f1da360910fd1e3 into fe41f17c38

PiperOrigin-RevId: 222612873
2018-11-23 12:37:57 +00:00
aquilescanta
fe41f17c38 Move listener invocation classes to BasePlayer
PiperOrigin-RevId: 222609579
2018-11-23 12:31:35 +00:00
tonihei
1a9705e247 Fix show_buffering attribute values.
The corresponding IntDef has changed without updating the attribute values.

Issue:#5139
PiperOrigin-RevId: 222598044
2018-11-23 12:31:24 +00:00
tonihei
f8a3c135e5 Use overflow-save add operation for blacklisting duration.
This allows to specify open-ended blacklisting with Long.MAX_VALUE.

PiperOrigin-RevId: 222550939
2018-11-23 12:31:12 +00:00
Oliver Woodman
56e4860cb0 Remove stray proguard files 2018-11-23 12:28:23 +00:00
olly
dd2cba04dd Offline refactor step 1b - Consolidate tests
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222529260
2018-11-22 13:40:38 +00:00
olly
dd47bfffb0 Fix HLS ID3 sniffing
The input.getLength() check is invalid because the length may be
unknown (i.e. if the server doesn't include a Content-Length
response header when serving chunks).

Issue: #5063 (tangentially related only)

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222406347
2018-11-22 12:51:35 +00:00
aquilescanta
5f12b065a4 Support removal of ranges from ShuffleOrders
This allows more efficient range removals and is consistent with addition,
which supports adding multiple elements in a single operation.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222396310
2018-11-22 12:50:01 +00:00
olly
265462bcbd Support Opus and Flac in MP4/DASH
Issue: #4883

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222392621
2018-11-22 12:48:24 +00:00
tonihei
1699fbfa74 Add experimental option to subtract non-allocatable bandwidth.
This allows to account for bandwidth used by fixed track selections.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222383736
2018-11-22 12:42:32 +00:00
eguven
10eaa7d748 Replace BandwidthMeter with BandwidthProvider in AdaptiveTrackSelection
BandwidthProvider allows bandwidth allocation logic to be customized.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222293581
2018-11-22 12:41:05 +00:00
olly
6ebb6124bb Offline refactor step 1a - Make DownloadAction concrete
1. Pull up all subclasses of DownloadAction into DownloadAction
2. Add DownloaderFactory for Downloader instantiation, and DefaultDownloaderFactory
   to replace the instantiation logic being removed from the DownloadAction
   subclasses.

This change will upgrade existing action files gracefully (i.e. it does not
lose compatibility with the existing offline implementation, other than some
minor breaking changes to the API).

TODOs:

1. Move test methods from the XDownloadActionTest classes into DownloadActionTest.
   This will be done in a subsequent CL. There's a lot of consolidation that can
   be done here, including de-duplicating some of the test code added in this CL.
2. Look at merging DownloaderConstructorHelper into DefaultDownloaderFactory.
3. Use customCacheKey in DASH/HLS/SS Downloaders, for completeness.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222258983
2018-11-22 12:39:37 +00:00
Arnold Szabo
651db9159e #1583 - Adding support for pixel defined regions 2018-11-22 11:09:44 +02:00
eguven
527f2cf730 Add TrackSelection.Factory createTrackSelections
createTrackSelections decides whether to create an adaptive or a fixed track seletion to create.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222231011
2018-11-20 17:43:01 +00:00
tonihei
55cc0df558 Create actual copy of listener list instead of just copying the reference.
Forwarding the listeners to the notification update is meant to ensure we
only notify the listeners which were registered at the time the event happened

However, we currently just copy the reference to the actual list instead of
doing a deep copy of the listeners.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222227735
2018-11-20 17:41:24 +00:00
tonihei
b7ab570094 Use serialized listener notification for all listener notifications.
This ensures that all callbacks use the same notification mechanism.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222226913
2018-11-20 17:39:40 +00:00
tonihei
771db2c9fc Move playWhenReady update out of PlaybackInfoUpdate.
The update is actually unrelated and putting it all in one large update
object complicates adding the same update mechanism for other values.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222226825
2018-11-20 17:38:04 +00:00
tonihei
edff52ba5f Add buffer size based adaptive track selection.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222221294
2018-11-20 17:36:28 +00:00
eguven
f48ad85b19 Add experiment to use WindowedTrackBitrateEstimator
WindowedTrackBitrateEstimator, uses future and past chunks in a window
of time to estimate track bitrate values.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222065409
2018-11-20 17:30:04 +00:00
mdoucleff
c096e156b1 Interpret single-item audio stream edit lists as audio padding specification. Use the information to strip out padding from decoded audio streams.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221865861
2018-11-20 17:26:46 +00:00
tonihei
9dd814fcfe Improve DefaultLoadControl.shouldContinueLoading for the minBuffer=maxBuffer case.
Currently no path may be chosen if
minBufferUs == maxBufferUs == bufferedDurationUs.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221639199
2018-11-20 17:25:06 +00:00
tonihei
7cf62a03f0 Ensure DefaultLoadControl.Builder is single-use.
This is needed because the allocator can't be reused for example.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221638233
2018-11-20 17:23:22 +00:00
aquilescanta
67b662158c Add binarySearchCeil method for integers
This matches the binarySearchFloor method overload.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221617114
2018-11-20 17:21:39 +00:00
olly
b77109148e Workaround for TS seeking
- Increase the search window size to fix TS seeking for problematic
  media we've had provided to us.
- As per my comments on the issue, we should look at doing more here
  to better fix the problem. This will solve the worst of the
  immediate problem, however.
- The memory usage is non-trivial, particularly with the increased
  search window size. I've made the allocations only live whilst
  determining duration and seeking to address this. I've done the same
  for PS just for consistency.

Issue: #5097

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221449988
2018-11-14 18:11:12 +00:00
olly
5e6174fe38 DASH: Fix detection of end of live events
The remaining work is to split Window.isDynamic so that it's
possible to represent a window that wont be appended to, but
may still be removed from.

Issue: #4780

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221439220
2018-11-14 18:09:44 +00:00
aquilescanta
76eb06d6f2 Add Timeline to nullness check
This allows client code to run nullability checks.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221437215
2018-11-14 18:08:08 +00:00
olly
866b088d0b Noop cleanup of binary seeking / duration reading.
This is a precursor for fixing the ref'd issue. These classes are
well tested, so the tests passing should give you reasonable
confidence I didn't break anything :).

Issue: #5097

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221435824
2018-11-14 18:06:31 +00:00
olly
c20b157bd7 Wire up experiment to use AdaptiveTrackSelection based selections
LegacyVideoTrackSelection is the previous implementation (unchanged).
VideoTrackSelection is rewritten to extend AdaptiveTrackSelection.

An experiment is added to allow use of the new VideoTrackSelection
implementation. It's envisaged that this transition will be more or
less a no-op change. The experiment flag is only in case of bugs
during roll-out, and will be removed with LegacyVideoTrackSelection
upon successful transition.

VideoTrackSelection also implements discard-on-trick-play-exit, which
was a TODO in the previous implementation.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221153827
2018-11-14 18:04:52 +00:00
olly
9ca019b8f8 PlaybackNotificationManager should show play button in ENDED state
- This brings it in line with PlayerControlView. The play action is displayed
instead, and pressing it seeks to the default position of the current window.
- Do the same for MediaSessionConnector
- Add support for PlaybackPreparer consistent with PlayerControlView

Issue: #5072

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221076008
2018-11-14 18:01:34 +00:00
aquilescanta
51461d7e00 Add constructor to DefaultShuffleOrder to support sideloaded shuffle orders
Issue: #4915

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221075615
2018-11-14 17:59:56 +00:00
olly
eb6859e436 Align navigation implementation across UI components
This change also paves the way for splitting out functionality into a utility class.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221070262
2018-11-14 17:56:39 +00:00
olly
7508219416 Simplify PlayerControlView fast forward and rewind implementation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=221065798
2018-11-14 17:54:58 +00:00
eguven
4754aa59bd Use estimated bitrates in AdaptiveTrackSelection
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220643861
2018-11-14 17:48:20 +00:00
andrewlewis
bce1fab03c Include channel count in capabilities check
Issue: #4690

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220640737
2018-11-14 17:46:39 +00:00
bachinger
91d9fbd95d pass the notification listener to the constructor
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220616166
2018-11-14 17:41:45 +00:00
eguven
158bc1edac Add TrackBitrateEstimator and WindowedTrackBitrateEstimator
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220529628
2018-11-14 17:35:16 +00:00
Arnold Szabo
78ef90f61c Correcting default sizing of bitmaps, code review adjustments 2018-11-12 23:11:44 +02:00
Arnold Szabo
d159050eeb #1583 - Set default region attrs in SubtitlePainter, extend TtmlDecoderTest 2018-11-10 17:07:07 +02:00
Arnold Szabo
c7f763a369 #1583 - Modify in event time generation of TtmlNode
Look for "div" tags when generating the set of times.
2018-11-08 22:22:23 +02:00
olly
f895be6b1f AudioFocusManager - Treat idle state consistently
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220500268
2018-11-07 20:31:33 +00:00
olly
8d833c319d Fix BasePlayer.next()
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220470213
2018-11-07 17:57:42 +00:00
olly
e82d29f47a Make BasePlayer.get[Next/Previous]WindowIndex more useful
When in REPEAT_MODE_ONE, it's unlikely apps want next/previous methods
on the player to keep them in the same window. Music apps in particular
tend to implement next/previous functionality as though repeat mode were
off when in this mode (i.e. current song loops forever during playback,
but next/previous navigation still navigates to next/previous items).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220469655
2018-11-07 17:57:42 +00:00
olly
15dda17905 Make TimelineQueueNavigator shuffle aware
Issue: #5065

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220468285
2018-11-07 17:57:42 +00:00
olly
0dfd478a20 Add missing update on repeat toggle mode change
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220461315
2018-11-07 17:57:42 +00:00
eguven
5a18a98fbd Add TrackSelectionUtil getBitratesUsingPastAndFutureInfo
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220447459
2018-11-07 17:57:42 +00:00
eguven
7a114cb374 Uncomment VisibleForTesting annotations
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220432564
2018-11-07 17:57:42 +00:00
eguven
d7e23f826b Fix package visibility comments
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220323772
2018-11-07 17:57:42 +00:00
borrelli
0c4d0ee1c1 Fix for #5055 - Cannot disable audio focus after enabled.
This fixes an issue where disabling audio focus handling
while audio focus is held would not release audio focus.

A new test was added for this situation.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220316866
2018-11-07 17:57:42 +00:00
andrewlewis
abb7d8a2d5 Include UI module tests in open source push
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220277660
2018-11-07 17:57:42 +00:00
Arnold Szabo
eafca5402a #1583 - Correcting comment in TtmlNode#getCues() 2018-11-06 21:54:34 +02:00
Arnold Szabo
254a586e27 #1583 - Parsing base64 encoded image data from metadata 2018-11-06 21:25:08 +02:00
andrewlewis
032883e1d2 Work around non-empty EoS buffers with timestamp 0
Issue: #5045

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220237752
2018-11-06 11:07:06 +00:00
andrewlewis
a8d1f04f92 Document error case for generateAudioSessionIdV21
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220132865
2018-11-06 11:07:06 +00:00
olly
8844694dfd Automated g4 rollback of changelist 219585084.
*** Reason for rollback ***

Rolling forward again as [] should fix issue that prompted the rollback

*** Original change description ***

Automated g4 rollback of changelist 219130576.

*** Original change description ***

Re-enable codec re-use

Issue: #2826

***

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220124362
2018-11-06 11:07:06 +00:00
eguven
0afd9c17e6 Add TrackSelectionUtil getBitratesUsingPastInfo
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220066159
2018-11-06 11:07:06 +00:00
eguven
37f4540156 Move BaseGvrPlayerActivity to com.google.android.exoplayer2.ext.gvr
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219829614
2018-11-06 11:07:06 +00:00
olly
c5db69d22c Fix further issues with decoder re-use
It's no longer guaranteed that onOutputFormatChanged will always be
called when the renderer is re-enabled, since the codec may be kept
and its output format may not change. Hence we need to avoid resetting
state in onDisabled that we need when the renderer is enabled again.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219821519
2018-11-06 11:07:06 +00:00
olly
251c420767 Experimental parameter for setting a render time limit in MediaCodecRenderer
Currently, MediaCodecRenderer's render loop does not have any time limit. We
always try to drain and feed as much buffers as possible. This may lead to a
pattern of feeding phase takes too much time from previous loop, which makes
the next draining phase drops all buffers, making these buffers available for
feeding all at once, and the pattern keeps repeating.

This CL adds an experimental parameter for setting a time limit. If the time
limit is exceeded, the feeding process stops even if more input could be fed.
The default behavior is unchanged

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219820386
2018-11-06 11:07:06 +00:00
aquilescanta
34797651c2 Add support for .cmf* extension in DefaultHlsExtractorFactory
This makes extractor selection a bit more efficient for some CMAF files.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219795105
2018-11-02 16:02:02 +00:00
aquilescanta
32927bb62c Update the DefaultExtractorInput's peek buffer length on each write
This prevents leaving an inconsistent state after a EOF exception.

Issue:#5039

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219785275
2018-11-02 16:00:33 +00:00
andrewlewis
3b1d0e270b Double the buffer duration for AC3
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219765107
2018-11-02 15:57:20 +00:00
eguven
76688589d2 Add TrackSelectionUtil.getAverageBitrates method
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219636548
2018-11-02 15:54:10 +00:00
olly
e1c6229cc8 Bump version to 2.9.1
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219609471
2018-11-01 11:22:39 +00:00
andrewlewis
36fef95f47 Fix extended service number calculation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219597894
2018-11-01 11:21:11 +00:00
ishani
f76b80c3cb Automated g4 rollback of changelist 219130576.
*** Original change description ***

Re-enable codec re-use

Issue: #2826

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219585084
2018-11-01 11:19:35 +00:00
Oliver Woodman
a442c72814 Fix nullability 2018-10-31 20:40:57 +00:00
Oliver Woodman
2dfe7a7ad6 Misc fixes / stylistic consistency changes for merged pull requests 2018-10-31 20:37:59 +00:00
ojw28
16326bae46
Merge pull request #4930 from Comcast/program_information
Add Support for Parsing ProgramInformation
2018-10-31 20:21:44 +00:00
ojw28
3b7d0b7923
Merge pull request #5004 from pakerfeldt/status-message-invalidresponsecodeexception
Provide http status message to InvalidResponseCodeException
2018-10-31 20:01:56 +00:00
Oliver Woodman
f1d31bdf4f Fix test 2018-10-31 19:49:24 +00:00
Oliver Woodman
097c045bef Resolve conflicts 2018-10-31 19:45:32 +00:00
ojw28
02573297f4
Merge pull request #4996 from YukiMatsumura/fix-idle-requirements
fix checkIdleRequirement
2018-10-31 19:17:25 +00:00
ojw28
0501b677ad
Merge pull request #4911 from Comcast/feature/hls-audio-text-id-uniqueness
Create unique id for HLS audio and text tracks
2018-10-31 19:17:14 +00:00
eguven
9d947a56f8 Add MediaChunkListIterator
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219472988
2018-10-31 17:48:08 +00:00
olly
5f6c907c65 Reset DefaultBandwidthMeter on network type change
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219454931
2018-10-31 14:00:57 +00:00
andrewlewis
7d99794bb8 Allow MP4s with truncated stco to be played
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219448836
2018-10-31 13:59:17 +00:00
andrewlewis
1094da2b61 Fix player state transitions for postroll ads
Before this change, the player state would be STATE_ENDED then
STATE_BUFFERING (when the postroll ad was marked as played) then
STATE_ENDED again.

Queueing a final content media period with start point equal to
the content duration after a postroll ensures that the player
state doesn't change to STATE_ENDED transiently.

Switch from using C.TIME_END_OF_SOURCE to C.TIME_UNSET for media
periods that should not have an end point and are not followed
by an ad.

Content media periods before postrolls have end position
C.TIME_END_OF_SOURCE. If the postroll ad loads, its content
position is set to the content duration, which should be known
at the point of loading the postroll, then a final 'empty'
content media period with start position equal to its duration
is queued. If the postroll fails to load, this empty content
media period is queued up directly after the preceding content
media period.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219443683
2018-10-31 13:54:15 +00:00
olly
053a7bc0b9 Simplify DefaultDrmSession event handling
- Handling EVENT_PROVISION_REQUIRED is unnecessary because we handle
  it via NotProvisionedException, which was thrown on all API levels.
- Handling EVENT_KEY_EXPIRED during playback is unnecessary. All it
  does is cause an error to be thrown, but an error will be thrown
  anyway out of the MediaCodec when it tries to use the expired keys.
  It's currently a race condition where the error gets thrown from,
  where-as having it always be thrown from one place is preferable.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219172021
2018-10-31 13:50:51 +00:00
olly
7eeeb40d24 Add options for controlling audio track selection
Issue: #3314

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219158729
2018-10-31 13:49:08 +00:00
olly
069e3cbf7d Clean up DefaultTrackSelectorTest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219139356
2018-10-31 13:47:26 +00:00
olly
038238430b Re-enable codec re-use
Issue: #2826

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219130576
2018-10-31 13:45:45 +00:00
olly
4824f352de Decouple input format and codec format
This paves the way to cleanly fix the first two issues
listed in [] onDisabled will null inputFormat,
but nulling of codecFormat will remain tied to the codec
being released.

Issue: #2826

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219125458
2018-10-31 13:44:03 +00:00
eguven
5de17b9adc Add support for playing spherical videos on Daydream
RELNOTES=true

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219119888
2018-10-31 13:42:19 +00:00
olly
194d0f3331 Add a bit of structure DefaultTrackSelector, for sanity
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219109829
2018-10-31 13:38:51 +00:00
eguven
ed32e2a7f7 Add TrackSelectionUtil.getAverageBitrate method
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218877191
2018-10-31 13:37:06 +00:00
aquilescanta
9ea678c5e6 Add ExoCastMessage
ExoCastMessage contains all player management messages that the sender app can
send to the receiver app. ExoCastMessages can be serialized as JSON strings.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218846977
2018-10-31 13:35:22 +00:00
olly
ede62e97b2 Fix track selection when forceLowestBitrate is enabled:
- Only use bitrate when comparing two tracks if their bitrates are
  actually different.
- For audio, prefer to use bitrate over selection flags.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218660886
2018-10-31 13:33:32 +00:00
olly
4fe14c7693 Minor cleanup to BandwidthMeter/DefaultBandwidthMeter
- Improve variable naming
- In the edge case that bytes are transferred in a sample that
  has 0 elapsed time, carry the bytes forward into the next
  sample. If we don't do this then the estimate will be calculated
  as though those bytes were never transferred. In practice I
  suspect this very rarely occurs.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218551208
2018-10-31 13:31:43 +00:00
olly
1b6801c091 Simplify setting of codec operating rate
Issue: #2826

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218540967
2018-10-31 13:29:57 +00:00
andrewlewis
706ce49bd3 Fix handling of MP3s with appended data
Issue: #4954

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218357113
2018-10-24 18:44:35 +01:00
olly
66a6921c26 Remove non-addEventListener ways of adding an event listener
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218347641
2018-10-24 18:43:05 +01:00
olly
d56b7ad811 Clean up codec reinitialization
Issue: #2826

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218346327
2018-10-24 18:41:22 +01:00
olly
66c508651a Cleanup codec init, flush and release
Issue: #2826

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218332277
2018-10-24 18:39:41 +01:00
olly
2fc122745a Give EventDispatcher more predictable behavior
If EventDispatcher.removeListener is called to remove a listener,
and if the call is made from the same thread that said listener
handles events on, then it should be guaranteed that the listener
will not be subsequently invoked on that thread.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218331427
2018-10-24 18:37:59 +01:00
tonihei
5ce2f1763d Check if source has been prepared before releasing it.
In ConcatenatingMediaSource, the source may be removed before it started
preparing (this may happen if lazyPreparation=true). In this case, we
shouldn't call releaseSource as the preparation didn't start.

Issue:#4986

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218141658
2018-10-24 18:30:51 +01:00
eguven
ea49d39a4d Add VR string and icon
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218137830
2018-10-24 18:29:10 +01:00
olly
62759e8dd6 Cleanup VR video player sample app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=218003875
2018-10-24 18:25:51 +01:00
olly
f3b4575436 Temporarily disable codec reuse
There are multiple subtle issues with the current implementation:

1. setOperatingRate can cause a codec initialization even if the
   renderer is disabled. This is not supposed to happen.
2. If the codec is released whilst the renderer is disabled, the
   renderer can instantiate a new codec using the old format when
   it's enabled again, only to immediately have to reconfigure or
   release it if the actual format to be played is different.
3. Codec reuse does not take into account renderer configuration.
   The specific case where this is problematic is if the video
   renderer is re-enabled with a different tunneling session id.
   The reused codec is then not configured correctly.

Also moved availableCodecInfos reset into releaseCodec for sanity.

Issue: #2826

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217924592
2018-10-24 18:24:12 +01:00
andrewlewis
bb5a9ef8ad Remove extra blank line
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217907544
2018-10-24 18:22:31 +01:00
olly
42c9b244ee Make context non-optional in AudioFocusManager
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217897796
2018-10-24 18:20:54 +01:00
tonihei
6977fdbc1d Properly reset period id and start position in ExoPlayerImpl.
This is a no-op change as the respective values are not used so far but
the change makes the current state cleaner and is less error-prone.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217892421
2018-10-24 18:17:33 +01:00
olly
ca4b5d0a0d Make context non-optional for DefaultBandwidthMeter
- Added ability to override the DefaultBandwidthMeter network type.
- These methods currently only work properly if called before the
  meter is used, but the plan is for them to be handled in the same
  way as internally detected network changes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217887019
2018-10-24 18:15:53 +01:00
tonihei
4c6507e7a0 Remove deprecated MediaSource.prepareSource.
This method only ensured backward compatibility while the new version was not
public yet. Now ExoPlayer 2.9.0. is public, this workaround can be removed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217881691
2018-10-24 18:14:09 +01:00
olly
bf57d44023 Update VR video player sample app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217874381
2018-10-24 18:12:29 +01:00
eguven
8f3c3e2841 Add GlUtil createBuffer overload which doesn't copy values
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217846755
2018-10-24 18:10:43 +01:00
tonihei
70ccbc6eb8 Fix review comments
See https://github.com/google/ExoPlayer/pull/5004
2018-10-24 11:47:36 +02:00
Patrik Åkerfeldt
8c5703e931 Provide http status message to InvalidResponseCodeException
When response code alone is not enough to distinguish error responses, the http status message is helpful.
2018-10-23 16:51:46 +02:00
Yuki312
9d114b1ccb fix checkIdleRequirement 2018-10-23 17:13:26 +09:00
olly
1ef3efaa90 Automated g4 rollback of changelist 217356705.
*** Reason for rollback ***

Photos regression is resolved by []

*** Original change description ***

Automated g4 rollback of changelist 217189082.

*** Reason for rollback ***

Broke photos (b/117818304)

*** Original change description ***

Add ExoPlayer.setForegroundMode

Issue: #2826

***

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217773278
2018-10-18 23:39:51 +01:00
olly
3805717026 Decouple dummySurface lifespan from codec lifespans
I don't think there's any particular reason for releasing
dummySurface when we release the codec. It seems to make
more sense to decouple the two, and treat a dummySurface as
a resource that should be released on reset.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217711788
2018-10-18 23:39:51 +01:00
olly
1c6abc8b03 Set output on surface in all states
setSurface only sets the output surface on the codec if the
renderer is enabled or started. This was fine in the past
because the codec was always null in other states, however
the recent codec reuse work means this is no longer the case.

The output surface should always be set if the codec is
non-null. If setting the surface requires releasing the codec
instance, we should only instantiate the new instance if
enabled or started. This is in line with what onDisabled does
if flushing requires releasing the codec

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217676434
2018-10-18 23:39:51 +01:00
olly
05a98a7b79 Code shrinking doesn't like Class.super.defaultMethodName
Just not doing it seems simplier and more obviously correct
than suppressing the warnings in our proguard file.

Issue: #4890

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217675527
2018-10-18 23:39:51 +01:00
eguven
86fdcb08d8 Fix documentation confusion in MediaChunkIterator subclasses
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217505571
2018-10-18 23:39:51 +01:00
falhassen
423a954e1b Automated g4 rollback of changelist 217189082.
*** Reason for rollback ***

Broke photos (b/117818304)

*** Original change description ***

Add ExoPlayer.setForegroundMode

Issue: #2826

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217356705
2018-10-18 23:39:31 +01:00
andrewlewis
ee02c6789a Support seeking based on MLLT metadata
Issue: #3241

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217252254
2018-10-18 23:20:54 +01:00
olly
bfd67992f4 Add ExoPlayer.setForegroundMode
Issue: #2826

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217189082
2018-10-18 23:19:09 +01:00
olly
dbf5b073a6 Network type cleanup
1. Remove option to pass null context to Util.getNetworkType. IMO it's
   clearer for the caller to just not call the method in this case.
2. Stop using deprecated DefaultBandwidthMeter.Builder constructor in
   all but one place.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217147091
2018-10-18 23:17:16 +01:00
olly
6e7b41512f No-op cleanup of DefaultDrmSessionManager
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217139869
2018-10-18 23:15:34 +01:00
Lieblich, Jonathan
0af9ccc990 added handling of unexpected tags 2018-10-15 15:37:42 -06:00
Lieblich, Jonathan
a7ace58712 Merge branch 'dev-v2' into program_information 2018-10-15 15:35:49 -06:00
olly
6fb8f66ba6 Remove assertion causing failure on some Samsung devices
The assertion was so weak it probably wouldn't detect genuine
misuse of the DefaultAllocator API, so it seems fine just to
remove it.

We don't really know what happens when the player is allowed to
continue on the affected devices, but hopefully it either "just
works" or fails in a more graceful way.

Issue: #4532

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217113060
2018-10-15 11:14:56 +01:00
olly
d511370338 Fix DashManifestParser to properly skip unknown tags
Robustness fix to make sure we ignore tags with known names, but
which are nested inside of unknown tags. For example we don't want
to parse the third period in:

<Period>...</Period>
<Period>...</Period>
<CustomTag>
  <Period>...</Period>
</CustomTag>

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217101630
2018-10-15 09:36:56 +01:00
olly
ba6a118998 Retain decoder instance after the renderer is disabled
Issue: #2826

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=216852679
2018-10-15 09:35:23 +01:00
olly
842f622d29 Allow codec flushing without re-initialization
For decoder reuse, we want disable() to flush the decoder. However,
if the flush needs to release the decoder for some reason, it seems
non-ideal to immediately re-initialize it. Re-initialization can
also throw ExoPlaybackException, which we don't want for disabling.

This change allows a variant of flush that wont re-initialize the
decoder if it has to be released, which will be used from disable().

Issue: #2826

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=216834862
2018-10-15 09:33:37 +01:00
andrewlewis
42c3ff3934 Handle rotation signaled in MKV track name from HTC devices
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=216704331
2018-10-15 09:31:51 +01:00
andrewlewis
81a9293072 Project start position for preroll ad to content transitions
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=216675981
2018-10-15 09:30:06 +01:00
vsethia
048c8bd68f Snapshots are going to become the default soon and these tests are failing when
reloading frmo snapshots. b/117347850. This is a no-op change as the current
default == _fullboot. When we globally flip and make snapshots the default,
these tests would fail and we are moving them over so that when we flip your
tests still pass.

https://groups.google.com[]forum/#!topic/mobile-ninjas/Y69PTAT5GyY

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=216634430
2018-10-15 09:28:21 +01:00
tonihei
0a7745bc03 Fix some random Android Studio warnings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215904019
2018-10-15 09:26:36 +01:00
olly
c5f9ad9f8b Minor fixes for period clipping
- Always clip to period duration for the last chunk. We previously
  did this only when the last chunk explicitly exceeded the period
  end time. We now also do it when the chunk claims to end at the
  period boundary, but still contains samples that exceed it.
- If pendingResetPositionUs == chunk.startTimeUs == 0 but the
  chunk still contains samples with negative timestamps, we now
  clip them by setting the decode only flag. Previously we only
  clipped such samples if the first chunk explicitly preceeded the
  start of the period.

Issue: #4899

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215763467
2018-10-15 09:23:00 +01:00
olly
cc7684d09f Introduce Renderer.reset
- It's a no-op for now
- Renderers that want to support retaining resources will move
  some functionality from their disable() implementations into
  reset()
- ExoPlayerImplInternal will be updated to not always call reset()
  immediately after disable(), which is what will enable resources
  to actually be retained.

Issue: #2826

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215729783
2018-10-15 09:19:30 +01:00
tonihei
d4b87cdc23 Fix updates of loading period and buffered positions in PlaybackInfo.
This makes the following changes to improve consistency among the PlaybackInfo
values:
 1. Update buffered position and total buffered duration after loading period
    is set as both values are affected by a loading period update.
 2. Add copyWithPosition to allow updating the position without resetting the
    loading period.
 3. Forward the total buffered duration to playing position updates
    as it may have changed with the new playing position.

Issue:#4899

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215712328
2018-10-15 09:17:34 +01:00
tonihei
9ca6544311 Simplify some buffered position related code.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215704344
2018-10-15 09:14:04 +01:00
Lieblich, Jonathan
ced302fd83 added javadoc for ProgramInformation 2018-10-12 11:00:17 -06:00
Lieblich, Jonathan
6cbac152c9 added attribute parsin 2018-10-11 17:09:00 -06:00
Lieblich, Jonathan
ce0b5e4c44 removed custom element parsing 2018-10-11 16:25:21 -06:00
Lieblich, Jonathan
e42786d6f2 added parsing for program information 2018-10-10 15:34:29 -06:00
Brandon Davis
35cc479f76 Create unique id for hls audio and text tracks
Combine groupId and name for uniqueness
2018-10-04 11:44:59 -06:00
Oliver Woodman
7849a5eb52 Subrip cleanup 2018-10-03 22:19:13 +01:00
ojw28
16fe67bfce
Merge pull request #4582 from szaboa/feature/4306_srt_position_tags
#4306 - Extract tags from SubRip subtitles, add support for alignment
2018-10-03 22:15:11 +01:00
eguven
e91065c4b0 Remove ProjectionRenderer.EyeType
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215562599
2018-10-03 22:13:34 +01:00
eguven
645f08af73 Prevent binding to DownloadService
DownloadService isn't designed to be bound.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215552423
2018-10-03 22:12:02 +01:00
eguven
9f8c22d719 Make it possible to use CacheKeyFactory with CacheDataSourceFactory and DownloaderConstructorHelper
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215541062
2018-10-03 22:10:30 +01:00
tonihei
f0e0a7cf57 Fix left position for subtitles.
When SubtitlePainter positions the cues centred in the given box, it must add
the left offset of the box to get the correct position.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215535289
2018-10-03 22:08:57 +01:00
tonihei
43c01562d1 Fix positioning of subtitles.
SubtitleView forwards the cue box position to SubtitlePainter. This should be
the position relative to the canvas of the SubtitleView. Currently, however,
we forward the position relative to the parent of SubtitleView. That causes
problems if SubtitleView has a non-zero offset position to its parent.

Issue:#4788

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215535281
2018-10-03 22:07:25 +01:00
tonihei
4386d5d466 Replace DefaultBandwidthMeter with CountryAndNetworkTypeBandwidthMeter.
This removes the experimental bandwidth meter and uses it as the new default.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215404065
2018-10-03 22:05:52 +01:00
tonihei
a8b851ce34 Add BasePlayer to avoid code duplication for common convenience methods.
A lot of methods just forward to other methods and there is no conceivable
way a player should implement it another way. Moving these methods to a
base player class allows to remove duplicated code across our player
implementations.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215374192
2018-10-03 22:02:47 +01:00
tonihei
8b2d998440 Remove deprecated ExoPlayer members with same name as non-deprecated version.
For example, using ExoPlayer.STATE_IDLE falls back to the Player.STATE_IDLE
automatically and thus there is no need to keep the deprecated members.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215363841
2018-10-03 22:01:17 +01:00
olly
687756ed31 Update moe equivalence
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215261807
2018-10-03 21:59:44 +01:00
Arnold Szabo
56c7e1ff47 #4306 - grouping line/lineAnchor and position/positionAnchor assignments, setting Cue's textAlignment to def value - null 2018-10-02 18:45:06 +03:00
Arnold Szabo
75a7385bbb #4306 - extends test case with line and position anchor verifications 2018-10-01 23:16:48 +03:00
Arnold Szabo
fc5eb12e79 #4306 - breaking after the first alignment tag is found 2018-10-01 22:45:15 +03:00
ojw28
b4ba913008
Merge pull request #4886 from talklittle/protected-audiotrackscore
Make DefaultTrackSelector.AudioTrackScore protected
2018-10-01 20:05:08 +01:00
eguven
7940fdfc5e Fix DownloadManager.TaskState javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215213255
2018-10-01 19:36:06 +01:00
tonihei
46731cdd1d Fix prepare position of DeferredMediaPeriods for windows with non-zero offset.
If we prepare a deferred media period before the actual timeline is available,
we either prepare with position zero (= the default) or with a non-zero
initial seek position.

So far, the zero (default) position got replaced by the actual default position
(including any potential non-zero window offset) when the timeline became known.

However, a non-zero initial seek position was not corrected by the non-zero
window offset. This is fixed by this change.

Related to that, we always assumed that the deferred media period will the
first period in the actual timeline. This is not true if we prepare with an
offset (either because of an initial seek position or because of a default
window position). So, we also determine the actual first period when the
timeline becomes known.

Issue:#4873

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215213030
2018-10-01 19:34:29 +01:00
tonihei
90ca3716aa Improve MediaPeriodHolder documentation and member access.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215205796
2018-10-01 19:32:49 +01:00
tonihei
d97d289b6b Clarify and improve TrackSelection .enable() and .disable() calls.
These two methods are meant to indicate to the track selection that it's
started or stopped being used. This is helpful to schedule background tasks
related to track selection (e.g. register network change listeners etc.).
This intention is not clearly stated in the method docs.

Also, all track selections of all prebuffered periods stay enabled in
parallel at the moment. As the whole purpose of these methods is to know
whether dynamic updates via updateSelectedTrack may happen, it's better to
only enable track selections of the current loading media period. That's
similar to how we always forward the loading track selections to the
LoadControl.

This change:
 1. Improves the JavaDoc of TrackSelection.
 2. Disables track selections if loading moves to another period.
 3. Reenables track selection if loading moves back to a previous period.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215199987
2018-10-01 19:31:09 +01:00
andrewlewis
f59f557704 Use recommended way of checking for TV
Switch to the recommended way of checking whether the app is running on a TV
device.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215177587
2018-10-01 19:26:00 +01:00
andrewlewis
5d5b641c1d Extend physical display size workaround for ATVs
Extend Sony workaround up to and including Oreo.

Due to a platform issue the Display API couldn't report 1080p UI
and 4k SurfaceView support until Oreo. Since Oreo it is still
common for devices to misreport their display sizes via Display,
so this change switches to using system properties up to and
including Pie.

On Pie treble may prevent writing sys.display-size so check for
vendor.display-size instead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214987203
2018-10-01 19:24:17 +01:00
tonihei
5c8dabade6 Add @Documented to @IntDef and @StringDef annotations.
This makes the annotations appear in the generated JavaDoc.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214952419
2018-10-01 19:22:34 +01:00
Andrew Shu
9b111fbd95 Make DefaultTrackSelector.AudioTrackScore protected
This allows selectAudioTrack() to be overridden.
2018-09-27 18:37:21 -07:00
olly
028f3e6438 Don't recreate the audio decoder if Format is unchanged
More specifically, if the parts of the Format that are used
for decoder configuration are unchanged.

Issue: #2826

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214791234
2018-09-27 19:53:03 +01:00
tonihei
827ea63657 Fix issue with stale createPeriod events in ConcatenatingMediaSource.
If a source is removed from the playlist, the player may still call createPeriod
for a period of the removed source as long as the new timeline hasn't been handled
by the player. These events are stale and can be ignored by using a dummy media
source. The stale media period will be released when the player handles the updated
timeline.

Issue:#4871

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214787090
2018-09-27 17:51:22 +01:00
aquilescanta
e50214a5a1 Add constructor for adding payload reader factory flags
Issue:#4861

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214772527
2018-09-27 17:48:10 +01:00
cblay
d487b599f8 Also plumb new Timeline through to TrackSelector.selectTracks() so periodId is useful
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214650418
2018-09-27 17:44:40 +01:00
cblay
3073d38a5a Pass MediaPeriodId to TrackSelector.selectTracks()
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214638939
2018-09-27 17:42:57 +01:00
aquilescanta
a8efa27fab Make DefaultLoadErrorHandlingPolicy non-final
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214584874
2018-09-26 13:06:47 +01:00
eguven
c9ebaacae0 Use GlUtil class to share GL methods
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214582295
2018-09-26 13:05:17 +01:00
tonihei
b2e0a365d3 Add convenience methods player.next() and player.previous()
This simplifies code skipping items in a playlist programatically.

Issue:#4863

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214580742
2018-09-26 13:03:39 +01:00
aquilescanta
083350b7db Do not retry failed loads whose error is FileNotFoundException
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214277073
2018-09-26 13:02:02 +01:00
eguven
e86d5efb21 Recenter SphericalSurfaceView view on startup
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214261973
2018-09-24 15:36:10 +01:00
olly
c934ce744d Don't request session sharing on CDMs that don't support it
Issue: #4834

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214258163
2018-09-24 15:34:43 +01:00
olly
34c37596dd Allow configuration of DefaultLoadControl back buffer
Issue: #4857

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214254231
2018-09-24 15:33:06 +01:00
olly
275cfd9e77 Fix broken Javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213979058
2018-09-24 15:29:56 +01:00
Arnold Szabo
876080ed1a #4306 - code review fixes 2018-09-21 15:05:43 +03:00
tonihei
d411ace97d Add missing calls to LoadControl.onTracksSelected.
This method needs to be called whenever the track selection of the current
loading period changes, but also when the loading period itself (and thus
the "loading track selection") changes. These are the same situations in which
we update the loading media period id and thus we can move both updates in
a common helper method.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213959982
2018-09-21 12:21:18 +01:00
andrewlewis
03fe503f1c Propagate output format in tunneling mode
From API 23 this uses the timed format queue. Before API 23 the
format is notified as soon as the buffer is queued.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213830729
2018-09-21 12:18:12 +01:00
andrewlewis
300dc05e85 Reset start trim only if input was queued
Before this change we would reset the start trim to zero after initial
configuration (at the start of playback) and after seeking to any position. The
fact that no trimming was applied at the start of playback meant that after the
first period transition we'd see a mismatch between the next buffer timestamp
(equal to the duration of the period taking into account edits) and the duration
of audio submitted to the sink.

This change modifies the behavior so that we reset the start trim to zero only
if some audio was queued since configuration. This is incorrect in the case of
starting playback at a non-zero position, but fixes the common case of starting
at zero. As before, a later seek to any position is handled via a flush and
resets the trim as required.

Transitions from one period to the next are unaffected by this change.

One way to implement start trimming correctly would be to provide the input
buffer timestamp to the audio processors and only trim when handling audio from
the start of the stream, but that is a larger change so left for later.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213828511
2018-09-21 12:16:32 +01:00
andrewlewis
a0ab96623a Compensate for trimmed audio in buffer time check
After a period transition the first buffer queued has the sum of previous period
durations added to its source presentation timestamp. These durations take into
account gapless edits, but the check on the timestamp was based on the submitted
frame count, not the frame count after trimming.

This change fixes an issue where audio/video would gradually drift apart due to
accumulated error in the audio track position, which could lead to freezing due
to the audio renderer stopping being ready and switching to the standalone media
clock.

Issue: #4559

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213819908
2018-09-21 12:11:34 +01:00
Oliver Woodman
4b33d3c8a2 Cleanup 2018-09-20 12:46:31 +01:00
ojw28
2a235184c0
Merge pull request #4801 from nicklasl/trackselector-filter-on-framerate
Trackselector filter on framerate
2018-09-20 12:40:13 +01:00
tonihei
b07eef6d44 Fix drm nullability warnings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213650027
2018-09-20 12:32:10 +01:00
tonihei
6323c1904f Stop overriding deprecated method.
Fixed and random track selection were still overriding the deprecated version
of updateSelectedTrack.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213637728
2018-09-20 12:30:38 +01:00
tonihei
5c1829f063 Deprecate FixedTrackSelecion.Factory.
The only use of track selection factories is as adaptive track selection factories
in the DefaultTrackSelector. Using the fixed track selection factory here is dangerous
as it will throw if more than one track is selected.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213637500
2018-09-20 12:29:00 +01:00
olly
64b50ff9e6 Fix broken Javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213599127
2018-09-20 12:27:18 +01:00
sharjeel
1726f9e5fe Don't notify drop frames when maxDroppedFramesToNotify < 1
With default of value set to -1, every single dropped frame is reported because of expression: if (droppedFrames >= maxDroppedFramesToNotify) {  maybeNotifyDroppedFrames(); }

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213502573
2018-09-20 12:25:44 +01:00
olly
918a43e48d Work around adaptation issue for Tab 4
The decoder doesn't claim to be adaptive, but if we're staying
in the same resolution we'll try and re-use the decoder anyway.
The H264 decoder can't handle this case on the Tab 4 can't deal
with this case.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213478378
2018-09-20 12:24:10 +01:00
andrewlewis
7fe5230a7e Use gapless edit duration as sample table duration
This matches the non-gapless case.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213462936
2018-09-20 12:22:43 +01:00
andrewlewis
e4f41880bd Add E-AC3 Ac3Extractor sample and test
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213451163
2018-09-20 12:21:13 +01:00
aquilescanta
bca2f5c3a0 Fix Ac3 extractor sniffing for E-AC-3 frames
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213443047
2018-09-20 12:19:43 +01:00
tonihei
a92344ac9e Log warning with stack trace if player is accessed from the wrong thread.
This doesn't break apps which violate this policy. But it creates a clear
warning which is also likely to be reported in analytics tools.

Issue:#4463

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213442510
2018-09-20 12:18:15 +01:00
aquilescanta
db33b3bbd1 Allow HlsSampleStreamWrapper to cancel partial media chunk loads
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213439145
2018-09-20 12:16:47 +01:00
tonihei
decbb33490 Add super-simple SimpleExoPlayer factory method.
The DefaultTrackSelector can now be constructed without leaving out a
vital part of the initialization. This allows this new simple factory method.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213438163
2018-09-20 12:15:19 +01:00
aquilescanta
a89645d092 For HLS segment sniffing, fall back on extractor creation by file extension
This reduces the possiblity of regressions.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213436912
2018-09-20 12:13:50 +01:00
tonihei
e25b7d2148 Add wrapper for Log messages to allow settig the log level.
Currently there is no way to disable (or reduce) the logcat output generated
by ExoPlayer.

Issue:#4665

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213421072
2018-09-20 12:12:21 +01:00
aquilescanta
c9e4f6b429 Make HlsMediaSource.Factory take a factory of trackers instead of an instance
This allows creating multiple HLS media sources from a single Factory, as
required by the interface.

Issue:#4814

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213297850
2018-09-20 12:10:53 +01:00
olly
b09e36dcb7 SmoothStreaming: Test for fourCC equal to DFXP
Issue: #4824

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213285790
2018-09-17 17:58:03 +01:00
tonihei
585806de24 Clarify doc of components which only allow a main thread player.
ExoPlayer can be run on a background thread, but some components (UI and IMA)
only support players on the main thread. This adds some documentation and
assertions for that.

To simplify assertions, this also moves the getApplicationLooper method from
ExoPlayer to Player.

Issue:#4439

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213280359
2018-09-17 17:56:36 +01:00
tonihei
c18ee3f96d Add some missing @Nullable to public API to improve Kotlin compatiblity.
Kotlin will throw NPE whenever a method returns null or an interface is
called with a null parameter and the respective values are not marked as
@Nullable.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213262886
2018-09-17 17:55:03 +01:00
aquilescanta
76255dfae7 Make ExtractorsFactory javadoc consistent
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213248388
2018-09-17 17:53:30 +01:00
tonihei
d1df41a39e Fix window index comparison.
To check the validity of a window index it needs to be compared with a greater
or equal sign to the window count.

Issue:#4822

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213234403
2018-09-17 17:50:20 +01:00
aquilescanta
caa46d49e5 Explicitly document empty range removal in Util.removeRange.
Also prevent an unnecessary allocation when the removed range is empty.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212993427
2018-09-17 17:48:45 +01:00
tonihei
1284f9ea4d Add Nullable to message payload.
Not having this annotation may cause Kotlin implementations to fail.

Issue:#4802

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212980643
2018-09-17 17:47:11 +01:00
olly
6f6f381beb Fix audio and text track selection in the multi-renderer case
If we can select a track that has a strictly higher score than a
selection already made for a renderer of the same type, we should
prefer it.

Issue: #4711

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212835895
2018-09-13 18:44:53 +01:00
aquilescanta
3e4115ff3c No-op ConcatenatingMediaSource simplification
- Make addMediaSource a specific case of addMediaSources.
- Make clear a specific case of removeMediaSourceRange.
- Make removeMediaSource a specific case of removeMediaSourceRange.
- Remove the unnecessary message handling and constants.
- Move a method so that depending appears before depended.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212809667
2018-09-13 18:43:26 +01:00
olly
b17d49ed27 Add nullness annotations to a few more files
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212644046
2018-09-13 18:40:17 +01:00
olly
b4dfed874d Enable GZIP for SingleSampleMediaSource
Issue: #4771

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212623142
2018-09-12 15:32:14 +01:00
olly
a5a7e988e3 Clip DASH periods to their durations
Issue: #4185

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212619419
2018-09-12 15:30:47 +01:00
andrewlewis
35c230f3c6 Allow partial format for adaptation check
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212443793
2018-09-12 15:25:56 +01:00
tonihei
b1d48179e8 Add support to change shuffle order after playlist creation.
This allows to update the shuffle order after the ConcatenatingMediaSource
has been created. ShuffleOrder objects should be immutable to ensure thread
safety and thus there is no way to do this currently.

Issue:#4791

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212443146
2018-09-12 15:24:23 +01:00
olly
b31438b670 Clean up downstream format notification for ChunkSampleStream
- Fixes the referenced issue.
- Provides more consistent behavior for the edge case of empty
  chunks (i.e. chunks containing now samples). Format changes
  will now always be reported for such chunks, unless the empty
  chunk is discarded from upstream before there's a chance to
  do so.

Issue: #4533

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212443043
2018-09-12 15:22:47 +01:00
tonihei
21c5b0bf67 Add missing AudioSink discontinuity for stream changes.
When the stream is changed in the audio renderer, the timestamps of the
samples can no longer be expected to match the calculations in the AudioSink.

This change tracks the samples at which the stream is changed and notifies the
AudioSink of the discontinuity.

Issue:#4559
Issue:#3829

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212435859
2018-09-12 15:20:40 +01:00
olly
a083c29f7e Don't discard when a reset is pending
When a reset is pending the sample queues normally contain pre-seek
samples (which will be emptied when a pending load is canceled). The
position passed to discard will be a post-seek position. I don't
think anything bad happened in any of the cases being changed, but
discarding is unnecessary in such cases, and reasoning about such
cases is difficult.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212435556
2018-09-12 15:18:56 +01:00
olly
46af49e282 Clean up easy cases of downstream format notification
- This makes it so that onDownstreamFormatChanged will occur before the corresponding
  renderer event. This was not previously the case, since the renderer would typically
  read the format (and report its event), then a sample (causing the
  onDownstreamFormatChanged event).
- The remaining ones to update are ChunkSampleStream (DASH + HLS), which will be done
  in a way that fixes #4533, and HLS.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212434874
2018-09-12 15:17:19 +01:00
olly
6c3c71b554 Fix SampleQueue splicing when sampleOffsetUs != 0
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212432661
2018-09-12 15:15:41 +01:00
olly
ba8c22aba5 Make seeking when there's a pending reset more obviously correct
If there's already a pending reset, we need only update the pending
reset position. We can currently end up calling cancelLoading more
than once on the loader for the same task, which is hard to reason
about (although I don't think anything actually broke in practice).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212432266
2018-09-12 15:14:02 +01:00
tonihei
72efc80037 Correct timescale of edit list duration parsing for stbl atoms.
We currently apply the track.timescale whereas we should be applying the
track.movieTimescale. The parsing for the trak atom does this correctly
and the duration from the trak atom currently always takes precedence over the
durations from the stbl atoms as it's always larger.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212421687
2018-09-12 15:12:20 +01:00
andrewlewis
be11369966 Remove UnhandledEditListException
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212303130
2018-09-12 15:10:44 +01:00
tonihei
bf0a7937e2 Fix util nullness warnings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212276150
2018-09-12 15:09:09 +01:00
andrewlewis
09aaec6b01 Add proguard configuration for download actions
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212266041
2018-09-12 15:07:31 +01:00
tonihei
95aa5db148 Reenable edit lists without keyframe again but remove samples before keyframe.
Ignoring all edit lists if they don't start with a keyframe causes A/V sync
issues when valid edit lists are applied at the beginning.

This change allows such edit lists again but removes all samples before the
first keyframe (these samples would be ignored by the renderer anyway if at
the beginning OR cause visible distortions when appended to an unrelated
keyframe).

Issue:#4774
Issue:#4348

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212244407
2018-09-12 15:05:53 +01:00
tonihei
1a80097308 Fix NPE in FrameworkMediaDrm.
Currently causing GTS tests to fail.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212244198
2018-09-12 15:04:24 +01:00
aquilescanta
b14e0935b1 Add container format sniffing in HLS
Issue:#2025

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211977802
2018-09-12 15:02:57 +01:00
olly
cb5c78917c Simplify notification of downstream format change for embedded track
- There's no particular need to read or skip a sample before notifying
- Add missing isPendingReset check

Issue: #4533

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211959762
2018-09-12 15:00:01 +01:00
olly
38386c480a Be explicit about character set.
The default character set is always UTF-8 anyway on Android, but
we don't want our code to behave any differently where it's not
(e.g. robolectric test runs could potentially run in an environment
where UTF-8 isn't the default?).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211953885
2018-09-12 14:58:33 +01:00
tonihei
77a529f0ed Add static Util.EMPTY_BYTE_ARRAY
This prevents repeated instantiation of empty arrays.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211941723
2018-09-12 14:57:01 +01:00
josephmarques
aa7134d538 Adds support for the messageData attribute of the Event element in DASH MPDs for ExoPlayer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211854408
2018-09-12 14:55:34 +01:00
aquilescanta
f47f1b9f4b Remove BOM check in Webvtt header checks
Reverts the BOM check changes in []

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211826731
2018-09-12 14:54:06 +01:00
tonihei
67a2bb3d28 Fix various period preparation and source info refresh error throwing issues
1. Currently, we may throw source info refresh errors while the previous media
   period is still playing.
2. We don't throw if the next period in a playlist fails to prepare and the
   previous renderers are all disabled.
3. We throw source info refresh errors for playlists before playback reaches
   the culprit source.

This change:
1. Defers the exceptions until all existing media periods have been played.
2. Checks for period preparation exception if the next period is not
   getting prepared and the renderer time reached the next period.
3. Does no longer throw from ConcatenatingMediaSource.maybeThrowSourceInfo
   RefreshError. The deferred media periods take care of that for each source
   individually.

Issue:#4661

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211819436
2018-09-12 14:52:33 +01:00
Nicklas Lundin
14f7b6111b Added setMaxFrameRate to ParametersBuilder 2018-09-06 16:17:27 +02:00
olly
502fae7cd4 Bump version to 2.9.0
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211792952
2018-09-06 13:47:59 +01:00
olly
c3c309b8a8 Blacklist OMX.SEC.mp3.dec on SM-T530
Issue: #4519

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211646358
2018-09-06 12:04:48 +01:00
bachinger
0e12eb4d92 Dispatch notification actions to the originating PlayerNotificationManager only.
Issue #4643

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211613803
2018-09-06 12:00:55 +01:00
Nicklas Lundin
4c0041f936 added maxFrameRate to the filtering done when selecting a fixed video track 2018-09-06 11:13:03 +02:00
Nicklas Lundin
4f834e7e1a added maxFrameRate to parameters and use it in the adaptive track selection filtering 2018-09-06 11:11:59 +02:00
olly
c57fe1897c Add ExoPlayer.retry convenience method
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211463309
2018-09-05 12:33:28 +01:00
aquilescanta
7959a691ad Add sniffing to WebvttExtractor
Preparation for sniffing in HLS

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211455454
2018-09-05 12:31:06 +01:00
olly
80e64e58ec WAV: Don't output data beyond the data limit
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211446207
2018-09-05 12:28:13 +01:00
Oliver Woodman
29ab6f7466 Automatic styling fix 2018-09-03 15:19:51 +01:00
ojw28
fc47f2222c
Merge pull request #4747 from kolpacheque/issue-4360-pcm-mulaw-support
Add parsing a-law and mu-law atom types
2018-09-03 15:17:18 +01:00
olly
8d0c4b1b87 Fix some Javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211352749
2018-09-03 15:16:47 +01:00
tonihei
3a802eb06c Add onDrmSessionAcquired and onDrmSessionReleased callbacks.
To report DRM session metrics in the future as part of the listener, we need
a callback at the end of the drm session to get the final metric state.
For completion, the session acquired callback is also added.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211328412
2018-09-03 14:15:51 +01:00
eguven
5335b258de Make SceneRenderer implement VideoFrameMetadataListener and CameraMotionListener
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211084127
2018-09-03 14:14:23 +01:00
aquilescanta
514edb699f Add a type check for OGG files with a single payload page
Also make some javadocs more consistent with the rest of the library.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211071559
2018-09-03 14:12:47 +01:00
borrelli
595b6b8fde Add unit tests for AudioFocusManager.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210714110
2018-09-03 14:11:10 +01:00
tonihei
d308fff88d Restructure media period queue tracker in AnalyticsCollector.
The current structure tries to associate events to media periods and windows
based on the reported values and the current timeline. However the reported
EventTime may not always be consistent in case the timeline doesn't contain
windows or media periods yet or not anymore.

The recent changes to MediaPeriodId allow to use it as a unique identifer for
media periods independent of the timeline. This enables more accurate tracking
of the media period queue and prevents reporting events with inconsistent
data.

Issue:#4492
Issue:#4634

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210713120
2018-09-03 14:09:35 +01:00
eguven
ca0e276798 Reset camera motion rotation when camera motion track is disabled
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210696525
2018-09-03 14:07:58 +01:00
olly
13889c9116 Pass multiple PSSH boxes to Widevine CDM
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210551848
2018-09-03 14:06:22 +01:00
tonihei
6b9e1824ad Extend updateSelectedTrack method with additional information.
This provides the list of currently buffered media chunks and iterators over
the potential next chunks to the track selection. Having these two parameters
enables more advanced decision logic based on this data.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210551812
2018-09-03 14:04:45 +01:00
Art Vynogradov
89080874af Add parsing a-law and mu-law atom types 2018-08-29 16:23:34 +02:00
eguven
a429f4819e Use camera motion metadata to stabilize 360 videos
RELNOTES=true

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210537375
2018-08-28 16:43:53 +01:00
olly
ce1d8d6ce2 Remove obsolete SDK_INT modification
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210531569
2018-08-28 16:42:28 +01:00
andrewlewis
efe8f09f45 Propagate EoS in renderer when using video tunneling
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210529471
2018-08-28 16:40:55 +01:00
eguven
23817eecfd Release zip inflater when finished
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210513776
2018-08-28 16:38:42 +01:00
tonihei
d0161ad18b Fix all error-prone, style, optional suggestion, etc. issues.
This fixes or suppresses all reported issues by the code review linter tools.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210107759
2018-08-28 16:37:14 +01:00
olly
ff1812d3fe Fix ClearKey prior to API 27
There are C.CLEARKEY_UUID.equals(uuid) checks in FrameworkMediaDrm,
so uuid needs to be CLEARKEY_UUID, not COMMON_PSSH_UUID

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210094372
2018-08-24 16:17:45 +01:00
olly
fdda2bb841 Make setConstantBitrateSeekingEnabled consistent with other method
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210093143
2018-08-24 16:16:24 +01:00
olly
924a76d532 Clean up use of deprecated APIs
- Add @Deprecated on overrides of deprecated method.
- Suppress deprecation warnings where appropriate.
- Use non-deprecated alternatives where appropriate.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210092434
2018-08-24 16:12:44 +01:00
olly
0da7f6ca08 Use EventLogger in ExoHostedTest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210082909
2018-08-24 16:11:07 +01:00
tonihei
335fa13063 Use set-like behaviour for BaseDataSource listeners.
This prevents problems caused by unintended double-registration of the same
transfer listener.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210078454
2018-08-24 16:07:11 +01:00
olly
38f2f352f9 Move playback tests off deprecated APIs
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210077548
2018-08-24 16:05:40 +01:00
tonihei
a71e28440d Add parameter to force disable adaptive track selection.
This option is currently not available as a non-null adaptive track selection
has to be provided. Adds a parameter "forceHighestSupportedBitrate" which
corresponds to the default fixed track selection for audio and video.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210073675
2018-08-24 16:04:06 +01:00
andrewlewis
9c36773602 Fix playback of postrolls with multiple ads
At the point of starting to play a postroll, source info refreshes for future
postroll ads in the same ad group would cause a seek that incorrectly identified
the media period to play as the content media period. Fix the logic in
getAdGroupIndexForPositionUs to address this.

Also handle empty postroll ad breaks by resetting the expected ad group index
when we send content complete.

Issue: #4710
Issue: #4681

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210071054
2018-08-24 16:02:38 +01:00
aquilescanta
24d04a26e4 Add support for variable substition in HLS
Issue:#4422

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209958623
2018-08-24 16:01:08 +01:00
olly
4d8a5c44b3 Fix some more lint issues
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209947034
2018-08-24 15:59:32 +01:00
tonihei
2a9d5c21e2 Clarify doc for Player.getDuration and add Player.getContentDuration.
Similar to getBufferedPosition and getCurrentPosition, getDuration should
mention that it also returns the duration of the current ad.

And, also similar to getContentBufferedDuration and getContentPosition, a
new method getContentDuration simplifies querying the content duration while
playing an ad.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209914696
2018-08-24 15:58:01 +01:00
eguven
3f70454cc2 Fix controller ui toggling when using SphericalSurfaceView
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209909845
2018-08-24 15:56:28 +01:00
tonihei
74e2384fb6 Add response headers to LoadEventInfo.
The response headers of the last load are available from the loading source
when creating media source events and can be easily forwarded.

Issue:#4361
Issue:#4615

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209900693
2018-08-24 15:55:01 +01:00
tonihei
4bf5e4991c Improve IntDef javadoc.
The doc can be improved by enumerating and linking all possible values from
the interface doc.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209772309
2018-08-24 15:53:30 +01:00
eguven
14c7c2995c Add android.permission.FOREGROUND_SERVICE
Apps targeting P or later now must request this permission in order to
use foreground services.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209762160
2018-08-24 15:51:58 +01:00
eguven
509be44fe8 Ignore cache span rename error
This happens rarely and SimpleCache can continue fine.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209759996
2018-08-24 15:50:28 +01:00
olly
9f0303b079 Fix a bunch of misc analysis warnings
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209758330
2018-08-24 15:48:58 +01:00
olly
9ccbb5bd6d Add some missing Nullable annotations
Also remove NonNull, since we assume NonNull by default. Except
where explicitly overriding a method with NonNull annotated args,
in which case we're still expected to use it.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209758204
2018-08-24 15:47:31 +01:00
eguven
02a8964fe2 Support VR180 videos
If available parse and use spherical metadata:
https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md

RELNOTES=true

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209754080
2018-08-24 15:44:24 +01:00
tonihei
bf43cca302 Fix flaky ExoPlayerTest tests.
Some tests were flaky because of the PlayUntilPosition action which called
player.setPlayWhenReady from the wrong thread. Also fixed some other misc
flakiness.

ExoPlayerTest seems to be non-flaky now (tested with 10000 runs).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209743076
2018-08-24 15:39:49 +01:00
aquilescanta
afebd60ee4 Do not seek to the start of live Transport Streams after preparation
Issue:#4666

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209742008
2018-08-24 15:36:44 +01:00
olly
bcc69efc7c Remove deprecated SimpleExoPlayer constructor
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209580625
2018-08-24 15:35:10 +01:00
tonihei
56aecf6614 Make HLS and SS chunk iterators private.
They don't need to be accessed publicly and are can be moved into the
respective chunk sources. This is the same structure used for Dash.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209507217
2018-08-24 15:33:41 +01:00
tonihei
d51b98dd1f Replace period index with uid in MediaPeriodId.
The MediaPeriodId with index is only properly defined together with a
timeline containing the index. Changing it to the period uid allows to use
the MediaPeriodId independent of the corresponding timeline.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209430257
2018-08-24 15:32:11 +01:00
aquilescanta
2cd7d7102b Add DummyExtractorOutput
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209417004
2018-08-24 15:29:04 +01:00
andrewlewis
5c2dd9ca42 Move all tests to JUnit 4
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209412403
2018-08-24 15:25:56 +01:00
olly
05dcf502e5 Add missing cases to IntDef switch + fix default locale usage
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209396260
2018-08-24 15:24:14 +01:00
aquilescanta
f64ec43acd Remove usage of deprecated method from the Demo app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209390036
2018-08-24 15:22:40 +01:00
eguven
b58f6940eb Add VideoFrameMetadataListener
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209193233
2018-08-24 15:21:03 +01:00
olly
bd8a956d53 Use lamdas everywhere
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209162373
2018-08-24 15:19:30 +01:00
olly
b34c46415d Bump version to 2.8.4
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209134753
2018-08-17 13:27:42 +01:00
andrewlewis
d05d2fcea9 Support seamless adaptation of xHE-AAC audio streams
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209113673
2018-08-17 11:15:58 +01:00
aquilescanta
4530944ed7 Rework HlsPlaylist attribute inheritance
The reason for the change is that variable substititution requires
master playlist variable definitions at the moment of parsing.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208997963
2018-08-17 11:14:42 +01:00
olly
7a34869f9a Fix seeking in progressive live streams
Issue: https://github.com/google/ExoPlayer/issues/4493

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208992790
2018-08-16 17:15:25 +01:00
Oliver Woodman
32bd69d4b2 Cleanup recent merged pull requests 2018-08-16 17:02:08 +01:00
Oliver Woodman
94fa4d9989 Merge branch 'fix/vectorArtWork' of https://github.com/mitrejcevski/ExoPlayer into dev-v2 2018-08-16 16:58:31 +01:00
ojw28
52b6b3b8e0
Merge pull request #4564 from BrainCrumbz/feat/playlist-remove-range
feat(playlist): remove MediaSource range
2018-08-16 16:45:47 +01:00
ojw28
d06b01c220
Merge pull request #4602 from gpinigin/webvtt-extractor-public
WebvttExtractor: make public to allow create custom HlsExtractorFactory outside of library
2018-08-16 16:45:36 +01:00
ojw28
4d931b9cad
Merge pull request #4585 from szaboa/feature/4304_buffering_view_option
#4304 - Add option to show buffering view when setPlayWhenReady is false
2018-08-16 16:45:25 +01:00
olly
94c7fbbc24 Add more information to unexpected assertion failure
Issue: #4532

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208968252
2018-08-16 16:42:09 +01:00
andrewlewis
80f5b7e7b2 Check CodecProfileLevels for audio decoders
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208796064
2018-08-16 16:40:45 +01:00
andrewlewis
e7ef75342c Scale up initial video decoder maximum input size
When playing a playlist where the exact maximum input size is known from the
container for each item, it may be necessary to recreate the decoder to increase
its maximum input buffer size at the point of transitioning from one item to the
next, which can make transitions non-seamless.

Scale up the initial video decoder maximum input size so playlist item
transitions with small increases in maximum sample size don't require
reinitialization.

Issue: #4510

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208650244
2018-08-16 16:39:38 +01:00
aquilescanta
c5bc2d5f80 Add support for reporting AudioCapabilities changes on custom threads
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208622197
2018-08-16 16:38:32 +01:00
andrewlewis
8854aa415f Add support for setting auxiliary audio effects
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208611493
2018-08-14 10:02:58 +01:00
bachinger
c4024e17f6 adjust timestamps for cea608 and emsg in FMP4
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208526775
2018-08-14 10:01:58 +01:00
andrewlewis
32035e1bf3 Fix NPE in ExtractorMediaPeriod
Also turn on nullity checks for ExtractorMediaPeriod.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208467644
2018-08-14 10:00:31 +01:00
andrewlewis
1c09af02f7 Fix handling of text codecs strings in DashManifestParser
Also fix an NPE in FfmpegAudioRenderer if sampleMimeType wasn't set.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208230947
2018-08-13 14:06:57 +01:00
andrewlewis
9d14a3b31b Remove unneeded null check
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208208099
2018-08-13 14:05:37 +01:00
andrewlewis
5f75d6ea13 Target API 28
Apps targeting API 28 by default do not grant permission for cleartext traffic,
so update the demo app to show a warning if loading an HTTP URI will fail. See
https://developer.android.com/about/versions/pie/android-9.0-changes-28 for
information on behavior changes in API 28.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208204937
2018-08-13 14:04:14 +01:00
olly
bac597cb07 Update dependencies + misc fixes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208195761
2018-08-13 14:02:51 +01:00
eguven
2ed42409a7 Add missing fields to Format hashcode calculation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208176661
2018-08-13 14:01:41 +01:00
aquilescanta
d399c00f9e Add support for multiple alternative EXT-X-KEY in HLS
Also add support for parsing PlayReady DRM information

Issue:#4180

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208094290
2018-08-13 14:00:34 +01:00
andrewlewis
5b3b4e64f9 Revert MediaCodecSelector API change
Future changes for checking codec capabilities will go in the renderer rather
than in the codec selector, so the codec selector only needs a MIME type as
before.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208076716
2018-08-13 13:59:14 +01:00
tsvi
4b2e382725 Adjust trim silence parameters to make it less aggressive.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208071000
2018-08-13 13:57:51 +01:00
borrelli
9db0dbc0e9 Allow SimpleExoPlayer to handle audio focus
Add automatic audio focus handling to SimpleExoPlayer. Audio focus
handling is an opt-in feature that can be requested by passing
the system's AudioManager and an AudioFocusConfiguration to
SimpleExoPlayer.setAudioFocusConfiguration.

When audio focus is being managed by SimpleExoPlayer, the player
will transparently handle pausing playback during
AUDIOFOCUS_LOSS_TRANSIENT, as well as lowering playback volume
during AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208045732
2018-08-13 13:52:32 +01:00
aquilescanta
c1998da44e Fix missing error handling durations in HLS
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208023954
2018-08-13 13:51:09 +01:00
aquilescanta
d5c7bff643 Use LoadErrorHandlingPolicy in SsMediaSource and DashMediaSource
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208020030
2018-08-13 13:49:45 +01:00
olly
4ebc455c09 Fix ldpi fullscreen icons to be the correct size
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208017966
2018-08-13 13:48:22 +01:00
eguven
1f89903bbb Minor javadoc fix
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207918525
2018-08-13 13:45:56 +01:00
eguven
eda408dc09 Move inflate method to Util class
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207857927
2018-08-13 13:41:32 +01:00
sammon
d3686cf8a2 Updating DefaultHttpDataSource to allow for http methods other than GET and POST,
as specified by DataSpec.httpMethod.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207769779
2018-08-13 13:39:10 +01:00
olly
ca473c86c7 Simplify DefaultDataSourceChain to use addTransferListener
Also locally cache length in BaseDataSource and use zero cost
castNonNull to make sure there's no performance regression.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207715734
2018-08-07 16:29:18 +01:00
olly
af507efb2a Deprecate/remove DataSource constructors that accept listeners
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207713478
2018-08-07 16:28:02 +01:00
andrewlewis
829f55e9cd Make AudioCapabilities constructor public
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207707035
2018-08-07 16:25:58 +01:00
olly
cab1d02c0c Allow setting constant bitrate flags in DefaultExtractorsFactory
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207566605
2018-08-07 16:25:01 +01:00
olly
ecee873b64 Mini cleanup of improved seeking support for release
* Make dedicated section in RELEASENOTES
* Clean up AMR FACTORY

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207550281
2018-08-06 17:18:51 +01:00
olly
dc8dc0e392 Declare all InternalState values in switch statement
Lint likes all constants for an IntDef to be declared explicitly
in switch statements.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207545682
2018-08-06 17:18:51 +01:00
olly
44101fc00b Use shifting for flag constants
Lint likes flags to be declared in this way, for safety, apparently

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207545382
2018-08-06 17:18:51 +01:00
hoangtc
077f2c3036 Supports seeking for TS Streams.
This CL adds support for seeking witin TS streams by using binary search. For
any seek timestamp, it tries to find the location in the stream where PCR
timestamp is close to the target timestamp, and return this position as the
seek position.

Github: #966.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207529906
2018-08-06 14:35:12 +01:00
olly
7fcd6b6d65 Minimal fix for non-default cenc name prefixes in DASH manifests
For now, just allow any prefix (and don't check the namespace).
Checking the namespace requires turning on the XmlPullParser
namespace awareness feature, but this can only be done before
parsing, and I think requires us to specify the namespace when
querying other attributes. This would also risk breaking services
who currently don't set namespaces correctly.

It's possible we'll run into similar issues with the few other
tags (e.g. mspr:pro). We should revisit enabling namespace
awareness if/when we see this.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207526883
2018-08-06 13:25:33 +01:00
aquilescanta
18d2a2ea2a Use LoadErrorHandlingPolicy in SingleSampleMediaSource
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207525746
2018-08-06 13:24:15 +01:00
eguven
bf6b647088 Rename spherical/Utils class to GlUtil
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207525621
2018-08-06 13:22:51 +01:00
olly
454b106921 Fix freezing playing multi-period DASH with EventStreams
EventSampleStream.readData required eventStreamUpdatable to be
false for END_OF_STREAM to be returned, but it was only being
set to false when the manifest became static. This change also
sets it to false if the period is not the last one in a dynamic
manifest. It also renames it the parameter to appendable, since
that's what it really represents. Events may still be removed
from the start of the EventStream as the period starts moving
out of the live window.

Issue: #4492

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207517265
2018-08-06 11:38:33 +01:00
hoangtc
c3d8ad2488 Add supports for Seeking in ADTS format using a constant bitrate seekmap.
- Use ConstantBitrateSeeker to implement seeking for ADTS format. Since most
ADTS streams are VBR, we use the average bitrate of the first 1000 frames as
the average bit rate.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207509651
2018-08-06 11:33:06 +01:00
andrewlewis
f3ad87d653 Update MP4RA URL
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207278934
2018-08-06 11:32:02 +01:00
hoangtc
0cdeb555d1 Use a custom video renderer for MetadataRetrieverImpl.
Currently, MetadataRetrieverImpl uses MediaCodecVideoRenderer to renderering
frames to capture. It suffers from 2 issues:
- MediaCodecVideoRenderer has a lot of logic to time frame release, including
drop frames if late or try to keep up with feeding speed etc... These are not
necessary at all for frame retrieval.
- MediaCodecVideoRenderer always tries to render 1 frame after video surface
update. This may some times lead to the wrong image being rendered for
MetadataRetriever.
This CL replaces this with a custom video renderer, that does not time frame
releases, and only render first frame after position reset / renderer
re-enabling.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207276937
2018-08-06 11:30:48 +01:00
andrewlewis
b3b8356766 Fix DefaultTimeBar accessibility class name
See https://support.google.com/accessibility/android/answer/7661305.

Also fix/suppress nullability warnings.

Issue: #4611

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207245115
2018-08-06 11:28:03 +01:00
olly
4c7fbd67ea Suppress WrongConstant lint error
The error is spurious, and is due to an incorrect annotation in
the framework.

[Internal: b/32137960]

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207234603
2018-08-06 11:26:39 +01:00
olly
f549cf5635 Fix Aes128DataSourceTest portability issue
For background on why doing this works, see below. I don't want to change
how we get our Cipher instance in non-test code, since PKCS7 always works
on Android. It's only when the tests are running on a non-Android host
machine that they can fail. An alternative would be to make it an androidTest,
but androidTests are slow.

------

Background:

"While Java considers PKCS5 and PKCS7 padding to be the "same" (and
one should always use the string "AES/CBC/PKCS5Padding" because
"AES/CBC/PKCS7Padding" will cause NoSuchAlgorithmException to be thrown
when initializing an AES block cipher using the Java crypto API), I
consider this a gross misnaming in the Java platform because the pure
technical definitions of these paddings are not the same."

Ref: https://stackoverflow.com/questions/10193567/java-security-nosuchalgorithmexceptioncannot-find-any-provider-supporting-aes-e

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207234518
2018-08-06 11:25:34 +01:00
jdong
2815ff1b02 Tiny cleanup: remove an extra "thread" in the comment for ExoPlayer interface.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207124509
2018-08-06 11:24:01 +01:00
aquilescanta
a7e9ebcf68 Build codecs string from SPS data in H.264
Issue:#4555

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207096569
2018-08-06 11:22:37 +01:00
aquilescanta
cc2a8bb854 Fix encryption data extraction when default values should be used
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206963956
2018-08-06 11:19:51 +01:00
aquilescanta
d458b90cc7 Parameterize load error handling in ExtractorMediaSource
Issue:#2844
Issue:#3370
Issue:#2981

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206927295
2018-08-06 11:18:37 +01:00
olly
d0d6856725 Apply setOutputSurfaceWorkaround to required FireOS devices
Amazon like to use Device.MODEL, so key on that instead for
these workarounds.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206917935
2018-08-01 14:01:45 +01:00
hoangtc
0fbe083d4e Return empty track groups and track selections when user seeks to unprepared period
When user seeks to an unprepared period, since there is no period being played, currently the track groups and track selections are still the ones from previous period. This CL changes it so that when such seeking happens, PlaybackInfo's track groups and track selections are changed to empty.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206916109
2018-08-01 13:59:35 +01:00
eguven
45c1e9eef3 Add missing Nullable annotation Player.EventListener.onTimelineChanged
Issue: #4593

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206911927
2018-08-01 13:49:21 +01:00
andrewlewis
5715960304 Add Context to SimpleExoPlayer factory methods
This is needed for implementing (optional) support for audio focus handling in a
later change.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206899837
2018-08-01 13:49:21 +01:00
andrewlewis
429bf4d099 Expand passthrough channel count workaround to all devices
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206893078
2018-08-01 13:49:21 +01:00
hoangtc
f08ad55892 Supports seeking for MPEG PS Streams.
This CL adds support for seeking within PS streams by using binary search. For
any seek timestamp, it tries to find the location in the stream where SCR
timestamp is close to the target timestamp, and return this position as the
seek position.

Github: #4476.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206787691
2018-08-01 13:49:21 +01:00
hoangtc
377314a69f Remove unnecessary DefaultKeyStatus, DefaultKeyRequest and DefaultProvisionRequest.
Currently, we have KeyStatus, KeyRequest and ProvisionRequest as interface, so we can use
custom implementation for purpose such as wrapping native objects. However, these interfaces and the corresponding default classes are only used to bundle data, and in all existing implementation (including native code), it's just as efficient to just use the Java default implementation. Therefore we can just get rid of the interfaces, and change
the interfaces into classes with the default implementation.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206765389
2018-08-01 13:49:20 +01:00
andrewlewis
7ead310219 Use maximum bitrates for encoded output buffer sizes
There is some risk associated with this change, as audio track buffers come from
shared memory and limits may be device-specific. I've tested these sizes on
Nvidia Shield TV and Nexus Player on various builds. The maximum size allocated
is about 800 KB. We could implement support for retrying creating the audio
track if it fails to initialize, but it seems preferable to avoid the extra
complexity required to do that unless we know it's necessary to work around
device-specific limitations.

Issue: #3803

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206749222
2018-08-01 13:49:20 +01:00
eguven
02e9972630 Add 360 video samples to the demo app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206747144
2018-08-01 13:49:20 +01:00
aquilescanta
9ec14d1ada Fix SCTE-35 timestamp adjustment
Issue:#4573

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206737252
2018-08-01 13:49:20 +01:00
andrewlewis
e2bf474c1e Extend Nexus Player mono workaround to Oreo
The platform fix was merged into O MR1, not O. Nexus Player has
not received this build.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206734342
2018-08-01 13:49:20 +01:00
andrewlewis
19d24ac633 Remove extra brackets
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206725219
2018-08-01 13:49:20 +01:00
andrewlewis
ded2b2eb2a Allow outputting audio to a WAV file
Add TeeAudioProcessor that doesn't modify the input audio but writes it to an
AudioBufferSink, and WavFileAudioBufferSink for writing audio to a .wav file.

This is intended to be used for diagnostics and debugging.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206717458
2018-08-01 13:49:20 +01:00
andrewlewis
68add98c23 Fix detection of TrueHD syncframe in MatroskaExtractor
MatroskaExtractor was checking for INDEX_UNSET as the sample count for buffers
not containing syncframes, but actually 0 was returned for these. Theoretically
this could prevent us starting to play a TrueHD stream as we wait until we can
read the sample count from a syncframe before accepting the audio in
DefaultAudioSink, but it seems that rechunking avoided this issue arising in
practice.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206575462
2018-08-01 13:49:20 +01:00
tonihei
656c2172dd Fix event reporting for merging and looping media sources.
The looping media source doesn't convert the media period id to the externally
visible media period id. And the merging media source reports media period
creations multiple times which will break listeners assuming a media period
with a specific id will only be created once.

Also amend the doc for MediaSource.createPeriod to reflect that media periods
created in parallel do not actually have the same id.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206327241
2018-08-01 13:49:20 +01:00
tonihei
a237ae1810 Fix period transition with non-zero start position.
Period transitions with non-zero start position happen too early as the
playing period is advanced as soon as the renderer offset is reached not
taking into account that the start position needs to be added to that.

Issue:#4583

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206310328
2018-08-01 13:49:20 +01:00
andrewlewis
6a2f94ec4b Document top-level limitation of AdsMediaSource
Issue: #4591

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206307948
2018-08-01 13:49:20 +01:00
andrewlewis
0c0c5942ab Fix incorrect channel configuration for 8 ch pre-M
AudioTrack checks the channel configuration against a mask of allowed channels.
Before Android M the check in getMinBufferSize would always fail for 8 channel
output.

For Android L constants are available to build the required channel
configuration for a conventional 7.1 setup and these constants are part of the
allowed channels mask, so switch to using them.

Before Android L the constants for 7.1 aren't in the allowed channels mask, so
discard channels to give a 5.1 stream.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206307892
2018-08-01 13:49:20 +01:00
eguven
30fecb71d2 Fix TouchTrackerTest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206304655
2018-08-01 13:49:20 +01:00
aquilescanta
4eee474555 Remove minLoadableRetryCount from HLS components
Remove minLoadableRetryCount from HLS components in favor of
LoadErrorHandlingPolicy#getMinimumLoadableRetryCount.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206298419
2018-08-01 13:49:20 +01:00
tonihei
d3c2cb2aa4 Update remaining DataSource's with new addTransferListener method.
The new method allows to add TransferListeners after the DataSource
has been created. Most implementations just forward to their wrapped
upstream DataSource. Implementation which directly read data implement
BaseDataSource instead.

Also removes the temporary default no-op implementation in DataSource.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206289986
2018-08-01 13:49:20 +01:00
Gleb Pinigin
8f624861e1 WebvttExtractor: make public to allow create custom HlsExtractorFactory outside of library 2018-07-31 19:45:30 +07:00
Arnold Szabo
dbd25d5854 #4304 - Adjustments after code review 2018-07-27 13:41:02 +03:00
Jovche Mitrejchevski
5635ca2792 Reset aspect ratio 2018-07-27 12:03:39 +02:00
Arnold Szabo
1f12f22bb5 #4304 - Add option to show buffering view when setPlayWhenReady is false 2018-07-27 00:49:11 +03:00
Oliver Woodman
3b61a400c5 Remove stray file 2018-07-26 19:06:33 +01:00
tonihei
133f5f16b8 Pass MediaPeriodId to DeferredMediaPeriod when actual period is created.
This helps to distinguish between the MediaPeriodId the deferred media period is being
created with and the MediaPeriodId which is used to create the actual underlying period.

This serves two purposes:
1. The error reporting of ad prepare errors uses the correct media period id (the
   externally visible ad media period id).
2. The transition to using media period uid instead of indices is simplified.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206160463
2018-07-26 18:27:46 +01:00
tonihei
49ef1f3f8c Fix nullness warnings in Util and Assertions, and provide own castNonNull.
Using our own no-op castNonNull prevents linking into checkerframeworks library.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206152148
2018-07-26 18:27:46 +01:00
andrewlewis
217247f113 Remove naming assumption for passthrough decoders
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206119357
2018-07-26 18:27:46 +01:00
andrewlewis
5da703a588 Fix some nullness warnings in audio classes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206021873
2018-07-26 18:27:46 +01:00
hoangtc
d810352f2c Refactor FlacBinarySearchSeeker.
Rewrite FlacBinarySearchSeeker and extract out the core binary search algorithm
into BinarySearchSeeker class so it can be re-used for other formats.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206012900
2018-07-26 18:27:46 +01:00
Jovche Mitrejchevski
72a2b82370 Suggestions from Code Review 2018-07-26 12:26:29 +02:00
Jovche Mitrejchevski
46232977f6 Convert defaultArtwork from Bitmap to Drawable
Using bitmaps is still supported, but also this will allow using other types of drawables to be set as artwork.
2018-07-26 09:50:55 +02:00
GiuseppePiscopo
7878bf6a31 chore(playlist): reorder message IDs, fix tabbing 2018-07-25 18:31:14 +02:00
GiuseppePiscopo
cc7f011ecb feat(playlist): stick to list.subList API 2018-07-25 18:30:35 +02:00
olly
14216ef53b Nullness fixes for emsg and id3 metadata classes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205972857
2018-07-25 15:14:50 +01:00
tonihei
3d55bc78f7 Use country and network based initial bitrate estimate.
This changes the default initial bitrate estimate to be country (group) and
network type specific. The existing overwrite still works as before and new
overwrites for the country or specific network types are provided for
customization.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205972705
2018-07-25 15:13:35 +01:00
Arnold Szabo
ae520a8c2c #4306 - Extract tags from SubRip subtitles, add support for alignment tags based on SSA v4+ 2018-07-25 01:29:07 +03:00
olly
0287fa21f3 Add PRO7S to surface switch workaround
Issue: #4468

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205821059
2018-07-24 15:00:16 +01:00
olly
340d846d9b Remove some files from the nullness blacklist
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205816544
2018-07-24 14:59:21 +01:00
tonihei
138b222457 Prevent dummy period id in ExoPlayerImplInternal from leaking into actual use.
While the timeline is empty, we keep a dummy MediaPeriodId in PlaybackInfo with
a period index of 0. We leak this MediaPeriodId in actual use in these
situations:
 1. When issuing an IllegalSeekPosition after preparation. The timeline becomes
    non-empty, but the media period id stays at its dummy value.
 2. When re-adding sources to a previously empty timeline. The dummy period id
    is used as the start position for the new non-empty timeline.

This change makes:
 - the constructor of PlaybackInfo using those dummy values more explicit
 - prevents the issues above by using the correct default position in the new
   non-empty timeline for the above mentioned cases.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205803006
2018-07-24 14:58:04 +01:00
tonihei
ffdc17d0e0 Remove generic type parameter from TransferListener.
All known instances use DataSource as generic type and thus code can be simplified
by removing the generic type altogether.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205798542
2018-07-24 14:56:45 +01:00
bachinger
9d0ec37ead Show notification whilst ads are playing but hide playback actions.
Issue:#4535

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205722036
2018-07-24 14:55:24 +01:00
eguven
9c337c8806 Add monoscopic 360 surface type to PlayerView
Using this surface it's possible to play 360 videos in a non-VR Activity that is
affected by phone and touch input.

RELNOTES=true

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205720776
2018-07-24 14:54:05 +01:00
sammon
01b69854ff Refactoring DataSpec constructor calls to use DataSpec.withUri() and DataSpec.subrange().
This reduces the number of calls to the DataSpec constructor and minimizes the number of files that need to be updated when adding a new DataSpec parameter (ex: followup []

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205719005
2018-07-24 14:52:58 +01:00
GiuseppePiscopo
2c801ca267 docs(playlist): fix javadoc comments 2018-07-24 10:08:27 +02:00
GiuseppePiscopo
c9b6a73cd8 feat(playlist): add API to remove range of indices 2018-07-24 10:08:27 +02:00
Jovche Mitrejchevski
1f1762538f Support vector drawables to be used as default artwork 2018-07-24 08:16:53 +02:00
olly
61b838f414 Update release notes + bump version
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205660355
2018-07-23 15:57:51 +01:00
tonihei
5933d92394 Add simplified Dash and Ss media source factory constructors.
As the manifest and media data sources can be the same now, we can provide
a simplified constructor with just one data source factory.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205658046
2018-07-23 15:55:57 +01:00
tonihei
1d636520ca Auto-register AnalyticsCollector as bandwidth meter listener.
This allows to automatically forward bandwidth estimate events to
AnalyticsListeners.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205642752
2018-07-23 13:32:44 +01:00
Oliver Woodman
3c4b0aa11b Merge branch 'dev-v2' of https://github.com/peddisri/ExoPlayer into dev-v2 2018-07-23 12:32:18 +01:00
tonihei
a67c73650e Add helper method to get uid of timeline period.
This removes the need to populate the entire period for the common usage of
getting the uid from the period.

Also add default implementation to get period by uid.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205638265
2018-07-23 12:22:57 +01:00
tonihei
97e66ef11b Update period index in DashMediaPeriod event dispatcher after manifest update.
Issue:#4492

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205636634
2018-07-23 12:21:44 +01:00
tonihei
0b3fa5176a Move media period end position from MediaperiodInfo to MediaPeriodId.
The end position is needed to make the MediaPeriodId unique as multiple
content periods may only vary in this parameter.

This also simplfies some other comparisons where the end position needed to
be compared in addition to the media period id.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205634508
2018-07-23 12:20:28 +01:00
Oliver Woodman
41345dcb83 Simplify DASH live presentation delay override 2018-07-23 10:39:02 +01:00
ojw28
58fcf52b17
Merge pull request #4534 from Chimerapps/dev-v2
Allow specifying the default live presentation delay
2018-07-23 10:37:45 +01:00
olly
d2eb3fbefa Cleanup: Remove unnecessary generic types
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205409290
2018-07-23 10:25:23 +01:00
olly
7551d98087 Cleanup: Use lambdas for extractor factories
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205407693
2018-07-23 10:24:09 +01:00
tonihei
8be95042cc Fix typo in variable name.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205405072
2018-07-23 10:22:50 +01:00
Oliver Woodman
badd9356f8 Refine use of KEY_OPERATING_RATE 2018-07-20 16:15:30 +01:00
ojw28
f4219b55e6
Merge pull request #3634 from jinminghe/bugfix/format
Set KEY_OPERATING_RATE for MediaCodecVideoRenderer.
2018-07-20 16:12:04 +01:00
tonihei
0721d372a7 Fix issue with keeping window sequence number after repeated seeks.
The number is shelved in calls to queue.clear() to keep it for the next
media period. However, the queue may also become empty by repeated calls to
advancePlayingPeriod which may happen when seeking to an unprepared period.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205376036
2018-07-20 16:08:51 +01:00
hoangtc
ce62934861 Fix a bug with VideoRendererOutputCapturer when extracting frames of different size
Currently, when the VideoRendererOutputCapturer updates output size, it will
set the new surface, then release the old surface. This can lead to problem
when both surface depends on EGL, since the second release() can release EGL
resources of the first surface.

This CL reverses this process, and ensures that the old surface is released before the new one is created.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205235451
2018-07-20 11:01:54 +01:00
Nicola Verbeeck
cf99963aab Typo in docs 2018-07-19 11:53:42 +02:00
Nicola Verbeeck
26a7516b55 Updated formatting 2018-07-19 11:22:03 +02:00
Nicola Verbeeck
fbc0db965a Updated formatting
Added constructor and field in source itself
2018-07-19 11:20:18 +02:00
Nicola Verbeeck
e6d32d3fb5 Updated formatting 2018-07-19 11:04:28 +02:00
Nicola Verbeeck
fbef465ca8 Allow specifying the default live presentation delay instead of using hardcoded constant 2018-07-19 10:58:58 +02:00
tonihei
a076924caa Simplify using DataSource factories without a TransferListener.
Setting the transfer listener on the data source factories is only needed for debug
purposes, logging and for custom bandwidth metering which doesn't use the
player-provided bandwidth meter. As such, it is not compulsary and it should be easy
to set up the data source factory without a transfer listener.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204926083
2018-07-17 20:40:56 +01:00
tonihei
59b18a52d2 Make passing BandwidthMeter to TrackSelector and TrackSelection non-optional.
This was only needed temporatily until we could ensure that the player always
provides a BandwidthMeter.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204903640
2018-07-17 20:38:34 +01:00
olly
73af056da3 Widen setOutputSurface workaround
As part of this change:

- Don't apply the workaround on API level 27+. GTS coverage
  should prevent such devices from existing.
- Use Util.DEVICE consistently.
- Remove the "// Device name", which don't really add much
  but make extra work when updating the list.

Issue: #4468

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204889657
2018-07-17 20:35:51 +01:00
aquilescanta
f155aa2563 Add getMinimumLoadableRetryCount to LoadErrorHandlingPolicy.
This will allow deduplicating the argument from all Loader clients.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204889331
2018-07-17 20:34:36 +01:00
tonihei
6aab2bdc55 Set bandwidth meter at player level.
This bandwidth meter is then forwarded to the track selection and as a transfer
listener to media and data sources.

When no bandwidth meter is specified in the ExoPlayerFactory methods, a static
singleton instance will be used.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204881497
2018-07-17 20:32:59 +01:00
tonihei
74dadae520 Make values forwarded to bandwidth listener final again.
When notifying the bandwidth listeners of new samples, the forwarded values
need to be final to prevent concurrent access. Putting the event forwarding
into a separate method ensures the values are final.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204877650
2018-07-17 20:30:13 +01:00
olly
b25a124239 HLS: Fill primary sample formats with track format info (e.g. bitrate)
Issue: #3297

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204732266
2018-07-17 20:28:52 +01:00
eguven
7b2da629ea Make it possible to disable DownloadService notifications
Issue: #4389

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204728270
2018-07-17 20:27:30 +01:00
olly
8f0729b5ad Add AudioListener (audio equivalent to VideoListener)
Issue: #3994

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204722997
2018-07-17 20:26:27 +01:00
aquilescanta
e247a08a36 Parameterize load error handling in HLS
Issue:#2844
Issue:#2981

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204718939
2018-07-17 20:25:18 +01:00
olly
e2059eabe1 Enhance copyWithManifestFormatInfo to handle muxed manifest formats
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204470264
2018-07-17 20:22:33 +01:00
olly
450448b220 Fix bug where sourceId wasn't set for the first chunk
The sample queues haven't been created when the first init call
occurs. In this case we need to set sourceId when we subsequently
create the queues.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204467538
2018-07-17 20:21:10 +01:00
olly
ef728178a8 Improve format derivation for chunkless preparation
1. Copy label into derived formats
2. If audio is the primary track type, copy additional fields from
   the variant formats. This is probably a no-op in practice, since
   I don't think variant formats have these fields set anyway, but
   it seems like the right thing to do in case they ever are set in
   the future.

Note: It's a bit strange to use createXContainerFormat rather than
createXSampleFormat, but in practice the methods used here are
better matched for what we're trying to do.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204467287
2018-07-17 20:19:57 +01:00
hoangtc
19cc2c822a Fix a bug with TTML using font size as % of cellResolution.
After [] we support default font size for TTML, relative to the cellResolution of the document. However, this introduced a bug that makes TTML font-size in such case always follow the cellResolution font size, even when SubtitleView.setApplyEmbeddedStyles(false) and SubtitleView.setApplyEmbeddedFontSizes(false) were used.

This CL updates the fix so that the default font-size using cellResolution works in the same way as other embedded styles, and can be turned off using setters from SubtitleView.

GitHub: #4491

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204467033
2018-07-17 20:18:52 +01:00
hoangtc
7cba5429fc Add supports for frame-capture retrying for MetadataRetriever.
For the MetadataRetriever, for certain queries, after setting up the player to
render a frame (by seeking to the position), sometimes the player will seek to
the same position and ignore the seek, leading to the frame not being captured,
leaving the retriever in deadlock, waiting for the frame forever. This CL adds
a retry timer to avoid this and make sure we can return query result after some
time.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204460200
2018-07-17 20:17:36 +01:00
olly
cba6da8906 No-op cleanup of DashTimeline
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204451894
2018-07-17 20:16:14 +01:00
olly
18ab4b9112 Fix / improve format merging
1. Prefer label and language values in the manifest to those in
   the media. This is particularly helpful if the sample format
   contains "und" as the language.
2. Copy label when deriving formats in HlsSampleStreamWrapper
3. When there's only one variant in HlsSampleStreamWrapper, use
   the regular copyWithManifestFormatInfo. This allows more
   information to be retained from the sample format.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204340008
2018-07-17 20:13:23 +01:00
Jinming he
5cdb886db1 Address comments. 2018-07-16 21:36:00 +08:00
Jinming he
db53606c1d Merge master into bugfix/format. 2018-07-16 21:04:25 +08:00
Oliver Woodman
05a31dfd24 Format cleanup 2018-07-12 16:08:11 +01:00
ojw28
41636ada88
Merge pull request #4391 from kaltura/add-label
Add label attribute support for DASH audio/text
2018-07-12 16:05:19 +01:00
Oliver Woodman
e4b05a5ae6 Merge branch 'dev-v2' of https://github.com/JungleGenius/ExoPlayer into JungleGenius-dev-v2 2018-07-12 15:54:47 +01:00
ojw28
423cfa3b73
Merge pull request #4442 from keiththompson/keiththompson__/skip_ad_within_ad_group
Add withSkippedAd method to AdPlaybackState.
2018-07-12 15:48:05 +01:00
ojw28
651cfd9ebb
Merge pull request #4480 from drhill/dev-v2_mkv_forced_default_flipped
MKV Extractor flip default and forced flag values to their proper names
2018-07-12 15:46:49 +01:00
andrewlewis
44c253058e Ignore all edit lists if one track's edits can't be applied
Issue: #4348

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204261718
2018-07-12 15:40:11 +01:00
tonihei
78d7754f29 Add addListener/removeListener to BandwidthMeter.
That allows to add listeners after the BandwidthMeter has been created which is
helpful as the BandwidthMeter instances are often long-lived static instances.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204255299
2018-07-12 15:39:05 +01:00
matttt
9914587894 Remove the static modifier from DefaultDashChunkSource::newMediaChunk and DefaultDashChunkSource::newInitializationChunk allowing for overrides.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204167521
2018-07-12 15:37:52 +01:00
aquilescanta
32a91b5689 Add LoadErrorHandlingPolicy to customize blacklisting and backoff logic
Issue:#2844
Issue:#3370
Issue:#2981

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204149284
2018-07-12 15:36:35 +01:00
tonihei
095c6e4bf8 Add MediaChunkIterator for HLS media playlists.
This allows to iterate through the available segments of the playlist.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204100116
2018-07-11 14:57:49 +01:00
hoangtc
39b812298d Add supports for reading duration for a PS stream.
Add supports for reading duration for a PS stream by reading SCR values from
the header of packs at the start and at the end of the stream, calculating the
difference, and converting that into stream duration.

Github: #4476

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203954752
2018-07-11 14:56:54 +01:00
tonihei
68822c0c41 Remove BandaidTransferListener.
It has now become an empty shell as the real TransferListener provides all its
methods.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203950443
2018-07-11 14:55:54 +01:00
tonihei
c3df64f102 Extend TransferListener with onTransferInitializing and additional parameters.
This allows more fine-grained analysis of transfers.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203950327
2018-07-11 14:54:35 +01:00
tonihei
2b1434dfcb Change DataSource.Type to a boolean.
There are only two types at the moment and we can therefore use a boolean.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203937357
2018-07-11 14:53:14 +01:00
Srikanth Peddibhotla
2a388ff852 Support CEA 608/708 captions in MPEG2 TS stream
[Problem] Sarnoff spec complaince tests streams are MPEG2 TS.
Currently, parsing CC data from MPEG2 TS is not supported

[Solution] Parsed CC data from MPEG2 stream because all Sarnoff streams are MPEG2
2018-07-11 18:41:00 +05:30
eguven
18d208ab93 Fix DownloadService doesn't stop when the app is killed
Also fixed showing "remove notification" when download is completed.

Issue:#4469
Issue:#4488

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203927268
2018-07-10 14:03:05 +01:00
anjalibh
e60de62588 Libvpx: Support directly outputting YUV to SurfaceView. This is supposed to use hardware (not GPU) to convert YUV to RGB and overall use less power.
Power Comparison:

TextureView                          1080p         720p
                H264 HW              498, 496      507, 478
                VP9 RGB              1050, 1104    1185, 1152
                VP9 ANativeWindow    1070, 985     700, 674
GLSurfaceView
                VP9 YUV              1075, 1112    716, 635
SurfaceView
                H264 HW              419, 409      397, 377
                VP9 RGB              1044, 1139    654, 671
                VP9 ANativeWindow    975, 835      617, 623
                VP9 MediaCodec       683, 679      488, 476

Measures average current drawn mAH on a Nexus 6 at full brightness from time t=3 to t=95 seconds. The same clip was used for all tests. Two measurements were taken for each category.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203847744
2018-07-10 14:01:50 +01:00
olly
17a58969af Move subsampleOffset in Format
It's no longer text specific (it's used for metadata as well, and
in theory could apply to any stream in which samples contain multiple
sub-samples)

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203767825
2018-07-10 14:00:30 +01:00
tonihei
5c9fd1649a Fix wrong loop variable in DashMediaPeriod.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203766579
2018-07-10 13:59:19 +01:00
tonihei
74d8f89cb6 Restructure track selection in DashMediaPeriod.
Until now, the streams were released and re-enabled for each type of stream
(primary, event, embedded) in that order. That leads to problems when replacing
streams from one type to another (for example embedded to primary).

This change restructures the track selection to:
1. Release and reset all streams that need to be released or replaced.
 1(a). Including embedded orphan streams.
2. Select new streams.

Issue:#4477

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203751233
2018-07-10 13:58:18 +01:00
olly
dc8b73d372 Apply setOutputSurface workaround to all non-Google decoders
Where a device has this issue, it most likely applies to all
SOC vendor provided decoders, which are normally the only
video decoders other than the OMX.google software decoders
on the device. The fact we currently only blacklist for AVC
decoders is likely just a side effect of AVC's popularity.

I checked two devices already on the blacklist, and both
failed with other SOC vendor decoders on the device as well
(but passed if forced to use OMX.google decoders instead)

Issue: #4468

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203728285
2018-07-10 13:57:10 +01:00
olly
13789a3c1d Tweak DefaultTrackSelector documentation
Viewport constraints apply to adaptive content even if the
actual playback isn't adaptive (i.e. because the selector
ends up making a fixed track selection).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203726831
2018-07-10 13:55:51 +01:00
Drew Hill
e807212514 flip flag values to their proper names so that trackselector parameters can be useful 2018-07-07 12:28:58 -04:00
Oliver Woodman
8fa34c1ed6 Delete stray file 2018-07-06 18:26:49 +01:00
hoangtc
c1acf87fba Support handling frame queries for MetadataRetriever.
- Support handling frame queries (i.e get frames at times, output to certain
sizes) from MetadataRetriever.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203489788
2018-07-06 17:59:21 +01:00
tonihei
2c00be1aa3 Add workaround for unmatched track indices in tkhd and tfhd.
If there is only one track, we can assume that both boxes refer to the same track
even if the track indices don't match.

Issue:#4083

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203485872
2018-07-06 17:58:08 +01:00
olly
3b70d1d889 Avoid providing invalid responses to MediaDrm
MediaDrm.provideXResponse methods only accept the response
corresponding to the most recent MediaDrm.getXRequest call.
Previously, our code allowed the following incorrect call
sequence:

a = getKeyRequest
b = getKeyRequest
provideKeyResponse(responseFor(a));

This would occur in the edge case of a second key request
being triggered whilst the first was still in flight. The
provideKeyResponse call would then fail.

This change fixes the problem by treating responseFor(a)
as stale. Note that a slightly better fix would be to
defer calling getKeyRequest the second time until after
processing the response corresponding to the first one,
however this is significantly harder to implement, and is
probably not worth it for what should be an edge case.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203481685
2018-07-06 17:56:58 +01:00
tonihei
1cf8b255dc Add workaround for unmatched track indices in trex and tkhd.
Both boxes should contain the same list of track indices. However, if only one
track index in each list does not match, we can just assume that these belong
together.

Issue:#4477

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203481258
2018-07-06 17:55:47 +01:00
olly
bd952a802a Re-merge output surface workarounds and add TODO list
Issue: #4468

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203479944
2018-07-06 17:54:33 +01:00
Oliver Woodman
3b29eeaef8 Merge branch 'joomcode-dev-v2' into dev-v2 2018-07-06 14:50:24 +01:00
olly
0ed8e86ba4 Allow overriding of setOutputSurface workarounds
Since this is an ongoing problem, it's reasonable that we allow
developers to toggle these workarounds without too much hassle.

Issue: #4468

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203364488
2018-07-06 14:38:23 +01:00
tonihei
264bed06f2 Forward addTransferListener for all wrapping data sources.
This allows to register a listener on an outer wrapping data source which
receives data transfer events from the wrapped source.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203358981
2018-07-06 14:37:19 +01:00
andrewlewis
5047a5a4da Fix pre-L codec buffer initialization
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203341457
2018-07-06 14:36:19 +01:00
tonihei
acbe52d0d7 Forward TransferListener from MediaSources to DataSources.
This wires up recent changes of passing a transfer listener to the MediaSource and
allowing DataSources to accept new listeners.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203280818
2018-07-06 14:35:17 +01:00
tonihei
abb4d6ff70 Use correct generics type bounds for TransferListener in MediaSources.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203260699
2018-07-06 14:32:46 +01:00
hoangtc
2237603a4d Add supports for reading duration for a TS stream.
Add supports for reading duration for a TS stream by reading PCR values of the PCR PID packets at the start and at the end of the stream, calculating the difference, and converting that into stream duration.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203254626
2018-07-06 14:31:27 +01:00
andrewlewis
0b631b05c2 Optionally fall back to other decoders if init fails
Codec initialization may fail in creation, configuration or when start()ing the
codec. If codec initialization fails, there may be other codecs available that
could handle the same format, but currently ExoPlayer can only try to use the
first listed codec for the input format and gives up if it fails to initialize.

This change implements support for optionally falling back to alternative
decoders if initialization fails. MediaCodecSelector can now return a list of
decoders to try in priority order, and use the Format when choosing a codec.
With the default implementation, the codecs and order come from MediaCodecList,
and matches the order used internally by MediaCodec.createDecoderByType (which
implements the same kind of fallback though only to the creation step, without
configuring/starting the codec).

This feature is useful for apps that want to play several videos concurrently on
devices that have software decoders (like OMX.google.h264.decoder), as the new
behavior allows new codecs to be created when no hardware-accelerated decoders
are available.

The list of available codecs is queried when initializing the codec after a
format change that requires a new codec to be instantiated. When a decoder fails
to initialize it is removed from the list of available decoders and won't be
tried again until the next format change (or until the renderer is disabled).

Note: this change does not affect the renderer capabilities API, as when
checking format support we don't know which codec will be used.

Issue: #273

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203242285
2018-07-06 14:30:16 +01:00
andrewlewis
930833627f Use androidx test runner in gradle configuration
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203141421
2018-07-06 14:29:14 +01:00
tonihei
f2b01275cb Add back old deprecated MediaSource.prepareSource - remove for next release!
This ensures compatiblity of other apps depending on our public GitHub code.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203129076
2018-07-06 14:28:14 +01:00
tonihei
f4bcfe082d Add MediaChunkIterator for SmoothStreaming stream elements.
This allows to iterate through the available chunks of the stream.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203105813
2018-07-06 14:26:56 +01:00
tonihei
97120bc6cb Add MediaChunkIterator for FakeAdaptiveDataSet.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203102464
2018-07-06 14:25:38 +01:00
tonihei
55ce085a0d Add transferInitializing to BaseDataSource.
This allows implementations to notify when the transfer is about to be started.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203102117
2018-07-06 14:24:21 +01:00
tonihei
985160a47d Use BaseDataSource for all internal leaf data sources.
This allows all leaf data sources (i.e. ones which do not forward the requests
to other data sources) to accept multiple listeners.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203097587
2018-07-06 14:23:02 +01:00
tonihei
c8af6d176f Forward queue of media chunks to getNextChunk.
This allows to use this queue in the track selection in the future.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202954871
2018-07-03 11:57:26 +01:00
olly
04341394a3 Add section to guide about track selection
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202948642
2018-07-03 11:56:12 +01:00
tonihei
8ca9a32d8e Add MediaChunkIterator interface and DASH implementation.
This will allow to provide available information about future chunks to the
track selection.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202940994
2018-07-03 11:54:58 +01:00
bachinger
e50167ef54 prevent controls from hiding whilst the user is interacting with it
Issue:#2395

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202926448
2018-07-03 11:53:43 +01:00
aquilescanta
caa90844c6 Allow overridable empty closed caption format list in DefaultTsPayloadReaderFactory
Issue:#4451

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202923630
2018-07-03 11:52:31 +01:00
olly
c23910ad3a Exclude text streams from duration calculations
Issue: #4029

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202912333
2018-07-03 11:51:32 +01:00
brettchabot
1ee36101f6 Replace references to android.support.test with androidx.test.
The Android Test Support Library is being renamed to AndroidX Test, with its root java namespace changing from android.support.test to androidx.test.
And code location changing from tp/android/android_test_support to tp/android/androidx_test.

More information: []

TAP global presubmit: []

BUG:
79205333

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202796842
2018-07-03 11:50:39 +01:00
olly
62b90c83df Fix application of styles for CEA-608
Issue: #4321

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202660712
2018-07-03 11:49:42 +01:00
tonihei
6f6c72266e Add addTransferListener method to DataSource and provide BaseDataSource.
The new method allows to add transfer listeners (e.g. the BandwidthMeter) after
the data source has been created. To simplify the implementation for
subclasses, this change also introduces a BaseDataSource which handles
the list of listeners and the listener registration.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202649563
2018-07-03 11:48:28 +01:00
tonihei
98afaa60d0 Forward TransferListener to media sources.
In the future, this allows to register the BandwidthMeter (managed by the player)
as a listener to all media transfers related to this media source.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202643946
2018-07-03 11:47:15 +01:00
hoangtc
824c0b20a5 Add supports for Seeking in AMR format using a constant bitrate seekmap.
- Extract ConstantBitrateSeeker from Mp3 package into a more general
ConstantBitrateSeekMap.
- Use this seekmap to implement seeking for AMR format.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202638183
2018-07-03 11:46:03 +01:00
aquilescanta
efa714ab4f Support EXT-X-INDEPENDENT-SEGMENTS in the master playlist
From the spec:

If the EXT-X-INDEPENDENT-SEGMENTS tag appears in a Master
Playlist, it applies to every Media Segment in every Media
Playlist in the Master Playlist.

----

This requires propagation of attributes from the master
playlist to the media playlists. This CL only includes
independent segments, but other inheritable attributes
will be supported in following changes. Other inheritable
attributes include variable substitution definitions and
session keys.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202628422
2018-07-03 11:44:56 +01:00