3232 Commits

Author SHA1 Message Date
aquilescanta
8d6f5d86b4 Make MODE_SINGLE_PMT the default mode
Even though this is not strictly spec compliant, this will make exoplayer
behave like it used to before multiple program support. Developers
who want to take advantage of the multiple program support are probably
less than the ones who only want their stream to "just work". This is
particularly useful for streams obtained after a filtering component,
like a tv tuner.

Issue:#2757

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155486122
2017-05-11 07:43:34 +01:00
aquilescanta
70b628526a Propagate playlist loading error if it prevents playback
This imitates DashMediaSource's behavior.

Issue:#2623

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155485738
2017-05-11 07:43:27 +01:00
tasnimsunny
51132f58f9 Make removal of non-existent cache span a no-op
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155413733
2017-05-11 07:42:58 +01:00
olly
1d6816d94b Avoid process death if OOM occurs on a loading thread
This is most commonly caused by malformed media, where
the media indicates that something we need to make an
allocation for is *really huge*. Failing playback is
appropriate for this case; killing the process is not.

Issue: #2780

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155408062
2017-05-11 07:42:51 +01:00
andrewlewis
963b7cbf72 Fix interpolation for rate/pitch adjustment
Based on https://github.com/waywardgeek/sonic/commit/7b441933.

Issue: #2774

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155349817
2017-05-11 07:42:41 +01:00
andrewlewis
2d2fcf1510 Use native byte order for SimpleOutputBuffers
The default byte order for ByteBuffers is big endian, but platform decoder
output buffers use native byte order. AudioProcessors handle native byte order
input/output.

When using a software audio decoding extension the Sonic audio processor would
receive big endian input but was outputting to a native byte order buffer,
which could be little endian. This mismatch caused audio output to be
distorted.

After this change both platform decoder and extension decoder output buffers
should be in native byte order.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155320973
2017-05-11 07:42:34 +01:00
arakawa_yusuke
65607b2736 Remove fully-qualified name 2017-05-11 07:42:27 +01:00
olly
bcee02cde2 Don't set MAX_INPUT_SIZE to unnecessarily large values
If the codec isn't adaptive, there's no need to accommodate
the width/height/input-size of streams that don't have the
same resolution as the current stream. This is because we'll
always need to instantiate a new codec anyway.

Issue: #2607

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155194458
2017-05-11 07:42:18 +01:00
aquilescanta
68b3e0b54d Expose no CC tracks if CLOSED-CAPTIONS=NONE is present
Issue:#2743

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155182859
2017-05-11 07:42:12 +01:00
olly
943141fb07 Some minor cleanup related to track selection and caching
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155103828
2017-05-11 07:42:06 +01:00
aquilescanta
bf61691c27 Fix javadocs typos
Issue:#2773

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155062917
2017-05-11 07:41:59 +01:00
aquilescanta
ed836d31e2 Propagate EXT-X-DATERANGE tags with media playlists
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155062718
2017-05-11 07:41:52 +01:00
olly
8bffe5d11e Add DummySurface for use with MediaCodec
A DummySurface is useful with MediaCodec on API levels 23+.
Rather than having to release a MediaCodec instance when the
app no longer has a real surface to output to, it's possible
to retain the MediaCodec, using MediaCodec.setOutputSurface
to target a DummySurface instance instead. When the app has
a real surface to output to again, it can call swap this
surface back in instantaneously. Without DummySurface a new
MediaCodec has to be instantiated at this point, and decoding
can only start from a key-frame in the media.

A future change may hook this up internally in MediaCodecRenderer
for supported use cases, although this looks a little awkward. If
this approach isn't viable, we can require applications wanting
this to set a DummySurface themselves. This isn't easy to do with
the way SimpleExoPlayerView.setPlayer works at the moment, however,
so some changes will be needed either way.

Issue: #677

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154931778
2017-05-11 07:41:45 +01:00
falhassen
60bf31ff24 Use Looper.getMainLooper() in Handler constructors in ExoPlayer when needed.
Looper.myLooper(), the default looper, may be null in background threads. This adds a fallback to use the main app looper.

This will allow ExoPlayer instances to be built in background threads in Photos.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154845446
2017-05-11 07:41:34 +01:00
andrewlewis
e90e2caec4 Improve DefaultTimeBar color customization
Add attributes for the scrubber handle color and unplayed color. If attributes
are missing, derive defaults from the played color.

Issue: #2740

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154825736
2017-05-11 07:38:42 +01:00
aquilescanta
2e2b0085c1 Prevent text tracks with no language being selected by default
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154421706
2017-05-11 07:38:33 +01:00
Andrew Orobator
dc80be0ca1 Improved Documentation
Added missing coma and fixed typo for EventListener#onTimelineChanged
2017-05-11 07:37:03 +01:00
ojw28
785fc76124 Delete gcore_versions.bzl 2017-05-10 22:17:39 -07:00
ojw28
17cee63544 Merge pull request #2794 from mofneko/fix-unused-variable
Fix unused variable
2017-05-10 21:59:05 -07:00
andrewlewis
4963061923 Fix wrap_content handling in DefaultTimeBar
Issue: #2788

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155705318
2017-05-11 05:53:20 +01:00
tonihei
c0d16ea2cb Possible NullPointerException in ExoPlayerImplInternal.setRepeatModeInternal
When readingPeriodHolder and playingPeriodHolder are both null, a
NullPointerException is thrown when trying to reassign readingPeriodHolder.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155635846
2017-05-11 05:53:20 +01:00
andrewlewis
a6220b8be3 Handle control layouts with no repeat button
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155625893
2017-05-11 05:53:20 +01:00
tonihei
02c51ee01c Update period holders in ExoPlayerImplInternal when repeat mode changes.
(Relating to GitHub issue #2577)

Changing the repeat mode during playback may require to discard or rebuffer
certain periods because the requested order of playback changed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155600910
2017-05-11 05:53:20 +01:00
tonihei
8a210becef Add repeat mode support to Timeline implementations.
(Relating to GitHub Issue #2577)

The Timeline base class provides the default implementation.

Timeline wrappers (e.g. ClippingTimeline, ConcatatedTimeline) forward all
requests to the respective inner timelines. Some like ConcatenatedTimeline add
their own additional logic to bridge between the child timelines.

In addition, ConcatenatedTimeline and LoopingTimeline now have a common
abstract base class as they share most of their code.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155509269
2017-05-11 05:53:20 +01:00
aquilescanta
4abf64b7ef Make MODE_SINGLE_PMT the default mode
Even though this is not strictly spec compliant, this will make exoplayer
behave like it used to before multiple program support. Developers
who want to take advantage of the multiple program support are probably
less than the ones who only want their stream to "just work". This is
particularly useful for streams obtained after a filtering component,
like a tv tuner.

Issue:#2757

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155486122
2017-05-11 05:53:20 +01:00
aquilescanta
002dd72e70 Propagate playlist loading error if it prevents playback
This imitates DashMediaSource's behavior.

Issue:#2623

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155485738
2017-05-11 05:53:20 +01:00
aquilescanta
1f43fb1998 Introduce CryptoData parameter object
This will allow supporting more encryption schemes. Including some
that require more encryption data, like the encryption pattern.

Issue:#1661
Issue:#1989
Issue:#2089

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155481889
2017-05-11 05:53:20 +01:00
arakawa_yusuke
86ac913df6 Fix unused variable 2017-05-09 21:20:57 +09:00
ojw28
0302fd6b4d Merge pull request #2765 from AOrobator/dev-v2
Dev v2
2017-05-08 23:14:14 +01:00
ojw28
f302d528f8 Merge pull request #2787 from mofneko/remove-fully-qualified-name
Remove fully-qualified name
2017-05-08 23:14:03 +01:00
tasnimsunny
b299718036 Make removal of non-existent cache span a no-op
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155413733
2017-05-08 22:39:14 +01:00
olly
812068a208 Avoid process death if OOM occurs on a loading thread
This is most commonly caused by malformed media, where
the media indicates that something we need to make an
allocation for is *really huge*. Failing playback is
appropriate for this case; killing the process is not.

Issue: #2780

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155408062
2017-05-08 22:32:07 +01:00
tonihei
c70cd37c5a Repeat mode UI
Added repeat mode toggle buttons to UI. Current mode gets forwarded to
Exoplayer instance, but without playback behaviour changes yet.
Translations for button descriptions are also missing - this will be another CL.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155386549
2017-05-08 22:30:58 +01:00
tonihei
df0d1b0f8a Removed superfluous dots in russian translation of repeat modes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155386511
2017-05-08 22:29:52 +01:00
andrewlewis
631cce9171 Fix interpolation for rate/pitch adjustment
Based on https://github.com/waywardgeek/sonic/commit/7b441933.

Issue: #2774

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155349817
2017-05-08 22:27:44 +01:00
andrewlewis
4b5c521a33 Use native byte order for SimpleOutputBuffers
The default byte order for ByteBuffers is big endian, but platform decoder
output buffers use native byte order. AudioProcessors handle native byte order
input/output.

When using a software audio decoding extension the Sonic audio processor would
receive big endian input but was outputting to a native byte order buffer,
which could be little endian. This mismatch caused audio output to be
distorted.

After this change both platform decoder and extension decoder output buffers
should be in native byte order.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155320973
2017-05-08 22:26:38 +01:00
arakawa_yusuke
4f9cf44986 Remove fully-qualified name 2017-05-08 20:05:10 +09:00
olly
7f66725953 Don't set MAX_INPUT_SIZE to unnecessarily large values
If the codec isn't adaptive, there's no need to accommodate
the width/height/input-size of streams that don't have the
same resolution as the current stream. This is because we'll
always need to instantiate a new codec anyway.

Issue: #2607

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155194458
2017-05-05 15:35:52 +01:00
aquilescanta
5d459c8103 Expose no CC tracks if CLOSED-CAPTIONS=NONE is present
Issue:#2743

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155182859
2017-05-05 15:34:57 +01:00
olly
4c39627ed1 Some minor cleanup related to track selection and caching
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155103828
2017-05-04 20:58:02 +01:00
tonihei
ba9cbfbb91 Localized strings for repeat modes.
Related to GitHub Issue #2577.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155078753
2017-05-04 20:56:59 +01:00
tonihei
4d1826dd3d Add repeat mode mechanics to Exoplayer.
(Relating to GitHub Issue #2577)

All getter, setter and callbacks have been added and value of repeatMode is
passed to getNextXXXIndex methods.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155071985
2017-05-04 20:55:48 +01:00
aquilescanta
3a5548d72a Fix javadocs typos
Issue:#2773

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155062917
2017-05-04 20:54:34 +01:00
aquilescanta
b408750aa9 Propagate EXT-X-DATERANGE tags with media playlists
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155062718
2017-05-04 20:53:28 +01:00
olly
7773831d88 Add DummySurface for use with MediaCodec
A DummySurface is useful with MediaCodec on API levels 23+.
Rather than having to release a MediaCodec instance when the
app no longer has a real surface to output to, it's possible
to retain the MediaCodec, using MediaCodec.setOutputSurface
to target a DummySurface instance instead. When the app has
a real surface to output to again, it can call swap this
surface back in instantaneously. Without DummySurface a new
MediaCodec has to be instantiated at this point, and decoding
can only start from a key-frame in the media.

A future change may hook this up internally in MediaCodecRenderer
for supported use cases, although this looks a little awkward. If
this approach isn't viable, we can require applications wanting
this to set a DummySurface themselves. This isn't easy to do with
the way SimpleExoPlayerView.setPlayer works at the moment, however,
so some changes will be needed either way.

Issue: #677

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154931778
2017-05-04 20:52:19 +01:00
falhassen
6d01460b58 Use Looper.getMainLooper() in Handler constructors in ExoPlayer when needed.
Looper.myLooper(), the default looper, may be null in background threads. This adds a fallback to use the main app looper.

This will allow ExoPlayer instances to be built in background threads in Photos.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154845446
2017-05-04 20:51:14 +01:00
andrewlewis
c3158d3e68 Improve DefaultTimeBar color customization
Add attributes for the scrubber handle color and unplayed color. If attributes
are missing, derive defaults from the played color.

Issue: #2740

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154825736
2017-05-04 20:50:05 +01:00
tonihei
d33a6b49f0 User-defined fallback if Cronet is not available
When using the CronetEngine.Builder class, it automatically selects the
Cronet version preferring higher version codes and falling back to a Java
Http implementation if no native or GMSCore version is available.

This version selection has now been moved into the CronetEngineFactory
class to always prefer GMSCore over natively bundled versions. We also
ignore the Cronet internal Java implementation. Instead, users of
CronetDataSourceFactory can provide their own fallback factory. If none is
provided, we use DefaultHttpDataSourceFactory.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154821040
2017-05-04 20:48:59 +01:00
tonihei
ab30d715c7 Infinite loops using new Timeline features
Using the new getNextWindowIndex method of Timeline, LoopingMediaSource now
uses a InfinitelyLoopingTimeline which does not unroll the windows to
157 million iterations but just starts from the beginning. If an explicit
number of iterations is given, we still unroll.

This change also allows multi-window timebars to show infinitely looping
playlists correctly.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154817554
2017-05-04 20:47:51 +01:00
tonihei
94ffbb2b6a Support for Cronet from GMSCore (Blaze only)
The blaze BUILD file for the Cronet extension now has three options:
Using native bundled Cronet libs, using GMSCore, or using whichever is newer.
The GMSCore version is preselected (as it is the smallest), but other variants
may be used by uncommenting the respective lines.

The API is the same for all cases and the CronetEngine.Builder automatically
selects the newest option or falls back to default http.

To avoid that apps using this extension need to add a dependency to Cronet
themselves, I added a CronetEngineFactory to the Exoplayer extension.

Gradle builds can't be supported (as far as I can see), as the GMSCore Cronet
version is first party only.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154812029
2017-05-04 20:46:44 +01:00