Commit graph

3925 commits

Author SHA1 Message Date
olly
214d46d957 Set selection flags on image sample formats.
Issue: #3008

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=181455340
2018-01-15 11:46:07 +00:00
eguven
1fc250a9f3 Make CacheUtil documentation clearer
Also fixed some other Cache related javadoc.

Issue: #3374

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=181440687
2018-01-15 11:44:41 +00:00
olly
ff1bb2f702 Apply SeekParameters to DASH + SmoothStreaming playbacks
Issue: #2882

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=181314086
2018-01-15 11:34:48 +00:00
tonihei
4ee971052b Improve Extractor partial read tests.
Partial reads were performed once using a partial size of 1 byte.
This was not enough to detect problems which only occur in combination
with IOExceptions. Partial reads are now only applied when no exception
is thrown.

Moreover, the tests didn't check whether the total number of sampled bytes
is what it is supposed to be. Added a field to the data dumps checking
the total number of bytes in the sampled data.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=181296545
2018-01-15 11:33:23 +00:00
eguven
d427a1dd62 Make Cache.getCachedSpans return empty set rather than null
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=181161289
2018-01-15 11:30:39 +00:00
olly
d533a83ae4 Partial revert of DRM fixes
----------------------------------
Original change description:

DRM fixes

- Parse multiple kids from default_KID. It's specified as a whitespace
  separated list of UUIDs rather than a single UUID.
- Opportunistically proceed with playback in cases where the manifest
  only defines a single SchemeData with the common PSSH UUID. In such
  cases the manifest isn't saying anything about which specific DRM
  schemes it supports.

Issue: #3630

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=181137621
2018-01-15 11:27:48 +00:00
olly
73892f21b1 Ubernit line re-order
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=181137491
2018-01-15 11:26:22 +00:00
tonihei
c991b80c85 Rmeove unused variable in Mp4Extractor and HeifExtractor.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=181135589
2018-01-15 11:24:57 +00:00
tonihei
4867748c50 Add assertions to check that media sources are not prepared twice.
This lets apps fail-fast when they try to reuse media source instances.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180934445
2018-01-15 11:23:31 +00:00
eguven
4b018b4d19 Document how unset length request are cached
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180929422
2018-01-15 11:22:07 +00:00
hoangtc
5364962dca Automatically apply rotation for TextureView in SimpleExoPlayer.
If SimpleExoPlayer is using TextView as output, we can handle video rotation by
automatically applying a matrix transformation to the TextureView when we have
this information available from the video (from video's metadata).

GitHub: #91

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180925571
2018-01-15 11:20:41 +00:00
eguven
373935aeb6 Make CacheDataSource detect cache availability change
In certain conditions CacheDataSource switch to reading from upstream
without writing back to cache. This change makes it detect the change of
these conditions and switch to reading from or writing to cache.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180901463
2018-01-15 11:16:25 +00:00
Drew Hill
aaf469ce06 code review changes and fix for discontinuity 2018-01-14 11:00:32 -05:00
Drew Hill
821ea0e58b moved floatresample into defaultaudiosink and added new constructor in defaultaudiosync to use that resample when audio input is 24/32bit pcm and the new flag is enabled 2018-01-06 00:26:18 -05:00
Drew Hill
ca0c090c1a add support in mediacodecaudiorenderer for 24bit pcm to float 2018-01-05 23:31:38 -05:00
Drew Hill
b610e11443 PGS subtitle decoding support 2018-01-05 23:10:51 -05:00
olly
a1bac99f3b Fix loadDrmInitData given DASH manifest parser changes
DASH manifests can now contain non-null but incomplete
DRM init data. Hence using the manifest init data when
non-null is not always the correct thing to do. This
change merges the sample and manifest formats (which
correctly merges the DRM init data) and then uses the
result.

Issue: #3630

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180787784
2018-01-04 15:56:44 +00:00
andrewlewis
c89cc81b71 Configure MediaCodecs for realtime priority
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180782164
2018-01-04 15:55:27 +00:00
andrewlewis
682953c411 Fix typos
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180778084
2018-01-04 15:54:01 +00:00
olly
a314db04ad Reformat UI classes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180777553
2018-01-04 15:52:32 +00:00
andrewlewis
8e8e53c42d Add support for Dolby TrueHD passthrough
Issue: #2147

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180678595
2018-01-04 15:50:59 +00:00
olly
7314e9bddc DRM fixes
- Parse multiple kids from default_KID. It's specified as a whitespace
  separated list of UUIDs rather than a single UUID.
- Opportunistically proceed with playback in cases where the manifest
  only defines a single SchemeData with the common PSSH UUID. In such
  cases the manifest isn't saying anything about which specific DRM
  schemes it supports.

Issue: #3630

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180675056
2018-01-04 15:49:34 +00:00
tonihei
2bc734afec Replace message delay with send at time in playback loop.
This removes the need to calculate the time needed to run the doSomeWork
method. Consequently, we can use both the real Clock/Handler and the
FakeClock without changing the way the playback loop works and without
violating the interfaces of Clock or Handler.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180665647
2018-01-04 15:48:11 +00:00
olly
7b9f71b44d Don't kill the process if SimpleDecoder.decode throws.
Issue: #3645

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180659855
2018-01-04 15:44:00 +00:00
eguven
d3ba207a4b Refactor CacheDataSource
Simplified and clarified the code.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180649983
2018-01-04 15:39:36 +00:00
olly
bf3d6028fa Make SsaDecoder more robust against malformed content
Issue: #3645

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180559196
2018-01-03 13:34:36 +00:00
olly
0821f578e8 Remove HandlerWrapper.Factory
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180558741
2018-01-03 13:34:36 +00:00
tonihei
22f8ee37d4 Clean-up of player message handling.
Some readability fixes for PlayerMessage and the handling in
ExoPlayerImplInternal.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180544294
2018-01-03 13:34:36 +00:00
olly
88abb153bb Force audio renderers to report same position when not started
Whilst the previous behavior was WAI and had the advantage of
updating the position to be more exact when known, there were
a couple of disadvantages:

1. If seeking to the very end of a period in a playlist when
   paused, the position adjustment could trigger a position
   discontinuity to the next period.
2. We de-duplicate seeks to the current playback position.
   The position adjustment can prevent this from being
   effective. This is particularly important with the new
   SeekParameters support. When seeking to nearest sync point
   it's often possible to de-duplicate seeks, but we cannot
   do so if the playback position adjusts away from the sync
   point's time.

Issue: #2439
Issue: #2882

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180540736
2018-01-03 13:34:36 +00:00
tonihei
ad80784c19 Fix parameter order in DefaultLoadControl constructor.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180254437
2018-01-03 13:34:36 +00:00
tonihei
410e614cfd Run custom messages executed on playback thread immediately.
This ensures message order if multiple custom messages running on the
playback thread and direct player commands are called immedately after
each other.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179925852
2018-01-03 13:34:36 +00:00
andrewlewis
f2bb2d27be Add support for extracting 32-bit float WAVE
Issue: #3379

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179925320
2018-01-03 13:34:36 +00:00
tonihei
61b9e846a8 Allow setting a Clock for the main playback thread.
This allows to inject a FakeClock for tests. Other playback components
(e.g. some media sources) still use SystemClock but they can be amended
in the future if needed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179921889
2018-01-03 13:34:36 +00:00
tonihei
c6529344db Introduce Handler interface allowing to switch to other Handlers.
Especially this removes the need for the Clock interface to directly
implement Handler methods. Instead, we have a separate Handler interface
and the FakeClock is able to construct such a Handler.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179918255
2018-01-03 13:34:36 +00:00
hoangtc
35d4cbf99f Fix a bug that makes ClippingMediaSource not stop in some occasions.
If ClippingMediaSource contains a child MediaSource with embedded metadata
stream, and the embedded stream is being used, it can lead to
ClippingMediaSource not be able to stop after the clipping end point. The
reason being the metadata stream cannot read anymore sample, but it's also not
end of source at that point. This CL fix this by changing the condition to
check if the child stream cannot read anymore sample and it has read past the
clipping end point.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179918038
2018-01-03 13:34:36 +00:00
olly
6f4110f3f8 Fix buffer re-evaluation edge cases
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179917833
2018-01-03 13:34:36 +00:00
tonihei
ec71c05e8b Add possiblity to send messages at playback position.
This adds options to ExoPlayer.sendMessages which allow to specify a window index
and position at which the message should be sent. Additionally, the options can be
configured to use a custom Handler for the messages and whether the message should
be repeated when playback reaches the same position again.

The internal player converts these window positions to period index and position
at the earliest possibility. The internal player also attempts to update these
when the source info is refreshed. A sorted list of pending posts is kept and the
player triggers these posts when the playback position moves over the specified
position.

Issue:#2189

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179683841
2018-01-03 13:34:36 +00:00
tiffanywong
3b633f81b2 Automated g4 rollback of changelist 179563355.
*** Original change description ***

Add possiblity to send messages at playback position.

This adds options to ExoPlayer.sendMessages which allow to specify a window index
and position at which the message should be sent. Additionally, the options can be
configured to use a custom Handler for the messages and whether the message should
be repeated when playback reaches the same position again.

The internal player converts these window positions to period index and position
at the earliest possibility. The internal player also at...

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179666357
2018-01-03 13:34:36 +00:00
tonihei
6c2d1e1966 Add possiblity to send messages at playback position.
This adds options to ExoPlayer.sendMessages which allow to specify a window index
and position at which the message should be sent. Additionally, the options can be
configured to use a custom Handler for the messages and whether the message should
be repeated when playback reaches the same position again.

The internal player converts these window positions to period index and position
at the earliest possibility. The internal player also attempts to update these
when the source info is refreshed. A sorted list of pending posts is kept and the
player triggers these posts when the playback position moves over the specified
position.

Issue:#2189

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179563355
2018-01-02 21:36:07 +00:00
olly
539d291fce Fix some lint/analyze errors
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179406910
2018-01-02 21:30:14 +00:00
olly
d9bee4d29c Bump version to 2.6.1
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179227114
2017-12-15 20:47:57 +00:00
olly
0287f13c0a Fix analyze/lint errors
- Lint doesn't like a static import of something not available on
  the minimum API level.
- The method linked to in the Javadoc was incorrect (wrong signature).
  I couldn't really work out why it was there, so I got rid of it
  rather than updating.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179222587
2017-12-15 20:27:20 +00:00
hoangtc
bb8c608795 Make updating showTimeoutMs takes effect immediately.
Update PlaybackControlView and SimpleExoPlayerView so when showTimeoutMs is set
while the controller is shown, the new timeout takes effect immediately.

GitHub: #3554

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179171727
2017-12-15 12:16:41 +00:00
olly
3cc08d0ea3 Fix typo
Issue #3594

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179167738
2017-12-15 12:13:56 +00:00
tonihei
edbb979551 Allow to configure maximum buffer size in DefaultLoadControl.
This adds a parameter to configure a maximum buffer size in bytes. If left
at its default of C.LENGTH_UNSET, the target buffer is determined using a
overridable method based on the track selection. Also adding a parameter
to decide whether to prioritize time or size constraints.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179048554
2017-12-15 12:09:45 +00:00
olly
435686f969 Add missing attrs to SimpleExoplayerView
They worked without being present in the declare-styleable,
but they need to be present for Android Studio auto-complete
to suggest them.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179047478
2017-12-15 12:08:24 +00:00
aquilescanta
0ccf816a5c Add a bitmask for text tracks' selection flags in DefaultTrackSelector
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179039563
2017-12-15 12:07:01 +00:00
olly
37a275f67e Enable SeekParameters functionality for ExtractorMediaSource
Also fix ClippingMediaSource to consider the start position an
artificial key-frame, and to properly offset the value returned
by getAdjustedSeekPositionUs.

Issue: #2882

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179032243
2017-12-15 12:05:41 +00:00
tonihei
a17375b7d3 Resend playback info update when skipping very short periods.
Skipping short periods in a while loop is conceptually a new operation
and thus we need to send out the updated playback info in between for
the listeners to receive multiple period transition discontinuities.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=179027334
2017-12-15 12:04:20 +00:00
olly
073c92ed36 Don't send playback info updates when released.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178916145
2017-12-15 12:01:37 +00:00
tonihei
2cbf0ef0ab Move playback state, isLoading, and track selector result to PlaybackInfo.
This is a no-op change replacing the local variables in ExoPlayerImplInternal
with the new ones in PlaybackInfo.

***
Use playbackState, isLoading and trackSelectorResult from playbackInfo in ExoPlayerImpl.

***
Move duplicated listener notification in ExoPlayerImpl to new method.

Also split reset method in one parts which creates the new playback info
and one part which notifies the listeners. The increment of the pending
operation counter needs to happen in between.

***
Use only one pending operation counter in ExoPlayerImpl.

This also allows to move onSeekProcessed into the notification chain.

***
Replace playback info changing messages to ExoPlayerImpl by single message type.

As they are all handled in the same way, they can be summarized to one message.

***
Only send playback info change notifications once per playback thread message.

This ensures that all concurrent changes actually reach ExoPlayerImpl concurrently.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178907165
2017-12-15 12:00:16 +00:00
olly
a5cd0b87bc Update SingleSampleMediaSource with factory/listener changes
- Convert the Builder into a Factory
- Have it use MediaSourceEventListener
- Also made some misc related fixes to other sources

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178906521
2017-12-15 11:58:48 +00:00
tonihei
318618d7a2 Fix seek/prepare/stop acks when exception is thrown.
1. The player doesn't acknowledge phantom stops when an exception is thrown anymore.
2. It also makes sure it doesn't reset the pendingPrepareCount unless it's actually
immediately acknowledging these prepares.
3. It ensures a seek is acknowledged even though an exception is thrown during seeking.

Added tests (which previously failed) for all three cases.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178876362
2017-12-13 12:53:39 +00:00
andrewlewis
a4ae206ebe Support non-extractor ads in AdsMediaSource and demo apps
Issue: #3302

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178615074
2017-12-12 19:17:58 +00:00
olly
2e3667eeff Expose ability to get adjusted seek position from MediaPeriod
Issue: #2882

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178606133
2017-12-12 19:16:34 +00:00
andrewlewis
8c7fe8a258 Make ExtractorMediaSource.Builder a factory for ExtractorMediaSources
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178605481
2017-12-12 19:15:14 +00:00
andrewlewis
f8834dacc6 Use surfaceless context in DummySurface, if available
Issue: #3558

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178604607
2017-12-12 19:12:35 +00:00
andrewlewis
ba32d95dc4 Make HlsMediaSource.Builder a factory for HlsMediaSources
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178384204
2017-12-12 19:11:08 +00:00
andrewlewis
8947950b52 Make SsMediaSource.Builder a factory for SsMediaSources
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178380856
2017-12-12 19:09:46 +00:00
andrewlewis
e419154b86 Make DashMediaSource.Builder a factory for DashMediaSources
This is in preparation for supporting non-extractor MediaSources for ads in
AdsMediaSource.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178377627
2017-12-12 19:08:25 +00:00
andrewlewis
aa01fb85dc Add an option to turn off hiding controls during ads
Issue: #3532

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178372763
2017-12-12 19:07:02 +00:00
olly
2b0b39ca38 Public API for setting seek parameters
Issue: #2882

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178370038
2017-12-12 19:05:42 +00:00
olly
fede9c39c6 Treat captions that are wider than expected as middle aligned
Issue: #3534

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178364353
2017-12-12 19:04:22 +00:00
olly
439c3022d9 Blacklist Moto Z from using secure DummySurface.
Issue: #3215

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178218535
2017-12-12 18:57:25 +00:00
olly
a7b11ecb17 Add missing Nullable annotation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178117289
2017-12-12 18:53:14 +00:00
aquilescanta
586e657bd7 Allow opt-in HLS chunkless preparation
If allowed, the media period will try to finish preparation without downloading
chunks (similar to what DashMediaPeriod does). To create track groups,
HlsMediaPeriod will try to obtain as much information as possible from the
master playlist. If any vital information is missing for specific urls,
traditional preparation will take place instead.

This version does not support tracks with DrmInitData info. This affects tracks
with CDM DRM (e.g: Widevine, Clearkey, etc). AES_128 encryption is not affected.
This information needs to be obtained from media playlists, and this version
only takes the master playlist into account for preparation.

Issue:#3149

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=178098759
2017-12-12 18:51:51 +00:00
tonihei
8a0a8339e8 Change handling of renderer position offset for first media period.
This should be a no-op change. And it eliminates the need to use the index variable
which will be removed once the MediaPeriodHolderQueue is implemented.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177963360
2017-12-12 18:44:47 +00:00
hoangtc
88dea59cd2 Add ability for media period to discard buffered media at the back of the queue
In some occasions, we may want to discard a part of the buffered media to
improve playback quality. This CL adds this functionality by allowing the
loading media period to re-evaluate its buffer periodically (every 2s) and discard
chunks as it needs.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177958910
2017-12-12 18:43:26 +00:00
aquilescanta
6606d73b29 Unset sample queue index in HlsSampleStream#unbindSampleQueue
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177950960
2017-12-12 18:42:07 +00:00
olly
a155edc568 Hide subtitles when switching player in SimpleExoPlayerView
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177941993
2017-12-12 18:39:14 +00:00
olly
2b31723434 Remove self @link
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177938212
2017-12-12 18:37:52 +00:00
andrewlewis
f2f767bc12 Invoke onLoadCanceled/Completed for ExtractorMediaSource
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177936271
2017-12-12 18:36:26 +00:00
aquilescanta
f0e9dbf148 Fix HLS (broken on []
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177922948
2017-12-12 18:34:48 +00:00
amesbah
b3ebdaaed3 Add @SuppressWarnings("ComparableType") for instances of a class implementing 'Comparable<T>' where T is not compatible with the type of the class.
In order to facilitate enabling a compile-time error check, we are suppressing these existing instances. Once the compile-time error is enabled, we will file bugs to clean up any unfixed instances in [].

Note that this CL should result in no effective changes to the code, but the code as currently-written might contain a real bug. If you'd prefer to fix the bug now, please either reply with edits, or accept this CL then follow up with a change that fixes the underlying issue.

Tested:
    tap_presubmit: []    Some tests failed; test failures are believed to be unrelated to this CL

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177836122
2017-12-12 18:31:43 +00:00
aquilescanta
002df729a5 Allow late HLS sample queue building
Issue:#3149

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177836048
2017-12-12 18:30:00 +00:00
olly
fbfa43f5a3 Enhance SeekMaps to return SeekPoints
Issue: #2882

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177814974
2017-12-04 17:39:43 +00:00
olly
bb0fae3ee8 Fix playback of FLV live streams with no audio track
Issue: #3188

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177811487
2017-12-04 17:39:43 +00:00
olly
9c63d37791 Support timezone offsets in ISO8601 timestamps
Issue: #3524

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177808106
2017-12-04 17:39:43 +00:00
olly
a9c3ca1cfe Tentative fix for roll-up row count
Issue: #3513

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177804505
2017-12-04 17:38:11 +00:00
andrewlewis
fd938fb454 Update internal usages of deprecated AdaptiveMediaSourceEventListener
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177786580
2017-12-04 17:38:11 +00:00
andrewlewis
fbccdf594a Use AdaptiveMediaSourceEventListener for ExtractorMediaSource
This is a step towards harmonizing the MediaSource Builders and (potentially)
providing MediaSource factories.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177783157
2017-12-04 17:38:11 +00:00
tonihei
03b0d9d46c Fix flaky testEmptyTimeline again.
Waiting for the timeline change didn't work correctly because the timeline was
already equal to Timeline.EMPTY (due to the masking). Now waiting explicitly
for the empty Timeline exposed by the source.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177749292
2017-12-04 17:38:11 +00:00
aquilescanta
23cc102151 Move internal HlsSampleStreamWrapper methods under internal methods
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177462449
2017-12-04 17:38:11 +00:00
olly
3a6b7a346c Fix mp3 extractor test
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177458840
2017-12-04 17:38:11 +00:00
olly
754260e944 Fix VBRI and XING seekers
- Remove skipping of the VBRI/XING frame before calculating position
  offsets. This was incorrect. Instead, a constraint is used to ensure
  we don't return positions within these frames, the difference being
  that the constraint adjusts only positions that would fall within
  the frames, where-as the previous approach shifted positions through
  the whole stream.
- Excluded last entry in the VBRI table because it has an invalid
  position (the length of the stream).
- Give variables in XingSeeker descriptive names.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177451295
2017-12-04 17:38:11 +00:00
andrewlewis
7b08899818 Move resetting audio processors to initialize()
The set of active audio processors was only updated on reconfiguration and when
draining playback parameters completed. Draining playback parameters are cleared
in reset(), so if parameters were set while paused then the sink was quickly
reset, without draining completing, the set of active audio processors wouldn't
be updated. This means that a switch to or from speed or pitch = 1 would not be
handled correctly if made while paused and followed by a seek.

Move resetting active audio processors from configure (where if the active audio
processors were reset we'd always initialize a new AudioTrack) to initialize().

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177442098
2017-12-04 17:38:11 +00:00
olly
cc54d4d3e6 Snap to frame boundary in ConstantBitrateSeeker
- This change snaps the seek position for constant bitrate MP3s
  to the nearest frame boundary, avoiding the need to skip one
  byte at a time to re-synchronize (this may still happen if the
  MP3 does not really have fixed size frames).
- Tweaked both ConstantBitrateSeeker and WavHeader to ensure the
  returned positions are valid.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177441798
2017-12-04 17:38:11 +00:00
aquilescanta
21d55d4eba Rename DefaultTrackSelector.ParameterBuilder.setViewportSize{FromContext->ToPhysicalDisplaySize}
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177440699
2017-12-04 17:38:11 +00:00
aquilescanta
58e60e1f9d Use the Builder pattern for DefaultTrackSelector#Parameters
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177438430
2017-12-04 17:38:11 +00:00
aquilescanta
ce8736c71a Avoid concurrent read/write access to sampleQueues in HlsSampleStreamWrapper
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177435977
2017-12-04 17:38:11 +00:00
andrewlewis
a9c33590df Update getPosition(0) positions for FragmentedMp4Extractor
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177424314
2017-12-04 17:38:11 +00:00
andrewlewis
5865f1fe40 Use a MediaSource factory internally in AdsMediaSource
Support ad MediaSources that aren't prepared immediately by using
DeferredMediaPeriod, moved up from DynamicConcatenatingMediaSource.

In a later change the new interfaces will be made public so that apps
can provide their own MediaSource factories.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177424172
2017-12-04 17:38:11 +00:00
mdoucleff
079a5b3d8c Add manifestless captions support. This code fits into the pre-existing
captions fetcher architecture.

1.  ManifestlessCaptionsMetadata

Other captions fetchers must first fetch a manifest (HLS or manifest) to
discover captions tracks.  This process does not exist for manifestless.  All
we need to do is scan the FormatStream's for the right itag, so this is an
all-static class.

2.  ManifestlessSubtitleWindowProvider

Once a captions track is selected, a subtitles provider is instantiated.  This
is the main interface used by the player to retrieve captions according to
playback position.  This class stores fetched captions in a tree index by time
for efficient lookups.  Background captions fetches are used to populate
the tree.

3.  ManifestlessCaptionsFetch

Captions are fetched one segment at a time.  One instance of this object
is required per fetch.  It performs a blocking fetch on call(), and is
intended to be submitted to a background-thread executor.

4.  ManifestlessCaptionsFetch.CaptionSegment

This is the result of the caption fetch.  These values are used to populate
the captions tree.

Manifestlessness

The initial request is always a headm request.  There is a separate tree
of every segment indexed by start time.  This tree is used to improve
manifestless sequence number calculation.  Once we have data for the current
timestamp, we walk forward through the tree to find the next unfetched
sequence number, and fetch that.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177385094
2017-12-04 17:38:11 +00:00
hoangtc
3afdb24f25 Add support for outputing Emsg messages to a sideloaded track output.
Currently FragmentedMp4Extractor only parses and outputs emsg messages if the
flag FLAG_ENABLE_EMSG_TRACK is set (when there's a metadata renderer that
handles emsg messages). Since there are emsg messages that only targets the
player, which we want to handle independently from MetadateRenderer, this CL
adds the ability for FragmentedMp4Extractor to output emsg messages to an
additional TrackOutput if provided, independently from FLAG_ENABLED_EMSG_TRACK.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177318983
2017-12-04 17:38:11 +00:00
olly
a99ef01d3a Optimize seeking for unseekable SeekMaps
- Avoid re-downloading data prior to the first mdat box when
  seeking back to the start of an unseekable FMP4.
- Avoid re-downloading data prior to the first frame for
  constant bitrate MP3.
- Update SeekMap.getPosition documentation to allow a non-zero
  position for the unseekable case. Note that XingSeeker was
  already returning a non-zero position if unseekable.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177317256
2017-12-04 17:38:11 +00:00
olly
21ea9a821d Fix weird XingSeeker indexing
There are still things broken about the seeker, but this
cleans up some of the weird bits.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177315136
2017-12-04 17:38:11 +00:00
tonihei
835b6382ac Move external timeline and start position overwrites to ExoPlayerImpl.
Makes it less error-prone to accidentatly forget to set the right overwrites.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177282089
2017-12-04 17:38:11 +00:00
tonihei
9e8f50a9c0 Allow multiple video and audio debug listeners in SimpleExoPlayer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177184331
2017-12-04 17:38:11 +00:00
andrewlewis
2282527821 Allow setting supported formats on AdsLoaders
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177175377
2017-12-04 17:38:11 +00:00
olly
ff49bc97c4 Clean up some extrator SeekMap implementations
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177173618
2017-12-04 17:38:11 +00:00
aquilescanta
baa80a1b68 Fix DefaultTrackSelector#Parameter withSelectUndeterminedTextLanguage
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177170994
2017-12-04 17:38:11 +00:00
tonihei
54a1bb186e Allow resetInternal to release MediaSource but keep timeline.
This allows to keep the state synced with ExoPlayerImpl after stopping the player,
but still releases the media source immediately as it needs to be reprepared.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177167980
2017-12-04 17:38:11 +00:00
olly
f2d5541752 Extractor cleanup
- Align class summary Javadoc
- Fix ErrorProne + Style warnings

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177165593
2017-12-04 17:38:11 +00:00
aquilescanta
69f8b250d5 Match SequenceableLoader method order in HlsSampleStreamWrapper
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177146923
2017-12-04 17:38:11 +00:00
tonihei
efc709f366 Remove initial seek counting in ExoPlayerImplInternal.
We can acknoledge seeks before preparation finished immediately now,
because ExoPlayerImpl won't leave the masking state until the first prepare
operation is processed.

As a side effect, it also cleans up the responsibility of the callbacks.
Prepares are always acknowledged with a SOURCE_INFO_REFRESHED, while seeks
are always acknowledged with a SEEK_ACK.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177144089
2017-12-04 17:38:11 +00:00
olly
1ae50cb9e5 Add some clarifications to MediaSource documentation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177141094
2017-12-04 17:38:11 +00:00
tonihei
f46cb907b7 Add stop with position reset to Player interface.
The ExoPlayerImpl implementation forwards the stop request with this optional
parameter. To ensure correct masking (e.g. when timeline updates arrive after
calling reset in ExoPlayerImpl but before resetInternal in
ExoPlayerImplInternal), we use the existing prepareAck counter and extend it
also count stop operations. For this to work, we also return the updated
empty timeline after finishing the reset.

The CastPlayer doesn't support the two reset options so far.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177132107
2017-12-04 17:38:11 +00:00
olly
d84398788a Update moe equivalence
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177063576
2017-12-04 17:38:10 +00:00
Pavel Stambrecht
28d709aa8f Iso8601Parser improved to be able to parse timestamp offsets from UTC 2017-12-04 15:52:12 +01:00
Pavel Stambrecht
ad16efdf56 Iso8601Parser improved to be able to parse timestamp offsets from UTC 2017-12-04 15:45:54 +01:00
olly
a0f6bba842 Force wrapping of HLS ID3 timestamp
Merge of https://github.com/google/ExoPlayer/pull/3495

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177057183
2017-11-27 21:29:14 +00:00
tonihei
95de9c96fe Don't always wait for action schedule in ExoPlayerTestRunner.
Unconditionally waiting for the action schedule to finish in ExoPlayerTestRunner
doesn't work if the action schedule is not intended to be finished.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177024139
2017-11-27 21:28:34 +00:00
tonihei
ee26da682c Add throws IllegalSeekPositionException doc to seekTo(windowIndex, positionMs).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177011497
2017-11-27 21:28:34 +00:00
aquilescanta
16c43c6bb7 Support undefined text track language when preferred is not available
Also slightly improve language normalization/documentation.

For this CL, it is assumed that null and "und" languages are different
entities. Once we fully tackle language tag normalization, we can decide
whether to normalize the "undefined" language.

Issue:#2867
Issue:#2980

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177008509
2017-11-27 21:28:34 +00:00
ojw28
ec2fbe5d1e
Merge pull request #3495 from simophin/patch-1
Guard against out-of-range timestamp
2017-11-27 20:43:15 +00:00
andrewlewis
8833a2930c Take into account the playback speed for loading
Update the default AdaptiveTrackSelection and DefaultLoadControl to use playback
speed information.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176989168
2017-11-27 13:50:19 +00:00
andrewlewis
a9ed6b191d Switch from currentTimeMillis to elapsedRealtime
currentTimeMillis is not guaranteed to be monotonic and elapsedRealtime is
recommend for interval timing.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176853118
2017-11-27 13:49:04 +00:00
tonihei
c4385c738f Temporarily fix flakiness of testPlayEmptyTimeline.
Fixed by explicitly waiting for the timeline update. This shouldn't be
necessary and will be removed as soon as the correct order of events
can be guaranteed (timeline change -> state change -> onSeekProcessed).

The waiting for the timeline update is implemented by introducing the
feature that the test runner also waits until the action schedule has
finished before stopping the test.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176848540
2017-11-27 13:47:48 +00:00
andrewlewis
36255c42cf Test setPlaybackParameters before preparation completes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176837939
2017-11-27 13:46:33 +00:00
baiming
5cd8869646 Really fix the NPE in ExoPlayer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176821463
2017-11-27 13:44:05 +00:00
simophin
77d8c13621
Guard against out-of-range timestamp
We've found that in our production environment, the AAC stream's timestamp exceeds the 33bit limit from time to time, when it happens, `peekId3PrivTimestamp` returns a value that is greater than `TimestampAdjuster.MAX_PTS_PLUS_ONE`, which causes a overflow in `TimestampAdjuster.adjustTsTimestamp` (overflow inside `ptsToUs`) after playing for a while . When the overflow happens, the start time of the stream becomes negative and the playback simply stucks at buffering forever.

I fully understand that the 33bit is a spec requirement, thus I asked our stream provider to correct this mistake. But in the mean time, I'd also like ExoPlayer to handle this situation more error tolerance, as in other platforms (iOS, browsers) we see more tolerance behavior.
2017-11-24 17:27:35 +13:00
olly
5d70b9e02d Partialy revert "Make ExtractorMediaSource timeline dynamic until duration is set"
This change broke playback through playlists.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176764830
2017-11-23 15:16:58 +00:00
olly
874d1be852 stopInternal should release MediaSource
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176763841
2017-11-23 15:15:16 +00:00
olly
2537e883d6 Move HlsSampleStreamWrapper to use ArrayList
Also prevent skip when there's a pending reset, and add a
TODO to split/fix chunk discard and downstream format change
reporting.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176760955
2017-11-23 15:13:51 +00:00
tonihei
7eb0af7c0e Replace LinkedList with ArrayList in ChunkSampleStream.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176759080
2017-11-23 15:12:23 +00:00
olly
2086c129fc Suppress discontinuities that don't change the position
This is mostly useful for suppressing the initial position
discontinuity reported by ClippingMediaPeriod.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176758972
2017-11-23 15:10:52 +00:00
tonihei
ba5f35995f Send discontinuity at adjustments after shuffle/repeat mode changes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176749136
2017-11-23 15:09:04 +00:00
olly
d537c21888 Test ClippingMediaSource handles initial dynamic timelines
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176666247
2017-11-22 18:29:52 +00:00
olly
e04bdcea50 Relax requirement that MergingMediaSource children are not dynamic
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176664332
2017-11-22 18:28:39 +00:00
olly
494a41c8b2 Improve ClippingMediaSource "cannot clip" behavior
This brings ClippingMediaSource clip failures in line with
what MergingMediaSource does when it cannot merge.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176660123
2017-11-22 18:27:16 +00:00
olly
d909dc1863 Report correct discontinuity from ClippingMediaPeriod
It currently always reports 0, but it should report the position
passed through selectTracks. Reporting should also be disabled if
there's a seekToUs call.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176644228
2017-11-22 18:25:55 +00:00
olly
b5480e0e97 Relax requirement that ClippingMediaSource children are not dynamic
Tests to follow (want to fix breakages first).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176642610
2017-11-22 18:24:27 +00:00
jrochest
4193a1f705 Guard against null TrackSelections in updateTrackSelectionPlaybackSpeed.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176629070
2017-11-22 18:22:58 +00:00
hoangtc
e575af3ac3 Parse DASH manifest's publish time.
Parse DASH manifest's publishTime node as defined by ISO/IEC 23009-1:2014,
section 5.3.1.2.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176525922
2017-11-22 18:21:13 +00:00
tonihei
6607f49be6 Fix reporting of format changes in ChunkSampleStream.
Until recently, changing primary track formats were reported when the
corresponding media chunk was discarded which always happened immediately
after the sample has been read.

Now, media chunks may be discarded later on or in batches, leaving the
current reporting mechanism broken because changes may never be reported.

This fix separates the discarding from the reporting such that format changes
can be reported when the media chunk is first read from, while the discarding
operation only discards without reporting format changes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176519071
2017-11-22 18:19:46 +00:00
andrewlewis
15a1f9a552 Remove DefaultLoadControl buffer time state
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176515168
2017-11-22 18:18:19 +00:00
hoangtc
e619079a0d Let EventMessage encloses its presentationTimeMs.
Currently EventMessage's presentationTimeMs is kept separately in
EventSampleStream. However, EventMessage's presentationTimeMs maybe used in
other places besides EventSampleStream, such as when handling `emsg' messages
targeting the player. This CL let EventMessage object to holds its
presentationTimeMs for such use cases.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176502938
2017-11-22 18:16:58 +00:00
Oliver Woodman
3998ed49ae Mini cleanup 2017-11-21 13:42:12 +00:00
ojw28
1a138ad4dc
Merge pull request #3486 from IanDBird/dev-v2
Fix initializationData check for SSA subtitles
2017-11-21 13:31:06 +00:00
olly
856c2f8d3e Make ExtractorMediaSource timeline dynamic until duration is set
We (eventually - albeit possibly infinitely far in the future)
expect a timeline update with a window of known duration. This
also stops live radio stream playbacks transitioning to ended
state when their tracks are disabled.

As part of this fix, I found an issue where getPeriodPosition
could return null even when defaultPositionProjectionUs is 0,
which is not as documented.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176492024
2017-11-21 13:16:19 +00:00
andrewlewis
31e2cfce9e Pass playback speed to LoadControl and TrackSelection
This allows implementations of those classes to take into account the playback
speed for adaptive track selection and controlling when to resume the player.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176484361
2017-11-21 13:13:35 +00:00
tonihei
e1d960db68 Unify internal reset method to support state and position resets.
The ExoPlayerImplInternal.reset method now takes the same set of options
as the ExoPlayer.prepare method. This also allows to
- Remove some code duplication within ExoPlayerImplInternal
- Fix calls to prepare(sameSource, resetPosition=true, resetState=false)
  with enabled shuffle mode where the position was not correctly reset to the
  first period index.
- Keep the current timeline when calling stop (in line with ExoPlayerImpl).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176481878
2017-11-21 13:10:45 +00:00
tonihei
aac53cac56 Add reason to onTimelineChanged.
Currently onTimelineChanged doesn't allow to distinguish easily between the
different reasons why it's being called. Especially, finding
out whether a new media source has been prepared or the current source
refreshed dynamically was impossible without tightly coupling the player
operations with the listener.

The new reasons provide this disdinction by either indicating a newly
initialized media source, a dynamic update to an existing timeline
or manifest, or a reset of the player (which usually results in an
empty timeline).

The original onTimelineChanged method without reason is kept in the
DefaultEventListener as deprecated to prevent the need to update all
existing listeners in one go.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176478701
2017-11-21 13:07:46 +00:00
olly
13b595ed39 Don't do work after track selection when in ended state
This causes the player to report that it's started loading
when in the ended state.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176371892
2017-11-21 13:06:11 +00:00
olly
275292cb63 Report additional position discontinuities
- Properly report internal discontinuities
- Add DISCONTINUITY_REASON_SEEK_ADJUSTMENT to distinguish
  seek adjustments from other internal discontinuity events

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176367365
2017-11-21 13:04:47 +00:00
olly
c06fe73b66 Bump target API level to 27
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176366693
2017-11-21 13:03:28 +00:00
olly
3656230cb1 Use MediaSourceTestRunner in additional source tests
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176366471
2017-11-21 13:01:59 +00:00
hoangtc
0de57cbfae Allow more flexible loading strategy when loading multiple sub streams.
Currently for a DASH ChunkSource that consists of multiple sub-streams, we
always use a CompositeSequenceableLoader, which only allows the furthest behind
loader or any loader that are behind current playback position to continue
loading.
This changes allow clients to have more flexibility when deciding the loading
strategy:
- They can construct a different kind of composite SequenceableLoader from
the sub-loaders, and use it by injecting a different CompositeSequeableLoaderFactory accordingly.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176363870
2017-11-21 12:59:11 +00:00
Ian Bird
a9d91b3387 Fix initializationData check for SSA subtitles 2017-11-21 10:59:10 +00:00
andrewlewis
c4fe0e6482 Add support for Dolby Atmos
Issue: #2465

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176341309
2017-11-20 13:43:31 +00:00
tonihei
75acfc7957 Move media clock handling to its own class.
This class implements MediaClock itself and handles the switching between
renderer and standalone media clock.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176340615
2017-11-20 13:42:06 +00:00
tonihei
3f6b4d18a9 Move MockitoUtils to testutils and use it for all Mockito set-ups.
In particular this allows to have the workaround for
https://code.google.com/p/dexmaker/issues/detail?id=2 in one place only.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176340526
2017-11-20 13:40:28 +00:00
olly
82d0a27fd9 Fix some lint issues.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176337058
2017-11-20 13:39:03 +00:00
aquilescanta
a7c424a15c Add time unit and javadocs to fields in DashManifest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176335667
2017-11-20 13:37:35 +00:00
aquilescanta
d856d0f056 Use consistent case for sideloaded
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176333544
2017-11-20 13:36:16 +00:00
hoangtc
2a02171c42 Add Builder to SingleSampleMediaSource.
Add Builder pattern to SingleSampleMediaSource and mark existing constructors as
deprecated.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176332964
2017-11-20 13:34:45 +00:00
olly
676f3bfc49 Add MediaSourceTestRunner for MediaSource tests.
- MediaSourceTestRunner aims to encapsulate some of the logic
  currently used in DynamicConcatenatingMediaSourceTest, so it
  can be re-used for testing other MediaSource implementations.
- The change also fixes DynamicConcatenatingMediaSourceTest to
  execute calls on the correct threads, and to release handler
  threads at the end of each test.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176117535
2017-11-17 19:02:14 +00:00
olly
8455d10366 Simplify LoopingMediaSourceTest setup
This test seems to obtain a timeline from a prepared
FakeMediaSource, but that's identical to the timeline
passed into that source to start with :).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176117133
2017-11-17 19:00:43 +00:00
eguven
00f68b26c9 Replace hard coded UUID in OfflineLicenseHelper with a parameter
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176102179
2017-11-17 18:59:20 +00:00
tonihei
525ae7fed7 Add simplified FakeTimeline constructor.
This is helpful for tests which don't care about detailled timeline set-ups
besides the number of windows.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176097369
2017-11-17 18:57:51 +00:00
hoangtc
e349905039 Add Builder to ExtractorMediaSource.
Add Builder pattern to ExtractorMediaSource and mark existing constructors as
deprecated.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=176088810
2017-11-17 18:56:25 +00:00
olly
74e74402da Deduplicate ExtractorMediaPeriod discontinuity reporting
This change makes sure progress is being made before reporting
a discontinuity. Else in cases like having no network and
playing a live stream, we allow the discontinuity to be read
each time an internal retry occurs, meaning it gets read
repeatedly. This does no harm, but is noisy and unnecessary.

We should also not allow skipping whilst there is a pending
reset or discontinuity notification, just like we don't allow
reads.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175953064
2017-11-17 18:54:55 +00:00
andrewlewis
b8aedfbf4f Add support for float output for FfmpegAudioRenderer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175940553
2017-11-17 18:53:26 +00:00
andrewlewis
15a2f47f31 Add support for float output in DefaultAudioSink
Also switch from using MIME types to C.ENCODING_* encodings in DefaultAudioSink.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175936872
2017-11-17 18:51:43 +00:00
andrewlewis
6db895bd7b Use ArrayDeque for playback parameters checkpoints
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175837754
2017-11-17 18:48:42 +00:00
olly
28693ac7d6 Allow LoadControl to configure the back-buffer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175833398
2017-11-17 18:47:14 +00:00
olly
bd0bc03f64 Inject toKeyframe discard parameter from ExoPlayerImplInternal
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175805139
2017-11-17 18:45:51 +00:00
hoangtc
28df0e133b Add Builder pattern to HlsMediaSource.
Add Builder pattern to HlsMediaSource and mark existing constructors as
deprecated.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175803853
2017-11-17 18:44:28 +00:00
olly
5301d38136 Some test cleanup
The purpose of this change isn't to fix anything. It's just to
simplify things a little bit. There will be following CLs that
make some changes to get things onto correct threads.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175800354
2017-11-17 18:41:38 +00:00
tonihei
5aa053d91d Add method to FakeMediaSource to trigger source info refresh.
This allows to remove the LazyMediaSource used within
DynamicConcatenatingMediaSourceTest and also allows to write test which
simulates dynamic timeline or manifest updates.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175680371
2017-11-17 18:37:08 +00:00
olly
22b95032b3 Reinstate buffer discard for SmoothStreaming
Now we have a ChunkSampleStream.discardBuffer, we need to call
it from SsMediaPeriod as well as for the DASH case.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175675427
2017-11-17 18:35:39 +00:00
tonihei
b30b786350 Avoid track group array error-prone reference quality check in CastPlayer.
Also replaced the duplicated EMPTY track group array with the one already defined
in TrackGroupArray.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175670266
2017-11-17 18:32:38 +00:00
hoangtc
fee6cf5cd8 Continue adding Builder to MediaSource.
Add Builder pattern to SsMediaSource and mark existing constructors as
deprecated.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175659618
2017-11-17 18:29:50 +00:00
tonihei
b865259e63 Forward ad group and ad index when creating period from concatanted media sources.
Also added tests which verify the intended behaviour.

GitHub:#3452

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175656478
2017-11-17 18:28:21 +00:00
aquilescanta
b17ae80679 Fix cenc mode support and add support for the .mp4a extension.
Also add encrypted HLS internal sample streams.

Issue:#1661

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175577648
2017-11-17 18:26:41 +00:00
olly
afe6f667b2 Move all buffer discard to MediaPeriod.discardBuffer
This is a step toward retaining a back-buffer in a way that
works for all MediaSource implementations. It's not possible
to adjust the discardBuffer calls in ExoPlayerImplInternal
to discard up to (position - backBufferDurationUs). Next steps
are to:

1. Find an appropriate place to specify the back buffer value,
   to be passed to the discardBuffer calls. I guess the
   LoadControl is the appropriate place to define such values.
2. Enhance discardBuffer to support a toKeyframe argument to
   pass through to discardTo.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175565363
2017-11-13 20:07:25 +00:00
hoangtc
67bbbed9fe Notify TrackSelection when it's enabled and disabled.
Add onEnable() and onDisable() call-backs to TrackSelection. This allows
TrackSelection to perform interesting operations (like subscribe to
NetworkStatus) and clean up after itself.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175558485
2017-11-13 20:06:06 +00:00
arnaudberry
db7e9a548c Make it possible to extend DashManifestParser to parse revision-id.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175554723
2017-11-13 20:04:40 +00:00
Oliver Woodman
e92667ba5b Only set shutter color if attr is declared 2017-11-13 17:28:25 +00:00
ojw28
99d0a7a3da
Merge pull request #3451 from nvalletta/dev-v2-shutter-background-color
Add an easy way to set the shutter view background color
2017-11-13 17:11:39 +00:00
ojw28
73e96be85c
Merge pull request #3440 from yqritc/fix-bravia
Skip using MediaCodec.setOutputSurface on Bravia
2017-11-13 17:11:24 +00:00
hoangtc
0be4b46bb4 Introduce Builder pattern to create MediaSource.
Start with DASH MediaSource. The number of injected arguments is getting
out-of-control.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175529031
2017-11-13 17:08:24 +00:00
hoangtc
735af5c0b0 Update several minor code/test style issues.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175180089
2017-11-13 15:15:07 +00:00
olly
eb4e05199f Expose first index in SampleQueue
This will be needed when retaining a back-buffer. Being able to
query the first index allows us to work out when we've discarded
all samples that were obtained from a particular chunk, which
we'll use to determine when to remove chunks from
ChunkSampleStream.mediaChunks.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175172085
2017-11-13 15:13:43 +00:00
eguven
694bd997cb Re-enable index file store at the end of the SimpleCache.initialize()
In the case converting cache files from an earlier version of
SimpleCache, there is no previous version of the index file. If the app
doesn't call any SimpleCache methods which would make the index file
stored before it exists whole data gets lost.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175153650
2017-11-13 15:12:18 +00:00
tonihei
04baa42349 Add custom callbacks to allows seeks after dynamic playlist modifications.
These callbacks are executed on the app thread after the corresponding
timeline update was triggered. This ensures that seek operations see the
updated timelines and are therefore valid, even if the seek is performed into a
window which didn't exist before.

GitHub:#3407

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175136187
2017-11-13 15:10:56 +00:00
tonihei
6616e6c1a9 Don't check if next period is prepared when ignoring renderer media clock.
When the renderer media clock source read its stream to end but is not ready,
this means one of two things. Either the next period is not prepared yet and
we need to stop the renderers and buffer until it's prepared, or we are
waiting for another track in the current period with a uneven (longer)
duration.

The second case was already covered by this if condition and uses the standalone
clock instead to continue.

The first case now also uses the standalone clock, but it doesn't make a
difference, because both clocks are stopped and still synchronized.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175134975
2017-11-13 15:09:35 +00:00
hoangtc
3171c86bdb Supports Out-of-band, in MPD EventStream.
MPD file may include multiple EventStreams in its Periods, which contains Events
that the application may need to handle/respond to.
This change adds support for parsing the EventStream/Event nodes from MPD
file, and exposing these EventStreams as a metadata sample stream that application
can respond in a similar way to other metadata events.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175017697
2017-11-13 15:08:09 +00:00
olly
ed2e4dd91e Don't allow cancelation of non-cancelable loads
Issue: #3441

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175011804
2017-11-13 15:06:25 +00:00
olly
367bb64ba0 Add default implementations for ExoMediaDrm.* interfaces
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175010595
2017-11-13 15:04:49 +00:00
olly
acf5247f6e Work around incorrect ClearKey encoding prior to O-MR1
Issue: #3138

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175006223
2017-11-13 15:03:29 +00:00
aquilescanta
15543f13b7 Decouple TrackGroups from SampleQueues in HlsSampleStreamWrapper
This CL does not aim to introduce any functionality changes.

Issue:#3149

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174864875
2017-11-13 15:01:55 +00:00
aquilescanta
98301467dc Fix DefaultHlsExtractorFactory javadoc
Issue:#2748

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174854541
2017-11-13 15:00:32 +00:00
nvalletta
580acb4e2f Add an easy way to set the shutter view background color 2017-11-12 14:25:14 -07:00
yqritc
d5600b52e1 update bravia workaround more precisely 2017-11-09 10:56:47 +09:00
yqritc
6f729bdf97 add issue link 2017-11-08 13:41:04 +09:00
yqritc
73851144ba add bravia workaround to skip using setOutputSurface in MediaCodec 2017-11-08 11:01:47 +09:00
hoangtc
b60364600b Fix an issue with seeking that can lead to STATE_END not delivered.
GitHub: #1897

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174841175
2017-11-07 14:45:05 +00:00
olly
7f135f2cda Be more robust against load callback failures
Issue: #2795

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174836960
2017-11-07 14:43:38 +00:00
tonihei
f014b67d3e Use helper method to disable Renderers.
Removes duplicated code and starts cleaning up handling of media clocks.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174829840
2017-11-07 14:42:24 +00:00
olly
ea80c3e456 Relax parsing of ctts sample deltas
Issue: #3384

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174715851
2017-11-07 14:41:07 +00:00
olly
2daa098a20 Don't use InputStream.available in ContentDataSource
Issue: #3426

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174700804
2017-11-07 14:39:51 +00:00
olly
decf437f17 Broaden Samsung workaround to API level 25 + J7
Issue: #3257

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174686747
2017-11-07 14:38:31 +00:00
olly
475ea19ae7 Simplify ContentDataSourceTest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174685374
2017-11-07 14:37:12 +00:00
aquilescanta
54a2a69b05 Allow playback to continue even after SingleSampleMediaPeriod load errors
This prevents users from having to check sideloaded subtitles URLs before
preparing a SingleSampleMediaSource with it.

Issue:#3140

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174475274
2017-11-07 14:35:47 +00:00
aquilescanta
ecaaed9674 Relax string comparison in DASH parseContentProtection
... by making it case insensitive and null-tolerant for schemeId (as was before
adding playlist drm data merging).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174472123
2017-11-07 14:34:22 +00:00
Oliver Woodman
1cfea62545 Remove DownloadManager test 2017-11-03 16:23:21 +00:00
olly
b5b87d6a27 Bump to 2.6.0
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174467964
2017-11-03 16:12:34 +00:00
aquilescanta
4630fa2b4c Propagate codec information from EXT-X-STREAM-INF to EXT-X-MEDIA
This is the first CL in a series to add chunkless preparation support.

Also did a bit a tidying up in HlsSampleStreamWrappen and
HlsMasterPlaylistParserTest.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174461737
2017-11-03 16:11:11 +00:00
tonihei
dbe0e602ef Use Timeline.getPeriodPosition to resolve period index in ExoPlayerImpl.seekTo
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174460558
2017-11-03 16:09:46 +00:00
aquilescanta
6ec53f4717 Add support for 608/708 captions in HLS+fMP4
This also allows exposing multiple CC channels to any fMP4 extractor client.

Issue:#1661

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174458725
2017-11-03 16:08:20 +00:00
eguven
872cfc131a Fix unnecessary CachedContentIndex store() calls
First fix, prevents forced rewriting when cipher is set but encrypt is
false.

Second, removes the store() call in SimpleCache.initialize() so
initialization doesn't fail because of CachedContentIndex write issues.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174450586
2017-11-03 14:17:43 +00:00
olly
d90d04190e Allow chunk cancelation only if nothing has been consumed from it.
The mediaChunks.size() > 1 check was supposed to ensure this, and
did roughly the right thing when there was only a single stream
(although it was unnecessarily restrictive in preventing chunk
cancelation for the first chunk, where bytesLoaded != 0 and none
of the samples had been consumed).

Now we have multiple streams the check doesn't do the right thing,
and adding a back-buffer feature will make even more incorrect.
This change switches to checking the condition we actually want
to check directly :).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174449398
2017-11-03 14:16:28 +00:00
olly
b6b09ad40b Automated g4 rollback of changelist 173379623.
*** Reason for rollback ***

Breaks setting PlaybackParameters before start of playback

*** Original change description ***

Add support for float output in DefaultAudioSink

Also switch from using MIME types to C.ENCODING_* encodings in DefaultAudioSink.

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174445506
2017-11-03 14:15:06 +00:00
eguven
321bc9c24e Simplify DownloadService by removing broadcasting
Client can add this functionality by extending DownloadService.

Also made DownloadManager accept multiple listeners. So instead of
broadcast event, client can listen to DownloadManager directly.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174335820
2017-11-02 16:35:14 +00:00
aquilescanta
4cb2be2a46 Replace Queue with ArrayDequeue in HlsPlaylistParser
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174327876
2017-11-02 16:33:46 +00:00
olly
9abc1d2974 Don't call Drawable.setLayoutDirection pre-API-23
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174323423
2017-11-02 16:32:29 +00:00
olly
233a1d165f Explicitly document internal onXError are for reporting only
Issue: #3366

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174214690
2017-11-02 16:31:03 +00:00
olly
3021897383 Allow multiple listeners on TimeBar
Issue: #3406

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174214296
2017-11-02 16:29:36 +00:00
aquilescanta
8c424798c4 Fill manifest drm info with media files' pssh when needed
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174185407
2017-11-02 16:28:10 +00:00
olly
72b6791660 Use resolved position for masking when seeking to C.TIME_UNSET
Also fire onPositionDiscontinuity in this case

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174039483
2017-11-01 14:13:55 +00:00
eguven
37d33f58af Execute DownloadTask threads manually
Instead of using an Executor to run DownloadTasks creates and manages
threads internally.

Also added DownloadThread internal class to better separate the code
that doesn't run on the main thread.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174036872
2017-11-01 14:12:32 +00:00
olly
199b983d42 Split PlaybackInfo into its own file
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174030901
2017-11-01 14:11:09 +00:00
olly
f150856567 Fix masking step 1
1. Move Timeline/Manifest into PlaybackInfo
2. Don't update externally visible Timeline/Manifest during preparation
3. Ignore MSG_POSITION_DISCONTINUITY during preparation
4. Correctly set masking variables at start of preparation, and use them

Once this change goes in, PlaybackInfo will contain timeline, manifest
and position, which should always be self-consistent with one another.
The next step would then be to move a bunch of logic in ExoPlayerImpl
that derives state from timeline and position into PlaybackInfo, and
split that into its own top level class that can be easily tested to make
sure it never IndexOutOfBounds.

I think we could also replace the masking variables and instead just assign
a new PlaybackInfo to the playbackInfo variable whenever we're doing
something that requires masking. This should be possible because we no
longer update playbackInfo whenever we have pending acks. It would
require allowing PlaybackInfo to mask the window position internally when
the timeline is empty, but I think this is ok, and again is something we
could test pretty easily.

Issue: #3362

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173909791
2017-11-01 14:09:33 +00:00
aquilescanta
9b9a294fd8 Fix javadoc @see for TrimmingAudioProcessor.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173877969
2017-11-01 14:08:04 +00:00
olly
8eee7c0d69 Remove apparently unused field
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173871144
2017-11-01 14:06:36 +00:00
olly
8c793184d9 Fix crash when bad VTT timestamp encountered
Issue: #3396

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173868849
2017-11-01 14:05:11 +00:00
Oliver Woodman
d02e1df4b4 Clean up VideoFrameReleaseTimeHelper 2017-10-27 19:22:59 +01:00
ojw28
eb54da596d
Merge pull request #3345 from drhill/dev-v2_framerate_switch
make videoframereleasetimehelper get refresh rate when it's enabled, …
2017-10-27 18:54:38 +01:00
olly
dd5905a9fb Don't query empty timeline for next/previous windows
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173668909
2017-10-27 16:31:21 +01:00
andrewlewis
3602a9a7e4 Allow specifying a Drawable for the TimeBar scrubber
Issue: #3337

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173411321
2017-10-27 16:20:00 +01:00
olly
3285851147 Pass prepareAcks in SourceInfo
This makes it a bit more obvious what's going on during
preparation. In particular, it makes it clear that
MSG_SOURCE_INFO_REFRESHED arrives before MSG_TRACKS_CHANGED.

Issue: #3362

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173392080
2017-10-27 16:17:05 +01:00
eguven
8b3ec4800c Set cause of the exceptions in AtomicFile.startWrite()
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173388899
2017-10-27 16:15:34 +01:00
olly
3c201a0491 Pass MediaSource instance through onSourceInfoRefreshed
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173382423
2017-10-27 16:13:59 +01:00
olly
88b6df1d08 Disable secure DummySurface on Samsung devices on API level 25
Issue: #3373

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173381588
2017-10-27 16:12:34 +01:00
andrewlewis
7c18baa23f Add support for float output in DefaultAudioSink
Also switch from using MIME types to C.ENCODING_* encodings in DefaultAudioSink.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173379623
2017-10-27 16:10:45 +01:00
mishaque
5a91a71cd0 Make CronetDataSource interruptable.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173262660
2017-10-27 16:07:30 +01:00
olly
ea764b1b79 Fix retry count for live streams in ExtractorMediaPeriod
Also simplify boolean condition in ExtractorMediaSource

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173247443
2017-10-27 16:06:01 +01:00
olly
e5e984f4c6 Re-order events into more of a natural ordering
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173232494
2017-10-27 16:04:33 +01:00
olly
c4f3cad586 Better behavior if media doesn't support DRM scheme
We don't expect this case to occur, since track selection is
normally expected to check canAcquireSession before selecting
a track. Nevertheless, if an attempt is made to acquire a
session when the media doesn't support the manager's UUID, we
should fail in a more graceful way.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173124170
2017-10-27 16:01:40 +01:00
olly
3289e3e9cb Be robust against provideProvisionResponse throwing unchecked exceptions
Other catch blocks in this class catch everything. This one should
too.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173118891
2017-10-27 16:00:15 +01:00
andrewlewis
43d70bdde9 Ignore seekTo if an ad is playing
Issue: #3309

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173114842
2017-10-27 15:58:51 +01:00
olly
82edf01c22 Re-use single session when multiSession disabled
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173098862
2017-10-27 15:55:46 +01:00
andrewlewis
9306b24c65 Fix some Android Studio inspection warnings
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173085316
2017-10-27 15:54:17 +01:00
eguven
9568802c6d Persist DownloadActions in DownloadManager
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172875067
2017-10-27 15:52:41 +01:00
Drew Hill
2081667591 cleanups for videoframereleasetimehelper 2017-10-24 11:19:26 -04:00
Drew Hill
3830307cd3 fix not initialized error 2017-10-19 20:28:49 -04:00
Drew Hill
84afad0748 adjustments 2017-10-19 16:24:41 -04:00
olly
c2d05f4405 Bump to 2.5.4
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172758309
2017-10-19 18:10:27 +01:00
Drew Hill
feff4d3e02 fix missing cause of display refresh rate changing between videoframereleasetimehelper constructor and enable being called 2017-10-19 12:49:51 -04:00
Oliver Woodman
64b928e77f Stylistic cleanup 2017-10-19 17:28:24 +01:00
ojw28
28bd4661ed Merge pull request #3371 from andymiao858/dev-v2
Fix FLV AVCVIDEOPACKET  CTS Type Issue
2017-10-19 17:23:50 +01:00
eguven
7d0ec68d86 Put DownloadTasks on hold until preceding conflicting tasks are complete
Tasks conflict if both of them work on the same media and at least one
of them is remove action.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172741795
2017-10-19 16:52:43 +01:00
andrewlewis
bb3dea5191 Remove USE_CHORD_PITCH
We have been using USE_CHORD_PITCH == false for a while and the quality of
pitch changes seems fine. It's now possible to set the sample rate too, but
this only works if USE_CHORD_PITCH is false, so remove the constant.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172736631
2017-10-19 16:51:29 +01:00
andrewlewis
08706f9bfb Retain playback position on re-preparation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172736350
2017-10-19 16:50:04 +01:00
olly
d09f872179 Fix positions passed to TrackSelection
- When transitioning to a new period, the value of bufferedDurationUs
  passed to TrackSelection.updateSelectedTrack was incorrectly set to
  0. It should have been set to correctly reflect buffered media in
  previous periods still being played out.
- This change fixes the issue described above, and also propagates the
  playback position through to this method. The position of the next
  load within the period can be calculated by adding the position and
  bufferedDurationUs.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172736101
2017-10-19 16:48:39 +01:00
aquilescanta
2cfc478c3e Allow extractor injection for HLS
Issue:#2748

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172726367
2017-10-19 16:47:04 +01:00
andrewlewis
49aca6e9ce Fix typo in variable name
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172724250
2017-10-19 16:45:41 +01:00
andrewlewis
eb08e1a5c3 Work around AudioTrack Bluetooth connection issue
If connecting a Bluetooth audio device fails, the AudioTrack may be left in a
bad state, where it is not actually playing and its position has jumped back to
zero. Detect and work around this case by resetting the track.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172600912
2017-10-19 16:42:52 +01:00
olly
b8ef1dcc78 Fix MediaPeriod position param Javadoc.
prepare and selectTracks receive the position from which any
loading should start, where-as continueLoading receives the
actual playback position. These are different in the case that
a previous period is still being played out.

Also removed "relative to the start of the period" from prepare
documentation because it couldn't really be relative to anything
else.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172592769
2017-10-19 16:41:23 +01:00
andrewlewis
1e79d6eb84 Fix seeking with repeated periods
newPlayingPeriodHolder could be set then updated if seeking to a repeated period
that was loaded more than once. This led to MediaPeriodHolders leaking.

Only set newPlayingPeriodHolder once so that any later holders with the same
period identifier get released.

Also add a regression test. FakeMediaSource checks that all created
MediaPeriods were released when it is released.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172591937
2017-10-19 16:39:57 +01:00
olly
fc5e8ee516 Add some additional device specific workarounds
Issue: #3355
Issue: #3257

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172587141
2017-10-19 16:37:10 +01:00
苗华栋(Rabbit)
69e50a43a8 add readSignedInt24 in ParsableByteArray 2017-10-19 23:18:12 +08:00
miaohuadong
5895884c53 Fix bug 2017-10-19 14:10:18 +08:00
苗华栋(Rabbit)
4f8f87221e Fix FLV AVCVIDEOPACKET -> compositionTimeMs Type from UI 24 to SI 24 2017-10-18 23:03:26 +08:00
andrewlewis
f9249d23ea Add an extractor flag for ignoring edit lists
Issue: #3358

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172464053
2017-10-17 18:28:39 +01:00
olly
2c10e6f1c3 We're not playing an ad if the timeline is empty.
Issue: #3334

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172447125
2017-10-17 18:27:26 +01:00
andrewlewis
ac31dc7c7a Allow setting output sample rate in SonicAudioProcessor
This is not really useful with the DefaultAudioSink, but could be used in a
custom AudioSink when mixing audio from sources that have different sample
rates.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172434482
2017-10-17 18:24:53 +01:00
andrewlewis
e46a7600cf Document DefaultTimeBar attributes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172339124
2017-10-17 18:23:35 +01:00
andrewlewis
9356363117 Document load() exceptions
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172329677
2017-10-17 18:22:14 +01:00
aquilescanta
d0758c9393 Fix typo
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172328148
2017-10-17 18:20:49 +01:00
olly
ebf19c4028 Update moe equivalence
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172133622
2017-10-16 12:52:02 +01:00
Oliver Woodman
29ba640351 Delete accidentally added files 2017-10-13 23:14:49 +01:00
Oliver Woodman
12513e9898 Tweak recently merged pull requests 2017-10-13 20:40:08 +01:00
ojw28
e6d8e5b096 Merge pull request #3318 from natez0r/pass-playlist-parser
Allow passing of HlsPlaylistParser to HlsMediaSource.
2017-10-13 20:29:55 +01:00
ojw28
40d8b29c9e Merge pull request #3328 from ValveSoftware/dev-v2-multiversion
Allow multiple PSSH boxes for same system
2017-10-13 20:29:44 +01:00
olly
cad88512f5 Only parse common-encryption sinf boxes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172124807
2017-10-13 19:57:03 +01:00
olly
2fee010938 Workaround/Fix #3351
1. Ignore edit list where the sequence doesn't contain a sync
   sample, rather than failing.
2. Make Mp4Extractor.readAtomPayload so it doesn't try and read
   the same payload twice if a failure occurs parsing it.
3. Make processAtomEnded so that it doesn't pop the moov if
   parsing it fails.

Issue: #3351

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172106244
2017-10-13 19:55:50 +01:00
tonihei
b71effb7b0 Fix MobileHarness playback tests.
This change fixes various issues:
 - MobileHarness sometimes allocated devices with SDK < 16. As we have no tests running
   on these SDKs, a new dimension filter for the mobile_test target ensures that only
   devices with SDK >= 16 are selected. A similar filter for SDK version is also added
   to the ABR playback tests to ensure no old devices are selected.
 - DRM specific tests are skipped for Api < 18, but were not able to run because the
   DashTestRunner class tried to link to the MediaDrm constructor. Moved the
   constructor to a seperate Builder class to allow execution on Api levels 16 and 17.
 - DashWidevineOfflineTest also tried to access code for Api >= 18 without checking
   the current level.
 - Action implementations which are waiting for events did not ensure that they have a
   nextAction to wait for. This caused NullPointerExceptions when this next action was
   scheduled.
 - DefaultDrmSession always restored the offline keys when a new license was requested,
   even if the keys were already restored. These repeated slow calls to restoreKeys
   resulted in high numbers of dropped buffers.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171974859
2017-10-13 19:50:20 +01:00
bachinger
333e745e7b show PlaybackControlView when on key event for DPAD center or any direction
and consume event without moving the focus.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171967057
2017-10-13 19:48:56 +01:00
Drew Hill
3a1a032fa8 change to use displaymanager listener for refresh rate updating 2017-10-12 14:52:14 -04:00
Drew Hill
ac3501dd84 make videoframereleasetimehelper get refresh rate when it's enabled, so we can reuse video renderer for multiple clips with different frame rates 2017-10-12 08:39:47 -04:00
hoangtc
763f663d01 Update DefaultTrackSelector to use more conditions when selecting audio track
Update the audio track selection logic in DefaultTrackSelector:

- When forcing lowest bitrate, use bitrate as tie-breaker when track scores are
the same, prefer the lower bitrate.
- Otherwise, use one of the following values as tie-breaker in order:
  - ChannelCount
  - SampleRate
  - BitRate
If the format being checked is within renderer's capabilities, select it if it
has higher tie-break value, else, select it if it has lower tie-break value.

If all tie-break values are the same, prefer the already selected track.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171803092
2017-10-11 12:35:00 +01:00
olly
5d4fa335f9 Expose public constructors for FrameworkMediaCrypto
MediaCodecRenderer implementations require DrmSessionManager<FrameworkMediaCrypto>,
but it's currently not possible for an app to provide a custom implementation due
to FrameworkMediaCrypto having a package private constructor. This change exposes
public FrameworkMediaCrypto constructors, hence removing this restriction.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171718853
2017-10-11 12:32:25 +01:00
olly
9a6d717a7a Allow overriding of DefaultDashChunkSource.getNextChunk
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171718775
2017-10-11 12:31:02 +01:00
tonihei
030f52b41b Wait for HandlerThread to terminate after calling quit.
Calling HandlerThread.quit() or .quitSafely() doesn't immediately terminate
the thread. It just instructs the Looper not to accept any new messages and
to terminate at the next opportunity. Added a HandlerThread.join() everywhere
where the intention is to close and release all resources and to stop all
threads.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171525241
2017-10-11 12:26:58 +01:00
andrewlewis
54d3df4b63 Drop to keyframe in LibvpxVideoRenderer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171517156
2017-10-11 12:25:31 +01:00
eguven
10f8192c48 Add ActionFile which stores and loads DownloadActions to/from a file.
This change also replaces individual DownloadAction versions with a
single master version.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171273880
2017-10-11 12:22:49 +01:00
hoangtc
d5101d8d46 Allow DefaultDRMSession to retry provisioning/key request
For initial DRM provisioning and key request, we allow the requests to be
retried (with increasing delay for each successive retry) before failing.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171271384
2017-10-11 12:21:25 +01:00
andrewlewis
20e43ac4f8 Allow ads to be paused/resumed
Controls are still hidden while playing ads, but if the app pauses the player,
controls will be shown. During ads, the player is not seekable.

When the player enters the background then returns to the foreground, the
content period may not be prepared, so also cache the content window duration.
This means that if the app reenters the foreground while an ad is paused the
time bar can be populated.

Issue: #3303

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171123428
2017-10-11 12:18:45 +01:00
andrewlewis
09165ab870 Rename droppedOutputBufferCount
Now this counter includes input buffers too, which are dropped as part of
skipping to keyframes for catch up.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171119930
2017-10-11 12:17:25 +01:00
andrewlewis
498ff14439 Add @IntDef annotations to DefaultEventListener
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170980737
2017-10-11 12:13:17 +01:00
andrewlewis
b3d462df39 Catch up video rendering by dropping to keyframes
If the current output buffer is very late and the playback position is in a
later group of pictures, drop all buffers to the keyframe preceding the
playback position.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170975259
2017-10-11 12:11:58 +01:00
tonihei
5baddfb56a Add onSeekProcessed callback to Player interface.
This is useful to determine when a seek request was processed by the player
and all playback state changes (mostly to BUFFERING) have been performed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170826793
2017-10-11 12:07:54 +01:00
Justin Yorke
19f53d8a44
Merge branch 'multiversion' into dev-v2-multi-pssh 2017-10-06 15:00:53 -07:00
Justin Yorke
b8e719b101
Allow multiple PSSH boxes for same system.
Updates DefaultDrmSessionManager to use the prefered Widevine version (v1
on >= 23 and v0 for < 23).
For other DRM schemes, uses the first scheme found.
2017-10-06 14:55:25 -07:00
Nate Roy
9783fc0924 remove reordering playlist parser 2017-10-06 14:35:18 -04:00
Nate Roy
2f622b8bd8 Allow passing of HlsPlaylistParser to HlsMediaSource.
Also create helper method in HlsMasterPlaylist to allow the copying of
the playlist to another, but with the variants reordered based on a
passed comparator. Also added an implementation of HlsPlaylistParser
which will reorder the variants returned.
2017-10-06 14:31:46 -04:00
olly
1495b9a473 Fix stuck playback when media has uneven track end times
* Always assume a renderer is ready if it's read to the end of
  its current stream and there's a subsequent period already
  prepared. This prevents getting stuck when a non-clock renderer
  has a short stream.
* Switch to the standalone clock if the renderer providing the
  media clock has read to the end of its current stream, is no
  longer ready, and there's a subsequent period already prepared.
  This prevents getting stuck when a clock renderer has a short
  stream.
* Remove unnecessary clock synchronization logic (since it would
  need to be made more complicated as a result of this change).
* Don't update the playing period holder when playWhenReady is
  false. This avoids the position jumping to the start of the
  next period when seeking to the very end of the current period
  whilst paused (we still end up showing the first frame of video
  from the next period, but fixing that will have to wait).

Github: #1874

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170717481
2017-10-03 08:58:25 +01:00
olly
fd576d2189 Smoother PlaybackControlView updates when speed != 1
* If speed <= 0.1, update every second.
* If 0.1 < speed < 1, update approximately once per
  second in real time, aligned so that each second boundary
  in media time has a corresponding updatae.
* If speed == 1, keep existing behavior.
* If 1 < speed <= 5, update every second in media time
* If speed > 5, update every 200ms.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170559037
2017-10-03 08:55:52 +01:00
olly
a3a9c0f3b0 Sanity check current position <= written frame position
This avoids spurious position reports following an underrun.

Github: #1874

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170344399
2017-10-03 08:51:36 +01:00
andrewlewis
60de157410 Add a few initial tests for SimpleDecoderAudioRenderer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170318174
2017-10-03 08:48:46 +01:00
andrewlewis
9c7950f342 Add AudioSink interface and use it from audio renderers
This change allows applications to provide custom AudioSinks, which could be
based on android.media.AudioTrack like AudioTrackAudioSink, or could be
completely custom.

The refactoring is mostly mechanical and shouldn't result in any functionality
changes.

Some android.media.AudioTrack-specific details have to appear in the AudioSink
interface so this change modifies the javadoc on the AudioTrack (now AudioSink)
to note that some methods will have no effect.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170311083
2017-10-03 08:47:20 +01:00
zhihuichen
b14b3d43de Expose OnKeyStatusChange events, this is required to learn the usabilities of the keys.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170268043
2017-10-03 08:45:53 +01:00
tonihei
52de36c5eb Add abstract, default Player event listener.
This allows simplified listener implementations as most listeners
will not listen to all possible notifications.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170177821
2017-10-03 08:44:33 +01:00
olly
a3be937650 Prevent unnecessary consecutive playlist loads
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=170078933
2017-09-26 19:19:57 +01:00
Oliver Woodman
792f046c02 Clean up HlsPlaylistTracker 2017-09-26 17:06:36 +01:00
ojw28
8ee6da1fe9 Merge pull request #3280 from yqritc/fix-primary-playlist-update
Fix primary hls playlist update
2017-09-26 16:54:47 +01:00
andrewlewis
06f7b6be6a Use IntDef for AudioTrack.startMediaTimeState
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169880369
2017-09-26 14:00:59 +01:00
eguven
1f8a8dbfa3 Add version number to serialized DownloadAction data
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169681768
2017-09-26 13:57:32 +01:00
aquilescanta
4fb18453e1 Add a "forceLowestBitrate" option to DefaultTrackSelector
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169668371
2017-09-26 13:56:04 +01:00
aquilescanta
25a9177ce3 Deduplicate DefaultTrackSelector javadocs
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169552239
2017-09-26 13:54:10 +01:00
hoangtc
324339b88f Tweak live-streaming track selection logic.
Follow-up on the update to ABR logic in AdaptiveTrackSelection for live
streaming case:
- Do not reset liveEdgeTimeUs when user seek to a different position.
- For HlsChunkSource, for non-independent segments, currently the
bufferedDuration calculate will subtract previousChunk's duration. So to make
it work with live-streaming ABR logic, we subtract timeToLiveEdgeUs a similar
amount to compensate for that operation.
- Minor update to DefaultSSChunkSource, only perform TrackSelection when needed
(after checking necessary conditions).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169531275
2017-09-26 13:48:23 +01:00
eguven
d71400d280 Add DashDownloadActionTest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169522830
2017-09-26 13:45:42 +01:00
yqritc
455f9fb9f0 remove space 2017-09-21 16:01:32 +09:00
yqritc
cac16f1647 remove keep alive check for updating primary url to avoid redundant playlist loading 2017-09-21 14:18:59 +09:00
yqritc
ff2ece56dd fix primarySnapshotAccessAgeMs 2017-09-21 12:01:25 +09:00
olly
ce7aaab3c6 Handle bracket params on the end of SmoothStreaming URLs
Issue: #3230

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169421873
2017-09-20 19:29:17 +01:00
aquilescanta
6314a0ec82 Add support for Widevine encrypted HLS
This includes both cbcs and cenc. Will only work for streams that require a single
pssh.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169382884
2017-09-20 19:28:02 +01:00
olly
67567ffa6c TsExtractor: Do less work if payload reader does not exist
There's no reason to perform the discontinuity check or skip
the adaptation field if we don't have a payload reader for
the packet.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169374609
2017-09-20 11:57:47 +01:00
olly
ed76882271 Bump version + release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169257339
2017-09-19 18:26:05 +01:00
olly
d346266dc9 Workaround Samsung tablet reboot playing adaptive secure content
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169256059
2017-09-19 18:23:28 +01:00
olly
89f66924d5 Use IntDef for MediaCodecRenderer internal states
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169254794
2017-09-19 18:22:03 +01:00
eguven
09248608c0 Notify span listeners even if index store fails in SimpleCache.removeSpan
This fixes infinite loop in LeastRecentlyUsedCacheEvictor.evictCache when index store fails.

Also made CachedContentIndex not final so it can be mocked and added a package protected SimpleCache
constructor so mock index can be injected.

Issue: #3260

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169249517
2017-09-19 18:20:34 +01:00
eguven
8a0e148041 Workaround a cipher issue in Android 4.3
[]

Issue: #2755

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169249093
2017-09-19 18:19:08 +01:00
aquilescanta
fed2a1a6ea Fix PTS wraparound in HLS+Webvtt
Issue:#2928

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169246424
2017-09-19 18:17:43 +01:00
olly
5b0e693419 Fix DefaultDashChunkSource.updateLiveEdgeTimeUs
Very subtle, but lastAvailableSegmentNum is shifted by
RepresentationHolder.segmentNumShift. When accessing the
index directly it's necessary to unshift. The easiest way
to do this is to call through the holder, which does this
for you.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169239928
2017-09-19 18:16:18 +01:00
eguven
9bdf1ee944 Check if the cache is already empty before trying to evict more span
This case may happen if the max span size is more than the max size the
evictor is configured.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169101093
2017-09-19 18:14:54 +01:00
aquilescanta
5e2c7d967a Fix 2 CEA decoder bugs
1- Avoid dropped buffers by using a PriorityQueue instead of a set.
2- Process the end of stream after non-EOS buffers.

Issue:#3250

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169077365
2017-09-19 18:13:31 +01:00
andrewlewis
457d0ba1b9 Work around broken AAC decoders on Galaxy S6
Issue: #3249

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168844850
2017-09-15 23:49:34 +01:00
aquilescanta
6592a6474e Improve documentation for SCTE35-related metadata
Also expose break_durations in microseconds instead of 90kHz.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168816992
2017-09-15 23:47:12 +01:00
olly
a3a2fb506c Provisioning: Fix some (admittedly quite theoretical) issues:
1. Only tell sessions that want provisioning when provisioning occurs.
2. Also propagate failure to provision to these sessions.
3. If a session responsible for provisioning is released, start
   provisioning using another session instead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168713918
2017-09-15 23:44:38 +01:00
olly
a479afff5f Fix potential NPE/ThreadSafety issues with MediaDrm listener
- MediaDrmEventListener.onEvent is typically called on the
  app's main thread. mediaDrmHandler is instantiated on the
  playback thread. Hence mediaDrmHandler should be volatile
  to ensure visibility.
- Nulling mediaDrmHandler could result in a NPE in onEvent.
  Instantiate mediaDrmHandler (and don't null it again) to
  avoid this. MediaDrmHandler.handleMessage will correctly
  discard any events for sessions that are now closed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168707938
2017-09-15 23:43:18 +01:00
andrewlewis
58293abc11 Remove IMA dependency and add AdsMediaSource
AdsMediaSource lives in the core library so only ImaAdsLoader remains in
the ima extension. AdsMediaSource takes an AdsLoader implementation.

ImaAdsMediaSource is deprecated rather than removed for now.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168707921
2017-09-15 23:41:59 +01:00
andrewlewis
f2aed7186e Workaround the skip ad button not being focused
Issue: #3258

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168669969
2017-09-15 23:39:19 +01:00
hoangtc
b3004ab1c3 Do not apply SampleStream skip-ahead for NoSampleRenderer.
Currently, to make transition to next media period seamless, after the renderer
has read until the end of the current SampleStream, we may send it the next
SampleStream so the renderer may read from the next SampleStream ahead of the
transition.
For NoSampleRenderer, we should avoid doing this: skipping ahead for such
renderer doesn't have any benefit (the renderer does not consume data from
SampleStream), and it will change the provided rendererOffsetUs while the
renderer is still rendering from the playing media period.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168669800
2017-09-15 23:38:06 +01:00
tonihei
7d59383cc4 Add reason to onPositionDiscontinuity.
This allows listeners to easily determine the source of the discontinuity.
Reasons can be period transitions, seeks, and internal reasons.

Listeners still using the deprecated ExoPlayer.EventListener interface were
updated to Player.EventListener.

GitHub: #3252

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168549612
2017-09-15 23:36:46 +01:00
andrewlewis
872cbec9e1 Add TrimmingAudioProcessor for gapless
Remove gapless functionality that relies on MediaCodec, and implement this in
an AudioProcessor instead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168547487
2017-09-15 23:35:33 +01:00
hoangtc
c9591d7617 Added support for No-Sample Renderer.
Currently our Renderer is always associated with and consume data from
some SampleStreams, which were constructed from the provided MediaSource.
There are use-cases, in which the users want to have simple Renderer
implementation that does not consume data from SampleStream at all, but
render using their custom logic at each rendering position - they mostly just
need ExoPlayer to keep track of the playback position and enable/disable the
renderer.
This CL adds support for such Renderer by adding a TRACK_TYPE_NONE.
Renderer of such type will be:
- Associated with null TrackSelection as the result of track-selection
operation.
- Associated with EmptySampleStream.

GitHub: #3212

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168545749
2017-09-15 23:34:21 +01:00
hoangtc
5019da3e7b Update ABR logic in AdaptiveTrackSelection for live streaming case
In live streaming, if the playback position is very close to live edge,
the buffered duration will never reach minDurationForQualityIncreaseMs,
which prevents switching from ever happening. So we will provide the
durationToLiveEdgeUs to AdaptiveTrackSelection in live streaming case,
so it can handle this edge case.

GitHub: #3017

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168535969
2017-09-15 23:33:10 +01:00
olly
39dbb9a7fc De-dupe ACTION_DOWN events
Issue: #3259

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168378650
2017-09-15 23:31:54 +01:00
aquilescanta
f257300d8e Add tv module for USB tuner support + demo app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168366847
2017-09-15 23:30:41 +01:00
olly
0adb4502f6 Ignore all-zero defaultKid
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168259911
2017-09-15 23:29:28 +01:00
olly
340d0be40a Bump to 2.5.2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168155713
2017-09-10 16:48:39 +01:00
olly
5a4155f09f Destroy EGLSurface during DummySurface cleanup
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=168020525
2017-09-08 22:28:10 +01:00
tonihei
ec38d0d8ab Check thread is still alive before sending message in Loader.
The release callback handler in Loader might not be alive
anymore. Catch this case to prevent warnings about sending
messages on dead threads.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167996538
2017-09-08 22:25:37 +01:00
andrewlewis
7c3fe19d3f Migrate remaining tests to Robolectric
Remaining instrumentation tests either use android.os.Handler or rely on assets.
In the latter case, the tests are difficult to migrate due to differences
between the internal and external build systems, and configuration needed in
Android Studio. In addition, SimpleCacheSpanTest remains as an instrumentation
test because it fails due to a problem with string encoding on the internal
build (and two other tests in its package are kept with it because they depend
on it).

This test removes a dependency from testutils on Mockito, as a different
version of Mockito needs to be used for instrumentation tests vs Robolectric
tests, yet both sets of tests need to rely on testutils. Mockito setup is now
done directly in the tests that need it.

Move OggTestData to testutils so it can be used from both instrumentation and
Robolectric tests.

It may be possible to simplify assertions further using Truth but this is left
for possible later changes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167831435
2017-09-08 22:21:33 +01:00
olly
7d4190f3c8 Regroup final/non-final vars
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167717715
2017-09-06 15:56:48 +01:00
olly
c6fa034eba DecryptionException cleanup + add missing header
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167711928
2017-09-06 15:55:21 +01:00
olly
d66143d96d Add full stops
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167711267
2017-09-06 15:53:57 +01:00
olly
e7992513d3 Remove references to MediaDrm from DefaultDrmSession classes
Everything should go through the ExoMediaDrm layer. We still
need to abstract away the android.media exception classes, but
this is left as future work.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167710213
2017-09-06 15:52:28 +01:00
olly
013379fd3e Workaround for SurfaceView not being hidden properly
This appears to be fixed in Oreo, but given how harmless
the workaround is we can probably just apply it on all
API levels to be sure.

Issue: #3160

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167709070
2017-09-06 15:51:01 +01:00
olly
17232f58a3 Fix position reporting during ads when period has non-zero window offset.
Reporting incorrect positions for ad playbacks was causing IMA to
think the ad wasn't playing, when in fact it was.

Issue: #3180

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167702032
2017-09-06 15:49:34 +01:00
andrewlewis
8ef6a2e7bd Clear gapless playback metadata for clipped media
Also pass an unresolved end point to ClippingMediaPeriod. This removes some
assertions checking timestamps in the ClippingMediaPeriod, but makes it
possible to identify when the end point is at the end of the media.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167683358
2017-09-06 15:48:05 +01:00
olly
fb023da529 Fix attr inheritance in SimpleExoPlayerView
When creating PlaybackControlView inside SimpleExoPlayerView,
we want certain attributes to be passed through. This lets you
set control attributes on the SimpleExoPlayerView directly. We
don't want all attributes to be propagated though; only our own
custom ones.

Not sure if there's a cleaner way to do this. Pragmatically this
solution seems ... ok :)?

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167619801
2017-09-06 15:46:44 +01:00
zhihuichen
b62eab63a4 Implement multi session to support DRM key rotation.
Spec: https://storage.googleapis.com/wvdocs/Widevine_DRM_Android_Using_Key_Rotation.pdf

1. Implement multisession to support drm key rotation
2. Put MediaDrmEventListener back to manager since this is a per mediaDrm thing.
3. It seems diffrenciate between single/multi session is unnecessary.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167602965
2017-09-06 15:45:22 +01:00
olly
0183a83047 Don't use MediaCodec.setOutputSurface on Nexus 7 with qcom decoder
Issue: #3236

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167581198
2017-09-05 16:47:55 +01:00
tonihei
2f4a3fe1f3 Add postDelayed operation to Clock interface.
The default implementation is just calling through to handler.postDelayed,
while the fake clock uses its internal time value to trigger the handler
calls at the correct time.

This is useful to apply a fake clock in situations where a handler is used to
post delayed messages.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167567914
2017-09-05 16:34:44 +01:00
olly
bec5e6e2b2 Rewrite logic for enabling secure DummySurface
Issue: #3215

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167505797
2017-09-05 16:31:44 +01:00
olly
a0df5bb50a Be robust against unexpected EOS in WebvttCueParser
Issue: #3228

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167504122
2017-09-05 16:30:19 +01:00
olly
472df08f08 Additional secure DummySurface device exclusions
Merge: https://github.com/google/ExoPlayer/pull/3225

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167502127
2017-09-05 16:28:46 +01:00
hoangtc
0d86f4475c Remove the resampling to 16bit step from FlacDecoder.
Currently FlacDecoder/FlacExtractor always perform resampling to 16bit. In some
case (with 24bit audio), this might lower the audio quality if the system
supports 24bit audio.
Since AudioTrack implementation supports resampling, we will remove the
resampling step, and return an output with the same bits-per-sample as the original stream.
User can choose to re-sample to 16bit in AudioTrack if necessary.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167494350
2017-09-04 16:30:37 +01:00
andrewlewis
bab2ce817e Allow EXIF tracks to be exposed
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167493800
2017-09-04 16:29:11 +01:00
olly
ab1e4df11a Update moe eqiuvalence
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167488837
2017-09-04 16:27:40 +01:00
ojw28
0da8e1af67 Merge pull request #3225 from dbrain/3215_additional_dummy_secure_surface_exclusions
#3215 Additional secure DummySurface device exclusions
2017-09-04 15:28:50 +01:00
Oliver Woodman
74b8c45e6d Minor cleanup to AspectRatioFrameLayout 2017-09-04 11:34:57 +01:00
ojw28
1a6a6c901f Merge pull request #3223 from Shyri/vp09-support
Add support for new codecs parameter string
2017-09-04 10:33:02 +01:00
ojw28
21363d2f8e Merge pull request #3187 from stellabei/stellabei/aspect-ratio-crop
Support zoom mode for AspectRatioFrameLayout
2017-09-04 10:31:21 +01:00
olly
ca2bfbc56e DashManifestParser: Move schemeType up to DrmInitData
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167171407
2017-09-04 10:23:33 +01:00
andrewlewis
daafbb1f1c Add missing Robolectric test path to codebase
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167151714
2017-09-04 10:22:17 +01:00
andrewlewis
f15ce81c47 Move some unit tests to use Robolectric
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167148146
2017-09-04 10:20:59 +01:00
olly
6bd0ba887c Allow more aggressive switching for HLS with independent segments
We currently switch without downloading overlapping segments, but
we do not actually switch more aggressively. This change fixes
this. Note there's an implicit assumption made that if one media
playlist declares independent segments, the others will too. This
is almost certainly true in practice, and if it's not the penalty
isn't too bad (the player may try and switch to a higher quality
variant one segment's worth of buffer too soon).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167120992
2017-08-31 16:33:43 +01:00
andrewlewis
0b78837f35 Fix ContentDataSource bytesRemaining calculation
The bytesRemaining didn't always take into account any skipped bytes, which
meant that reaching the end of the file was not correctly detected in read().

Issue: #3216

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167016672
2017-08-31 16:32:28 +01:00
andrewlewis
e80a93d799 Use UTF-8 everywhere
UTF-8 is the default charset on Android so this should be a no-op change, but
makes the code portable (in case it runs on another platform).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167011583
2017-08-31 16:29:44 +01:00
Danny Brain
0c7f11606f #3215 Additional secure DummySurface device exclusions 2017-08-31 14:31:18 +10:00
Shyri Villar
49c2926e45 Add support for new codecs parameter string 2017-08-30 16:25:50 +02:00
olly
6bf0b7f3de Fix moe config II
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166916769
2017-08-29 23:56:36 +01:00
olly
b0df6dce98 Fix moe config
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166914821
2017-08-29 23:55:19 +01:00
olly
5bed2bf503 Don't copy primary-track format to non-primary tracks
This time plumbing the track type in from the other side.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166898172
2017-08-29 23:17:16 +01:00
olly
d9cd13ce74 Automated rollback of changelist 166843123.
*** Reason for rollback ***

Doesn't work because trackOutputProvider can be null when extracting init data.

*** Original change description ***

Don't copy primary-track format to non-primary tracks

Copying non-primary-track formats to non-primary tracks
looks non-trivial (I tried; went down a dead-end), so
leaving that for now.

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166883654
2017-08-29 23:14:33 +01:00
olly
55e928f75a Make LeanbackPlayerAdapter use a ControlDispatcher + Misc cleanup
1. Make LeanbackPlayerAdapter use a ControlDispatcher. This
   allows apps to suppress control events in some circumstances,
   and is in-line with our mobile controls.
2. Misc simplifications and cleanup to LeanbackPlayerAdapter.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166852816
2017-08-29 23:13:13 +01:00
olly
44dc3c3ab3 Make all renderers DRM aware
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166852758
2017-08-29 23:11:55 +01:00
olly
b2c245281a Parse SchemeData from urn:mpeg:dash:mp4protection:2011 element
Issue: #3138

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166849631
2017-08-29 23:10:36 +01:00
aquilescanta
aafdd2267a Add media queue support to CastPlayer
Also workaround the non-repeatable queue and fix other minor issues.

Issue:#2283

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166848894
2017-08-29 23:09:03 +01:00
olly
f44e30c754 Fix mapping CLEARKEY_UUID to COMMON_PSSH_UUID
This mapping when we call into platform components also needs
to be applied when creating the MediaCrypto instance. The fix
is to stop propagating the UUID through all the createMediaCrypto
methods. This is unnecessary, since the eventual target already
knows its own UUID!

Issue: #3138

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166843372
2017-08-29 23:07:39 +01:00
olly
3e76227006 Don't copy primary-track format to non-primary tracks
Copying non-primary-track formats to non-primary tracks
looks non-trivial (I tried; went down a dead-end), so
leaving that for now.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166843123
2017-08-29 23:06:16 +01:00
andrewlewis
ba6d208fe9 Use Math.abs in Sonic.java
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166820970
2017-08-29 23:04:52 +01:00
eguven
cc58b515b7 Make Downloaders open source
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166486294
2017-08-29 23:03:08 +01:00
tonihei
30b31b5679 Support empty concatenations and empty timelines in concatenations.
Both cases were not supported so far. Added tests which all failed in the
previous code version and adapted the concatenated media sources to cope with
empty timelines and empty concatenations.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166480344
2017-08-29 23:01:41 +01:00
tonihei
1b9c904dba Add UI for shuffle mode.
This includes an option to show and hide the shuffle mode button. When
pressing the button, the shuffle mode of the player is toggled.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166455759
2017-08-29 22:58:42 +01:00
olly
6907ffb285 Remove unnecessary view casts
findViewById is now defined using generics, which allows
the types to be inferred.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166355555
2017-08-29 22:57:17 +01:00
olly
6e03dcdfa1 Add LocalMediaDrmCallback. Useful for providing local keys.
Issue: #3178

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166330215
2017-08-29 22:55:51 +01:00
olly
57bad31e4c Update documentation with new demo app location
Plus a few misc doc fixes / adjustments

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166323135
2017-08-29 22:54:26 +01:00
tonihei
eeebb3968b Implement shuffle mode logic in ExoPlayerImplInternal.
This is mostly connecting the already stored shuffleMode with the timeline queries
for the playback order.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166199330
2017-08-29 22:50:49 +01:00
tonihei
f7eba77ee0 Add shuffle support to dynamic concatenating media source.
The media source is initialized with a DefaultShuffleOrder which can be changed at
any time. Whenever the list of media source is changed, the shuffle order is adapted
accordingly (either on the app thread if the player is not prepared yet, or on the
player thread). The shuffle order is then used to construct the timeline.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166198488
2017-08-29 22:48:10 +01:00
tonihei
e15633e906 Add shuffle support to ConcatenatingMediaSource.
The media source is initialized with a DefaultShuffleOrder which can be changed at
any time. This shuffle order is then used within the corresponding timeline.

The isRepeatOneAtomic flag is extended to also suppress shuffling (now called
isAtomic only).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166197184
2017-08-29 22:46:54 +01:00
andrewlewis
8115e11489 Allow subclasses to customize the MediaFormat
Make getMediaFormat protected so that subclasses can set additional MediaFormat
keys. For example, if the decoder output needs to be read back via an
ImageReader as YUV data it is necessary to set KEY_COLOR_FORMAT to
COLOR_FormatYUV420Flexible.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166195211
2017-08-29 22:45:28 +01:00
tonihei
9fd19d0e7c Add shuffle logic to concatenated timelines.
The implementation in the abstract base class takes care to forward the queries
to the correct methods given the shuffle mode and a given shuffle order.

All concatenated timeline implementations use an unshuffled order so far. The
handling of the shuffle orders will follow in other changes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166191165
2017-08-29 22:42:56 +01:00
tonihei
4883a9ba9a Add shuffle support to infinitely looping timeline.
In addition, let unit test assert window indices for both shuffle modes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166191069
2017-08-29 22:41:39 +01:00
tonihei
bd81181892 Add shortcut methods to query next or previous window index.
This functionality is most likely needed by UI modules which currently need
to obtain the timeline, the current repeat and shuffle modes and are only then
able to query the next/previous window index using this information.

Adding these methods simplifies these cumbersome requests.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166181202
2017-08-29 22:40:13 +01:00
tonihei
2c8d5f846e Pass shuffle mode to timeline assertion helper methods.
This allows to test the expected behaviour of timeline with different shuffle modes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166181091
2017-08-29 22:38:50 +01:00
tonihei
10f1bd7396 Add shuffle mode parameter to Timeline interface methods.
This parameter is used by methods such as getNextWindowIndex
and getPreviousWindowIndex to determine the playback order.
Additionally, there are method to query the first and last
window index given the shuffle mode.

None of the timeline implementations nor the ExoPlayer
implementation supports shuffling so far.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166170229
2017-08-29 22:37:27 +01:00
Bei Yi
b084821678 Support zoom mode for AspectRatioFrameLayout 2017-08-24 16:13:44 -07:00
Bei Yi
50c485652c Support aspect ratio fill mode for AspectRatioFrameLayout 2017-08-24 14:31:33 -07:00
tonihei
5214bfa7b1 Update ExoPlayerImplInternal with shuffle mode changes.
The shuffle mode is saved using a message on the playback thread.
After setting the shuffle mode, the same media period holder verification
as for repeat mode changes gets executed.

Note: the shuffle mode is not used yet to change the playback order.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166060231
2017-08-22 16:27:18 +01:00
tonihei
b9a6a40539 Add listener callback for shuffle mode changes.
The listener implementations do not do anything yet.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166056933
2017-08-22 16:23:27 +01:00
aquilescanta
52ec70dd80 Add support for KEYFORMAT and SAMPLE-AES (only parsing, not decryption)
Also add sample streams that use METHOD=SAMPLE-AES. Note that some of
the streams provide alternative EXT-X-KEY's. Support for alternative
decryption methods will be added in a later CL.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166048858
2017-08-22 16:20:45 +01:00
tonihei
c1d7e5bf9d Add set/getShuffleModeEnabled to Player interface.
And implement a basic version of the methods in all implementations.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166041342
2017-08-22 16:19:25 +01:00
olly
f1a97317d9 Handle size==0 in MP4 atoms
Issue: #3191

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165925148
2017-08-22 16:16:48 +01:00
tonihei
cb45a47da1 Remove isFirstWindow/isLastWindow from Timeline.
These methods are only used in one place, and offer duplicate
functionality to checking getNext(Previous)WindowIndex == C.INDEX_UNSET.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165910258
2017-08-22 16:14:02 +01:00
andrewlewis
cec0c52c8d Allow the app to specify extra ad markers
Issue: #3184

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165895259
2017-08-22 16:12:31 +01:00
mansfieldmark
8e67837afe Adding conservative @Nullable annotations to Exoplayer v2 Cache + CacheSpan
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165715928
2017-08-22 16:09:53 +01:00
eguven
a1add8f9e6 Fix downcasting in DownloadAction.Serializers
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165699826
2017-08-22 16:07:18 +01:00
aquilescanta
1e4f899548 Add support for the data URI scheme
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165699328
2017-08-22 16:05:58 +01:00
Oliver Woodman
cc9a93d9d9 Rm SS offline for now 2017-08-17 23:18:58 +01:00
Oliver Woodman
4fa307d654 Minor style tweaks 2017-08-17 23:13:34 +01:00
Dulmandakh
7e586c3a8f expose setPropertyByteArray, setPropertyString
export setPropertyByteArray, setPropertyString of DefaultDrmSessionManager for easy customization.
2017-08-17 23:11:30 +01:00
ojw28
6b7e0cb606 Merge pull request #3182 from WeiChungChang/Support_MP4_in_h262
Support H262 video in MP4
2017-08-17 23:10:05 +01:00
ojw28
7ddcc46cbd Merge pull request #3185 from dbrain/subrip_timing_line_crash
Fix possible subrip timing line NPE
2017-08-17 23:09:50 +01:00
olly
2470b39d95 Split metadata and text outputs from their renderer classes
There will be non-ExoPlayer players that can output text
and metadata, so the outputs should be standalone. There
may also be ExoPlayer instances that use non-standard
text and metadata renderers, for which this change also
makes sense.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165628420
2017-08-17 23:05:44 +01:00
olly
4917929a3a Improve MediaSource/MediaPeriod documentation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165628229
2017-08-17 23:04:21 +01:00
aquilescanta
e3f305b5c0 Improve FORMAT_UNSUPPORTED_DRM related documentation and logging
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165580016
2017-08-17 23:00:56 +01:00
olly
34960ad891 Tweak and add READMEs + remove refs to V1
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165578518
2017-08-17 22:59:34 +01:00
olly
4d7f37f5a9 Work around issue with Xiaomi JB devices
Issue: #3171

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165577562
2017-08-17 22:58:10 +01:00
aquilescanta
04d76fa8fc Allow easier ExoPlayer/Cast integration
This CL adds the fundamental pieces for ExoPlayer/Cast integration and includes a
demo app to showcase this functionality. However, media queues should be supported
in the first release of this extension.

Issue:#2283

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165576892
2017-08-17 22:56:52 +01:00
zhihuichen
c2d2d967e9 Refactor DrmSession part into a separate class to prepare for multi session scenario. NO_SQ=flaky
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165497666
2017-08-17 22:52:33 +01:00
eguven
978019a1a3 Add ProgressiveDownloadAction
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165447436
2017-08-17 22:51:14 +01:00
andrewlewis
8e45bd27df Add nullable annotations to Renderer constructors
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165437929
2017-08-17 22:49:58 +01:00
andrewlewis
bbc3b182bb Restore the interrupted flag after blocking operations
If the main thread was interrupted during
ExoPlayerImplInternal.blockingSendMessage/release, the interrupted flag was
immediately set but then wait() was called on the next iteration. wait() would
immediately throw InterruptedException, causing the main thread to spin until
the blocking operation completed.

Instead of resetting the flag immediately, reset it after the blocking
operation completes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165426493
2017-08-17 22:48:15 +01:00
andrewlewis
e0b69b8115 Add Format.copyWithRotationDegrees
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165314250
2017-08-17 22:46:57 +01:00
olly
f72cd2b014 Add SmoothStreaming downloader and download action
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165305815
2017-08-17 22:45:35 +01:00
olly
b9f5cc7256 Add missing TrackKey class
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165296184
2017-08-17 22:44:20 +01:00
olly
4b706d9484 Add SsManifest.copy and TrackKey for SmoothStreaming downloads
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165295985
2017-08-17 22:43:05 +01:00
olly
c94bce17b4 Make data sources private in SegmentDownloader
Also fix SegmentDownloader.remove to not return early

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165295432
2017-08-17 22:41:48 +01:00
olly
f8e47553e8 Destroy GL context when releasing dummy surface
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165293386
2017-08-17 22:40:32 +01:00
olly
00547c5783 Disable secure dummy surface on all Samsung N devices
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165291627
2017-08-17 22:38:01 +01:00
olly
08d16c55d4 Some Leanback extension + minVersion bump fixes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165219604
2017-08-17 22:36:47 +01:00
mdoucleff
d9cd4641f2 Add flag to CachedContentIndex to disable encryption. This allows the encryption feature
to be disabled gracefully: encrypted index files may be read, but plaintext will be written.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165196508
2017-08-17 22:35:27 +01:00
olly
cf6534ea5b SegmentDownloader loadManifest cleanup.
- HlsDownloader.loadManifest (previously called getHlsPlaylist)
  suppressed errors for the offline case, where-as the DashUtil
  equivalent method did not. This change makes them consistent
  and moves both other to use ParsingLoadable.
- Enable GZIP for manifest loads in both cases.
- Use Uri rather than String to represent Uris. Previously the
  strings were parsed into Uris quite deep in the code, which
  isn't ideal if the parsing fails; you'd probably prefer the
  error to occur early at the top level.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165181398
2017-08-17 22:32:57 +01:00
olly
fb83872365 Remove unused method
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165168924
2017-08-17 22:30:26 +01:00
olly
870c8ae4df Fix canAcquireSession for ClearKey
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165159376
2017-08-17 22:29:13 +01:00
Bei Yi
f764fe70b0 Support crop mode for AspectRatioFrameLayout 2017-08-17 11:01:42 -07:00
Danny Brain
571f98f546 Fix possible subrip timing line NPE 2017-08-17 21:30:46 +10:00
WeiChungChang
469780f7ea Support H262 video in MP4 2017-08-17 13:49:41 +08:00
Oliver Woodman
1829d71d29 Restrict usage of secure DummySurface for all Samsung devices. 2017-08-11 15:47:03 +01:00
Oliver Woodman
730d2dd18f Formatting cleanup 2017-08-11 15:46:49 +01:00
ojw28
2e950633c7 Merge pull request #3161 from DolbyLaboratories/dev-v2-eac3-7.1
Support 7.1 EAC3 in MP4, DASH and HLS formats
2017-08-11 15:43:43 +01:00
olly
c661ed42de Add possibility of forcing a specific license URL in HttpMediaDrmCallback
Resubmit of https://github.com/google/ExoPlayer/pull/3136

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164971900
2017-08-11 15:03:02 +01:00
olly
40f34956a8 Bump minimum and target API levels + support lib version
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164863447
2017-08-11 15:01:43 +01:00
ybai001
fc9a58529a Support 7.1 EAC3 in MP4, DASH and HLS formats 2017-08-11 07:38:43 +08:00
olly
1b28d83f16 Fix maskingX variables when timeline becomes empty
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164840037
2017-08-10 13:28:04 +01:00
olly
88bae5d975 Support multiple video/text/metadata outputs
We've seen more than one issue filed where a developer has
registered a video listener and been confused by the fact
their SimpleExoPlayerView no longer works properly. There
are also valid use cases for having multiple metadata/text
outputs.

Issue: #2933
Issue: #2800
Issue: #2286
Issue: #2240

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164839882
2017-08-10 13:26:48 +01:00
olly
5ab0c620bf Clean up ClearKey UUIDs
- There is a proper ClearKey UUID now. This change requires
  it to be used instead of the Common PSSH UUID when instantiating
  DRM components.
- Internally, we'll map the ClearKey UUID onto the Common PSSH
  UUID where necessary to (a) access the ClearKey CDM on older
  devices, and (b) access drm init data stored under the Common
  PSSH UUID in the stream.

Issue: #3138

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164839213
2017-08-10 13:25:32 +01:00
eguven
2d0044fee4 Generic DownloadManager and DownloadService
Downloader specific parameters and constructor is moved to DownloadAction class.

DownloadAction objects need to be serialized so they can be passed in Intents and can be stored to
filesystem (to be implemented). So  DownloadAction.Serializer is added. Didn't use Serializable interface
because of the concerns over incompabilities when the new versions of classes are used.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164831115
2017-08-10 13:24:10 +01:00
olly
b6b84839ed Add ErrorMessageProvider to util package
It's needed in multiple places. MediaSessionConnector uses it
today. Our leanback connector will also use it. Maybe
SimpleExoPlayerView should use one too, to show the message to
the user when an error occurs.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164720020
2017-08-10 13:19:12 +01:00
olly
ebbf9f635b Fix minor Javadoc error
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164706078
2017-08-10 13:15:51 +01:00
olly
91adba5d1b Minimal change to expose segment indices in DefaultDashChunkSource
Issue: #3037

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164614478
2017-08-10 13:12:49 +01:00
Oliver Woodman
ceb1e87219 Revert "Add possibility of forcing a specific license URL in HttpMediaDrmCallback"
This reverts commit 768a73b377.
2017-08-10 12:57:06 +01:00
ojw28
3f31cec742 Merge pull request #3136 from jeoliva/force-drm-license-url
Add possibility of forcing a specific license URL in HttpMediaDrmCallback
2017-08-08 17:21:37 +01:00
olly
026ac1d69b Don't release a surface until we've stopped using it
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164596062
2017-08-08 16:44:08 +01:00
olly
b8c6ed6701 Bump to 2.5.1
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164595874
2017-08-08 16:42:42 +01:00
olly
072788c88a Support building of version 1 PSSH atoms
Issue: #3138

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164590835
2017-08-08 15:50:58 +01:00
olly
24bf2aa0e2 Support clip end greater than the child's duration
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164577001
2017-08-08 15:49:45 +01:00
olly
e45345e21b Fix missing source info refresh notification
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164502580
2017-08-08 15:48:22 +01:00
aquilescanta
38360f6267 Add support for HLS's FRAME-RATE attribute
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164482135
2017-08-08 15:46:53 +01:00
eguven
427411befb Disable test coverage again
https://issuetracker.google.com/issues/37019591 causes local variables can't be found while debugging.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164449443
2017-08-07 13:38:15 +01:00
olly
87012f22f2 Avoid rollover calculating sample offsets
I considered using Util.scaleLargeTimestamp for this, but
given sample offsets are relative and should always be
small (<<1s), it really shouldn't be necessary.

Issue: #3139

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164443795
2017-08-07 11:59:25 +01:00
olly
865d74cde0 Don't use TextureView's SurfaceTexture unless available
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164434943
2017-08-07 11:57:01 +01:00
olly
05179b4f1b Set correct Content-Type for ClearKey requests
Issue: #3138

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164434858
2017-08-07 11:55:42 +01:00
olly
9ecec92b56 Finalize r2.5.0
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164434615
2017-08-07 11:53:04 +01:00
andrewlewis
576f362912 Update playbackInfo even if there's no period holder
This is required to correctly update the playbackInfo.periodId when
seeking close to the end of a period with ads, as the seek operation
leads to an immediate source info refresh when midroll ads are marked as
played.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164257099
2017-08-04 17:55:35 +01:00
andrewlewis
08e58af6e7 Separate handling of oldTimeline == null case
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164254522
2017-08-04 17:54:01 +01:00
olly
b664e92bb4 Remove shuffle button since it doesn't work yet
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164141326
2017-08-04 12:36:39 +01:00
olly
1109bf50dd Bump version
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164126494
2017-08-04 12:33:50 +01:00
tonihei
53bc59b9d2 Add UI resources for shuffle mode.
Including strings, icon, and button.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164126101
2017-08-04 12:32:24 +01:00
aquilescanta
72daef7a4c Don't read GaSpecificConfig unless required
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164125579
2017-08-04 12:31:01 +01:00
tonihei
ccd05cbd04 Add fake simple exo player.
This implementation runs as fast as possible by triggering a simplified
playback loop continuously without waiting. The class only supports a basic
use case with a single-period timeline, no timeline update, no seeks or other
user-initiated actions.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164120420
2017-08-04 12:29:40 +01:00
tonihei
6f7dc974c9 Add forwarding timeline to prevent repetition of boiler-plate code.
Multiple timelines work as a wrapper around another timeline and forward
most of the method calls to the wrapped timeline. Added a base class meant to
be overridden which handles all the boiler-plate forwarding.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164117264
2017-08-04 12:28:19 +01:00
J. Oliva
768a73b377 Add possibility of forcing a specific license URL in HttpMediaDrmCallback
- Renamed some license URL related variables to keep consistency across the code.
- Added a new parameter to HttpMediaDrmCallback that enables forcing defaultLicenseURL as the license acquisition URL.
2017-08-04 13:25:10 +02:00
tonihei
3c6ad40481 Add shuffle order interface and default implementation.
These classes maintain a shuffled order of indices allowing to query the
next, previous, first, and last indices. And also support inserting and
removing elements without changing the shuffled order of the rest.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164116287
2017-08-03 14:49:32 +01:00
andrewlewis
cb00b0209f Take into account init data size for input buffer size
Issue: #2900

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164110904
2017-08-03 14:48:21 +01:00
olly
db99187381 Fix some lint warnings
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164105662
2017-08-03 14:47:04 +01:00
olly
1f019ca808 Fix build.gradle to use modulePrefix
Issue: #3131

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164004981
2017-08-02 20:19:19 +01:00
tonihei
5ca84ebfd8 Remove child data holder helper from AbstractConcatenatedTimeline.
This helper class required a scratch instance to write on. Such a scratch
instance may violate the immuatability of the timelines if used by multiple
threads simultaneously.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163992458
2017-08-02 17:45:52 +01:00
olly
412138b2ea Some extractor fixes
- Fix Ogg extractor to work without sniffing.
- Fix extractors to handle seek() before init().
- Add tests for both issues.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163992343
2017-08-02 17:44:41 +01:00
olly
49b83c01ca Throw ParserException if parsing unsupported media
This is for consistency with what we do elsewhere;
specifically in FragmentedMp4Extractor.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163974960
2017-08-02 17:43:28 +01:00
olly
8e08d982ab Further fix H262 segmentation
Issue: #2891

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163951910
2017-08-02 13:26:05 +01:00
andrewlewis
962a71314a Fix handling of H.262 CSD
The start code for H.262 codec-specific data may be across a packet boundary.
Before this change the offset passed to CsdBuffer.onData may have been before
the start point of the data in the newData buffer.

After this change, start codes are added directly to the CSD buffer when it's
filling and any start code bytes added by onData (at the end of a packet) are
discarded.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163943584
2017-08-02 13:24:47 +01:00
Oliver Woodman
1a95a35434 Minor cleanup 2017-08-01 18:20:54 +01:00
olly
c01c8cd2a6 Bump version to 2.5.0-beta2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163830353
2017-08-01 16:23:39 +01:00
olly
13513b9c3e Clean up MediaSessionExt documentation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163828712
2017-08-01 16:23:39 +01:00
andrewlewis
55620348d4 Fix sequence extension position calculation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163814942
2017-08-01 16:23:39 +01:00
ojw28
08faafb4c1 Merge pull request #3115 from goffioul/h262-segmentation
Fix H262 segmentation.
2017-08-01 11:09:30 +01:00
ojw28
b562eb215f Merge pull request #3098 from dbrain/custom_playback_control_view
Allow PlaybackControlView to be overridden in SimpleExoPlayerView
2017-08-01 10:48:51 +01:00
olly
957158b7ff Fix 2.5.0 lint errors
- Publish IMA extension
- Force IMA to use the correct version of the support library
- Add missing sr translations for repeat mode strings

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163705883
2017-07-31 21:19:42 +01:00
olly
516762946d Fix typo in Id3Decoder
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163694825
2017-07-31 21:18:25 +01:00
olly
ecd9cff058 Robustness fix for malformed ID3 metadata
Issue: #3116

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163693235
2017-07-31 21:17:02 +01:00
olly
3ec0ccabbc Check for null entries in ConcatenatingMediaSource
We do this in the dynamic case, and I think we've seen
a few GitHub issues where developers do this and don't
understand what they've done wrong (because the failure
comes later).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163688557
2017-07-31 21:15:42 +01:00
olly
c2d7e05429 Propagate skipped input buffers through to CodecCounters
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163683081
2017-07-31 21:14:23 +01:00
aquilescanta
bb04456324 Fix IndexOutOfBounds when reading a multiple of 8 number of bits
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163455269
2017-07-31 21:07:40 +01:00
eguven
c3d7ccc3cb Replace iterable foreach loops with indexed for loops
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163343347
2017-07-31 21:04:55 +01:00
aquilescanta
84d19c464b Add support for AAC-LATM in transport streams
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163337073
2017-07-31 20:59:45 +01:00
aquilescanta
5278a63768 Change copyRenditionsList parameters names
Also instantiate the resulting list with a predicted size to minimize
list resizing.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163332285
2017-07-31 20:58:21 +01:00
eguven
bcc69c2da7 Add HlsMasterPlaylist.copy method
Creates a copy of this playlist which includes only the variants identified by the given variantUrls.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163212562
2017-07-31 20:56:56 +01:00
tonihei
b631755b63 Clean up test runner for ExoPlayer tests.
Currently the ExoPlayerWrapper is used to run tests using an ExoPlayer
implementation. Some properties of the test are set in the constructor, some
are set by overloading the class, others are hard-coded in the
ExoPlayerWrapper class, and a mechanism similar to the existing ActionSchedule
is missing.

This change does the following:
 1. Renames ExoPlayerWrapper to ExoPlayerTestRunner as it better reflects
    its purpose.
 2. Adds an internal Builder to easily set-up the test in a coherent way. This
    allows to only set necessary test components while using defaults for the rest.
 3. Integrate ActionSchedule.
 4. Apply the new structure to the existing tests currently using ExoPlayerWrapper.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163186578
2017-07-31 20:54:18 +01:00
eguven
cdb71a80aa Remove empty line after copyright text
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163186057
2017-07-31 20:52:49 +01:00
eguven
2dc1870dd4 Simple Java style fix
Put space between ] and {.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163116816
2017-07-31 20:51:29 +01:00
eguven
3f7b4dc75f Add HlsDownloader
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163052346
2017-07-31 20:50:10 +01:00
aquilescanta
df562bc8d1 Fix PlaybackControlView's repeat mode button update when player is null
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162824522
2017-07-31 20:42:29 +01:00
Michael Goffioul
908362bdf3 Fix H262 segmentation.
Prepend sequence headers to the next frame, instead of appending them to
the previous frame. Tested decoders like FFMPEG and Google's
Android/MPEG2 expects to read the sequence headers before the first
frame they apply to. When sequence headers are appended to the previous
frame, these are ignored and this leads to incorrect decoding.
2017-07-27 15:44:28 -04:00
Danny Brain
be85da3a69 Allow PlaybackControlView to be overridden in SimpleExoPlayerView 2017-07-26 11:34:49 +10:00
olly
13732fe618 Release notes + version bump for 2.5.0-beta1
There's no way to represent a beta in our integer versioning
scheme. I propose we just set it the same for all betas + the
stable release. The versioning for the demo app isn't that
important, so I've just put it directly to 2.5.0 as well.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162749130
2017-07-21 17:39:12 +01:00
olly
3eb85446a2 Fully document DefaultTrackSelector
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162740498
2017-07-21 16:12:41 +01:00
olly
9bb8b240d2 Improve Player/ExoPlayer Javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162740451
2017-07-21 16:11:29 +01:00
olly
89181cf4bc Fully document MappingTrackSelector
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162721489
2017-07-21 11:24:29 +01:00
andrewlewis
07de4d1b2c Handle ad skipping and content resume
SKIPPED can't be handled as CONTENT_RESUME_REQUESTED because after skipping an
ad there may be further ads to play in its ad group.

Remove workaround for handling unexpected playAd without stopAd, as the player
can instead recover when IMA sends CONTENT_RESUME_REQUESTED. This in turn fixes
handling of the case where playAd is called twice but IMA expects only the
first ad to play, when skipping a particular ad. (Add an ad tag where this
occurs to internal samples.)

Check whether a currently playing ad has been marked as played in
ExoPlayerImplInternal, and handle this case as a seek. This ensures that any
loaded ad periods are discarded in the case of CONTENT_RESUME_REQUESTED.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162610621
2017-07-21 11:23:10 +01:00
andrewlewis
554a399407 Switch to non-deprecated player constants
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162605429
2017-07-21 11:20:07 +01:00
olly
33f5bd6aed Start better documenting track selection
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162601990
2017-07-21 11:17:21 +01:00
olly
19087a7fa0 Fix broken Javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162601961
2017-07-21 11:16:01 +01:00
olly
54e869cbbd Update Timeline Javadoc to include brief mention of ad groups
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162601778
2017-07-21 11:14:38 +01:00
olly
eb38601626 Update release notes + bump version number
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162514848
2017-07-19 19:57:48 +01:00
olly
108f4f14f3 Suppress no-op timeline changes in ExtractorMediaSource
When an ExtractorMediaSource is used in a concatenation, and
probably when using repeat modes, it needs to produce multiple
ExtractorMediaPeriods during usage. Currently we fire a
source info refresh every time a new ExtractorMediaPeriod
instance prepares, which triggers ExoPlayer.EventListener's
onTimelineChanged method. In nearly all cases the timeline is
unchanged after the first ExtractorMediaPeriod is prepared.
This change suppresses these no-op changes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162484234
2017-07-19 19:49:31 +01:00
olly
5e203f482a Correctly flush HlsSampleStreamWrapper when primary selection changes
Issue: #3079

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162473480
2017-07-19 14:20:57 +01:00
andrewlewis
9716b03f8f Fix isLastPeriod to take into account the played ad count
A content period just before a postroll ad group with all ads played
was not being marked as the last media period in the timeline period.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162471919
2017-07-19 14:19:42 +01:00
aquilescanta
4f5ac9e04f Extract Player interface from ExoPlayer
This is the first step towards facilitating Cast integration to ExoPlayer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162366198
2017-07-19 14:15:45 +01:00
olly
078c57413b Correctly reset the upstream format from SampleQueues in HLS
When resetting a SampleQueue, by default the upstream format
is not cleared. This is necessary for progressive playbacks,
since (a) the formats never change, and (b) the extractors
only output them once. So when a seek occurs, it's necessary
to clear all sample data from the queue, but retain the current
upstream format.

Uniquely for HLS, the media in a SampleQueue that we may read
from can be in a format not supported by the consuming renderers.
We clear all the sample data from the queue in this case, but
not the upstream format. Since we have an optimization that
allows the upstream format to be read in advance of another
sample being written into the queue, this can result in an
unsupported format being read by a consuming renderer. This
change ensures the upstream format is correctly cleared in the
problematic case.

Issue: #3079

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162360267
2017-07-19 14:13:09 +01:00
tonihei
fb2dbf2c77 Use Clock in DefaultBandwidthMeter instead of SystemClock.
The default behaviour stays the same as Clock.DEFAULT == SystemClock. And it
enables bandwidth measurements in tests with simulated clocks.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162350852
2017-07-19 14:10:29 +01:00
tonihei
3ff9695a73 Move getBufferedPositionUs into SequenceableLoader.
All implementations of SequenceableLoader already implement this method.
Moreover, all composite media periods contained an exact copy of an
implementation that now moved to CompositeSequencableLoader.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162349083
2017-07-19 14:08:59 +01:00
olly
e26b8824dd Add Downloader for progressive content
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162348129
2017-07-19 14:07:38 +01:00
tonihei
0717c3502f Extend Clock interface with sleep method and add FakeClock.
The FakeClock allows to simulate timing behaviour including sleep time
for test cases.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162345258
2017-07-19 14:06:18 +01:00
andrewlewis
c28a2a4100 Fix content position for postroll ads
The position returned by getContentPosition() could be C.TIME_END_OF_SOURCE.
Fix the content position stored in MediaPeriodInfos for postroll ads to be the
duration of the containing period.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162322339
2017-07-19 13:59:38 +01:00
bachinger
5be79d4f42 Media session extension to connect ExoPlayer with the MediaSession of the
framework.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162245883
2017-07-17 23:22:41 +01:00
olly
387720d182 Allow module registrations + log player release
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162223981
2017-07-17 23:21:34 +01:00
olly
da79dec6c1 Make it a bit easier to sideload a subtitle
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162221516
2017-07-17 23:20:20 +01:00
olly
009369bf94 Reduce calls from TsExtractor to ExtractorInput.read
We currently read at most 5 packets at a time from the
extractor input. Whether this is inefficient depends on
how efficiently the underlying DataSource handles lots
of small reads. It seems likely, however, that DataSource
implementations will in general more efficiently handle
fewer larger reads, and in the case of this extractor
it's trivial to do this.

Notes:
- The change appears to make little difference in my
  testing with DefaultHttpDataSource, although analysis
  in #3040 suggests that it does help.
- This change shouldn't have any negative implications
  (i.e. at worst it should be neutral wrt performance). In
  particular it should not make buffering any more likely,
  because the underlying DataSource should return fewer
  bytes than are being requested in the case that it
  cannot fully satisfy the requested amount.

Issue: #3040

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162206761
2017-07-17 23:13:48 +01:00
andrewlewis
706d4e51fe Don't offset the first period holder by the start position
If seek is called for a non-seekable period, when the period is prepared the
start position will be updated from the seek position to zero. Because the
start position is part of the renderer offset for the first loaded period
holder, after the update the renderer offset start position and the new start
position would no longer cancel out, leading to the player position being
negative.

The first period holder's renderer offset is the fixed base offset (60 seconds)
plus its start position, but the start position is always subtracted. Avoid
subtracting the start position for the first period holder so that when it
changes there is no need to update the renderer offset.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162188133
2017-07-17 23:10:06 +01:00
tonihei
508db5fd0a Allow multiple Formats per TrackGroup in testutil fake classes.
This enables adaptive media test cases using TrackGroups with multiple
Formats.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162182005
2017-07-17 23:08:52 +01:00
tonihei
8399de4706 Move FakeDataSet to seperate class.
This allows to create extensions of FakeDataSet and also simplifies the
FakeDataSource class.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162180952
2017-07-17 23:07:38 +01:00
olly
bf5495f2f5 Optimize in-buffer seeking for HLS
Also move to using an array to hold the SampleQueues,
as we've moved to doing in ExtractorMediaPeriod.

Issue: #551

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161972990
2017-07-15 17:33:33 +01:00
olly
a2ffcec200 Fix NPE setting drm scheme type
drmInitData can be null in DASH if all of the init data is
specified at the manifest level instead. I took a look at
injecting the manifest format into the extractors, so that
we can actually copy the scheme type into it, but that's
at least non-trivial enough to delay for a subsequent CL.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161956246
2017-07-15 17:32:28 +01:00
olly
0869802173 Show last seek position when playing an ad
We'd normally expect playback controls to be hidden during
ad playback, although if they are visible for whatever reason,
it makes sense to set the position to the current content
position now that we have it.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161950098
2017-07-15 17:31:01 +01:00
olly
8378c3dc1f Simplify + optimize VorbisBitArray
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161796758
2017-07-15 17:26:55 +01:00
eguven
90398c5811 Check if thread is interrupted before opening connection
On an old version of okhttp, opening connection clears the thread interrupt flag silently. This is a workaround
to reduce the effect of the bug.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161784435
2017-07-15 17:24:09 +01:00
andrewlewis
70c5bf7052 Support resuming ads
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161778560
2017-07-15 17:22:52 +01:00
andrewlewis
6c74a31556 Support resuming content after ads
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161775394
2017-07-15 17:21:32 +01:00
olly
0da2299c49 Fix FlacStreamInfo to not call readBits with a >32 value
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161677399
2017-07-12 18:29:31 +01:00
olly
5885f34d12 Optimize ParsableNalUnitBitArray
Apply the same learnings as in ParsableBitArray.

Issue: #3040

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161674119
2017-07-12 18:28:20 +01:00
olly
01c0ccbdbd Optimize ParsableBitArray
ParsableBitArray.readBit in particular was doing an excessive
amount of work. The new implementation is ~20% faster on desktop.

Issue: #3040

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161666420
2017-07-12 18:27:08 +01:00
olly
2b1614cc7b Don't use ParsableBitArray to parse TS packet headers
Really low hanging fruit optimization for TS extraction.

ParsableBitArray is quite expensive. In particular readBits
contains at least 2 if blocks and a for loop, and was being
called 5 times per 188 byte packet (4 times via readBit). A
separate change will follow that optimizes readBit, but for
this particular case there's no real value to using a
ParsableBitArray anyway; use of ParsableBitArray IMO only
really becomes useful when you need to parse a bitstream more
than 4 bytes long, or where parsing the bitstream requires
some control flow (if/for) to parse.

There are probably other places where we're using
ParsableBitArray over-zealously. I'll roll that into a
tracking bug for looking in more detail at all extractors.

Issue: #3040

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161650940
2017-07-12 18:24:23 +01:00
aquilescanta
f72833476e Add DRM support to RendererCapabilities
This CL also makes DefaultTrackSelector take it into account when RendererCapabilities
sets it to unsupported.

A following CL could add a DefaultTrackSelector parameter to force DRM "known support" for specific track types.

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

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161556467
2017-07-12 18:22:04 +01:00
olly
3c5688de73 Optimize in-queue seeking when non-AV tracks are present
Let's do it this way for now. Note there's an implicit
assumption in here that non-AV tracks consist of only
key-frames, but I think we'll not encounter any issues
in the real world as a result, we already make this
assumption in ChunkSampleStream, and actually tagging
every queue with this information explicitly is a very
painful amount of plumbing.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161545383
2017-07-12 18:20:54 +01:00
andrewlewis
94683d1e8c Show ad markers for non-multi-window time bars
Ads don't have their own periods any more, so show ad group markers even if the
time bar is not multi-window.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161524411
2017-07-12 18:15:53 +01:00
olly
0052a70f60 Correctly propagate format identifier for CEA-608 in HLS
Issue: #3033

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161512537
2017-07-12 18:13:12 +01:00
andrewlewis
ef56c9fe39 Move ad playback state into ImaAdsLoader
Once background and resuming is supported, the ads loader will be kept when the
player is destroyed and recreated. Move the state relating to the structure of
ads and what ads have been loaded/played out of the media source and into the
loader so the information is not lost when the source is released, in
preparation for supporting background and resuming.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161503571
2017-07-12 18:11:39 +01:00
olly
b31fd5bc7c Misc tweaks to UI components
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161454491
2017-07-12 18:10:25 +01:00
tonihei
45f94eab62 Allow moving media source within DynamicConcatenatingMediaSource.
This option allows to move the currently playing media source to another position
and also to move other media source without creating a new MediaSource object.

Issue:#1706

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161402022
2017-07-12 18:09:08 +01:00
olly
06b3b3ca8d Migrate HLS over to new SampleQueue methods
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161391296
2017-07-10 16:17:09 +01:00
Oliver Woodman
b333169ada Merge branch 'dev-v2' of git://github.com/jcable/ExoPlayer into jcable-dev-v2 2017-07-10 12:29:06 +01:00
andrewlewis
4180b9656d Show played ad groups
By default played ad groups are shown faded out. This helps the user know
whether they will see an ad when they seek to a given position.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161098491
2017-07-10 12:07:35 +01:00
Oliver Woodman
7524228160 Clean up rtmp extension 2017-07-05 15:08:00 +01:00
aquilescanta
a04663372f Detect playlist stuck and playlist reset conditions in HLS
This CL aims that the player fails upon:

- Playlist that don't change in a suspiciously long time,
  which might mean there are server side issues.
- Playlist with a media sequence lower that its last snapshot
  and no overlapping segments.

This two error conditions are propagated through the renderer,
but not through MediaSource#maybeThrowSourceInfoRefreshError.

Issue:#2872

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160899995
2017-07-05 15:02:39 +01:00
olly
dda3616f5a Fix reporting of width/height
1. maybeRenotifyVideoSizeChanged should report reported* variables
2. Add check into maybeNotifyVideoSizeChanged to suppress reporting
   in the case that the width and height are still unknown.

Issue: #3007

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160879625
2017-07-05 15:02:39 +01:00
tonihei
05a77eef5d Move Extractor test assertion methods to ExtractorAsserts class.
This cleans up test the TestUtil class that in large parts consisted of
assertions for Extractor tests.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160829066
2017-07-05 15:02:39 +01:00
olly
ad3d1e0cf2 Add reset() to SampleQueue. Deprecate reset(boolean) and disable()
The deprecated methods will be removed as soon as HLS is migrated
to use the new ones.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160827936
2017-07-05 15:02:39 +01:00
andrewlewis
d733bb4101 Fix video tunneling state transition to ready
Issue: #2985

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160827532
2017-07-05 15:02:39 +01:00
tonihei
960315c4d5 Move extractTimelineFromMediaSource to test util class.
This also ensures that TimelineAsserts only contains assert methods.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160827271
2017-07-05 15:02:39 +01:00
tonihei
a9efb4553d Merge TimelineAsserts.FakeTimeline into FakeTimeline.
They serve the same purpose. One was defined as single window, multi-period
timeline, while the other was a multi-window, single-period-each timeline.

The combined FakeTimeline uses TimelineWindowDefinitions which allow multi-
window, multi-period fake timelines.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160808844
2017-07-05 15:02:39 +01:00
Oliver Woodman
19a3d94022 Remove offline classes for now (not ready yet) 2017-06-30 22:24:40 +01:00
olly
4ee0b2e1c8 Update release notes + bump version number
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160663100
2017-06-30 18:54:35 +01:00
olly
c7924bfe22 Clean up parseSampleEntryEncryptionData
It was a bit strange how it returned something via the return
value and something else via the "out" variable, and doing it
this way wasn't even saving any allocations.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160645640
2017-06-30 16:54:31 +01:00
olly
51b98e817c Make Android Studio happy (make State public)
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160638478
2017-06-30 16:53:20 +01:00
tonihei
177a33bbee Merge TimelineAsserts.StubMediaSource into FakeMediaSource.
The StubMediaSource was a subset of the FakeMediaSource.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160638245
2017-06-30 16:52:12 +01:00
tonihei
9db0b8cce0 Move fake ExoPlayer component test classes to testutils.
Fake ExoPlayer componenets used within ExoPlayerTest.java can be useful for
other test classes and are therefore made available in testutils.
They can also be merged with other existing fake components.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160632908
2017-06-30 16:49:59 +01:00
tonihei
3b2cfa148c Move Timeline assertions to testutils.
Some parts of TimelineTest provided common assertions and helper classes for
other tests. As such, they better fit into testutils. In line with other
assertion methods, the TimelineVerifier class has been converted to a set of
static assertion methods.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160629797
2017-06-30 16:47:41 +01:00
olly
04b57f9c8e Fix DvbParser bug
Issue: #2957

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160628086
2017-06-30 16:46:31 +01:00
hoangtc
28030b6c7e Temp workaround for [Internal: b/63092960]
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160543009
2017-06-30 16:45:21 +01:00
tonihei
84f4fe5cf9 Recover from empty timelines.
(Related to GitHub #1706)

When the timeline becomes empty, the playback state transitions to "ended".
When the timeline becomes non-empty again, exceptions are thrown because MSG_DO_SOME_WORK is still regularly sent and media periods are getting prepared.

This change ensures that no MSG_DO_SOME_WORK messages are sent in "ended" state.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160537147
2017-06-30 16:44:14 +01:00
olly
db177db6d9 DrmSession cleanup
These changes are in part related to handling playback of mixed clear
and encrypted content, where we might want to use a secure decoder
throughout, but only have drm init data and only care about the state
of the DrmSession during playback of encrypted parts.

- requiresSecureDecoderComponent became unnecessary when we added
  ExoMediaCrypto, which provides a layer in which requiresSecureDecoderComponent
  can be overridden.
- Relaxed requirements for obtaining the MediaCrypto. It's helpful
  to allow retrieval in the error state, since it can be used to
  instantiate a decoder and play clear samples.
- Deferred throwing of errors in renderer implementations. As long as
  we can get a MediaCrypto, we should init the codec. We can also
  play clear samples without failing if playClearSamplesWithoutKeys is
  true, regardless of the errors state.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160536365
2017-06-30 16:42:01 +01:00
eguven
beb0734107 Extract base class from DashDownloaderFactory
This base class will be used to extend HlsDownloaderFactory from.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160523335
2017-06-30 16:40:53 +01:00
aquilescanta
e344e9cbb7 Add SinglePeriodTimeline constructor to fill missing window information
Issue:#2930

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160520480
2017-06-30 16:39:41 +01:00
olly
51af85f263 Prefer Google over MediaTek for PCM decoding pre-O.
Issue: #2873

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160520136
2017-06-30 16:38:37 +01:00
tonihei
69db6cb60b Add dynamic concatenating media source.
(GitHub issue #1706)

The media source allows adding or removing child sources before and after prepare() was called.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160516636
2017-06-30 16:37:31 +01:00
tonihei
a98d5bbd0a Do not start rebuffering after playback ended.
This is currently happening after toggling the repeat mode. This is line with
the rest of the implementation which requires a seek operation to resume
playback.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160516449
2017-06-30 16:36:19 +01:00
andrewlewis
1f815db367 Switch the IMA extension to use in-period ads
This also adds support for seeking in periods with midroll ads.

Remove Timeline.Period.isAd.

Issue: #2617

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160510702
2017-06-30 16:35:14 +01:00
tonihei
6509dce6b7 Clarify JavaDoc of MediaPeriod.
Two of MediaPeriod's methods are only called after the media period has been
prepared. Added this to JavaDoc of these method to simplify implementations.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160510373
2017-06-30 16:34:08 +01:00
eguven
81d077c037 Extract base class from DashDownloader
This base class will be used to extend HlsDownloader from.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160505710
2017-06-30 16:31:58 +01:00
andrewlewis
db11e3ddb6 Show larger scrubber handle when focused
Also remove updateScrubberState as it doesn't do anything useful.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160496133
2017-06-30 16:30:52 +01:00
olly
a543436b96 SimpleExoPlayerView/DefaultTimebar fixes
- Restore making the playback controls visible on any key press.
- Turn anti-aliasing on for drawing the scrubber circle. It looks
  really ugly on some devices if you don't do this.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160413777
2017-06-28 22:26:05 +01:00
andrewlewis
c6e5b67626 Move InlinedApi warning suppression to class level for C
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160412354
2017-06-28 22:26:05 +01:00
andrewlewis
71ffc7668c Support specifying AudioAttributes for AudioTrack
Add a compatibility AudioAttributes class so that the app can specify
audio attributes in the same way before and after API 21.

Deprecate SimpleExoPlayer.setStreamType. Add
SimpleExoPlayer.setAudioAttributes and MSG_SET_AUDIO_ATTRIBUTES.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160408574
2017-06-28 22:26:05 +01:00
tonihei
c385ece69d Move methods into MediaPeriodHolder.
Both methods make extensive use of MediaPeriodHolder internals.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160386401
2017-06-28 22:26:05 +01:00
andrewlewis
96fa660284 Expose ad playback information on ExoPlayer
Also update the time bar to show ad markers using in-period ads and
remove support for periods being marked as ads.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160382805
2017-06-28 22:26:05 +01:00
andrewlewis
66d122710e Add support for in-period ads
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160294524
2017-06-28 22:26:05 +01:00
aquilescanta
efb367b417 Add URLs EXT-X-STREAM-INF uris only once
This prevents ExoPlayer from thinking there are many more video tracks
than there actually are. And will prevent downloading multiple times
the same rendition once offline support for HLS is added.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160285777
2017-06-28 22:26:05 +01:00
olly
4a59c7cf40 Make it easier to use ExoPlayer modules in other projects II
With this change, it becomes possible to depend on ExoPlayer
locally in settings.gradle by doing:

gradle.ext.exoplayerRoot = 'path/to/exoplayer/root'
apply from: new File(gradle.ext.exoplayerRoot, 'core_settings.gradle')

You can optionally add a prefix onto ExoPlayer's module names
by adding:

gradle.ext.exoplayerModulePrefix = 'prefix'

Issue: #2851
Issue: #2974

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160277967
2017-06-28 22:26:05 +01:00
andrewlewis
26b32f6078 Move getPeriodPosition methods to Timeline
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160273929
2017-06-28 22:26:05 +01:00
olly
2a8eb5a2a1 Make it easier to use ExoPlayer modules in other projects
It's currently difficult to use ExoPlayer modules in other gradle
projects because they rely on constants and dependencies defined
in our own top level gradle file. This change moves the constants
into a separate file referenced directly from each module. It also
removes the need for the top level gradle file to declare a
dependency on com.novoda:bintray-release. This is now only needed
if "exoplayerPublishEnabled = true" is specified.

Issue: #2851
Issue: #2974

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160272072
2017-06-28 22:26:05 +01:00
andrewlewis
1dcad4d173 Store a MediaPeriodId in PlaybackInfo
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160271631
2017-06-28 22:26:05 +01:00
andrewlewis
675756d32d Create MediaPeriods based on an identifier not an index
This will allow MediaSources to provide MediaPeriods that correspond to ad
breaks in a timeline period rather than content for a timeline period, in a
future change.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160267841
2017-06-28 22:26:05 +01:00
andrewlewis
d4059ecc65 Use period holder indices to determine if a period was seen
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160257503
2017-06-28 22:26:05 +01:00
tonihei
410228acb8 Rename isLast to isFinal in MediaPeriodHolder.
This better reflects the purpose of this flag and makes code more readable.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160246573
2017-06-28 22:26:05 +01:00
Oliver Woodman
076a77e598 Fix indexing error 2017-06-26 23:41:00 +01:00
eguven
3fbfe29d27 Modify CacheUtil.cache() for polling counters
Getting active status of caching is needed to display on UI. Instead of a listener interface polling was chosen because of simplicity and better suits to UI refreshing.

CachingCounters.downloadedBytes was updated after whole data is downloaded. Now it's updated for each read into buffer. Buffer length defines how finer these updates are.

CachingCounters.totalBytes is added so UI can display a progress bar.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160142048
2017-06-26 17:07:56 +01:00
olly
acbddbc0a5 Use regular array for SampleQueues in ExtractorMediaPeriod
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160138881
2017-06-26 17:07:56 +01:00
olly
c448463a05 Move DashMediaSource and SsMediaSource to new SampleQueue methods
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160130540
2017-06-26 17:07:56 +01:00
olly
1b71e3b40d Move ExtractorMediaPeriod to new SampleQueue methods
This change allows you to enable/disable tracks within which
all samples are key-frames without any re-buffering (e.g. audio,
text and metadata). This effectively reverts V2 back to the
behavior in V1, only this time we're doing it properly. []ly
disabling/enabling, or disabling/enabling whilst paused, no longer
cause samples to get "lost" between the source and renderers.

Note it also becomes really easy to support a few other things,
although support is not exposed in this change:

- Enable/disable video tracks without any re-buffering, by
  changing the toKeyframe argument passed to discardTo to true.
- Retain media in the buffer for some time after it's been played
  (e.g. to support a single back-5s-seek efficiently), by
  subtracting the desired back-buffer time from the value that's
  passed to discardTo.

Issue: #2956
Issue: #2926

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160128586
2017-06-26 17:07:56 +01:00
olly
b3c6f6fb31 Merge ContentDataSource fixes + tests from GitHub
https://github.com/google/ExoPlayer/pull/2963/files
8bb643976f

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160128047
2017-06-26 17:07:56 +01:00
hoangtc
70e6dd5930 Update DrmSessionException.
Make DrmSessionException takes in Throwable cause instead of Exception cause, which is more limiting and doesn't add any benefit.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160121486
2017-06-26 17:05:21 +01:00
olly
c007e93ab0 Fix setSelectionOverride(index, tracks, null)
Issue: #2988

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159958591
2017-06-24 14:42:15 +01:00
tonihei
363f2414d1 Fix check for last period index in ExoPlayerImplInternal
The if clause was never executed because nextLoadingPeriodIndex is set
to C.INDEX_UNSET instead of loadingPeriodIndex + 1.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159948661
2017-06-24 14:42:15 +01:00
Oliver Woodman
555eb9d423 Mini cleanup 2017-06-23 17:37:28 +01:00
Oliver Woodman
8bb643976f Fix ContentDataSource and enhance tests to validate read data 2017-06-23 17:20:51 +01:00
ojw28
2da22e9e0f Merge pull request #2963 from DroidsOnRoids/dev-v2
Source length calculation in ContentDataSource changed
2017-06-23 15:45:21 +01:00
tonihei
6cde8335ff Add setter method to child data holder of abstract concatenated timeline.
Prevents that we forget to set variables.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159939180
2017-06-23 15:43:58 +01:00
olly
499f9370a2 Remove use of mod operator from SampleMetadataQueue
It's no more complicated to avoid it, and according to the
Art team it should be faster without.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159816746
2017-06-22 20:26:03 +01:00
olly
950c2159b0 Discard upstream allocations more aggressively + doc cleanup
- If we have <s1>garbage<s2> and discard <s2>, throw away
  the garbage too.
- Cleanup some documentation to consistently refer to the
  queue as "queue" rather than "buffer".

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159816309
2017-06-22 20:24:53 +01:00
aquilescanta
aca80b8347 Add support for pattern encryption and default initialization vectors
This will extend our CENC modes support to cbcs and cens. The change was
not split into two different CLs due to lack of test content for
default initialization vectors, aside from AES-CBCS encrypted ones.

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

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159810371
2017-06-22 20:23:42 +01:00
olly
9bad78dce6 Fix SampleMetadataQueue.getLargestQueuedTimestampUs
This was broken prior to my recent changes, since
largestDequeuedTimestampUs was only being updated in readData.
It should have been updated in the skip methods. as well.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159704945
2017-06-22 20:21:14 +01:00
eguven
531eb15ff4 Move DashDownloadTestBase assert methods to CacheAsserts
CacheAsserts contains cache assertion methods for testing. It's easier to use in tests than DashDownloadTestBase which requires to be extended.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159688808
2017-06-22 20:20:05 +01:00
olly
8e49cab865 Start finalizing SampleQueue methods
It's a bit messy at the moment with the deprecated methods
in there, but on the read side the new set of methods is as
follows:

Modifies the start of buffer:
- discardTo(time, keyframe, ...) [this is new]
- discardToRead()
- discardToEnd()

Modifies the read position:
- rewind()
- advanceTo(time, keyframe, ...) [this is a generalization of skipToKeyframeBefore]
- advanceToEnd() [previously called skipAll]
- read(...)

Which seems quite nice and self-consistent, and is powerful
enough for everything that we need to do as we move MediaSource
implementations over to the new methods.

TODOs for subsequent changes:
- Re-order methods in the two classes so that they're actually in
  the same order, and move the deprecated ones out of the way
- Enhance SampleQueueTest to also cover new functionality, as we
  start transitioning MediaSource implementations over to use it.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159688660
2017-06-22 20:18:50 +01:00
olly
59ccd63544 Remove weird nextOffset state from SampleMetadataQueue
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159681714
2017-06-22 20:17:30 +01:00
tonihei
9154d54df9 Fix resolveSubsequentPeriod in EPII.
getNextPeriod might return C.INDEX_UNSET.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159676949
2017-06-22 20:16:05 +01:00
eguven
40039ed0a1 Fix and move Util.getRemainderDataSpec() to DataSpec.subrange()
Made the method copy all of the fields of DataSpec in to the new instance. Also converted
it to an instance method of DataSpec for ease of usage, discovery and maintenance.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159670314
2017-06-22 20:13:43 +01:00
eguven
44f6dbb0cc Work around the error prone warning
Error prone check doesn't like we pass a variable named 'end' as start parameter and 'start' as end.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159567308
2017-06-22 20:12:24 +01:00
olly
467fd2535c Expose new non-discarding SampleQueue read/skip methods
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159555748
2017-06-22 20:11:09 +01:00
aquilescanta
0ffc3ffd29 Fix DrmInitDataTest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159554717
2017-06-22 20:09:57 +01:00
aquilescanta
8d74ba4850 Add support for cbc1 encryption scheme
Issue:#1661
Issue:#1989
Issue:#2089

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159553419
2017-06-22 20:08:42 +01:00
olly
ce8634507d Add a read reference into our linked list of Allocations
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159538997
2017-06-22 20:05:59 +01:00
aquilescanta
317a994499 Add type to DrmInitData.SchemeData
At the moment, only CENC-defined scheme types are known values.
This will allow having more information about the encryption
scheme through the format, which in turn will allow more informed
decisions on format support.

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

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159538907
2017-06-22 20:04:26 +01:00
olly
2c09f8e0e3 Decouple start and read indices in SampleMetadataQueue
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159426366
2017-06-22 20:03:03 +01:00
olly
86f06faa8d Move clearing of joining deadline back to onStopped
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159421000
2017-06-22 20:01:03 +01:00
hoangtc
56ff2ef598 Add getPlaybackLooper() to ExoPlayer v2.
A few components in ExoPlayer requires playback looper to operate (such as:
DrmSessionManager#acquireSession), so this CL add back getPlaybackLooper()
to facilitate such cases.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159416012
2017-06-22 19:58:34 +01:00
andrewlewis
d9ea8f7143 Allow disabling the initial discontinuity on ClippingMediaSource
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159227077
2017-06-22 19:57:23 +01:00
tonihei
56205893e5 Remove initial discontinuity from ClippingMediaSource
(Fixing GitHub issue #2923)

Cuurently, ClippingMediaSource issues an initial discontinuity. This causes the
renderers to be disabled and re-enabled when this media source is used in a sequence
with other sources (or in a loop).

This change disables the use of an initial discontinuity for audio-only media under
the assumption that audio streams have random access capabilities.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159221963
2017-06-22 19:56:10 +01:00
olly
c7948f2f7a TTML: Ignore regions that don't declare origin and extent
Issue: #2953

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159218386
2017-06-22 19:54:52 +01:00
tonihei
023c9d56a9 Simplify timeline test stub class.
Use an actual class for the stub media source instead of an anomymous class.
Allows to call assertReleased() on that class.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159109143
2017-06-22 19:53:36 +01:00
andrewlewis
ed27017b0c Update MIME type in FLAC test data
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159104188
2017-06-22 19:52:08 +01:00
Karol Wrótniak
86ff19b55b
null AssetFileDescriptors support added in ContentDataSource 2017-06-19 16:09:54 +02:00
Karol Wrótniak
50da6d870c
Comments from https://github.com/google/ExoPlayer/pull/2963#discussion_r122669328 applied 2017-06-19 12:46:09 +02:00
Karol Wrótniak
8caad492d4
InputStream creation for ContentDataSource changed 2017-06-17 16:26:29 +02:00
Karol Wrótniak
b77cc7c621
Introduced failing unit test for ContentDataSource 2017-06-17 16:18:43 +02:00
olly
8af77acb01 Adjust incorrect looking max-channel counts
Issue: #2940

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159099602
2017-06-15 15:18:04 +01:00
olly
2a353a834d Advance SampleQueue writeAllocationNode earlier
Previously, writeAllocationNode was not advanced to the
terminating node when finishing writing sample data that
fills exactly up to the end of the current write node.
This wasn't actually broken, but is confusing because it
causes edge cases where the start/read references could
temporarily refer the node after the current write node.
This change advances the write reference in this case,
removing this confusion and bringing the implementation
in line with what the design doc says happens.

Also making some simplification and consistency changes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159099522
2017-06-15 15:17:03 +01:00
olly
cdcdf1d37c Log frame counts when we see a spurious audio timestamp
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158977741
2017-06-14 19:35:38 +01:00
andrewlewis
810c120abc Increase MP3 sniffing distance
Issue: #2951

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158960483
2017-06-14 19:34:21 +01:00
olly
e4617567a3 Rename DefaultTrackOutput to SampleQueue
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158842843
2017-06-14 19:31:47 +01:00
olly
6362dfeb98 Replace LinkedBlockingDeque with our own linked list
This will allow us to maintain a reference to the middle
of the queue, which is necessary to efficiently support
decoupling the read position from the start of the buffer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158839336
2017-06-14 19:30:21 +01:00
olly
f3e9166a4e Use DummySurface on S8 where possible
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158838707
2017-06-14 19:29:10 +01:00
olly
fb12a659a2 Fix discarding upstream from DefaultTrackOutput
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158837777
2017-06-14 19:28:01 +01:00
Oliver Woodman
0c1212b309 Fix typo 2017-06-13 14:10:31 +01:00
Oliver Woodman
0f5c30d345 Misc cleanup 2017-06-13 13:35:10 +01:00
ojw28
c6dfccf393 Merge pull request #2756 from kiall/par-debugview
Include Pixel Aspect Ratio in DebugTextViewHelper
2017-06-13 13:21:01 +01:00
ojw28
b95417e783 Merge pull request #2943 from michalliu/dev-v2-fix
check if defaultRefreshRate is reasonable
2017-06-13 13:20:50 +01:00
olly
350998219a Add test for DefaultTrackOutput
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158745843
2017-06-13 13:17:27 +01:00
tonihei
fa4f876668 UI parameter to disable automatically showing playback controls.
(Fixing GitHub issue #2699)

Added controllerAutoShow parameter to decide whether playback controls are
shown automatically. Default is true. Can be overwritten in the XML with
auto_show=false or via SimpleExoPlayerView.setControllerAutoShow(false).

Also inverted the logic of maybeShowControllers and showController.
SimpleExoPlayerView.(show/hide)Controller and PlaybackControlView.(show/hide)
now unconditionally do what they say to allow manual operation.
SimpleExoPlayerView.maybeShowController is used internally to automatically
show playback controls.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158712277
2017-06-13 13:15:13 +01:00
tonihei
dcc2f9bd67 Add meta data class for AbstractConcatenatedTimeline.
(Preparation for GitHub issue #1706)

AbstractConcatenatedTimeline repeatly calls methods of its implementation to
query a specific child timeline. This may be inefficient if the implementation
repeatly executes the same code to find the timeline.

Changed the class such that it now queries all information at once using a meta
data class. As all methods need at least two of four variables anyway, this
doesn't generate unnecessary overhead.

Also generified the UID for the child indices to allow new implementations to
use some other UID besides the index.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158711979
2017-06-13 13:14:01 +01:00
tonihei
629edc2b95 Remove needsContinueLoading from ExoPlayerImplInternal
The same effect can be achieved by checking the isLoading variable of ExoPlayerImplInternal
because this variable is in almost all cases set simultaneously with loadingMediaPeriodHolder.needsContinueLoading.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158697948
2017-06-13 13:11:38 +01:00
michalliu
dbfbcd6312 check if defaultRefreshRate is reasonable
We found getDefaultDisplay has a very small chance returns null
2017-06-13 15:23:34 +08:00
olly
c980eae9c4 Allow overriding of getCodecMaxValues
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158686545
2017-06-12 10:32:56 +01:00
olly
5cd3a9baa0 Fix passing of invalid surface to video renderers
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158684924
2017-06-12 10:31:53 +01:00
andrewlewis
cb5b6fba01 Allow customization of ExtractorMediaSource's check interval
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158683582
2017-06-12 10:30:33 +01:00
aquilescanta
646047f088 Add nullable annotation to onSourceInfoRefreshed's manifest argument
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158522507
2017-06-12 10:29:17 +01:00
andrewlewis
59315cf923 Fix maximum read ahead logic for repeat mode
Separate MediaPeriodHolder.index and MediaPeriodHolder.periodIndex, so that the
latter is always a period index (which may repeat or jump) whereas the holder
index increases by one each time an item is added to the period holder queue.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158497639
2017-06-12 10:27:00 +01:00
andrewlewis
4e006a9616 Move positionUs parameter from createPeriod to prepare
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158494794
2017-06-12 10:25:49 +01:00
olly
047e0eb645 Renames to prepare for upcoming media buffer changes
Currently, media is discarded from DefaultTrackOutput
and SampleMetadataQueue as soon as it's been read. In
upcoming changes we'll decouple discard and read. This
will make it possible to retain already-read media in
these buffer classes, and allow the read position to
be moved backward as far as media is retained. This is
important for fixing an edge case around 608/EMSG
tracks, and could also underpin future features like
allowing retaining of X-seconds past media in the
buffer.

This change renames some variables and methods to
prepare for the upcoming changes. read/write indices
are renamed to start/end. The upcoming changes will
add a read index that's between the two. isEmpty is
inverted and renamed to hasNextSample, since it will
be possible to not have a next sample (because the
read index == end index) but for the buffer to not
be empty (because start index < read index).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158409630
2017-06-12 10:24:42 +01:00
olly
b7b0fef694 Split InfoQueue into its own class
It's pretty big as an inner class, and is going to get a
little more complicated. I think it makes sense to be
able to consider it in isolation.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158393754
2017-06-12 10:22:21 +01:00
olly
1b06ce7407 Fix ArrayIndexOutOfBoundsException in DashMediaPeriod
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158269662
2017-06-12 10:21:09 +01:00
olly
5908d2d7e2 Update handled schemes for timing element resolution.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158269487
2017-06-12 10:19:59 +01:00
tonihei
cdad6a4ef1 Move playback test utils to testutils.
This allows other tests to reuse the util classes without having to link to playbacktests.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158214560
2017-06-12 10:18:50 +01:00
Kiall Mac Innes
c24ef592e7 Include Pixel Aspect Ratio in DebugTextViewHelper
Add the video Pixel Aspect Ratio to the DebugTextViewHelper in order
to help debug issues related to PAR changes etc
2017-06-11 16:30:13 +01:00
olly
2439c582d4 Bump version + update release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158153988
2017-06-06 18:13:02 +01:00
olly
39b1c85c27 Expose current scrubber position through onScrubStart
Issue: #2910

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158149904
2017-06-06 18:11:58 +01:00
olly
1316445c00 Constraint buffered percentage to [0,100]
Issue: #2902

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158142754
2017-06-06 16:46:47 +01:00
aquilescanta
1637575d4b For HLS mode, pick the lowest PID track for each track type
This prevents strange behaviors for streams that changes the track declaration
order in the PMT.

NOTE: This should not change ANY behavior other than the one described above.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158140890
2017-06-06 16:44:30 +01:00
olly
a3ee684e27 Further cleanup of updateSelectedTrack
- Return early if the selection is unchanged.
- Remove unnecessary variables.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158138187
2017-06-06 16:43:20 +01:00
hoangtc
c1bfab3c23 Fix a minor bug with AdaptiveTrackSelection.
When updating track selection, we should only revert back from ideal
track selection to current track selection if the currently selected
track is not black-listed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158135644
2017-06-06 16:42:14 +01:00
eguven
5c2c3c5c63 Create a base class for DASH downloading related tests
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158129802
2017-06-06 16:41:09 +01:00
tonihei
edbc2046e2 Clean-up manifest merge attributes.
1. Remove tools:replace in manifest files. This attribute is only needed to establish priority when two manifests are merged and have the same attribute with different values.
As this is not happening here, the attributes can be removed.

2. Some BUILD files also define a deprecated manifest merge strategy different from the android default merge strategy. For consistency these are set to "android'.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158075128
2017-06-06 16:38:45 +01:00
aquilescanta
10c2d3156b Pick the lowest quality video when capabilities are exceeded
Issue:#2901

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158006727
2017-06-06 16:35:49 +01:00
andrewlewis
8dca0b9418 Add a null check in DummySurface static initializer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157958694
2017-06-06 16:34:41 +01:00
olly
35cc0d65cd Only update codecInfo when needed
This avoids calling getDecoderInfo repeatedly in the case
where shouldInitCodec return false (e.g. because we don't
have a surface and cannot instantiate a dummy surface).

Issue: #677

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157847702
2017-06-06 16:33:31 +01:00
andrewlewis
c5cf9090fc Assume CBR for MP3s with Info headers
Issue: #2895

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157841519
2017-06-06 16:32:16 +01:00
olly
e98bee6163 Add surface attach/detach to *WithRendererDisabling tests
This will cause the test to exercise the code path of
instantiating a DummySurface, rendering to it for 10
seconds, then re-targeting the real surface again. For
secure content tests the code path is only exercised if
DummySurface.SECURE_SUPPORTED is true. The logic for
checking this is within MediaCodecVideoRenderer itself,
rather than being part of the test.

Issue: #677

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157833026
2017-06-06 16:30:41 +01:00
olly
ba9114c9c7 Automatically use DummySurface when possible
Issue: #677

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157831796
2017-06-06 16:29:33 +01:00
olly
32b5a80291 Deprecate LoopingMediaSource for indefinite looping
ExoPlayer.setRepeatMode should be preferred. Deprecate
the constructor and update the relevant documentation.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157829207
2017-06-06 16:28:22 +01:00
olly
ea21af2ce9 Move adaptation disabling workaround into MediaCodecUtil
This is necessary to make sure that the correct thing happens
where MediaCodecInfo.adaptive is queried directly (for example,
MediaCodecVideoRenderer uses the field to determine how to size
input buffers). Also disable adaptive on Nexus 10.

Issue: #2806

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157583473
2017-05-31 15:57:15 +01:00
aquilescanta
0f27efae44 Ignore invalid EXT-X-PLAYLIST-TYPE values
Issue:#2889

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157571216
2017-05-31 12:09:32 +01:00
olly
b1fd99baab Constraint seeks within bounds for ConstantBitrateSeeker
We do this everywhere for index based seeking already.

Issue: #2876

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157568788
2017-05-31 11:43:30 +01:00
andrewlewis
bcd4bf0fd5 Fix DefaultTimeBar invalidation
Issue: #2871

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157562792
2017-05-31 11:42:24 +01:00
aquilescanta
12ef97fc34 Fix and complete MediaPlaylist javadocs
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157243533
2017-05-31 11:39:52 +01:00
olly
122b2a1a31 Use single TrackGroup for switchable adaptation sets
Issue: #2431

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157236031
2017-05-31 11:38:45 +01:00
andrewlewis
27fc82f0ad Make repeatMode private
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157226768
2017-05-31 11:37:35 +01:00
aquilescanta
cf6f1d7bf2 Move Period and Window to the top of timeline to match Exoplayer style
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157223090
2017-05-31 11:36:23 +01:00
aquilescanta
53b52e784c Use AVERAGE-BANDWIDTH instead of BANDWIDTH when available
Also prevent BANDWIDTH's regex from matching the AVERAGE-BANDWIDTH attribute.

Issue:#2863

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157219453
2017-05-31 11:35:12 +01:00
aquilescanta
26728142ee Expose all "other" tags that start with #EXT through the playlist
"other" includes tags for which there is no existing behavior defined.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157217270
2017-05-31 11:34:04 +01:00
aquilescanta
3108b07c90 Minimize overlapping chunks if #EXT-X-INDEPENDENT-SEGMENTS is present
It is worth mentioning that the tag can be in the master playlist as well, which
means that it applies to all media playlists. There are a few tags with this
characteristic. This will be addressed in a later CL.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157210505
2017-05-31 11:32:52 +01:00
olly
2c20689237 Don't fail if we find a track is unsupported
Use AUDIO_UNKNOWN instead. This is in line with our handling
of video tracks with VIDEO_UNKNOWN.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157209428
2017-05-31 11:31:44 +01:00
olly
9737046e53 Parse SupplementalProperty elements in DASH adaptation sets
This will be used to merge adaptation sets that are marked for
seamless switching into single TrackGroups in DashMediaSource.

Issue: #2431

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157209358
2017-05-31 11:30:30 +01:00
eguven
5092efe301 Add a comment to record the reason for restoring licenses before releasing
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157204373
2017-05-31 11:28:07 +01:00
olly
f8cbe53f20 Fix SmoothStreaming Timeline
There were a few things wrong. Specifically the case in
the ref'd issue. Also, the timeline was being marked as
non-dynamic in the empty-but-live case (it should be
marked dynamic as segments may be added later).

Issue: #2760

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157103727
2017-05-25 15:05:25 +01:00
olly
c4f7a2d62d Correctly transition to ended state
This fixes transitioning into the ended state if we see
endOfStream from the chunk source whilst in the pending
reset state. Prior to this fix we'd still be pending a
reset, and so readData would never allow EOS to be read
by the consuming renderer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157101755
2017-05-25 15:04:24 +01:00
andrewlewis
eb3a31c881 Fix default position masking period index calculation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=157095116
2017-05-25 15:03:14 +01:00
aquilescanta
f16967cdfe Flexibilize Util.parseXsDateTime to allow single digit hour
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156999955
2017-05-25 15:00:51 +01:00
olly
695347c26b Don't select more than one audio/video/text track by default
Issue: #2618

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156986606
2017-05-24 15:49:41 +01:00
olly
3a448f3a0e Bump version and update release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156872383
2017-05-23 17:50:46 +01:00
ojw28
dbc0cf8002 Merge pull request #2820 from sillywab8/support_avclevel52
Add support for AVC Level 5.2
2017-05-23 15:21:04 +01:00
eguven
72dcfd19c8 Automated g4 rollback of changelist 156712385.
*** Reason for rollback ***

This change may silently introduce bugs where both parameters are acceptable in both places. It's decided that the gain isn't worth the risk.

*** Original change description ***

Make the error messages the first parameter in Assertions methods to match JUnit methods

Reverse parameter order creates a slight confusion.

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156844728
2017-05-23 15:19:55 +01:00
andrewlewis
88fddb42ec Provide video frame timestamps to subclasses
Expose the stream offset to BaseRenderer subclasses.

Issue: #2267

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156837514
2017-05-23 15:19:55 +01:00
olly
e892e3a5c7 Fix TTML positioning
Issue: #2824

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156781252
2017-05-23 15:19:55 +01:00
andrewrice
78c4cb74ea Fixes incorrectly-ordered arguments to calls to assertEquals
([]
This change has been automatically generated by an Error Prone check that
detects incorrect argument ordering on calls to assertEquals-style methods. See
[]

Cleanup change automatically generated by javacflume/refactory
Refactoring: third_party/java_src/error_prone/project/core/src/main/java/com/google/errorprone/bugpatterns/argumentselectiondefects:AssertEqualsArgumentOrderChecker_refactoring

Tested:
    TAP --sample for global presubmit queue
    []

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156739144
2017-05-23 15:19:55 +01:00
eguven
1687f1653e Make the error messages the first parameter in Assertions methods to match JUnit methods
Reverse parameter order creates a slight confusion.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156712385
2017-05-23 15:19:55 +01:00
tonihei
1594e71917 Test for changing repeat mode during playback
(Related to GitHub Issue #2577)

Added test to ExoPlayerTest which changes the repeat mode during playback.
Test verifies that ExoPlayer shows the periods in the intended order.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156168166
2017-05-17 16:48:07 +01:00
olly
8e0bf6cd2f Clear the correct buffer in MediaCodecRenderer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156131086
2017-05-17 16:48:07 +01:00
olly
72ba736a7f Clear up BaseRenderer.disable
- Call onDisabled last. onDisabled really shouldn't be doing
  anything with the stream, so pretty sure this is fine (and
  guarantees the stream is cleared properly even if onDisabled
  throws a RTE).
- Remove super.onDisabled calls from Text/Metadata renderers.
  This is just for consistency; we don't make such calls in
  other direct descendants of BaseRenderer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156130640
2017-05-17 16:48:07 +01:00
andrewlewis
84875bbe7b Constrain DefaultTimeBar maximum positions
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156113616
2017-05-17 16:48:07 +01:00
andrewlewis
9a7306a4cc Remove unnecessary throws clause
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156061458
2017-05-17 16:48:07 +01:00
andrewlewis
929ef172a0 Fix handling of removed periods
If a timeline update removed periods at the end of the timeline which
had been buffered, handleSourceInfoRefreshed would call
getNextPeriodIndex and get back -1 for the last period holder in the
new timeline. Then isLastPeriod(-1) could throw.

Fix this behavior so that the remainder of the timeline is discarded.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156061016
2017-05-17 16:48:07 +01:00
bachinger
f335fb936d Enlarge size of data array of parsable packetArray if ogg packet size exceeds
the current size.

https://github.com/google/ExoPlayer/issues/2782

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156018137
2017-05-17 16:48:07 +01:00
tonihei
3dd2f4af57 Tests for timeline repeat mode support.
Checking the expected next/previous window indices and if the correct window
or period gets returned.

TimelineTest defines mock classes and verification methods used by the specific
implementation tests.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155727385
2017-05-17 16:48:07 +01:00
sillywab8
ed65958e5d Add support for AVC Level 5.2 2017-05-12 08:24:40 -05: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
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
6d2fa12e16 Add getNextWindowIndex to Timeline
(Preparation for Repeat Toggle Function - GitHub Issue #2577)

In addition, Timeline now also got a getPreviousWindowIndex and a
getNextPeriodIndex method with default implementations.

Changed ExoPlayerImplInternal and PlaybackControlView to use these
methods at all occurances of period and window index operations.

Note: Does not include repeat mode yet and no timelines are actually
using it so far. Please wait for the next CLs for this.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154520664
2017-05-04 20:45:31 +01:00
aquilescanta
5c723f4d3d Prevent text tracks with no language being selected by default
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154421706
2017-05-04 20:44:17 +01:00
Andrew Orobator
c4fff54d2c Improved Documentation
Added missing coma and fixed typo for EventListener#onTimelineChanged
2017-05-03 10:49:36 -04:00
olly
1e12c07954 Move renderer building into a factory class.
To inject custom renderers into SimpleExoPlayer, developers
currently need to extend SimpleExoPlayer and override the
renderer building methods. This is in contrast to the rest
of the library, where we use proper injection. This change
restores consistency. I think it's fine to make
SimpleExoPlayer final again, but if we find people extending
it for non-renderer purposes, we can revert that part of the
change.

ExoPlayerFactory now has analogous methods for the simple
and non-simple cases, which is a nice outcome.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154295726
2017-04-26 15:49:35 +01:00
tonihei
0f9d9d56d6 Fix scrub seek position estimation for multi window time bar.
When using a multi window time bar, the onScrubStop method uses another
method to estimate the seek position than the updateProgress method for
rendering the time bar. If the time line contains windows starting with an
ad period followed by other content, they differ in their behaviour.
 - updateProgress checks all periods and leaves out all ad periods
 - onScrubStop only checks windows and leaves them out when the first
   period is an ad.

Changed onScrubStop to fit approach in updateProgess.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154271628
2017-04-26 15:18:36 +01:00
olly
9c2b0f6de2 Fix lint errors when building release
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154201059
2017-04-26 15:16:36 +01:00
olly
b88deaa1ca Bump version and update release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154198359
2017-04-26 15:15:32 +01:00
Oliver Woodman
c50cfd8345 Minor additional cleanup of multiple DVB subtitles per PID support 2017-04-25 16:41:04 +01:00
Oliver Woodman
f903098721 Merge branch 'dev-v2' of persistent-https://github.com/google/ExoPlayer into dev-v2 2017-04-25 16:38:06 +01:00
olly
fb88087ac4 Tweak video renderer surface swaps
Fixes the following issues:

1. When a surface is set, it's expected that the renderer will
notify video size + when a frame is rendered to it. This is true
even if the surface isn't changing. Right now this is achieved
by setting renderedFirstFrame to false, but this is problematic
in the case that the surface isn't changing because (a) it will
force rendering of a subsequent frame to the output even when
paused, which is incorrect, and (b) isReady will return false
until this occurs.

2. When the surface really is changing, isReady can return false
until the first frame has been rendered into the new surface, which
will break seamless surface switching. This change allows isReady
to return true up to allowedJoiningTimeMs for this case.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154171111
2017-04-25 16:35:40 +01:00
anjalibh
e07b8fe7d5 Parse ColorInfo from WebM Container and set it on MediaFormat.
* colorSpace, colorRange and colorTransfer are relevant to all videos.
* The rest of the fields are relevant only to HDR videos.
* Tested on a prototype device that decodes VP9 profile 2, 10 bit.
* The Webm spec spells color as 'colour' so the webm id reference use the same spelling.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154098189
2017-04-25 16:34:19 +01:00
aquilescanta
d3fe20cc64 Check the type of the (non-initial) loaded HLS playlist
This prevents illegal casts.

Issue:#2702

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154078240
2017-04-24 21:38:33 +01:00
olly
f0a72c4908 Fix playback of DASH/VP9/SegmentList DASH content
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154077149
2017-04-24 21:37:33 +01:00
olly
8e8a6a2994 Support efficient switching between SimpleExoPlayerView instances
Prior to this change, the only way to switch SimpleExoPlayerView
was to do:

oldView.setPlayer(null);
newView.setPlayer(player);

This would cause the video renderer to have to transition through
oldSurface->noSurface->newSurface, which is inefficient (noSurface
requires platform decoders to be fully released).

After this change we support:

newView.setPlayer(player);
oldView.setPlayer(null);

This results in direct oldSurface->newSurface transitions, which are
seamless on Android M and above. The change also adds some robustness
against developers ending up with strange behavior as a result of
clearing the player from a view in a different ordering than we expect
w.r.t. registering of other listeners.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154044976
2017-04-24 21:35:24 +01:00
olly
4c0b539054 Allow disabling hide on touch for SimpleExoPlayerView
Issue: #2501

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=154036726
2017-04-24 21:34:12 +01:00
Oliver Woodman
51de6e53eb Clean up multiple DVB subtitles per PID support 2017-04-24 16:58:01 +01:00
Oliver Woodman
aa43556b79 Merge branch 'dev-v2-dvbsubs-leftovers' of git://github.com/tresvecesseis/ExoPlayer into tresvecesseis-dev-v2-dvbsubs-leftovers 2017-04-24 15:31:19 +01:00
Oliver Woodman
860eb26301 Misc cleanup for merged pull requests 2017-04-21 18:09:01 +01:00
ojw28
5381b4ec56 Merge pull request #2683 from tylerjroach/dev-v2
Added mp3 support to FLV extractor
2017-04-21 17:57:18 +01:00
ojw28
4c096505d3 Merge pull request #2688 from tylerjroach/dev-v2-NALU-OOM-Fix
Fix potential OOM that can occur reading first NAL packet before seq header
2017-04-21 17:56:49 +01:00
olly
86ed73e744 Use method arguments instead of member variables
This is a no-op cleanup change.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=153830409
2017-04-21 17:48:28 +01:00
olly
1506b6d2b7 Pragmatic fix for Concat(source1, Looping(source2))
Issue: #2680

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=153827243
2017-04-21 17:48:28 +01:00
cblay
3280dc8777 Make SonicAudioProcessor public
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=153762476
2017-04-21 17:47:54 +01:00
Sergio Moreno Mozota
3b7f47551c Add support for multiple subtitle tracks per PID and subtitle type identification 2017-04-20 21:32:59 +02:00
olly
ecb62cccd5 Delete broken PriorityHandlerThread class
This class is unnecessary; you can simply pass a thread
priority to HandlerThread's own constructor. It's also
broken, since HandlerThread.run() immediately overrides
the priority being set!

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=153461225
2017-04-18 19:44:50 +01:00
olly
8be85d4d2f Consolidate version codes in root gradle file
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=153453768
2017-04-18 19:42:27 +01:00
eguven
42e4100c05 Add DashDownloaderService which downloads DASH streams at the background
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=153446615
2017-04-18 19:41:16 +01:00
andrewlewis
e87e2318d8 Fully reset AudioProcessors on releasing AudioTrack
Issue: #2675

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=153445372
2017-04-18 19:40:05 +01:00
andrewlewis
835839456f Apply playback parameters when uninitialized
If AudioTrack.setPlaybackParameters was called before initialization (for
example, when an audio renderer is enabled) the parameters would actually be
dropped, because configure calls reset, which didn't apply draining playback
parameters if the track was not initialized. It would then overwrite the
draining parameters with the current parameters.

Set the playback parameters directly (without draining) for uninitialized tracks
so that the call to setPlaybackParameters in configure is a no-op.

Also, reset the stored channel count and sample rate when the audio processor
is released so that configure returns true when it is next used, which makes
sure that it gets flushed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=153078759
2017-04-18 19:37:26 +01:00
tonihei
579d57b445 Less memory allocations for repeated calls to SubtitleView.draw()
The draw method checks if all inputs are the same as in the previous call.
The options to strip the subtitle of its styles were applied each time,
in order to check if the final CharSequence is still the same.

This additional computation (and memory allocations) can be prevented by
checking if the original CharSequence (including all styles) and the
flags to remove those styles are the same. The actual style removal is now
part of setupTextlayout().

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=153061064
2017-04-18 19:36:08 +01:00
olly
12433ad146 Support intercepting setPlayWhenReady calls
Issue: #2454

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152938743
2017-04-18 19:34:39 +01:00
tonihei
0a7011b390 Support default style in Tx3g decoder.
The track initialization data of Tx3g includes default style values for
font styles, colour, and font family. Additionally the decoder now supports
vertical subtitle placements other than the Tx3g default of 85% video height.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152930057
2017-04-18 19:33:30 +01:00
sxp
1a22a4be5f Automated g4 rollback of changelist 152815185.
*** Reason for rollback ***

The force submit broke GVR: []

*** Original change description ***

Add DashDownloaderService which downloads DASH streams at the background

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152877808
2017-04-18 19:32:18 +01:00
eguven
5a6a1af441 Add DashDownloaderService which downloads DASH streams at the background
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152815185
2017-04-18 19:31:04 +01:00
olly
85adecf948 Remove reflection + make it easy to set extractor flags
The idea of using reflection was so that a developer could
delete a package they didn't want and have everything else
still compile. However, a developer doing this is likely
building from source, in which case editing the factories
too is pretty trivial.

Removing the reflection makes specifying extractor flags
via the default factory easy, and removes the need for
special proguard config.

Issue: #2657

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152810423
2017-04-18 19:29:56 +01:00
tonihei
1dc8bb5bb1 Support 'styl' in Tx3g decoder.
Extended Tx3gDecoder to read additional information after subtitle text.
Currently parses font face, font size, and foreground colour.

Font identifier and other information provided in subtitle sample description
not yet supported.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152793774
2017-04-18 19:28:42 +01:00
Tyler Roach
3b4d981891 If hasOutputFormat is true, nalUnitLengthFieldLengthDiff will never be 0 2017-04-18 09:32:40 -04:00
Rohit Krishnan
329b8910ca Remove unnecessary check. sampleRateIndex is masked with 0x03 so it is constrained to be between 0 and 3. 2017-04-17 22:07:33 -04:00
Rohit Krishnan
896f63a3c3 Fixes OOM that can occur from reading first NAL packet before sequence header 2017-04-14 12:11:04 -04:00
Tyler Roach
59c44af4cb Added mp3 support to FLV extractor 2017-04-13 14:56:22 -04:00
aquilescanta
f36500c200 Add support for audio adaptation
When no video tracks or renderers are present, attempt audio adaptation.

Issue:#1975

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152708422
2017-04-11 12:15:04 +01:00
aquilescanta
2a4df60b01 Add pattern information to ExoPlayer's CryptoInfo
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152708351
2017-04-11 12:15:04 +01:00
olly
0aee235e0a Make ID3 parser more robust (again)
I've also removed unnecessary "empty" cases, since to add them
everywhere would bloat the code quite a lot. Note that
new String(new byte[0], 0, 0, encoding) is valid and will produce
and empty string.

Issue: #2663

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152697288
2017-04-11 12:15:04 +01:00
aquilescanta
c185963355 Add IntDef to reader internal state and default branch
Adding the default branch prevents linting warnings.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152675789
2017-04-11 12:15:04 +01:00
aquilescanta
8da2e2c8d5 Track format changes in (E-)AC-3 syncframes
This allows propagating format changes to the track output.

Issue:#2552

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152672983
2017-04-11 12:15:04 +01:00
andrewlewis
147020f816 Hide player controls when an ad is playing
Also fix an issue where ad timelines with unknown ad period durations
would not be shown in multi-window mode. (The time bar doesn't use the
duration of ad periods, but shows a fix-size indicator instead.)

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152666055
2017-04-11 12:15:04 +01:00
andrewlewis
d8c71df255 On re-preparation, suppress source info refresh until ack'ed
ExoPlayerImpl.prepare() replaces the timeline with an empty timeline. After this
happens, MSG_SOURCE_INFO_REFRESHED could be handled on the main thread and
could relate to the old source, so the player could expose a stale timeline.

Count pending prepares in ExoPlayerImpl so that source info refreshes can be
suppressed until preparation actually completes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152496255
2017-04-11 12:15:04 +01:00
andrewlewis
4b94877476 Fix DefaultTimeBar vertical positioning in the demo app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152492104
2017-04-11 12:15:03 +01:00
tonihei
ac0a4353da SubtitleView - New method setApplyEmbeddedFontSizes
When option is set to false, SubtitlePainter strips all absolute
and relative font size spans from the cue text.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152484724
2017-04-11 12:14:44 +01:00
Oliver Woodman
156bc52c8f Clean up DVB support
- Removed the PES_STRIPPED flag. It's unnecessary. We can strip
  PES in the TS extractor instead.
- Made nearly all of the object classes in DvbParser immutable.
  Else it's non-obvious that none of this state can be mutated.
- Made a a lot of the methods in DvbParser static for the same
  reason.
- Removed unnecessary null checks, code that was never executed,
  unused fields etc.
- Add proper flushing of DvbParser, to prevent corrupt output
  following a seek.
2017-04-06 19:16:31 +01:00
Oliver Woodman
538e71c090 Merge branch 'dev-v2-dvbsubs' of git://github.com/tresvecesseis/ExoPlayer into tresvecesseis-dev-v2-dvbsubs 2017-04-06 19:02:51 +01:00
andrewlewis
8208a75f0a Improve multi-window playback controls behavior.
Only enable multi-window mode when the duration of every period in the timeline
is known. Also, remove the warning logged when there are too many windows as it
doesn't add much.

The player's current period index was not masked while there were
unacknowledged seeks. This led to the displayed position jumping, between when
seekTo was called (after which the position would be masked but not the period
index) and the seek being acknowledged (at which point the time bar's position
would jump back to the seek position, due to the period index being resolved).
Mask the period index, like the window index, to fix this behavior.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152116040
2017-04-06 18:53:10 +01:00
eguven
dd2914f580 Generalize manifest parser parameters in DASH and SmoothStreaming MediaSources
This allows custom parsers to be used.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152005477
2017-04-06 18:50:44 +01:00
andrewlewis
107e0ebc46 Fix scrubbing in timeline with too many windows.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=152003529
2017-04-06 18:49:34 +01:00
olly
5ee122cac8 Add VERSION_SLASHY to ExoPlayerLibraryInfo
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151994281
2017-04-06 18:48:27 +01:00
Sergio Moreno Mozota
38779de225 Add support for multiple subtitle tracks per PID and for naming hearing impaired subtitles 2017-04-04 17:17:10 +02:00
Oliver Woodman
757999758b Cleanup for merged pull requests 2017-03-31 19:38:41 +01:00
ojw28
c3fa6d8943 Merge pull request #2612 from dessatel/dev-v2
Disables codecIsAdaptive for Odroid-XU4
2017-03-31 19:32:17 +01:00
Oliver Woodman
9a06b77b8a Delete stray test 2017-03-31 19:26:36 +01:00
olly
8e76790823 Remove deprecated readSource method
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151840862
2017-03-31 19:17:35 +01:00
eguven
64188748f4 Move cache related generic methods from DashDownloader to CacheUtil
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151818564
2017-03-31 19:16:24 +01:00
olly
77e6d75bdd Fix FLV parser to skip metadata we're not interested in
Issue: #2634

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151816597
2017-03-31 19:15:24 +01:00
andrewlewis
f7fff0d583 Apply parameter adjustments with resetting.
Start draining the audio processors when the playback parameters change,
and when draining completes use the written frame count and next input
buffer presentation timestamp as an offset for applying the new playback
speed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151800074
2017-03-31 19:14:22 +01:00
olly
035fab225d Rename skipToKeyframeBefore -> skipData and allow skipping to EOS
This change also ensures that format changes are read whilst the
renderer is enabled but without a codec. This is necessary to
ensure the drm session is updated (or replaced).

Updating the format is also needed so that the up-to-date format is
used in the case that the codec is initialized later due to the
surface being set. Previously, if an ABR change occurred between
the format being read and the surface being attached, we would
instantiate the codec and then immediately have to reconfigure it
when as a result of reading the up-to-date format. For a non-adaptive
codec this resulted in the codec being immediately released and
instantiated again!

Issue: #2582

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151608096
2017-03-31 19:11:08 +01:00
olly
9bc20d23a8 Print when frame is rendered in EventLogger + tidying
This is the boring part of a larger change that fixes
how video renderers behave when surfaces are attached and
detached whilst they're enabled or started.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151563031
2017-03-31 19:10:07 +01:00
eguven
68b8a5e542 Downgrade jacoco to 0.7.4.201502262128 as a workaround for 'stuck in endless loop' issue
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151554130
2017-03-31 19:09:01 +01:00
eguven
103c3b631b Add DashDownloader helper class to download dash streams
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151456161
2017-03-31 19:07:59 +01:00
eguven
2f9e082fe1 Enable gradle test code coverage for the library modules that aren't affected by 'stuck in endless loop' issue
'library-core' is still affected by https://code.google.com/p/android/issues/detail?id=226070

Code coverage report can be generated for the rest of the modules by:
./gradlew :[module name]:createDebugCoverageReport
Report is generated under:
[module folder]/buildout/reports/coverage/debug

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151448536
2017-03-31 19:06:58 +01:00
olly
e7a4c28dde Fix missing NonNull annotations for overriding methods
If the super method has the annotation on an argument, then
the overriding method should have it too.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151440313
2017-03-31 19:05:54 +01:00
andrewlewis
1dcfae452a Avoid input/output copies in SonicAudioProcessor.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151431376
2017-03-31 19:04:36 +01:00
andrewlewis
422c2d0ab7 Support escaped AAC AOTs.
Issue: #2514

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151418949
2017-03-31 19:03:27 +01:00
olly
21eecb679d Make ID3 parsing more robust
- Validate frames for majorVersion 2 and 3 as well as 4
- Don't throw if top bit of frameSize is non-zero.

Issue: #2604

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151348836
2017-03-31 19:02:22 +01:00
olly
5ebb3d4481 Correct allowTimeBeyondBuffer values for skipToKeyframeBefore calls
The only case where we should pass false is if we want to know
whether the passed time is within the buffered media. This is
relevant within seekTo implementations only.

This is related to (but does not fix) issue #2582

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151315676
2017-03-31 19:00:06 +01:00
andrewlewis
abcd177e8a Remove some unused Sonic functionality.
Also move it closer to the ExoPlayer code style.

Note: This change is intended to be purely cosmetic.

Issue: #26

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151307575
2017-03-31 18:58:50 +01:00
andrewlewis
9d20a8d41c Add a custom time bar view.
Also add an isAd flag to Timeline.Period so that periods can be declared as
containing ads. The times of these periods are indicated using ad markers in
the new TimeBar.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151116208
2017-03-31 18:57:42 +01:00
Alex Telitsine
d84733c9cf Disables Adaptive workaround for Odroid-XU4 up to SDK 19 in Samsung's Exynos AVC and AVC secure decoders 2017-03-30 19:53:19 -07:00
Alex Telitsine
96f56716ce Disables Adaptive workaround for Odroid-XU4 up to SDK 19 in Samsung's Exynos AVC and AVC secure decoders 2017-03-30 19:52:15 -07:00
Alex Telitsine
42f3dcf0da Disables Adaptive workaround for Odroid-XU4 up to SDK 19 in Samsung's Exynos AVC and AVC secure decoders 2017-03-30 19:50:09 -07:00
Sergio Moreno Mozota
d34d3f76be Pull request review fixes 2017-03-31 01:48:29 +02:00
Sergio Moreno Mozota
6c9656dc9a some cleaning and class/method documentation 2017-03-29 00:14:32 +02:00
Alex Telitsine
9aee406c8e Disables codecIsAdaptive for Odroid-XU4, comment updated 2017-03-27 04:10:53 -07:00
Alex Telitsine
c40b8156e9 Disables codecIsAdaptive for Odroid-XU4 2017-03-27 03:58:04 -07:00
Sergio Moreno Mozota
7e0ea5a65b Optimization of memory and draw operations, and proper treatment of filled regions (as far as we can infer from the specs) 2017-03-26 22:03:05 +02:00
olly
f4c33daf77 Bump version for bugfix release
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151028565
2017-03-23 19:15:48 +00:00
andrewlewis
0e6ef0edf6 Add Sonic library for audio speed adjustment.
Add methods to ExoPlayer for setting/getting the playback speed, using
SonicAudioProcessor.

Remove PlaybackParams support, as the AudioTrack timestamp does not work
reliably on Marshmallow. The platform also uses Sonic and performance
should be comparable between the Java and native versions on recent Android
runtimes.

In a later change, SonicAudioProcessor will be made public so it can
be used in conjunction with other processors.

Issue: #26

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151027121
2017-03-23 19:14:48 +00:00
olly
6faf566344 Fix NullPointerException enabling WebVtt subtitles in DASH
Issue: #2596

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151013802
2017-03-23 19:13:30 +00:00
eguven
14f1b33fcf Make CacheDataSource.open() throw exception if resolved range doesn't cover position
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151006826
2017-03-23 19:12:20 +00:00
olly
7aff624477 Fix typo on CEA-708 decoder
Issue: #2595

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151004198
2017-03-23 19:11:08 +00:00
olly
255523b432 Call DrmSession methods on the session not the manager
The way it was before worked, but it's not really documented
that DrmSession methods implemented by DefaultDrmSessionManager
can be called after the session has been released, and it feels
wrong to do this.

At some point we should probably consider moving the DrmSession
part of DefaultDrmSessionManager into an inner class, to force
usage in the "normal" way.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=151003855
2017-03-23 19:09:55 +00:00
Sergio Moreno Mozota
0c49b81b48 add DVB subtitle support, based in the TVHeadend spec, to the MatroskaExtractor 2017-03-23 08:55:20 +01:00
Sergio Moreno Mozota
937675d1db Add DVB sustitles support to the TsExtractor 2017-03-23 08:54:07 +01:00
Sergio Moreno Mozota
d8f61ad7e7 Add DVB subtitles support 2017-03-23 08:51:41 +01:00
olly
42629701f8 Work around broken VP8 decoder on Note 2
Issue: #1355

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150916986
2017-03-22 20:15:50 +00:00
sammon
e0a00502a7 Avoid exception when creating ChunkIndex with length = 0.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150908893
2017-03-22 20:14:48 +00:00
eguven
8f636991ad Add DummyDataSource
A dummy DataSource which provides no data.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150868950
2017-03-22 19:12:36 +00:00
olly
382ba7ecf0 Generate combined Javadoc
Notes:
- Now only generating a single module Javadoc task for the
  release variant.
- Combined Javadoc now includes extensions. VP9 is excluded
  for now since it's failing for an unknown reason.

Issue: #2139

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150865589
2017-03-22 19:11:28 +00:00
olly
88e74ef381 Generate Javadoc for each module individually
Notes:
- The VP9 one is failing claiming that the util package
  doesn't exist and that LibraryLoader cannot be found.
  Unsure why, since it appears to be setup exactly like
  other extensions (e.g. Opus) that does work.
- @link across modules will not work when generating
  Javadoc for a single module. This is WAI. I subsequent
  change will add an aggregated Javadoc generator that
  will generate Javadoc for all modules together and
  apply cross module @link correctly.

Issue: #2139

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150864273
2017-03-22 19:10:15 +00:00
olly
7ce8125194 Split DASH into a separate module
Issue: #2139

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150762237
2017-03-22 19:09:04 +00:00
olly
b1a2ae1856 Remove DRM->DASH dependency in prep for DASH module split
Also renamed releaseResources->release to be consistent with the
rest of the library, and added some synchronization to ensure
correct usage.

Issue: #2139

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150753414
2017-03-22 19:07:53 +00:00
eguven
065d3dc523 Make FakeDataSource able to serve multiple fake files
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150748155
2017-03-22 19:06:45 +00:00
aquilescanta
c32533cad8 Fixed the edit mode view for SimpleExoPlayerView
This CL makes SimpleExoPlayerView show a mock representation
when in the layout editor of AndroidStudio.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150739442
2017-03-22 19:05:05 +00:00
andrewlewis
f2e5c3b4c9 Fix imports.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150732864
2017-03-22 19:03:53 +00:00
olly
25a093b37c Split HLS into a separate module
Issue: #2139

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150643456
2017-03-22 18:59:56 +00:00
olly
a9aca8dbf0 Split SmoothStreaming into a separate module
Issue: #2139

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150634794
2017-03-22 18:58:40 +00:00
olly
58ac572024 Tell Moe about new UI module + update external settings.gradle
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150625313
2017-03-22 18:55:23 +00:00
olly
7b08e972e4 Split UI components into separate module
Issue: #2139

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150623215
2017-03-22 18:54:16 +00:00
olly
de6e47f7e6 Fix skipping to keyframe to use correct position
Issue: #2575

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150622487
2017-03-22 18:53:04 +00:00
olly
f9767940cc Fix misc issues
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150610549
2017-03-22 18:50:45 +00:00
olly
ce55d1a712 Modularize ExoPlayer steps 1 + 2.
1. Move entire library from v2/library/ to v2/library/core
2. Add v2/library/all that depends on v2/library/core

Issue: #2139

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150455693
2017-03-22 18:49:30 +00:00
olly
f2de393d83 Correctly handle stream replacement in text renderer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150436867
2017-03-22 18:47:45 +00:00
olly
c8059e5969 Update release notes + bump versions
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150358346
2017-03-17 12:17:41 +00:00
olly
b98de975f1 Make Util.inferContentType marginally smarter
Issue: #2513

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150310349
2017-03-16 16:16:20 +00:00
olly
9b0d24c909 Fix stuck-buffering state when playing merged media
Also added a TODO to track clarifying SequenceableLoader
more accurately and auditing existing implementations.

Issue: #2396

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150305685
2017-03-16 16:14:08 +00:00
aquilescanta
ce5c0c18f9 Rename AdaptiveVideoTrackSelection to AdaptiveTrackSelection
This will allow us to use the same class for Audio adaptation.

Issue:#1975

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150302561
2017-03-16 16:13:03 +00:00
adrianv
cadce0ef3f Add @Nullable annotation for an optional field in CacheDataSource's constructor.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150278031
2017-03-16 16:11:49 +00:00
aquilescanta
7c9b771ec8 Create HlsMediaSource.Manifest to hold playlist information
This allows the user to get the HlsMasterPlaylist through
Exoplayer.getCurrentManifest().

Issue:#2537

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150232455
2017-03-16 16:09:46 +00:00
eguven
76c9968211 Add RepresentationKey and DashManifest copy method
RepresentationKey defines a representation location in a DashManifest.
DashManifest copy method creates a copy of the manifest which includes
only the representations pointed by the given RepresentationKeys.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150195990
2017-03-15 18:50:07 +00:00
eguven
f092c4446f Move TestUtil.createTempFolder and TestUtil.recursiveDelete to Util class
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150190520
2017-03-15 15:55:39 +00:00
olly
d6db5066cd Improve publishing to Bintray
- Update bintray-release version
- Publish to exoplayer-test unless -PpublicRepo=true
- Publish GVR extension
- Minimize duplication with new publish.gradle

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150185740
2017-03-15 15:54:43 +00:00
olly
a9617af29c Use fast surface switching on API level 23+ when possible
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150185483
2017-03-15 15:53:38 +00:00
aquilescanta
7c5f0b7d3b Make Video track selections before others
This will allow us to make a single adaptive selection prioritizing
video selections.

Issue:#1975

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150185086
2017-03-15 15:52:30 +00:00
olly
db5f81ecfd Allow disabling ID3 metadata parsing if not required
Issue: #2553

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150184824
2017-03-15 15:51:23 +00:00
olly
d077e23daa Improve DefaultExtractorInput's peek buffer sizing.
- Don't resize the peek buffer to be twice as large as a
  large amount!
- Trim the peek buffer, to allow large peek buffer allocations
  to be reclaimed.

Issue: #2553

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150184291
2017-03-15 15:50:17 +00:00
aquilescanta
7c587c6b82 Prevent playlist loading if refresh is already scheduled
This greatly reduces the amount of server requests issued by
the playlist tracker.

Issue:#2548

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150055046
2017-03-15 15:45:50 +00:00
olly
204537ed40 Pre-modularization cleanup
- Use a variable for the (default) minSdkVersion. There will
  be more modules that need it, and it'll be easier to manage
  if it's in one place.

Issue: #2139

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150050663
2017-03-15 15:44:46 +00:00
Oliver Woodman
139252c9d3 Propagate defaultRequestProperties + make getDefaultRequestProperties final 2017-03-13 16:25:44 +00:00
olly
3131074338 Upgrade dependencies
Issue: #2516

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149942409
2017-03-13 15:54:10 +00:00
bachinger
aede0f894d Propagate updates of default header fields of the HttpDataSource.BaseFactory to HttpDataSource instances.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149780233
2017-03-13 15:54:10 +00:00
aquilescanta
952bde700b Ensure only timestamp adjustment masters set first sample timestamps
Without this, it is possible that a non timestamp master instances
the adjuster with its own chunk start time. When chunks are not
aligned, this breaks adjustment.

Issue:#2424

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149764488
2017-03-13 15:54:10 +00:00
ojw28
6d61519421 Merge pull request #2547 from LiveLike/program-date-time-regex
Support comma separators in ISO-8601 date/time format for milliseconds
2017-03-13 10:00:35 +00:00
Ben Wilber
578b9545f0 Support commas in ISO-8601 date/time format for millis 2017-03-10 16:09:58 -05:00
eguven
f21cdcb9c5 Allow null DataSink.Factory in CacheDataSourceFactory
CacheDataSource allows null DataSink. Do the same in CacheDataSourceFactory.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149750696
2017-03-10 14:24:43 +00:00
aquilescanta
cb0187959c Fix NPE in HLS playback of non-muxed streams
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149749504
2017-03-10 14:24:43 +00:00
cdrolle
0cb9802e1b Fixed CEA-708 issues
Caption characters weren't being assigned to the correct window and the lack of
pen location support was causing multiple lines (and words) to be concatenated.

As per the CEA-708-B specification, section 8.10.5, when we encounter a DefineWindow
command, we're also supposed to update the current window to the newly defined one.
We were not doing this previously, resulting in text that should have been in separate
windows being combined into one. Furthermore, some content uses the SetPenLocation
command to move the cursor down a line instead of appending a new line. As we don't
currently support SetPenLocation, this resulted in multiple lines (and words) being
concatenated together, potentially causing the text to extend past the edge of the
window/screen. This change implements a workaround (until SetPenLocation is properly
supported) for this issue in which setting the pen location to a new row will append
a new-line to that window.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149679613
2017-03-10 14:24:43 +00:00
cdrolle
b84c84cc76 Fixed CEA-708 issue where cues weren't updated at the appropriate times
As per the CEA-708-B specification, section 8.10.4, cues don't necessarily
need either an ETX command or any of the C1 commands before being updated
with the latest buffered content. While those commands do indicate that the
cues should be updated immediately, the cues can also be updated after a
service block has been processed if it appended text to the buffer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149673162
2017-03-10 14:24:43 +00:00
eguven
b6773dba05 Add PriorityDataSourceFactory
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149543747
2017-03-10 14:24:43 +00:00
aquilescanta
3be4451e13 Allow injection of DataSource's per type of data
This allows the client to define what data source is used for
media chunks, encryption chunks and playlists.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149537766
2017-03-10 14:24:43 +00:00
eguven
78e7c3c510 Make CacheDataSourceFactory createDataSource return specific type
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149533820
2017-03-10 14:24:43 +00:00
olly
45c7fe9b00 Drain embedded track sample queues when not enabled.
I think it's likely we'll revert back to discarding media
in sync with the playback position for ExtractorMediaSource
and HlsMediaSource too, where the tracks are muxed with ones
we're requesting anyway.

Note: discardBuffer is named as it is because it'll also be
used to discard for enabled tracks soon, as a result of the
remaining TODO in ChunkSampleStream. For enabled tracks the
discard will also be conditional on the samples having been
consumed, obviously.

Issue: #2362
Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149525857
2017-03-10 14:24:43 +00:00
olly
09471defd7 Enabled EMSG and CEA-608 embedded streams for DASH
Issue: #2362
Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149524412
2017-03-10 14:24:43 +00:00
andrewlewis
99e19a92af Fix SampleStream javadoc.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149431794
2017-03-10 14:24:43 +00:00
aquilescanta
e7462f05f5 Add maxVideoBitrate to DefaultTrackSelector.Parameters
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149097876
2017-03-10 14:24:43 +00:00
aquilescanta
8e9711e8aa Allow packed audio without PRIV timestamps
We use the segments' start time when the timestmap is not present.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149006252
2017-03-10 14:24:43 +00:00
eguven
e40bba2852 Add Cache.getCachedBytes() which returns the length of the cached or not data block length
This method can be used to determine not cached parts of a content.
The 'length' parameter allows quicker responses without going through all adjacent spans.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149005688
2017-03-10 14:24:43 +00:00
aquilescanta
247da48e9d Make ElementaryStreamReader's public
This allows building a TsPayloadReader.Factory without
having to wrap the default one.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=149004102
2017-03-10 14:24:43 +00:00
sxp
0dee4aec70 Deprecate instead of delete BaseRender.readSource(FormatHolder, DecoderInputBuffer)
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148808381
2017-03-10 14:24:43 +00:00
mofneko
5b0192a3dd Update HlsPlaylistTracker.java
Fix unused variable.
2017-03-08 03:20:34 +09:00
andrewlewis
a9079f67aa Fix some documentation nits.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148776593
2017-02-28 17:37:44 +00:00
olly
ab8fd14724 Support multiple track outputs from BaseMediaChunk
Issue: #2362
Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148764237
2017-02-28 17:36:45 +00:00
andrewlewis
d58008eeb7 Rename BufferProcessor to AudioProcessor.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148763781
2017-02-28 17:35:35 +00:00
olly
91639b26cd Add some pipelining in MetadataRenderer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148760782
2017-02-28 17:34:29 +00:00
andrewlewis
b3cfeaa17b Discard extra silent channels on Samsung Galaxy S6/S7.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148654495
2017-02-28 13:47:18 +00:00
eguven
2411d0fc76 Move and rename PRIORITY_PLAYBACK to C constants class
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148651265
2017-02-28 13:47:18 +00:00
eguven
98f4fb85c2 Move utility methods to DashUtil class
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148647040
2017-02-28 13:47:18 +00:00
aquilescanta
e26723cdc7 Add MODE_SINGLE_PMT to TsExtractor
This mode allows the extractor to support streams with multiple
programs declared in the PAT, but only one PMT. This is necessary
to support tuner-obtained media.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148636312
2017-02-28 13:47:18 +00:00
olly
35988395d2 Fix incorrect Javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148633347
2017-02-28 13:47:18 +00:00
olly
ad857852e5 Discard subtitles with invalid positions
textWidth can be negative if textLeft extends parentRight (i.e.
the subtitle is positioned entirely off the screen to the RHS).
We should just discard and log a warning in this case.

Issue: #2497

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148481310
2017-02-28 13:47:18 +00:00
andrewlewis
129334d2a0 Clean up method ordering in ResamplingBufferProcessor.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148444806
2017-02-28 13:47:18 +00:00
olly
88fc337db0 Expose empty CEA-608 and EMSG tracks for DASH
This change exposes declared CEA-608 and EMSG tracks. The
tracks currently provide no samples.

Issue: #2362
Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148390849
2017-02-28 13:47:18 +00:00
olly
d99cb28e6a Correctly handle a SampleStream ending without providing a format
I'm going to introduce an EmptySampleStream that will be used in
some cases in conjunction as part of 608/EMSG support. This change
avoids EmptySampleStream having to provide a dummy format.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148383831
2017-02-28 13:47:18 +00:00
aquilescanta
ef2541e654 Fix negative start time values
Issue:#2495

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148348663
2017-02-28 13:47:18 +00:00
andrewlewis
e3a57146d2 Fix BufferProcessor.queueEndOfStream javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148344328
2017-02-28 13:47:18 +00:00
andrewlewis
82d33cde68 Add support for draining audio output.
At the end of playback, BufferProcessors need to be drained to process all
remaining data, then the output needs to be written to the AudioTrack before
stop() is called.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148339194
2017-02-28 13:47:18 +00:00
Oliver Woodman
5fe5076c86 Clarify naming for ClearKey DRM support 2017-02-23 14:51:58 +00:00
Oliver Woodman
3bb08e58f6 Cleanup of CENC support 2017-02-23 14:27:23 +00:00
ojw28
7e02e58e16 Merge pull request #2372 from wasabeef/dev-v2-cenc-clearkey
Added support for CENC ClearKey
2017-02-23 14:17:11 +00:00
aquilescanta
3fc3349e95 Add support for Caption Format Descriptor
This allows the TsExtractor to automatically determine the
closed caption tracks to expose by parsing available
descriptors.

Issue:#2161

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148321380
2017-02-23 14:14:23 +00:00
olly
698e081eda Handle empty PRIV frames
Issue: #2486

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148217936
2017-02-23 14:13:30 +00:00
olly
ddbced7317 Conditionally enable EMSG/608 based on manifest declarations
Issue: #2362
Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148216614
2017-02-23 14:12:28 +00:00
andrewlewis
682987a0cf Separate input/output handling in BufferProcessors.
This allows BufferProcessors to partially and/or asynchronously handle
input/output. Document contract for queueInput and getOutput.

Update ResamplingBufferProcessor to use the new interface.

Separate submitting bytes vs. writing data to the AudioTrack.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148212269
2017-02-23 14:11:23 +00:00
aquilescanta
896550883f Add support for multiple CC channels in HLS
Issue:#2161

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148203980
2017-02-23 14:10:18 +00:00
aquilescanta
e86629ef3a Allow exposing multiple CEA608 tracks for Transport Streams
This CL allows passing multiple formats describing CC channels to the
TS payload reader factory. As a simple usecase, ATSC can expose both
608 channels by passing a two element list with the corresponding
accessibility channels. The HLS media source can construct this list
from the EXT-X-MEDIA:TYPE="CLOSED-CAPTIONS" tags, including language
and selection flags. The interface extends without modification to
708.

Pending work:
* Multiple CC channels in HLS.
* caption_service_descriptor parsing for overriding the user's selection.
* 708 support in SEI reader.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148030293
2017-02-23 14:09:05 +00:00
olly
a84216c3a9 Allow enabling of EMSG/608 outputs on DefaultDashChunkSource
Issue #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148027655
2017-02-23 14:08:01 +00:00
aquilescanta
72e1eae6f5 Discard preparation chunk if track selection does not include it
This avoids breaking the player if the first variant is not
supported by the device.

Issue:#2353

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148025791
2017-02-23 14:06:54 +00:00
andrewlewis
17762ebaa2 Reformat @IntDef field/return type annotations.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148018580
2017-02-23 14:04:42 +00:00
wasabeef
e0f7a12488 Added support for CENC ClearKey 2017-02-22 16:01:43 +09:00
Julian Cable
402c985aec Merge branch 'dev-v2' of https://github.com/google/ExoPlayer into dev-v2 2017-02-21 08:57:49 +00:00
Julian Cable
d8746c3dee remove unneeded local variable 2017-02-21 08:38:30 +00:00
Julian Cable
b0c39a1295 back out unneeded imports 2017-02-21 08:22:47 +00:00
Oliver Woodman
11c16d83fd Final nit fixes for Cue/SubtitlePainter 2017-02-20 13:13:13 +00:00
Oliver Woodman
539072dbf4 Remove useless Cue constructor 2017-02-20 13:09:40 +00:00
Oliver Woodman
5fbf109694 Use Math.round instead of floor. 2017-02-20 13:03:06 +00:00
Oliver Woodman
31513202df Fix subtitle painter issues 2017-02-20 13:01:00 +00:00
Oliver Woodman
21923ae1fa m 2017-02-20 12:55:07 +00:00
Oliver Woodman
f16058422d Fix import order 2017-02-20 12:51:56 +00:00
Oliver Woodman
e27a6eca89 Merge branch 'dev-v2_imagesubs' of git://github.com/drhill/ExoPlayer into drhill-dev-v2_imagesubs 2017-02-20 12:46:51 +00:00
Oliver Woodman
edae29dff7 Fix import order 2017-02-20 11:35:06 +00:00
Oliver Woodman
37c15e7cee Minor stylistic tweaks 2017-02-20 11:33:43 +00:00
Daniel Santiago
e9399f8684 Added flags to the mp3 extractor to control behavior of the extractor. Added FLAG_ENABLE_CONSTANT_BITRATE_SEEKING to let the extractor know that the CBR seeker is desired in the case where the seeker has determine the track is not seekable For example, in the case where the track has a Xing Header but no content table. 2017-02-19 13:51:13 -08:00
eguven
c3d7eecd1f Fix ChunkExtractorWrapper.init(TrackOutput) calls with null TrackOutput after extractor initialized
InitializationChunk calls init(null). When the initialization and index data is separate they need to
be loaded separately which results to two init(null) calls.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147837985
2017-02-17 16:10:49 +00:00
olly
14507c4503 Fix NPE parsing ContentProtection element
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147833328
2017-02-17 16:09:55 +00:00
olly
bc9dfa8139 Fix build
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147796398
2017-02-17 16:08:53 +00:00
olly
ba9a82e982 Use execute instead of submit
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147794314
2017-02-17 16:07:46 +00:00
ojw28
fccaa07be3 Merge pull request #2463 from purpleblues/dev-v2
Fixed a typing error
2017-02-16 17:22:25 +00:00
ojw28
26f4e528d5 Merge pull request #2464 from jschamburger/dev-v2
Make DrmSessionException constructor public to enable creating custom DrmSessionManager implementations.
2017-02-16 17:22:01 +00:00
olly
0d468ca7bf DASH: Support mspr:pro element
Issue: #2386

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147725616
2017-02-16 17:20:19 +00:00
Johannes Schamburger
f8bb329ef2 Make DrmSessionException constructor public to enable creating custom DrmSessionManager implementations. 2017-02-16 17:05:12 +01:00
Sungmin Kim
e74b729952 fixed a typing error 2017-02-16 21:23:28 +09:00
olly
65d4b1cf5c Make CeaUtil robust against malformed SEI data
I've also added a TODO to not even bother trying to parse CEA from
SEI NAL units if they're fully or partially encrypted, which it's
possible to determine in the FMP4 extractor.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147613979
2017-02-15 18:59:45 +00:00
andrewlewis
ec98bd9ea1 Work around broken AAC decoder EoS handling on L.
SoftAAC2 would cause an exception to be thrown from
dequeueOutputBuffer/releaseOutputBuffer after queueing an end-of-stream buffer
for certain streams.

The bug was introduced in L and fixed in L MR1, so the workaround is targeted to
API 21.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147613659
2017-02-15 18:58:51 +00:00