4622 Commits

Author SHA1 Message Date
olly
58e70e8351 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:49:45 +01:00
andrewlewis
f5980a54a3 Ensure the SilenceMediaSource position is in range
Issue: #6229
PiperOrigin-RevId: 260500986
2019-07-29 22:34:21 +01:00
olly
d76bf4bfca Bump version to 2.10.4
PiperOrigin-RevId: 260164426
2019-07-27 23:01:22 +01:00
andrewlewis
95d2988490 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:57:11 +01:00
Oliver Woodman
0b756a9646 Merge pull request #6042 from Timbals:dev-v2
PiperOrigin-RevId: 258812820
2019-07-26 17:01:18 +01:00
olly
78d6393213 Add A10-70L to output surface workaround
Issue: #6222
PiperOrigin-RevId: 260146226
2019-07-26 16:59:46 +01:00
tonihei
40fd11d9e8 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-26 16:58:07 +01:00
tonihei
f82920926d 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-26 16:57:40 +01:00
aquilescanta
e181d4bd35 Fix DataSchemeDataSource re-opening and range requests
Issue:#6192
PiperOrigin-RevId: 258592902
2019-07-26 16:57:24 +01:00
tonihei
962d5e7040 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-26 16:56:01 +01:00
olly
fa691035d3 Extend RK video_decoder workaround to newer API levels
Issue: #6184
PiperOrigin-RevId: 258527533
2019-07-26 16:55:01 +01:00
Oliver Woodman
bba0a27cb6 Merge pull request #6151 from ittiam-systems:bug-5527
PiperOrigin-RevId: 257668797
2019-07-26 16:54:56 +01:00
olly
b6777e030e Remove some UI classes from nullness blacklist
PiperOrigin-RevId: 256751627
2019-07-26 16:52:05 +01:00
olly
383c0adcca Remove more low hanging fruit from nullness blacklist
PiperOrigin-RevId: 256573352
2019-07-26 16:50:57 +01:00
olly
67ad84f121 Remove more classes from nullness blacklist
PiperOrigin-RevId: 256202135
2019-07-26 16:48:00 +01:00
olly
fdef76c843 Bump version to 2.10.3
PiperOrigin-RevId: 257161518
2019-07-09 11:58:15 +01:00
olly
be9fea89a6 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:48:54 +01:00
tonihei
dbabb7c9a3 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-09 11:40:39 +01:00
andrewlewis
1d766c4603 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-07-09 11:39:36 +01:00
tonihei
d035f24e87 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-09 11:33:21 +01:00
tonihei
1538e5d966 CEA608: no-op readability clean-up
PiperOrigin-RevId: 256676196
2019-07-09 11:33:15 +01:00
Oliver Woodman
91728d41de Merge pull request #5908 from sr1990:dev-v2
PiperOrigin-RevId: 256147805
2019-07-09 11:32:28 +01:00
olly
3d5d23778a 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-09 11:32:05 +01:00
tonihei
71e0f2e81c Don't consume touch events if no controller is attached.
Issue:#6109
PiperOrigin-RevId: 255933121
2019-07-09 11:31:24 +01:00
andrewlewis
5365272b60 Use the floor of the frame rate for capability checks
PiperOrigin-RevId: 255584000
2019-07-09 11:31:11 +01:00
olly
cdf70edf6e Remove unnecessary FileDescriptor sync
PiperOrigin-RevId: 255380796
2019-07-09 11:30:38 +01:00
olly
d57a8587d2 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-09 11:30:22 +01:00
tonihei
18f1b06a68 Fix all FIXME comments.
These are mostly nullability issues.

PiperOrigin-RevId: 253537068
2019-07-09 11:29:45 +01:00
Oliver Woodman
1c7bb2899c Merge pull request #6055 from xirac:dev-v2
PiperOrigin-RevId: 254182080
2019-07-09 11:27:31 +01:00
tonihei
913dcb3e1d 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-07-09 10:54:31 +01:00
Andrew Lewis
6799097930
Fix decoder fallback for E-AC3 JOC to E-AC3
Issue: #6073
2019-06-21 11:50:12 +01:00
Oliver Woodman
c8955ed5ff Fix build 2019-06-19 18:59:31 +01:00
bachinger
66e1211350 allow multiple style rules in a STYLE block of a webvtt file
PiperOrigin-RevId: 253959976
2019-06-19 18:54:41 +01:00
bachinger
5d544974e9 keep notification when stop(false) is called
ISSUE: #6041
PiperOrigin-RevId: 253958225
2019-06-19 18:53:43 +01:00
tonihei
8286e1d725 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-19 18:52:56 +01:00
olly
def01f68b9 Let AudioTrack write headers on SDK_INT >= 26
Issue: #6031
PiperOrigin-RevId: 253784986
2019-06-19 18:52:20 +01:00
aquilescanta
d072a5261e Fix application of maxAudioBitrate for adaptive audio track groups
Issue:#6006
PiperOrigin-RevId: 253781533
2019-06-19 18:52:13 +01:00
tonihei
9da2c3305b 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-19 18:51:38 +01:00
aquilescanta
a090f7ecca Remove unused variable
PiperOrigin-RevId: 253762488
2019-06-19 18:51:33 +01:00
tonihei
e1ff3d028f 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-19 18:51:25 +01:00
Toni
7f435b4787 Merge pull request #6036 from angelrc96:dev-v2
PiperOrigin-RevId: 253228214
2019-06-19 18:50:33 +01:00
arodriguez
692f4152d5 Support for UDP data source 2019-06-19 18:49:41 +01:00
olly
d3967b557a 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:41:52 +01:00
olly
edee3dd340 Bump to 2.10.2
PiperOrigin-RevId: 251216822
2019-06-03 19:20:22 +01:00
andrewlewis
578abccf16 Add SilenceMediaSource
Issue: #5735
PiperOrigin-RevId: 248745617
2019-06-03 16:37:39 +01:00
tonihei
d11778dbc8 Add ResolvingDataSource for just-in-time resolution of DataSpecs.
Issue:#5779
PiperOrigin-RevId: 249234058
2019-06-03 16:36:23 +01:00
Oliver Woodman
19de134aa6 CEA608: Handling XDS and TEXT modes 2019-06-03 16:35:11 +01:00
eguven
c231e1120e 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-31 23:03:59 +01:00
eguven
811cdf06ac Modify DashDownloaderTest to test if content length is stored
PiperOrigin-RevId: 250655481
2019-05-31 23:01:21 +01:00
eguven
bbf8a9ac13 Simplify CacheUtil
PiperOrigin-RevId: 250654697
2019-05-31 23:01:15 +01:00