Commit graph

6682 commits

Author SHA1 Message Date
olly
206e46e542 DownloadManagerTest: Address remaining flakiness
#minor-release

PiperOrigin-RevId: 351158541
2021-01-11 18:11:23 +00:00
aquilescanta
ee5423d053 Simplify comment
#minor-release

PiperOrigin-RevId: 351144857
2021-01-11 18:11:16 +00:00
olly
9add3c764e Fix flaky DownloadManager test
PiperOrigin-RevId: 350782940
2021-01-11 16:14:34 +00:00
ibaker
c5df90b1ec Propagate LoadErrorHandlingPolicy to SingleSampleMediaSource.Factory
I think this was missed when integrating DefaultMediaSourceFactory with
SingleSampleMediaSource.Factory in
315ba6f324

Issue: #8430
PiperOrigin-RevId: 350759580
2021-01-11 16:14:34 +00:00
christosts
3db269812a Synchronize initialization of DefaultDownloadIndex
There is a race condition when initializing the downloads database. The
constructor of the DownloadManager kicks-off the database initialization
in its internal thread, but at the same time an app can try to access
the database directly through the manager's download index, e.g. doing

DonwloadManager manager = new ...
manager.getDownloadIndex().getDownload("id");

might enter DefaultDownloadIndex.ensureInitialized() from two threads.
When upgrading the downloads table from version 2 to version 3, the
first thread that enters the database transaction in ensureInitialized()
will drop and recreate the table using the v3 schema. Then, the second
thread will attempt to read from the newly created table using the v2
schema, which will fail.

This race condition was not introduced in 2.12 but was there already.
However, prior to 2.12, the code only dropped and re-created and the
table and did not attempt to read any data. Hence, if the race condition
happened, the code would drop and create the table twice, but no error
would occur.

Issue: #8420
#minor-release
PiperOrigin-RevId: 350745463
2021-01-11 16:14:34 +00:00
krocard
6b8927962c Enable setOutputSurface workaround for Xiaomi Mi Box S
Reported by https://github.com/google/ExoPlayer/issues/8329.

PiperOrigin-RevId: 350547523
2021-01-11 16:14:34 +00:00
olly
edc5b83929 Fix DownloadManager assertion failure
Issue: #8419
PiperOrigin-RevId: 350134719
2021-01-11 16:14:34 +00:00
olly
ca287ba562 Fix bypass mode when the stream is empty
Issue: #8374
PiperOrigin-RevId: 348792965
2021-01-11 16:14:34 +00:00
Oliver Woodman
2b8cfcf2ec Merge pull request #8357 from TiVo:p-fix-cea708anchor
PiperOrigin-RevId: 348440799
2021-01-11 16:14:34 +00:00
krocard
011342f4cf Explicitly fail playback if new format has no sampleMimeType
This avoids a NullPointerException later when the format is used.

Fixes https://github.com/google/ExoPlayer/issues/8283.

PiperOrigin-RevId: 348017149
2021-01-11 16:14:34 +00:00
christosts
c22fd76b6b HlsPlaylistParser: ignore subtitles without URI
Issue: #8323
PiperOrigin-RevId: 347827615
2021-01-11 16:14:34 +00:00
ibaker
d0e6dec199 Fix EPI.seekTo to balance operation acks when seeking during an ad
This regression was introduced in
b1e9257de1

Issue: #8349

PiperOrigin-RevId: 347802049
2021-01-11 16:14:34 +00:00
krocard
125de92989 Clarify EventLogger Window log
PiperOrigin-RevId: 347789441
2021-01-11 16:14:34 +00:00
olly
3a0b1f7da7 Fix UI menu not dismissing on API level 22 and earlier
Issue: #8272
PiperOrigin-RevId: 347010412
2021-01-11 16:13:29 +00:00
olly
a028ce8964 Fix missing Javadoc
PiperOrigin-RevId: 346764371
2021-01-11 16:13:28 +00:00
bachinger
fa0cc1e15f Improve javadoc of Window.windowStartTimeMs
PiperOrigin-RevId: 346346359
2021-01-11 16:13:28 +00:00
kimvde
6db6d14b16 Throw ParserException if AAC config is invalid
Issue:#8295
PiperOrigin-RevId: 346064966
2021-01-11 16:13:28 +00:00
aquilescanta
ab6b167ee0 Add iso9 to the list of supported MP4 brands
Issue: #8308
#minor-release
PiperOrigin-RevId: 345707141
2021-01-11 16:13:28 +00:00
ibaker
2195facd85 Gracefully handle null-terminated subtitle content in MKV containers
This was reported for SSA/ASS in PR #8265, but it seems to me the
SubRip part of the Matroska spec is similarly loose, so this change
handles null-terminated strings in both.

PiperOrigin-RevId: 345452667
2021-01-11 16:13:07 +00:00
Oliver Woodman
8c935e366c Merge pull request #8154 from samoylenkodmitry:handle_out_of_space
PiperOrigin-RevId: 345428731
2021-01-11 16:12:36 +00:00
andrewlewis
2516e94eb9 Fix SonicAudioProcessor end of stream behavior
The `AudioProcessor` interface requires that no more input is queued after
queueing end of stream, but `DefaultAudioSink` did queue more input and the
implementation of `SonicAudioProcessor` actually relied on this to drain output
at the end of the stream.

Fix this behavior by getting `Sonic` output in `getOutput` and having
`DefaultAudioSink` only queue input to processors that are not draining.

Also add TODOs to clean up audio processor implementations where the code
handles interaction that doesn't conform to the interface.

PiperOrigin-RevId: 345406478
2021-01-11 16:12:36 +00:00
ibaker
35173a016b Add an MKV asset with SSA subtitles for extractor and playback tests
Asset generated using a temporary SSA file and:
```
$ mkvmerge -o sample_with_ssa_subtitles.mkv sample.mkv input.ssa
```

PiperOrigin-RevId: 345217628
2021-01-11 16:12:24 +00:00
Oliver Woodman
495347d3c0 Merge pull request #8215 from TiVo:p-fix-apple-iframe-bug
PiperOrigin-RevId: 345202157
2021-01-08 16:52:25 +00:00
andrewlewis
fe754f313e Mask ad media periods before the URI is available
Previously `MediaPeriodQueue` would return null if an ad media URI hadn't
loaded yet, but this meant that the player could be stuck in `STATE_READY` if
an `AdsLoader` unexpectedly didn't provide an ad URI. Fix this behavior by
masking ad media periods. `MaskingMediaPeriod` no longer requires a
`MediaSource` to instantiate it.

This also fixes a specific case where playback gets stuck when using the IMA
extension with an empty ad where the IMA SDK unexpectedly doesn't notify the ad
group fetch error.

Issue: #8205
PiperOrigin-RevId: 344984824
2021-01-08 16:52:25 +00:00
bachinger
d8df5411b8 Fix flaky test
PiperOrigin-RevId: 334801561
2021-01-08 16:46:18 +00:00
ibaker
1cb346ee17 Bump version to 2.12.2
PiperOrigin-RevId: 344801462
2020-11-30 16:32:13 +00:00
olly
0e4d3162eb SonicAudioProcessor: Fix scaling to account for pending input bytes
PiperOrigin-RevId: 344420436
2020-11-30 10:51:19 +00:00
olly
26aa6f6dbf DefaultAudioSink: Fix transient position calculation errors
PiperOrigin-RevId: 344408351
2020-11-30 10:51:10 +00:00
olly
46396a93e9 Make special exception for cleartext-not-permitted
#exofixit

PiperOrigin-RevId: 344246408
2020-11-30 10:51:03 +00:00
olly
41d6c26904 Improve Player next/previous documentation
#exofixit
Issue: #5602
PiperOrigin-RevId: 344093622
2020-11-30 10:42:44 +00:00
olly
27d8bcf4cb Support enabling next/previous actions in PlayerNotificationManager
The ref'd issue was marked as a doucmentation candidate, but I think
the confusion likely arises from the lack of "next" and "previous" in
the method names. Our other UI components also support enabling each
button individually, so this also brings notifications in line with
those.

Issue: #6491
#exofixit
PiperOrigin-RevId: 344058969
2020-11-30 10:42:06 +00:00
kim-vde
d605b6c766 Merge pull request #8257 from xufuji456:dev-v2
PiperOrigin-RevId: 344057097
2020-11-30 10:41:52 +00:00
christosts
07a8b59a2e Set tag for every track in TrackSelectionView
#minor-release

PiperOrigin-RevId: 344051610
2020-11-30 10:40:03 +00:00
olly
d5829336eb Remove unused logic in SonicAudioProcessor
PiperOrigin-RevId: 343882631
2020-11-30 10:40:02 +00:00
ibaker
a04400cfb9 Tweak ParsableByteArray#readLine javadoc
Don't refer to the "system's default charset", just specify UTF-8
explicitly.

PiperOrigin-RevId: 343839878
2020-11-30 10:32:19 +00:00
olly
3a8524d044 Fix ProgressiveDownloader retry logic
RunnableFutureTask is not reusable. Trying to reuse it meant that a
failure in one doWork() call would cause subsequent download() calls
to (a) not block until the runnable has finished executing (does not
apply when using a direct executor), and (b) throw the same failure
as thrown from the first doWork() call.

This could cause #8078 if the initial failure occurred before the
content length was resolved. Retries are not blocked on their work
completing due to (a), and the download would be marked as failed due
to (b). The work itself could then resolve the content length, which
causes the stack trace in this issue.

Issue: #8078
PiperOrigin-RevId: 343498252
2020-11-23 11:08:09 +00:00
tonihei
10164d7491 Fix bug in SampleQueue.discardTo for duplicate timestamps.
When a stream has duplicate timestamps we currently discard to
the last sample with the specified discardTo timestamp, but
it should be the first one to adhere to the method doc and the
intended usage.

#minor-release

PiperOrigin-RevId: 343458870
2020-11-23 09:58:49 +00:00
olly
305ec3b449 Minimal fix for playback freezes when enabling tracks #8203
Background:

1. When the player has multiple audio renderers, by default they share a
   single AudioSink.
2. When any new renderer is enabled, all disabled renderers are reset
   prior to the new renderer being enabled. This is to give them a chance
   to free up resources in case the renderer being enabled needs them. These
   reset calls are expected to be no-ops for renderers that have never been
   enabled.

The issue:

The problematic case arises when there are two audio renderers and a third
renderer (e.g., text) is being enabled. In this case, the disabled audio
renderer's reset call ends up resetting the AudioSink that's shared with the
enabled audio renderer. The enabled audio renderer is then unable to make
progress, causing playback to freeze.

This is a minimal fix that directly prevents the mentioned issue. There are
multiple follow-ups that would probably make sense:

1. Having ExoPlayerImplInternal track which renderers need to be reset, and
   only resetting those renderers rather than all that are disabled. This
   seems like a good thing to do regardless, rather than relying on those
   calls being no-ops.
2. If we want to continue sharing AudioSink, we need to formalize this much
   better and make sure we have good test coverage. Messages like
   MSG_SET_VOLUME are also delivered to the AudioSink multiple times via
   each of the renderers, which works currently because DefaultAudioSink
   no-ops all but the first call in each case. This is pretty fragile though!

Issue: #8203
PiperOrigin-RevId: 343296081
2020-11-23 09:58:49 +00:00
olly
3509f50783 Fix fastforward and rewind color tinting and text alignment
Issue: #7898
PiperOrigin-RevId: 343251455
2020-11-23 09:58:48 +00:00
aquilescanta
78d65818c6 Fix HLS format derivation in traditional preparation
ExoPlayer's traditional HLS preparation works by loading a chunk from each track
group, and then tries to use the sample information plus the master playlist
information to generate the preparation's resulting TrackGroups.

There are 3 possible scenarios:
- Supported case: Each variant has a single codec string per track type. We can
  assign each track the codec string which matches the loaded sample's type.
- Supported case: Each variant has more than one codec string, but each track
  group has a single track. This is the case when different languages use
  different codecs. In this case, we can assign whichever codec matches the
  loaded sample's mime type.
- Unsupported case: Each variant has more than one codec string, and track
  groups contain more than one track. We are not able to safely map tracks to
  codec strings because that would require loading a chunk from each track
  (which would considerably delay preparation).

Broken in:
4783c329cc

PiperOrigin-RevId: 343072201
2020-11-23 09:58:48 +00:00
olly
bb8a2de37d Update Styled Player settings dialogs to respect RTL.
PiperOrigin-RevId: 342672124
2020-11-23 09:58:48 +00:00
tonihei
5698eadc08 Discard buffer synchronously after seek before cancelling a load.
This ensures the buffer is not full when the `DefaultLoadControl` determines
whether we should continue loading and thus prevents a false warning about
not having enough memory left.

PiperOrigin-RevId: 342616623
2020-11-23 09:58:48 +00:00
insun
82969c823c Increase touch target height of timebar in StyledPlayerControlView
This change also introduces gravity attribute to DefaultTimeBar.

PiperOrigin-RevId: 342573167
2020-11-23 09:58:43 +00:00
olly
0520c7d337 Remove C.StreamType constant that's not a real stream type
#minor-release

PiperOrigin-RevId: 341833274
2020-11-19 16:55:42 +00:00
olly
12e428ec87 Fix incorrect IntDef usage
#minor-release

PiperOrigin-RevId: 341668326
2020-11-19 16:55:34 +00:00
kimvde
8e638ec753 Work around AudioManager#getStreamVolume crashes
Issue:#8191
PiperOrigin-RevId: 341632732
2020-11-19 16:55:21 +00:00
bachinger
11b09dd58d Add dispatchPrepare(player) to ControlDispatcher
Issue: #7882
PiperOrigin-RevId: 341394254
2020-11-19 16:54:23 +00:00
ibaker
81d68317ac Fix or suppress nullness warnings introduced by checkerframework 3.7.0
PiperOrigin-RevId: 340826532
2020-11-19 16:52:32 +00:00
olly
c9683195c0 Matroska: Support additional PCM codec modes
- Support 32-bit A_PCM/FLOAT/IEEE PCM
- Support 8-bit and 16-bit A_PCM/INT/BIG PCM

Issue: #8142
PiperOrigin-RevId: 340264679
2020-11-19 16:44:18 +00:00
Oliver Woodman
ac1ffa4fc2 Merge pull request #8133 from xufuji456:dev-v2
PiperOrigin-RevId: 340254878
2020-11-19 16:40:03 +00:00