10943 Commits

Author SHA1 Message Date
ibaker
57e884b671 Add support for AC-3, AC-4, E-AC-3 and E-AC-3-JOC to playback tests
I added the TS playback tests for these assets without adding support
for the relevant MIME types to ShadowMediaCodec.

Also remove test assets with more than 2 audio channels - this isn't
currently supported by ShadowAudioSystem. I'll re-add these when support
is available.

PiperOrigin-RevId: 338023290
2020-10-20 14:51:41 +01:00
krocard
f54f763db5 AudioSink: Remove comment about unconfirmed crash
Consensus is that the NoClassDefFoundError does not
causes a crash but only a warning.

PiperOrigin-RevId: 338022354
2020-10-20 14:51:32 +01:00
Oliver Woodman
2f3fdf7c5b Merge pull request #8030 from yqritc:add-output-surface-workaround
PiperOrigin-RevId: 338016707
2020-10-20 14:51:20 +01:00
kimvde
021d725c0a Add motion photo metadata entry
PiperOrigin-RevId: 337863184
2020-10-20 14:51:09 +01:00
andrewlewis
2ada01c1e7 Allow enabling IMA ext debug mode programmatically
PiperOrigin-RevId: 337824945
2020-10-20 14:50:59 +01:00
tonihei
febf5d2031 Use ListenerSet in AnalyticsCollector.
This ensures recursively sent events arrive in the correct order.

Issue: #8048
PiperOrigin-RevId: 337812882
2020-10-20 14:50:50 +01:00
tonihei
3c682610cf Fix calculation of available duration in DefaultDashChunkSource
The available duration used a "live edge" that was calculated in
the previous iteration and was thus quite old. Also it also used
the end of the last available segment, but the actually available
duration for buffering needs to be clamped to the current live edge
for low-latency streams.

Issue: #4904
PiperOrigin-RevId: 337812621
2020-10-20 14:50:40 +01:00
tonihei
68cbf6ddf3 Move listener handling to common util class.
ExoPlayerImpl and CastPlayer repeat the same logic. Moving the listener
and event handling to a common util class allows to reuse the same code
and add unit tests for this logic.

The change is a functional no-op.

PiperOrigin-RevId: 337812358
2020-10-20 14:50:30 +01:00
tonihei
9398f4db03 Fix ABR tests gradle build.
The build needs to remove some duplicate dependencies to work again.

Also replace a deprecated API usage with the non-deprecated equivalent
and merge the two Blaze target into one to simplify Gradle file.

PiperOrigin-RevId: 337812099
2020-10-20 14:50:20 +01:00
xufuji456
af4028f30e Fix MOV with pcm_alaw/pcm_mulaw which is fixedSampleSize 2020-10-19 20:49:29 +08:00
bachinger
c8879392ab Make resetPosition reset the position if true
Issue: #8024
PiperOrigin-RevId: 335846035
2020-10-17 12:18:39 +01:00
aquilescanta
5b0b4479ae Fix HLS chunkful preparation bug affecting certain master playlists
The bug affects playlists that start with an I-FRAME only variant.

Issue: #8025
PiperOrigin-RevId: 335819497
2020-10-17 12:18:32 +01:00
andrewlewis
837cdc4f67 Fix miscellaneous nits/typos
PiperOrigin-RevId: 335642909
2020-10-17 12:18:13 +01:00
kimvde
bddaaf022c Ignore negative payload size in TS PesReader
Issue: #8005
PiperOrigin-RevId: 335625992
2020-10-17 12:18:05 +01:00
kimvde
1cca9ffd01 Add search bytes parameter to TsExtractor
Context: Issue: #7988
PiperOrigin-RevId: 335608610
2020-10-17 12:17:42 +01:00
andrewlewis
88abe26ec3 Allow apps to add a VideoAdPlayerCallback
Issue: #7944
PiperOrigin-RevId: 335012643
2020-10-17 12:16:39 +01:00
ibaker
13d8860221 Tweak null-checking in TextRenderer#getNextEventTime()
`subtitle` is only guaranteed to be non-null if
`nextSubtitleEventIndex != C.INDEX_UNSET`. The null check added in
0efec5f6c1
was too early.

Issue: #8017
PiperOrigin-RevId: 334777742
2020-10-17 12:09:20 +01:00
ibaker
b8c8ce0ee0 Use Mp4WebvttDecoder for WebVTT content in DASH MP4 containers
This was broken by 74a9d8f680
because DashManifestParser switched to setting Format.sampleMimeType to
text/vtt while SubtitleDecoderFactory was still expecting
application/x-mp4-vtt. This change teaches SubtitleDecoderFactory to
check both Format.containerMimeType and Format.sampleMimeType.

I'll investigate a follow-up change to remove
MimeTypes.APPLICATION_MP4VTT completely (it's currently still used in
AtomParsers).

Issue: #7985
PiperOrigin-RevId: 334771672
2020-10-17 12:09:13 +01:00
ibaker
9ce2ac8a8c Create a robolectricutils module
This holds shared test infrastructure that needs to depend on
Robolectric.

PiperOrigin-RevId: 334604041
2020-10-17 12:08:59 +01:00
ibaker
bd312ec906 Preserve limit when resetting ParsableByteArray in OggPacket#populate
When I moved ParsableByteArray#data behind a getter I replaced some
assignments with calls to reset(byte[]):
ce2e6e2fd6

reset(byte[]) deliberately sets `limit` to `data.length`, in order to
handle cases that were reassigning `data` but not updating `limit`.
However OggPacket was already using `limit` to track where to write
'new' data into the array, so changing `limit` to `data.length` caused
us to try and write new data beyond the end of the array.

I looked at other uses of reset(byte[]) in ce2e6e2fd6
and condluded the only other usage in MatroskaExtractor is legit and
shouldn't be updated like this (because MatroskaExtractor previously
*wasn't* correctly updating/maintaining `limit`).

Issue: #7992
PiperOrigin-RevId: 334601586
2020-10-17 11:53:40 +01:00
andrewlewis
f3767b3185 Add ImaUtil for IMA extension utilities
PiperOrigin-RevId: 334567234
2020-10-17 11:53:34 +01:00
andrewlewis
358d205f0f Use Builder in ImaAdsLoader constructor
PiperOrigin-RevId: 334562209
2020-10-17 11:53:29 +01:00
andrewlewis
824b2a7305 Fix position ramping behavior with AudioTrack speed params
Non-realtime AudioTrack playback speed was not taken into account when
extrapolating the old mode's position, causing the position not to
advance smoothly.

This should be a no-op when not using AudioTrack playback params for
speed adjustment.

Issue: #7982
PiperOrigin-RevId: 334151163
2020-10-17 11:53:06 +01:00
samrobinson
89cd796bf6 Do not require subtitleButton in custom layouts of StyledPlayerView
Every other subtitleButton has an if not null check, but does not force non null.

Issue: #7962
PiperOrigin-RevId: 334124323
2020-10-17 11:52:45 +01:00
andrewlewis
1bdccd4bfb Fix position reporting with fetch errors
On receiving a fetch error for an ad that would otherwise play based on an
initial/seek position, the pending content position wasn't cleared which meant
that position reporting was broken after a fetch error. Fix this by always
clearing the pending position (if there was a pending position that will have
triggered the fetch error).

Also deduplicate the code for handling empty ad groups (fetch errors)
and ad group load errors.

Issue: #7956
PiperOrigin-RevId: 334113131
2020-10-17 11:52:12 +01:00
Oliver Woodman
9819664bd1 Merge pull request #7798 from yoobi:trackSelectionView
PiperOrigin-RevId: 333751261
2020-10-17 11:51:53 +01:00
kimvde
57f11d1556 Parse TLEN duration in Mp3Extractor
Issue: #7949
PiperOrigin-RevId: 333733615
2020-10-17 11:51:36 +01:00
bachinger
19530866c7 Always pass true for ongoing with the first notification
ISSUE: #7977
PiperOrigin-RevId: 333726625
2020-10-17 11:51:30 +01:00
christosts
300bee5f0b Bring back setRenderTimeLimitMs
PiperOrigin-RevId: 333712782
2020-10-17 11:51:18 +01:00
samrobinson
973d23543e Add support for mp2 boxes.
Issue: #7967
PiperOrigin-RevId: 333709003
2020-10-17 11:49:06 +01:00
christosts
a1999ef854 Util.getStringForTime() prefixes negative times
Fix bug to place the negative sign in the beginning
of the returned String.

PiperOrigin-RevId: 333504868
2020-10-17 11:48:24 +01:00
kim-vde
31251a40c1 Merge pull request #7968 from DolbyLaboratories:dev-v2-channelConfiguration
PiperOrigin-RevId: 333485323
2020-10-17 11:48:14 +01:00
tonihei
30be792a15 Switch SntpClient to time.android.com and allow to set host.
PiperOrigin-RevId: 333480727
2020-10-17 11:48:08 +01:00
krocard
64aa634f9b Fix offload buffer full detection after setEndOfStream
This issue has been observed on a test app stress
testing setEndOfStream.

The issue has not been observed on ExoPlayer,
probably due to timing differences, but it is fixed
preventively.

#exo-offload

PiperOrigin-RevId: 333472136
2020-10-17 11:48:02 +01:00
ibaker
92f9de8ea3 Delete sample_cbs.adts test asset
This seems to be an exact copy of sample.adts. Update the test to use
the same sample but just output to a different dump file.

PiperOrigin-RevId: 333469714
2020-10-17 11:47:54 +01:00
ibaker
df1619fa3f Add Japanese subtitle examples to the demo app
These are from https://medium.com/google-exoplayer/improved-japanese-subtitle-support-7598fee12cf4

PiperOrigin-RevId: 333296789
2020-10-17 11:47:50 +01:00
andrewlewis
79638d1e3d Add support for 'mett' sample description
PiperOrigin-RevId: 333272292
2020-10-17 11:47:44 +01:00
andrewlewis
884a0f52cd Remove unused MP4 atom type
PiperOrigin-RevId: 333051018
2020-10-17 11:47:35 +01:00
tonihei
93948471c8 Don't require the existence of the next period to wait for its stream.
We have a workaround for uneven sample stream durarions in playlists that
assumes a renderer allows playback if it's reading ahead or waiting for
the next stream.

652c2f9c18 changed this logic to no longer require to
wait until the next stream is prepared due to a change in how we advance
media periods in the queue. However, the code falsely still requires the
next stream to exist (even if it's not prepared). This can cause a stuck
buffering state when the difference in the duration of the streams is more
than what we buffer ahead because we never create the next stream in such
a case.

Note: DefaultMediaClock.shouldUseStandaloneClock has roughly the same logic
and also doesn't require the next stream to be present.

Also fix a test that seemed to rely on this stuck buffering case to test
stuck buffering detection. Changed the test to not read the end of stream
to ensure it runs into the desired stuck buffering case.

Issue:#7943
PiperOrigin-RevId: 333050285
2020-10-17 11:47:27 +01:00
ibaker
b6036561c2 Exclude PC devices from H.265 GTS tests
PiperOrigin-RevId: 333031399
2020-10-17 11:46:31 +01:00
tonihei
1b5d07c105 Guava-ify f2c51560c2
PiperOrigin-RevId: 333031301
2020-10-17 11:46:23 +01:00
tonihei
6a9f125c14 Don't assume FakeSampleStream is ended without end of stream signal
PiperOrigin-RevId: 333029935
2020-10-17 11:46:15 +01:00
olly
a837e7a3b0 Cleanup layout XMLs to be consistent with others
PiperOrigin-RevId: 333023580
2020-10-17 11:44:43 +01:00
ibaker
77249bdf0e Use replace() instead of replaceAll() in SsaDecoder
We're not using regex so there's no need to use replaceAll()

PiperOrigin-RevId: 332865724
2020-10-17 11:44:17 +01:00
krocard
201d120e38 Recover from audio server crash while sleeping for offload
Without this patch, playback would be frozen indefinitely
until the user manually pauses and unpauses it.

This has the side effect of disabling offload until
the next stop due to the workaround of
disabling offload when it encounters a failure.

As an audio server crash is considered very
infrequent, especially in stable conditions like
an audio only playback, it is unlikely that disabling
offload is an issue.

PiperOrigin-RevId: 332857094
2020-10-17 11:44:10 +01:00
Oliver Woodman
1850a918f1 Merge pull request #7938 from bennettpeter:pullreq-ssa-subtitles
PiperOrigin-RevId: 332814223
2020-10-17 11:43:54 +01:00
kimvde
9ec9828c93 Fix dump file write directory
PiperOrigin-RevId: 332254072
2020-10-17 11:41:49 +01:00
ibaker
3e36ebe28e Suppress Guava-related ProGuard/R8 warnings
I didn't copy-paste the whole of
https://github.com/google/guava/wiki/UsingProGuardWithGuava because
this line seems relevant based on our current usage.

Lots of that file seems to relate to classes that are strongly
discouraged on Android:
https://github.com/google/guava/wiki/Android#specifics

I've only added this to the `common` module, since everyone that uses
ExoPlayer must depend on that. This avoids duplicating this line into
every module that has a Guava dependency.

Also remove some other warning suppressions that are defined in both
`core` and `common`.

Issue: #7904
PiperOrigin-RevId: 332203086
2020-10-17 11:41:41 +01:00
olly
f4896d769f Replace duration strings with plurals
PiperOrigin-RevId: 332014290
2020-10-17 11:41:35 +01:00
kimvde
97a0df77f6 Support android.resource URI scheme
Issue: #7866
PiperOrigin-RevId: 330736774
2020-10-17 11:40:56 +01:00