Commit graph

3925 commits

Author SHA1 Message Date
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
olly
d6e15b7953 DASH: Correctly handle empty segment indices
Issue: #1865

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147613244
2017-02-15 18:57:45 +00:00
andrewlewis
5c571e6e9d Handle H.265/HEVC SEI NAL units in FragmentedMp4Extractor.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147609330
2017-02-15 18:56:41 +00:00
andrewlewis
fd6012a727 Remove outputBuffer assertion in ResamplingBufferProcessor.
The outputBuffer is not necessarily empty after a flush, so the assertion could
fail in normal usage. The assertion can just be removed as the output buffer is
rewritten in full on every call to handleBuffer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147541016
2017-02-15 17:05:53 +00:00
andrewlewis
3691454b82 Fix resuming after error for CEA-608 SEI in fMP4.
Also test SEI parsing in FragmentedMp4ExtractorTest.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147460699
2017-02-15 17:04:50 +00:00
olly
7625c1b862 Remove unnecessary configuration parameter.
- It's always fine to prefer the manifest drm init data. In
  DASH we always do this anyway. In SS the manifest and sample
  formats are identical.
- Optimized the case where the manifest and sample formats are
  identical by avoiding the format copy.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147385282
2017-02-15 17:03:47 +00:00
olly
8cb3b6ed07 SmoothStreaming: Replace variant bitrate/start_time placeholders
Issue: #2447

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147358615
2017-02-15 17:02:47 +00:00
olly
0316ab80df Fix broken Javadoc
Issue: #2433

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147355544
2017-02-15 17:01:41 +00:00
eguven
f7fbbe993e Fix ArrayIndexOutOfBoundsException while reading SEI NAL unit
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147165453
2017-02-15 16:57:33 +00:00
cdrolle
ef475eb9c9 Fixed potential bug in which old paint-on captions could be drawn overtop by pop-on captions as they weren't being cleared properly.
This fix was taken from YouTube's Cea608Decoder ([]

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147066662
2017-02-15 16:56:29 +00:00
maxjulian
9e07cf7c73 Update exoplayer 1 and 2 to support stereo mesh layout.
Reference spec:
https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md#semantics

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147060701
2017-02-15 16:55:24 +00:00
cdrolle
de46ed7fb9 Fixed an issue with Cea608Decoder in which tab commands were not being used correctly.
Tab commands were being used cumulatively (i.e. moving the cursor farther and farther over) resulting in the text eventually trying to write beyond the bounds of the screen and throwing an exception.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146783284
2017-02-15 16:53:04 +00:00
aquilescanta
7c8a3d006d Flexibilize mp4 extensions detection for HLS chunks
This CL adds support  mp4 extensions of the form .m4_.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146479870
2017-02-15 16:50:52 +00:00
olly
d3f4da749c Propagate track type through ExtractorOutput.track
This allows binding by track type in ChunkExtractorWrapper, which
allows the EMSG and 608 tracks to be enabled on FragmentedMp4Extractor
in DefaultDashChunkSource. ChunkExtractorWrapper currently binds these
to DummyTrackOutputs.

Note: I wanted to pass the mimeType instead, since it's a more specific,
but unfortunately there's at least one place where it's not known at the
point of invoking track() (FlvExtractor).

Issue #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146471082
2017-02-15 16:49:47 +00:00
aquilescanta
f2d3af7dea Delete dead code and fix javadocs from hls
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146466389
2017-02-15 16:47:43 +00:00
andrewlewis
c82319332f Omit clipped samples when applying edits for audio tracks.
Issue: #2408

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146389955
2017-02-15 16:46:39 +00:00
cdrolle
537a3ab5be Fixed 2 issues with Cea708Decoder.
The first issue occurs when we attempt to process a DtvCcPacket that hasn't been completely filled. In this case we attempted to extract data beyond the length of the packet, instead of dropping the packet as we should have. The other issue occurs when we encountered an invalid cc_data_pkt. In that case we were finalizing the entire DtvCcPacket, instead of just ignoring that particular cc_data_pkt as we should have.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146373074
2017-02-15 16:45:39 +00:00
aquilescanta
0402191ace Make SeiReader injectable to H26xReaders
This CL is a no-op refactor but allows defining the outputted
channels through the TsPayloadReaderFactory.

Issue:#2161

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146243736
2017-02-15 16:44:38 +00:00
olly
ee3c5f875f Simplify chunk package ahead of EMSG/608 piping
Issue: #2362
Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146243681
2017-02-15 16:43:36 +00:00
eguven
025a67cae9 Enable buffering for CacheDataSink by default
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146221487
2017-02-15 16:42:34 +00:00
andrewlewis
74acbe04e3 Pass an array of BufferProcessors to the AudioTrack.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146215966
2017-02-15 16:41:32 +00:00
aquilescanta
feeec77407 Add support for multiple programs in a single TS
* Prevents calling endTracks() before all PMTs have been
  processed.
* Adds a unique ID to the format of each track. This allows
  the track selector to identify which track belongs to
  each program. The format of each id is
  "<program number>/<track output id>".

Note: This CL will break malformed TS files whose PAT
declares more PMTs than it actually contains, which
previously were supported. This does not apply for HLS
mode.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146151642
2017-02-15 16:40:28 +00:00
andrewlewis
4301606200 Add a BufferProcessor for resampling.
This initial version of the BufferProcessor interface assumes that buffers are
handled in their entirety on each invocation.

Move PCM resampling out of AudioTrack into a BufferProcessor.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146128411
2017-02-15 16:39:28 +00:00
eguven
3edeec2495 Document passing null cacheWriteDataSink to CacheDataSource constructor
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146128328
2017-02-15 16:38:28 +00:00
olly
7c1b2beb84 Support dyanmically setting key request headers
Issue: #1924

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146120465
2017-02-15 16:37:27 +00:00
olly
8f482cb2ed Fixing some Javadoc errors
- Cea708 Javadoc references private internals with @link. Doc
  about device accessibility settings doesn't relate to the
  decoder, either.
- Creator Javadoc unnecessary.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146118092
2017-02-15 16:35:17 +00:00
cdrolle
87e790f44d Fixed issue with TextRenderer and RawCC 608/708 captions in which all the captions prior to the playback position would be rendered in [] succession when a VOD stream starts.
Instead of clearing the DECODE_ONLY flag for all input buffers in TextRenderer (i.e. for all caption types), we now only clear it on the output buffer in SimpleSubtitleDecoder. The number if input buffers in CeaDecoder has also been increased to reduce the delay before captions appear for playback sessions that start far ahead into the content.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146028680
2017-02-15 16:34:15 +00:00
cblay
2e7f9fb6cb Don't setContentLength() in CacheDataSource if the current request ignores cache.
Otherwise an empty cache span is created.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146014081
2017-01-30 19:19:43 +00:00
ojw28
a7dd0f7609 Merge pull request #2326 from devint1/alac-dev
Apple Lossless (ALAC) support
2017-01-30 18:44:47 +00:00
olly
615b707b16 Bump version + update release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145994313
2017-01-30 16:31:30 +00:00
aquilescanta
e6bbd397d5 Add support for HLS's #EXT-X-PLAYLIST-TYPE
Issue:#805

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145991145
2017-01-30 16:30:34 +00:00
aquilescanta
7ee8567f4a Fix demo app to avoid seeking if resume position is clear
This fixed the resume live window issue by modifying the demo app.

Issue:#2344

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145987470
2017-01-30 16:29:23 +00:00
aquilescanta
9a90795041 Resume from playback position by default when media source changes
Issue:#2369

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145982198
2017-01-30 16:27:53 +00:00
aquilescanta
c49d142981 Prevent old playlist snapshots from being used on live HLS streams
This aims to replace InvalidCodeResponse's with BLWE's caused by trying to
load chunks that have been removed from the server.

Issue:#2344

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145679171
2017-01-30 16:26:49 +00:00
olly
63e6bf5cf2 Consolidate UnrecognizedInputFormatException
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145570097
2017-01-25 19:29:10 +00:00
olly
6f5c7b38a7 Wait for first sync frame in MediaCodecRenderer
For the video renderer, it's not true that the source always
provides from a sync frame specifically in the case where
the surface has been replaced on the renderer. In this case
the source doesn't know that it should be providing from a
sync frame.

Issue: #2093

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145562222
2017-01-25 19:28:08 +00:00
andrewlewis
98db14e7e5 Fix some documentation nits in AudioTrack.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145554504
2017-01-25 19:27:05 +00:00
cdrolle
e9ab71a280 Modified CeaDecoder and CeaSubtitle so that it's correctly setting the subsampleOffset and making proper use of it.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145552166
2017-01-25 19:26:03 +00:00
olly
0a8dc41632 Set max resolution from codec capabilities for ABR where resolutions are unknown
Issue: #2096

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145542983
2017-01-25 19:25:02 +00:00
olly
953c6855ec FMP4 EMSG/CEA608 output bug fix + tweaks
- Fix to use different track ids for EMSG + CEA608, so they can
  both be enabled at once.
- Tweaked extractor to output formats prior to endTracks() when
  parsing the initial moov box. This makes it easier to handle
  multiple tracks through the chunk package. It may or may not
  be made a requirement (it's already true for the MKV extractor).

Issue: #2362
Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145538757
2017-01-25 19:23:58 +00:00
eguven
8970e80b25 Don't use the returned key set id if the request wasn't for an offline license key
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145533961
2017-01-25 19:22:56 +00:00
zhihuichen
0e99237075 Allow duplicate tracks in WebM/MKV extractor
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145457836
2017-01-25 19:21:55 +00:00
olly
c01c2c34f7 Store full accessibility descriptors in parsed DASH manifest
Issue: #2362

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145402640
2017-01-24 14:25:47 +00:00
olly
4efdd14c65 Allow FMP4 extractor to output CEA-608
Issue: #2362

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145401668
2017-01-24 14:25:47 +00:00
aquilescanta
b1ec5e3a25 Move TimestampAdjuster from extractor to util
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145295850
2017-01-24 14:25:47 +00:00
aquilescanta
497651c7b9 Ignore file extension for HLS Subtitle Renditions
According to the spec, subtitle renditions must be Webvtt media
segments.

Issue:#2025
Issue:#2355

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145289266
2017-01-24 14:25:47 +00:00
aquilescanta
18d7cdf39f Add pts adjustment in SpliceInfoDecoder
This allows the user to interpret PTSs in the playback timebase.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145280921
2017-01-24 14:25:47 +00:00
olly
5debf5a14a Use bitrate as fixed track selection tie breaker
If we don't have resolutions (and therefore cannot determine
pixel counts) then use bitrate as a tie breaker instead. Also
use pixel count as a tie breaker if pixel counts are known
but equal. Streams with known pixel counts will always be
preferred over streams without.

Issue: #2343

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145269968
2017-01-24 14:25:47 +00:00
Julian Cable
440aeea66c working but still with stateful decoder. Sample subtitle <span> encoder but this doesn't seem to be how webvtt does it so not being used. 2017-01-22 17:53:14 +00:00
Julian Cable
141568ab0e better merge 2017-01-22 15:13:29 +00:00
Julian Cable
6ec840cc80 Merge remote-tracking branch 'upstream/dev-v2' into dev-v2 2017-01-22 15:07:03 +00:00
Julian Cable
94a36402f1 possible conflict resolution 2017-01-22 15:02:40 +00:00
Oliver Woodman
55ca323cee Add upstream.crypto package (and friends). 2017-01-20 20:50:02 +00:00
olly
52d47aa244 Fix possible track selection NPE
If no tracks are selected at the start of playback, TrackSelectorResult
isEquivalent(null) returned true, meaning we were keeping the old result
(i.e. null), which we then tried to de-reference.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145105702
2017-01-20 19:27:30 +00:00
aquilescanta
63604493b4 Fix memory leak in HlsMediaChunk's
Issue:#2319

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145089668
2017-01-20 19:26:34 +00:00
olly
26b303a449 Pull assertion and layer of indirection out from ChunkExtractorWrapper
It should be possible to remove ChunkExtractorWrapper from the track
output side as well (currently all extractor output is funneled via
ChunkExtractorWrapper just so it can adjust the format, which is kind
of unnecessary).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145083620
2017-01-20 16:12:03 +00:00
tap-prod
5407c98526 Automated rollback
*** Original change description ***

Pull assertion and layer of indirection out from ChunkExtractorWrapper

It should be possible to remove ChunkExtractorWrapper from the track
output side as well (currently all extractor output is funneled via
ChunkExtractorWrapper just so it can adjust the format, which is kind
of unnecessary).

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145078094
2017-01-20 16:11:16 +00:00
olly
6e18c97c20 Pull assertion and layer of indirection out from ChunkExtractorWrapper
It should be possible to remove ChunkExtractorWrapper from the track
output side as well (currently all extractor output is funneled via
ChunkExtractorWrapper just so it can adjust the format, which is kind
of unnecessary).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145076891
2017-01-20 15:44:41 +00:00
olly
7abc34c6ae Respect decode-only flag in MetadataRenderer
Issue #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144999973
2017-01-20 15:43:42 +00:00
olly
9617986538 Remove redundant MetadataDecoder.canDecode method
This is no longer needed as MetadataDecoderFactory
figures out which decoder should be used.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144999613
2017-01-20 15:42:40 +00:00
olly
641597d708 Add a flag to enable EMSG output from FMP4 extractor
Issue #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144999302
2017-01-20 15:41:40 +00:00
olly
430d8e8a7a Rename SingleTrackMetadataOutput ahead of real metadata support
Issue #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144969838
2017-01-20 15:39:35 +00:00
olly
ae01c1a6fd Move inband event streams to Representation
This is more consistent with our handling of DRM init data,
and is more correct. It'll be up to whoever's using the
manifest to look one layer deeper and figure out what event
streams are defined on all representations, if they wish to
do so.

Issue #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144968183
2017-01-20 15:38:30 +00:00
olly
d9be650b3b DASH: Fix propagation of language from manifest
Issue: #2335

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144956177
2017-01-20 15:37:25 +00:00
eguven
4b957cce47 Fix streaming license renew error
When the first streaming license request response provided to mediaDrm it might return an empty array instead of null.
This was set to offlineLicenseKeySetId which made the work like there is a valid offline license.
Simplified the code and made it to set offlineLicenseKeySetId only if there is sensible data in keySetId.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144843144
2017-01-18 18:21:06 +00:00
olly
51f96374d4 Make headers consisting across build.gradle files
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144826116
2017-01-18 18:19:03 +00:00
andrewlewis
bc4dc591f5 Fix some style nits in ID3 chapter support.
Issue: #2316

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144815010
2017-01-18 11:28:06 +00:00
cdrolle
18a24a1fde Added the CEA-708 support to the open-source project.
Issue: #1807

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144726542
2017-01-17 18:50:38 +00:00
Oliver Woodman
1ffe7753c6 Another ID3 bug fix 2017-01-17 17:37:33 +00:00
Oliver Woodman
f1e3d3f244 Enable tunneling end-to-end
- Tunneling can be enabled by calling:
  trackSelector.setTunnelingAudioSessionId(
      C.generateAudioSessionIdV21(this));

- If enabled, tunneling is automatically used when the renderers
  and track selection combination support it. Tunneling is
  automatically turned on and off through playlists if the support
  changes.

Issue: #1688
2017-01-17 17:21:10 +00:00
Oliver Woodman
c828d9b0bf Some ID3 bug fixes 2017-01-17 15:49:51 +00:00
Oliver Woodman
48099ee52e Fix comments 2017-01-17 15:33:35 +00:00
Oliver Woodman
5aff31c061 Further improve ID3 parsing 2017-01-17 15:29:07 +00:00
Oliver Woodman
31602af3e6 Merge branch 'dev-v2' of git://github.com/geekygecko/ExoPlayer into geekygecko-dev-v2 2017-01-17 13:53:50 +00:00
olly
7f967f3057 DASH: Parse Role elements to select default audio/text tracks
Issue: #2058

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144693705
2017-01-17 13:44:14 +00:00
aquilescanta
6e481178ea Track HLS discontinuities when playlist does not declare sequence
This is an initial version that does not handle cross-playlists
adjustment in an ideal way.

Issue:#1789

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144692969
2017-01-17 13:43:18 +00:00
aquilescanta
7d7a159195 Provide sample timestamps and subsample offset for Splice info
This will allow recreating timestamp adjustment on the decoding side.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144692956
2017-01-17 13:42:13 +00:00
olly
0e0b23f11e Update getTrackType for completeness
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144690284
2017-01-17 13:41:10 +00:00
olly
79a0899124 Always re-send format if sample buffer is null
Also clear the playingPeriodHolder in the case the renderers
are being disabled. This is required to ensure that
setPlayingPeriodHolder isn't turned into a no-op, which will
break the seek.

Issue: #2330

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144635220
2017-01-17 13:40:05 +00:00
Philip Simpson
f6ecaddc88 Improved ID3 chapter parsing code from feedback given. 2017-01-17 12:03:18 +10:30
Philip Simpson
5153e9e977 Improved ID3 chapter parsing code from feedback given. 2017-01-17 12:00:48 +10:30
olly
60a3eda1e0 Support tunneling in video renderer
At this point the renderers all have TODOs in enable(),
and turning on tunneling is reduced to the problem of
propagating a tunneling ID to these points.

Issue: #1688

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144619393
2017-01-16 11:43:07 +00:00
ojw28
5742c87755 Merge pull request #2327 from pipelka/audio-seek-fix
reconfigure audiotrack on format change
2017-01-16 09:44:59 +00:00
Philip Simpson
f2f1058066 Added ID3 chapter support. 2017-01-16 17:40:02 +10:30
Oliver Woodman
41c4295aee Fix build break + cleanup 2017-01-16 00:20:51 +00:00
ojw28
a418b132d9 Merge pull request #2318 from WeiChungChang/far_seek_improvement
Improve far seek performance of chunkSampleStream
2017-01-16 00:02:44 +00:00
ojw28
bd744fc508 Merge pull request #2314 from meteoorkip/vector-drawables
Fix vector drawable usage on API level 21 or above
2017-01-16 00:01:13 +00:00
eguven
418cd9e7e3 Make DefaultLoadControl use PriorityTaskManager if one is given
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144448491
2017-01-15 23:54:20 +00:00
Alexander Pipelka
24a0061caa reconfigure audiotrack on format change
under certain circumstances (e.g. seek to a position where the input format
changed) the audio track needs a reconfigure even if there aren't any
pending buffers
2017-01-14 12:14:37 +01:00
WeiChungChang
2214a4c152 'refine_to_make_flow_simpler' 2017-01-14 10:22:27 +08:00
Devin Tuchsen
30c59c7a3f
Apple Lossless (ALAC) support 2017-01-13 20:16:49 -06:00
andrewlewis
5a16aee2c9 Use stereo for mono audio passthrough on fugu.
Also backport the Shield workaround to v1.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144446498
2017-01-13 17:27:26 +00:00
olly
270f68a95e Add convenience methods to query current window
- Support querying whether the current window is dynamic
  and seekable. The new methods are similar to getDuration,
  which is also a convenience method for the current window.
- Improve demo app to restore positions in VOD items within
  playlists where the last item is live. Also restore the
  position within the window for live items unless the player
  failed with BehindLiveWindowException.

Issue: #2320

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144443898
2017-01-13 17:27:26 +00:00
andrewlewis
ca7febe442 Remove unused local variable in AudioTrack.java.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144443010
2017-01-13 17:27:26 +00:00
aquilescanta
28e117d25f Add support for #EXT-X-START tag
This overrides the start position relative to the window.

Issue:#1544

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144434903
2017-01-13 17:27:26 +00:00
eguven
63123f455c Add SimpleCache tests for encrypted index file
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144431191
2017-01-13 17:27:26 +00:00
eguven
5f4d6506e0 Add argument checks and some javadoc to CachedContentIndex
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144430372
2017-01-13 17:27:25 +00:00
olly
0c53a4e913 Add TrackSelectorResult
This class can accommodate extra information that may potentially
be specified by TrackSelectors in the future (e.g. configuration
for renderers). Even if we don't do this, it's cleaner to have a
proper class and an info field to refer to, as opposed to using a
Pair.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144428963
2017-01-13 17:27:25 +00:00
eguven
060f2a5d6f Remove unnecessary parameter and local variables
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144427132
2017-01-13 17:27:25 +00:00
eguven
f194df1149 Close InputStream after read
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144424329
2017-01-13 17:27:25 +00:00
olly
1eede5d5bb Fix gradle/proguard setup
- Add proguard rules for libraries/extensions into .aar files
- Add proguard rules to retain CEA608/708 decoder constructors
- Remove lots of default config from gradle files
- Remove disabling of abort on lint error
- Enable optimizations on release builds of demo app

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144350233
2017-01-13 17:27:25 +00:00
aquilescanta
264ba8cfcf Change MetadataDecoder interface to receive a MetadataInputBuffer
This allows passing a subsampleOffsetUs as in Text decoding.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144334172
2017-01-13 17:27:25 +00:00
aquilescanta
4a6a8553e9 Check #EXTM3U header is present in HLS playlists
Issue:#2301

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144334062
2017-01-13 17:27:25 +00:00
cdrolle
706a6b83a9 Removed the direct-referencing of the Cea608Decoder and Cea708Decoder classes from SubtitleDecoderFactory.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144329795
2017-01-13 17:27:25 +00:00
olly
e125ed705e Report tunneling support via RendererCapabilities API
Also revert ability to query for a decoder that explicitly
supports tunneling, since in the new design we'll just be
querying the first decoder provided by the MediaCodecSelector
and then reporting what it supports. This is in line with
what we do when reporting support for adaptive switching.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144315746
2017-01-13 17:27:25 +00:00
mdoucleff
5752524442 Allow extension of SlidingPercentile
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144240101
2017-01-13 17:26:51 +00:00
olly
cd42434719 Plumbing to enable tunneling on AudioTrack from renderers
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144223539
2017-01-13 17:06:49 +00:00
olly
3547c9034e Report audio decoder adaptation support correctly
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144219518
2017-01-13 17:05:45 +00:00
andrewlewis
2906a2ea09 Simplify AudioTrack.handleBuffer's return value.
Position discontinuities are notified via AudioTrack.Listener.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144202048
2017-01-13 17:04:43 +00:00
olly
444811c010 Don't overflow when dealing with large segment numbers
Issue: #2311

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144182445
2017-01-13 17:03:41 +00:00
andrewlewis
ce03b8c246 Move AudioTrack initialization into handleBuffer.
Move initialization code from the audio renderers into handleBuffer. The audio
session id and tunneling enabled state can be altered using new setters.

This change is not intended to change the behavior of the audio renderers.
Before this change, the AudioTrack would always be reinitialized by the
renderers before calling handleBuffer.

Add a protected onAudioTrackUnderrun method for custom renderers that want to
implement custom handling of underruns.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144067149
2017-01-13 17:02:39 +00:00
eguven
5c89bbedb7 Fix leftover bytes in cached content index file
Extra calls to CipherOutputStream.close() causes each time extra 16 bytes written to the
underlying OutputStream. Prevented close() is called more than once and also discarded any
data in ReusableBufferedOutputStream buffer on reset().

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144063120
2017-01-13 17:01:37 +00:00
Julian Cable
121486738b 10* was an experiment, not wanted. 2017-01-13 08:48:53 +00:00
Julian Cable
ff64d2b382 move Matroska specific code back to the Matroska extractor 2017-01-13 08:04:23 +00:00
WeiChungChang
cb0394b9cf 'improve_far_seek_of_chunkSampleStream' 2017-01-12 10:49:37 +08:00
Julian Cable
d71707f220 Make constructor clearer 2017-01-11 23:11:32 +00:00
meteoorkip
28e221f92e Fix vector drawable usage on API level 21 or above 2017-01-11 20:03:41 +01:00
Julian Cable
8ae8ac79bc move Matroska specific things to the MatroskaExtractor 2017-01-11 08:13:43 +00:00
olly
deefe50abc Handle ID3 frames that end with empty text field
Issue: #2309

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144061654
2017-01-10 10:52:42 +00:00
andrewlewis
bf65df1b35 Allow ClippingMediaPeriod to be used on its own.
ClippingMediaPeriod may be a useful component for other MediaSources too so
remove its dependency on ClippingMediaSource.

Also allow the clipping end point to be TIME_END_OF_SOURCE, in which case
the clipping window extends to the end of the wrapped period.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144056285
2017-01-10 10:51:49 +00:00
olly
59ab0fa9f1 Introduce MetadataDecoderFactory
This is analogous to what we do for text/subtitles, and
adds support for playlists where the type of metadata
changes from one playlist item to the next.

Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143948307
2017-01-10 10:50:52 +00:00
Julian Cable
ac98874021 move header into track.output.format object and then use it in the decoder create method.
This doesn't make a stateless decoder but it is a step in the right direction.
Note that subtitles are not rendering. Is there something wrong with the timecodes?
2017-01-09 23:48:40 +00:00
olly
ae2e84df35 Set HLS period duration when live stream ends
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143776633
2017-01-06 16:59:29 +00:00
olly
1da9e31d68 Parse EMSG boxes in FragmentedMp4Extractor
Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143776526
2017-01-06 16:58:36 +00:00
olly
f2634d11f5 Support emsg metadata decoding
Note: End to end emsg support is still non-functional.
There's some additional plumbing that still needs to
be done.

Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143775147
2017-01-06 16:57:35 +00:00
eguven
9d5c750fe9 Support offline drm key downloading and restoring
Renamed StreamingDrmSessionManager to DefaultDrmSessionManager and added functionality to download, restore, renew and release offline keys. Added a utility class, OfflineLicenseHelper, to facilitate use of DefaultDrmSessionManager for downloading, renewing and releasing offline keys.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143769955
2017-01-06 16:56:31 +00:00
andrewlewis
b2a153d568 Add a player test for renderers reading ahead.
Also move timeline, manifest and format verifications into the test* methods.

Issue: #2252

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143761969
2017-01-06 16:55:09 +00:00
Drew Hill
0468a80d41 just use original plane width to calculate width proportion to use later as size and keep aspect ratio for height 2017-01-05 21:27:24 -05:00
olly
9d48d4e486 Support setting default headers on HttpDataSource.Factory's
Issue: #2166

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143703258
2017-01-05 21:57:36 +00:00
andrewlewis
a77bc8d457 Close DataSources quietly.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143672900
2017-01-05 21:56:34 +00:00
cdrolle
01d22f8123 Handle empty RawCC files.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143667717
2017-01-05 21:54:15 +00:00
Oliver Woodman
8a0e76ba32 Make sure we don't read ahead of deferred enable/disable operations
Issue: #2290
2017-01-05 14:58:13 +00:00
Oliver Woodman
037aeaf764 Some minor cleanup 2017-01-05 14:57:31 +00:00
olly
1d9d68dd12 Assume samples are at start of mdat when offset is negative
We've seen this issue reported three times now, so it's
obviously not an isolated problem. Do you think anything
bad will happen to non-SmoothStreaming playback cases if
I do this? I suspect not, but if you feel strongly I can
easily add a FLAG_WORKAROUND_X flag for it, and enable
it for SmoothStreaming only.

https://github.com/google/ExoPlayer/issues/2292
https://github.com/google/ExoPlayer/issues/2101
https://github.com/google/ExoPlayer/issues/1152

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143583714
2017-01-04 23:07:58 +00:00
eguven
4a0f224e12 Add a new flag to DataSpec which permits content to be cached even if its length can not be resolved
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143560360
2017-01-04 23:07:58 +00:00
olly
5082d1f282 Some boilerplate for DASH EMSG support
- Parse EMSG leaf atoms during FMP4 extraction (although
  currently they're just discarded).
- Add readNullTerminatedString to ParsableByteArray.

Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143555965
2017-01-04 23:07:58 +00:00
olly
f735a86ebb Better handle inconsistent HLS timeline updates
Issue: #2249

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143555467
2017-01-04 23:07:58 +00:00
olly
44d6b1a271 Add some initial plumbing for DASH EMSG support
Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143554094
2017-01-04 23:07:58 +00:00
olly
ae30fe496a Fix potential NPE if source is released without being prepared
Issue: #2264

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143550088
2017-01-04 23:07:57 +00:00
olly
2512bd6e77 Add test for decoding ID3 PRIV frame
I wrote this whilst investigating a user issue. It looks like
we don't need to do anything about the issue itself, but since
I wrote the test we may as well keep it!

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143549697
2017-01-04 23:07:57 +00:00
olly
b774660989 Add multi-period ExoPlayer unit test
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143475824
2017-01-04 23:07:57 +00:00
olly
46245251e1 Fix bad indent + clean up Format formatting
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143469714
2017-01-04 23:04:07 +00:00
olly
361241f81c Make SeekBar work properly with key events if focusable
This isn't perfect because it performs seeks whilst the
user is holding down L/R, rather than when they release
it. Performing the seek on release properly looks non
trivial, and would likely require extending SeekBar.

Issue: #2278

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143440580
2017-01-04 23:04:07 +00:00
andrewlewis
04968a6da5 Fix condition for re-enabling renderers to handle reading ahead.
Issue: #2252

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143433510
2017-01-04 23:04:07 +00:00
olly
faff5ec910 Add masking to correctly select renderer
Issue: #2269

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143433012
2017-01-04 23:04:07 +00:00
eguven
39827fad27 Allow specifying a custom cacheKey to ExtractorMediaSource
Issue: #2201

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142772885
2017-01-04 23:04:07 +00:00
Oliver Woodman
0b141aeeee Revert "Improving handling of atoms with size less than header in FragmentedMp4Extractor."
This reverts commit 71186ef16e.
2017-01-04 22:32:28 +00:00
cblay
71186ef16e Improving handling of atoms with size less than header in FragmentedMp4Extractor.
These currently lead to cryptic ArrayIndexOutOfBoundsExceptions being thrown from System.arraycopy() so my proposal is to throw a more useful ParserException instead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142087132
2017-01-04 22:26:58 +00:00
ojw28
da9c10a1b4 Merge pull request #2285 from colinrtwhite/dev-v2
Use vector drawables for the SimpleExoPlayer player control buttons.
2017-01-03 19:43:34 +00:00
Colin White
b1ea1873d3 Use Material Design drawables for the SimpleExoPlayer player control buttons. 2017-01-03 14:34:45 -05:00
meteoorkip
eda393ba82 Add default artwork support to SimpleExoPlayerView
Add support for a default artwork image that is displayed if no artwork can be found in the metadata.
2017-01-02 22:20:04 +01:00
Julian Cable
ef2d7c7fd5 tests pass. 2017-01-02 15:49:30 +00:00
Julian Cable
b692d9fac5 tidy and make compatible with test. 2017-01-02 14:48:03 +00:00
Julian Cable
e99ad27847 not needed 2017-01-02 14:35:23 +00:00
Julian Cable
1364e2337d add test files for SSA. 2017-01-02 14:29:59 +00:00
Julian Cable
08e1d356ad add changed files for SSA from branch 2017-01-02 14:20:14 +00:00
Julian Cable
246a0dc86e add SSA/ASS specific files from branch 2017-01-02 14:07:29 +00:00
drhill
8804ecded4 remove unneeded changes 2016-12-21 07:54:23 -05:00
Drew Hill
44b21f2e3b remove imagecue and add bitmap to cue with size_height, change to painter for displaying 2016-12-20 22:49:18 -05:00
Oliver Woodman
0d135d37b8 Add comment for workaround 2016-12-20 12:33:04 +00:00
ojw28
efc8f6fe42 Merge pull request #2134 from drhill/dev-v2_passthroughChannelFix
fix 6.1 channel passthrough failing
2016-12-20 12:26:19 +00:00
olly
a007d9a2e7 Bump version + update release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142539314
2016-12-20 11:39:12 +00:00
olly
ab88821614 Fix large timestamps for HLS playbacks
- If there's no program-date-time then this change is
  a no-op.
- If there is a program-date-time this change considers
  the period as having started at the epoch rather than
  at the start of the content. The window is then set
  to start at the start of the content. This is a little
  weird, but is required so that the period sample
  timestamps match the start of the period. Note that
  this also brings the handling of on-demand in line
  with how the live case is handled, meaning there wont
  be weird changes if a live stream changes into an
  on-demand one.

Issue: #2224

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142442719
2016-12-19 15:12:55 +00:00
Drew Hill
47d8b7ff16 get source dimensions from plane stored in subs 2016-12-18 22:37:37 -05:00
Drew Hill
5d0501be82 less interfacy.. more classy 2016-12-17 14:43:07 -05:00
Drew Hill
8277999b16 add imageview into simpleexoplayerview to display subtitles that are image based 2016-12-17 13:39:47 -05:00
olly
4bb8793203 Deduplicate reported position discontinuities
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142257743
2016-12-16 16:21:16 +00:00
olly
e0586a48f0 Correctly offset subsample timestamps.
This has always been broken in V2, but the issue is now also
visible for the very first period in the timeline because we
offset if by 60s. Previously the issue would only have been
visible from the start of the second period.

Issue: #2208

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142252702
2016-12-16 16:21:16 +00:00
anjalibh
6c4795b496 Prevent frozen frames when the decoder is always late.
Create a MediaCodecVideoTrackRenderer.shouldDropFrame function that can be overriden by a child class. The YouTube override prevents a frame drop if we haven't rendered anything in the last 35 ms.

The YouTube override is off at the moment, I plan to use a server side flag to do a slow and controlled experiment.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142190774
2016-12-16 16:21:16 +00:00
cdrolle
65490f52f8 Added support for handling window/cue priority and fill color to Cue and SubtitlePainter.
Cue has been modified to optionally accept a fill color and a toggle specifying when to use the fill color. When the fill color toggle is set, then SubtitlePainter will use the fill color value instead of the color specified by the device's Accessibility settings. Cea708Decoder has also been modified to propagate that value, as well as cleaned up (in terms of documentation) to prepare it for inclusion in the open-source project.

There is also a new Cea708Cue, extending Cue, which holds the Cue's priority, which is used to sort potentially overlapping cues/windows.

Note that I've left the @ClosedSource annotation and logging in this CL. I intend to start testing the 608 and 708 functionality in the Fiber app to ensure that it works as expected on a wide-range of channels (as opposed to the single channel in ExoPlayer Demo) before removing these.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142173264
2016-12-16 16:21:16 +00:00
olly
04992fdaac Move AudioTrack.SESSION_ID_NOT_SET to C
It's a nicer place for it to live once it starts being passed
around more widely (e.g. through the video renderer, for
tunneling)

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142158460
2016-12-16 16:21:16 +00:00
olly
588124da76 Test playback of empty timeline completes successfully
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142157778
2016-12-16 16:21:16 +00:00
olly
5bb1d5dc99 Add tunneling functionality to AudioTrack
Although the underlying platform AudioTrack is capable of
writing the AV sync header from M onward, I've opted not
to use the functionality since it appears to allocate an
unnecessary (and large) number of ByteBuffers. We can swap
over from O if this is addressed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142138988
2016-12-16 16:21:16 +00:00
olly
2c3ce7fee3 Fix playback of media with >1MB preparation data
Also clarify when getNextLoadPositionUs and continueLoading
can be called.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142124497
2016-12-16 16:21:16 +00:00
cblay
37317520f4 Improving handling of atoms with size less than header in FragmentedMp4Extractor.
These currently lead to cryptic ArrayIndexOutOfBoundsExceptions being thrown from System.arraycopy() so my proposal is to throw a more useful ParserException instead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142087132
2016-12-16 16:21:16 +00:00
ojw28
fefef0f941 Merge pull request #2183 from WeiChungChang/proposal-fix
Fix the issue when the sequence of PTS is out of order by bidirectional prediction for skipToKeyframeBefore()
2016-12-14 18:06:52 +00:00
olly
42c7ea422d Update SDK_INT
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142016285
2016-12-14 16:22:48 +00:00
olly
88d2a6a348 Bump version + update release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142015031
2016-12-14 16:22:48 +00:00
olly
31e2fa8597 Add hook for modifying or cancelling a user invoked seek
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142007001
2016-12-14 14:23:38 +00:00
andrewlewis
f276eb2ce7 Add ClippingMediaSource.
ClippingMediaSource wraps a single period/window video-on-demand source and
exposes a specified time range within it.

Issue: #1988

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141991215
2016-12-14 14:23:38 +00:00
aquilescanta
8a7628cb26 Remove playlist adjustment on chunk loads
This is particularly problematic for subtitle tracks where adjustment
can be broken. Now, the primary url can change when clients ask for a
variant snapshot, instead of happening on chunk load as before.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141933689
2016-12-14 14:23:38 +00:00
andrewlewis
48072f2155 Improve binary search functionality and javadoc.
Define what element is returned if inclusive is true and there are multiple
elements equal to the input value.

Clarify/fix javadoc.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141891741
2016-12-14 14:23:38 +00:00
andrewlewis
41d078ca4b Reset readEndOfStream in resetPosition.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141870244
2016-12-14 14:23:38 +00:00
aquilescanta
0b1a6fe9b1 Ignore discontinuities in TSs for HLS
Issue:#1921
Issue:#1978
Issue:#2163
Issue:#2172

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141797474
2016-12-14 14:23:38 +00:00
olly
2a79931ec5 Fix onTimelineChanged call (timeline should never be null).
Issue: #2186

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141790023
2016-12-14 14:23:38 +00:00
Lisa Luo
7e66ec5841 Change Sink to Source in license header 2016-12-13 14:29:15 -05:00
olly
759cb32315 Try exceeding renderer capabilities by default
Not sure what I think about this, but we're getting quite
a lot of issues reported where streams play fine but capabilities
indicate they wont. It's probably best just to cross our fingers
and hope for the best in such cases, as was the case in V1 when
using ExtractorSampleSource.

Issue: #2157
Issue: #2034
Issue: #2007

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141758070
2016-12-12 16:15:38 +00:00
olly
1055c520cc Remove side effects from SeekMap.getPosition implementations
Issue: #2167

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141451444
2016-12-12 16:15:38 +00:00
andrewlewis
f45751872d Move track sample index updates out of getPosition(long).
This requires knowing the seek time in Extractor.seek, so that it's possible to
pick the latest synchronization sample at/before the seek time for each track
(rather than the earliest synchronization sample after the seek position).

Also remove the STATE_AFTER_SEEK state which should no longer be needed.

Issue: #2167

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141432598
2016-12-12 16:15:38 +00:00
aquilescanta
2fce364936 Ignore Splice Info in HLS TS media chunks
Issue:#2070

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141335458
2016-12-12 16:15:38 +00:00
olly
1518927e12 Fix seeking backward from end of last period.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141299172
2016-12-12 16:15:38 +00:00
aquilescanta
1cbc0fc678 Allow HlsPlaylistTracker to change the primaryHlsUrl
When the primary url is blacklisted (due to a 404, for example) or
the selected variant is different from primary url, allow the tracker
to change the url.

Issue:#87

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141291435
2016-12-12 16:15:38 +00:00
WeiChungChang
63966a3736 Fix the issue when the sequence of PTS is out of order by bidirectional prediction for skipToKeyframeBefore() 2016-12-12 20:34:09 +08:00
aquilescanta
a66b4a9bad Parse ID3 sample timestamp for HLS audio chunks
Pending improvement:

* Peek just the required priv frame. Avoid decoding all id3 information.
* Sniff the used container format instead of using the extension.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141181781
2016-12-06 20:06:37 +00:00
olly
e5bc00ea94 Fix DataSourceInputStream + add unit test
Issue: #2162

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141177715
2016-12-06 20:06:04 +00:00
olly
2db7c50d7c Fix test.
The definition of negative line indices was intentionally shifted
by one because the way VTT defines them doesn't appear to allow for
cues to be positioned at the very bottom of the screen in the case
that ANCHOR_TYPE_END is used.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141168028
2016-12-06 20:05:23 +00:00
olly
4db6f1e495 Expose whether decoders support tunneling
This is a first step toward supporting tunneled playback

Issue: #1688

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141167501
2016-12-06 20:04:44 +00:00
olly
99957bbae7 Correctly handle dynamic playlist modifications
- Fix bug where we'd try and call replaceStream having already
  notified the renderer that the current stream is final. This
  could occur if a period was added to the end of the playlist.
- If the current period being played is removed and a new period
  to play cannot be resolved, assume we've gone off the end of
  the playlist and transition to the ended state. This allows
  the current source to be re-used (unlike the previous behavior
  of considering it an error). Treat valid seeks that cannot be
  resolved due to concurrent timeline update similarly.
- Add seek sanity check back to ExoPlayerImpl. Meh. It's probably
  best to keep this, since it stops the exposed window index
  being invalid w.r.t the exposed timeline.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141167151
2016-12-06 20:04:01 +00:00
olly
9ea8b02083 Correctly handle reading of an empty string without a terminating NUL byte
Issue: #2152

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141159330
2016-12-06 20:03:21 +00:00
olly
e86bfd6dbe Improvements for 608 positioning
- Infer likely left/center/right alignment for pop-on captions.
  This makes the rendering much better in practice, particularly
  when the captions were intended to be center aligned.
- Fix line anchoring.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141156222
2016-12-06 20:02:42 +00:00
cdrolle
88c0695bd0 Added safe-area adjustment (i.e. padding) to CEA-608 captions and fixed minor issue with rollup.
CEA-608 specifies a "safe-area" in which the captions should be rendered. This change adjusts all of the cue positions so they are within that safe area. It also fixes a minor issue in which roll up captions would drift towards the last row if a preamble address code had the "next row toggle" bit set.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141077433
2016-12-06 20:01:57 +00:00
aquilescanta
931670957f Add support for multiple table sections in PSI section
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141073182
2016-12-06 20:01:13 +00:00
olly
db215ff156 Make invalid seek positions fail on playback thread only
Seeks are permitted when there's no timeline, and in this
case playback necessarily fails on the playback thread when
the timeline becomes known. Pushing failure to the same
place when the timeline is known means there's only one
failure path for this case. A later CL will likely introduce
an InvalidSeekPositionException for this case.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141037708
2016-12-06 20:00:24 +00:00
olly
88fc682dde Expose manual playback control hiding from SimpleExoPlayerView
Issue #2146

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141036866
2016-12-06 19:59:41 +00:00
andrewlewis
01acc0e201 Remove unnecessary final.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141031900
2016-12-06 19:58:56 +00:00
drhill
cc24c4e38b change to switch to avoid changing 4.0 tracks 2016-12-06 08:08:58 -05:00
Oliver Woodman
fda2d143e4 CEA 608 bugfix 2016-12-02 19:48:59 +00:00
Oliver Woodman
421dab433a Restore accidentally clobbered SimpleExoPlayerView change 2016-12-02 19:47:50 +00:00
Oliver Woodman
d6d59ef07e Restore accidentally clobbered MKV change 2016-12-02 19:42:54 +00:00
olly
bbbd61e319 Skip negative SubRip timecodes
Issue: #2145

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140868079
2016-12-02 19:37:14 +00:00
andrewlewis
e0649db513 Handle input format changes in SimpleDecoderAudioRenderer.
This is implemented in the same way as in MediaCodecRenderer.

Move codec != null guard into feedInputBuffer to handle the case of an input
format change with no dequeued buffers where the codec can't be reinitialized
immediately.

Issue: #2111

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140864942
2016-12-02 19:35:09 +00:00
eguven
7ea16a6ae2 Remove unused parameter
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140847027
2016-12-02 19:29:36 +00:00
andrewlewis
164b406e23 Clean up loading period update.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140843106
2016-12-02 19:26:30 +00:00
andrewlewis
45bc4a0374 Pass player and isTopLevelSource to MediaSource.prepareSource.
These additions are useful for sources that need to track the playback position
and control playback.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140828310
2016-12-02 19:23:35 +00:00
Oliver Woodman
0a52e823de Use constant for MPEG max frame size 2016-12-02 16:29:11 +00:00
ojw28
b5437907cf Merge pull request #2135 from drhill/dev-v2_mp2
add mp2 audio
2016-12-02 16:28:35 +00:00
Oliver Woodman
a7736e101f Merge branch 'dev-v2_subtitles_view' of git://github.com/drhill/ExoPlayer into drhill-dev-v2_subtitles_view 2016-12-02 16:27:29 +00:00
Drew Hill
e22c42c7c2 requested changes for simplicity 2016-12-01 19:30:27 -05:00
Drew Hill
3884641464 switch to proper mimetype 2016-12-01 16:41:23 -05:00
Drew Hill
8fcc8c63ef change to getview call instead of set property 2016-12-01 16:25:49 -05:00
Oliver Woodman
e803bff2b1 Don't log FileNotFoundException while reading cache index file 2016-12-01 19:29:07 +00:00
Oliver Woodman
0cc874dd01 Fix indentation 2016-12-01 18:35:14 +00:00
Oliver Woodman
a6ccedf741 Merge branch 'eia-608-improvements' of git://github.com/RikHeijdens/ExoPlayer into RikHeijdens-eia-608-improvements 2016-12-01 18:31:39 +00:00
Oliver Woodman
7a18738dfa Clean up AudioTagPayloadReader 2016-12-01 17:25:08 +00:00
Greg Slomin
2d1f151cb9 Added support for PCM u/a-law audio in FLV containers 2016-12-01 10:32:55 -06:00
olly
53dcb82862 Merge pull request #2131
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140720011
2016-12-01 13:47:32 +00:00
eguven
f3dbb74613 Fix unnecessary rewrite of cache index file after CachedContentIndex.readFile()
Prevented readFile() setting "changed" boolean to true every time. It's set only if encryption key is set but the index file isn't encrypted.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140714173
2016-12-01 13:46:52 +00:00
Drew Hill
214c55b665 add function to change subtitles style 2016-11-30 19:44:47 -05:00
Drew Hill
db4b478cc0 fix 6.1 channel passthrough failing 2016-11-30 18:47:36 -05:00
Drew Hill
0752f790c7 add mp2 audio 2016-11-30 18:42:13 -05:00
olly
836cefcdd6 Remove CC validity checks in SeiReader (now performed in decoder)
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140642357
2016-11-30 22:05:27 +00:00
olly
8bc7da5681 Finish fixing playback control focus
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140635851
2016-11-30 22:04:54 +00:00
olly
195a93e5af Fix playback control focus
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140623107
2016-11-30 22:04:18 +00:00
andrewlewis
8dc8104059 Load the next period only if its start point is known.
If a period has no enabled tracks it is considered to be fully buffered, even
if its duration is unknown. This would cause the offset of the next loading
period to be set based on the unset duration of the preceding period, in turn
causing the from of the player to expose a position based on an unset value.

Only load the next period when the current one has a known duration. If a
period has no enabled tracks and an unknown duration this causes the player to
play the period indefinitely.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140613858
2016-11-30 22:03:36 +00:00
olly
45c68a2fd5 Use separate mimeType for CEA-608 embedded in MP4
When CEA-608 is embedded in MP4 each packet consists of
cc_data_1 and cc_data_2 only. The marker_bits, cc_valid
and cc_type are implicit. As a result playback of CEA-608
embedded in MP4 broke when we started passing the extra
byte for the TS case (and adjusted the decoder to assume
the byte was present).

This change introduces a special mimeType for the case
where the byte is implicit (!). An alternative option
was to insert the extra byte every 2 bytes in the MP4
extractor, but this is really quite fiddly to get right.

Also made the loops in the 608/708 decoders robust against
input of the wrong length.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140609304
2016-11-30 22:02:55 +00:00
aquilescanta
f702568776 Skip tables with unexpected table_id for PAT and PMT readers
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140606435
2016-11-30 22:02:16 +00:00
eguven
257671467f Fix possible failure in CachedContentIndex encrypted cache index file read.
Encryption key in index file is read by DataInputStream.read() which may return less bytes than required. Replaced it with readFully() which should read full length of data.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140597693
2016-11-30 22:01:00 +00:00
aquilescanta
501f54a8a6 Add #EXT-X-PROGRAM-DATE-TIME support for HLS media playlists
Issue:#747

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140525595
2016-11-30 22:00:17 +00:00
olly
91c58627be Fix lint errors
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140488486
2016-11-30 21:59:32 +00:00
olly
7bbe213e57 Add option to select track that exceeds renderer capabilities
Leaving disabled by default for now, but we may want to consider
enabling it by default. Note that in V1 for ExtractorSampleSource
the behaviour was equivalent to this option being enabled, since
we didn't perform capabilities checks. For DASH/SS/HLS the V1
behaviour was equivalent to this option being disabled.

The type in PlayerActivity has been changed just to make it
easier to add a line that calls setParameters.

Issue: #2034
Issue: #2007
Issue: #2078

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140477568
2016-11-30 21:58:13 +00:00
cdrolle
2753664c6b Fixed an error in the date and time parser's handling of time zones.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140400905
2016-11-30 21:57:29 +00:00
olly
2550362fa2 Clean up playback controls xml a little
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140374149
2016-11-30 21:56:48 +00:00
olly
eb81da7f2d Remove unnecessary layer in view hierarchy
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140369506
2016-11-30 21:56:04 +00:00
olly
73220be19b drainOutputBuffer return false on EOS
I can't see how this would ever make a difference, but there's no
point in returning true. Either we've really reached EOS (in which
case outputStreamEnded will be true and the next drainOutputBuffer
will be turned into a no-op) or we've re-initialized the codec (in
which case there wont be anything to drain since we wont have fed
anything to the codec yet).

This change should also prevent the hypothetical NPE described in
issue #2096, although we're unsure how that NPE would occur unless
MediaCodecRenderer has been extended in an unusual way.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140338581
2016-11-30 21:55:25 +00:00
andrewlewis
f9c7343e76 Add basic unit test for ExoPlayer/ExoPlayerImplInternal.
The simple verifications in this test may be useful for smoke testing, but the
coverage of ExoPlayerImplInternal is low. The intention is to add tests for
more complex logic in ExoPlayerImplInternal in later changes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140327358
2016-11-30 21:54:05 +00:00
aquilescanta
c3c176d93c Move HLS extractor construction to HlsMediaChunk
This allows ID3 PRIV timestamp extraction and Extractor Sniffing.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140209568
2016-11-25 20:18:32 +00:00
olly
2e3ffe1e94 Assume support for vertical video if rotated resolution supported
Issue: #2034

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140209306
2016-11-25 20:18:32 +00:00
olly
ee9b7be2fa Fix issue with seeking before timeline available
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140204054
2016-11-25 20:18:32 +00:00
andrewlewis
76c58a34d3 Clarify createPeriod javadoc.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140202942
2016-11-25 20:18:32 +00:00
aquilescanta
9c612f94c5 Chose timestamp adjustment master based on track selection
Select the timestamp master depending on track availability. If
a variant is being loaded, then that is the timestmap master.
Otherwise, if an audio track is being loaded, then the responsible
chunk source is the timestmap master. If no variant or audio
rendition is enabled, then a subtitle chunk source is selected as
timestamp master. This CL will become specially relevant once
ID3 PRIV timestamps are used for audio renditions.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140201385
2016-11-25 20:18:32 +00:00
olly
ce9ec79e59 Make Timeline always non-null from ExoPlayer
Note that we still have null timelines in ExoPlayerImplInternal.
This is deliberate; and is likely necessary to distinguish between
the no-timeline-yet and timeline-is-empty cases (we want to try
and process a pending seek for the latter, but not the former).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140200980
2016-11-25 20:18:32 +00:00
aquilescanta
97a23ce572 Fix main thread playlist refreshes in HlsPlaylistTracker
The refresh handler in HlsPlaylistTracker was being instantiated in the
same thread as the MediaSource (i.e. Main thread).

Issue:#2108

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140197553
2016-11-25 20:18:32 +00:00
olly
894ae1a310 Improve SimpleExoPlayer flexibility
- Allow extension and overriding of renderer creation.
  Several developers have asked for this, so that they
  can use their own renderers (typically extensions to
  the core ones) without losing the ability to use
  SimpleExoPlayer.
- Add option to not attempt extension renderer creation,
  for efficiency.
- Align build variants for internal and external demo
  apps. This is slightly unfortunate, but convergence
  seems necessary for useExtensionRenderers.
- Fix DASH playback tests to use the debug video
  renderer.

Issue #2102

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140140915
2016-11-25 20:18:32 +00:00
olly
62bdb1b93a Fix failure when a seek is performed with no enabled tracks
This issue affects ExtractorMediaSource only. We shouldn't
start loading in the case that we're prepared and have no
enabled tracks, since there's nothing that we need to load.
This was causing an assertion failure in startLoading.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140030650
2016-11-25 20:18:32 +00:00
aquilescanta
a7dff14d3c Keep TS packets with no continuity counter increase and no payload
This behavior is defined in ISO-13818-1, section 2.4.3.3(continuity_counter).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140029161
2016-11-25 20:18:32 +00:00
olly
eb62d00ea4 ExoPlayerImplInternal cleanup
- Fix handling of the currently playing period being
  removed. This didn't do the right thing at all.
- Relax rule on seekToPeriodPosition re-using an
  existing holder.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140014791
2016-11-25 20:18:32 +00:00
olly
b3726cf761 Support DASH multi-segment fetches
Note that multi-segment fetching is only possible in the
case that segments in a representation are defined to have
the same Uri and adjacent ranges (this is very rarely true
for live streams, but is quite often true for on-demand).
In the case that merging is requested but not possible,
the implementation will request one at a time.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140012443
2016-11-25 20:18:32 +00:00
eguven
b29ff0cf51 Make CacheDataSink use ReusableBufferedOutputStream
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140010664
2016-11-25 20:18:32 +00:00
eguven
fa3d129b14 Fix some of the issues pointed by android lint tool
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139915885
2016-11-25 20:18:32 +00:00
aquilescanta
6101450302 Merge initialization chunk into HlsMediaChunk
This will allow creating the extractor in the HlsMediaChunk.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139915713
2016-11-25 20:18:32 +00:00
aquilescanta
9ac7f64c84 Fix search to end of stream in HLS
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139905590
2016-11-25 20:18:32 +00:00
andrewlewis
77715fbfbe Fix some analysis warnings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139901449
2016-11-25 20:18:32 +00:00
eguven
e84fa5835d Use ReusableBufferedOutputStream for cache index file write operation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139889957
2016-11-25 20:18:32 +00:00
olly
42fadfe083 Allow SsMediaSource to take an optional SsManifest
Also allow custom SsManifestParser injection.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139813660
2016-11-25 20:18:32 +00:00
olly
81ce6bba7a Allow DashMediaSource to take an optional DashManifest
Also allow custom DashManifestParser injection, to
support parsing of custom elements and attributes that
service providers may wish to include in their manifests
(e.g. #2058).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139813108
2016-11-25 20:18:32 +00:00
olly
4f3ab7b22d ExoPlayerImplInternal: Some more minor cleanup
- This should be a no-op change
- Inline attemptRestart
- Clean up processing of pending seeks

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139804630
2016-11-21 19:15:13 +00:00
olly
9d7d8adc9c Allow changing of video scaling mode
Issue #2016

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139803888
2016-11-21 19:14:39 +00:00
andrewlewis
ae0ac55b8d Add support for resetting the AudioTrack stream type.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139797714
2016-11-21 19:13:34 +00:00
olly
060ca4aecc ExoPlayerImplInternal cleanup
- Make handleSourceInfoRefreshed clearer.
- Remove bufferAheadPeriodCount. Seems error prone.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139774580
2016-11-21 19:13:02 +00:00
dsantoro
adc9dd1c75 Add null checks to closeQuietly calls.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139738429
2016-11-21 19:12:26 +00:00
ccwu
6dbfdecbe0 Let the mp4 extractor support "camm" metadata tracks.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139626848
2016-11-21 19:11:43 +00:00
olly
4a30dff524 Fix NPE in TextTrackRenderer
Issue: #2081

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139566990
2016-11-18 12:54:36 +00:00
aquilescanta
cafe603694 Allow regressing media sequence numbers in HLS media playlists
This is techically not allowed by the spec[1] but might still occur in
certain scenarios. New playlists with older media sequence numbers are
ignored.

[1]: HLS draft version 20, section-6.2.1

Issue:#2059

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139564889
2016-11-18 12:54:03 +00:00
olly
d890c2f48f Fix infinite loop -> ANR at end of HLS playbacks
continueLoading shouldn't return true unless it's done
something. Always returning true if endOfStream was
causing CompositeSequenceableLoader.continueLoading to
loop forever.

It looks like the same issue exists in ChunkSampleStream
as well, although I can't seem to provoke DASH or SS
playbacks into doing anything bad as a result.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139559834
2016-11-18 12:53:24 +00:00
eguven
35054f8f7c Added ReusableBufferedOutputStream.
ReusableBufferedOutputStream is a subclass of BufferedOutputStream with a reset(OutputStream) that allows an instance to be re-used with another underlying output stream.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139505999
2016-11-18 12:52:46 +00:00
olly
f57434006f Fix potential NPE in ExoPlayerImplInternal
I'll have a more thorough refactor of some of this class
fairly soon!

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139451693
2016-11-18 12:51:22 +00:00
olly
61c9c16954 Make sure we report video size after Surface is set
Issue: #2077

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139451511
2016-11-18 12:50:41 +00:00
eguven
051be5c588 Use buffers to speed up cache index file io.
Use BufferedOutputStream and BufferedInputStream while writing / reading.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139446039
2016-11-18 12:50:04 +00:00
aquilescanta
a8a2ef4a24 Blacklist HLS media playlists that return 4xx error codes
Issue:#87

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139443476
2016-11-18 12:49:24 +00:00
yutingtseng
2add12d5f7 Update CacheDataSink to optionally use a BufferedOutputStream for writing
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139381958
2016-11-18 12:48:41 +00:00
cblay
92d34cd877 Add flag to CacheDataSource to disable caching unset length requests.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139377417
2016-11-18 12:48:09 +00:00
aquilescanta
d6eb9cb79f Allow playlists of different size in HlsPlaylistTracker playlist adjustment
Issue:#2059

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139331670
2016-11-18 12:47:36 +00:00
andrewlewis
0effffb89f Add support for reading .mp3 boxes in stsd.
This is used by Quicktime for MP3 tracks.

Issue: #2066

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139209989
2016-11-18 12:47:02 +00:00
aquilescanta
21e3361dfe Move 3 private methods to the end of the class
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139204000
2016-11-18 12:46:31 +00:00
andrewlewis
348b58021d Move underrun detection into AudioTrack.
This removes duplication from SimpleDecoderAudioRenderer and
MediaCodecAudioRenderer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139187254
2016-11-18 12:45:58 +00:00
andrewlewis
bcc6c9ef43 Fix a typo.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138871293
2016-11-18 12:44:21 +00:00
eguven
ff1a008817 Delete temporary test folders on test exit.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138860196
2016-11-18 12:43:48 +00:00
eguven
92a98d1ce2 Encrypt SimpleCache index file.
Clean up AtomicFile and make it return a custom FileOutputStream
for writing which handles IOException automatically during write
operations.

It also syncs the file descriptor and deletes the backup file on
close() call. This fixes the order of flush and close operations
when the fileoutputstream is wrapped by another OutputStream.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138779187
2016-11-10 21:15:35 +00:00
cblay
16ddc84d93 Make PriorityTaskManager constructor public.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138759164
2016-11-10 21:15:35 +00:00
olly
8cc7dfda7d Fix threading issues between ExoPlayerImpl/ExoPlayerImplInternal
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138758739
2016-11-10 21:15:35 +00:00
olly
7ac1cab2d5 Set language to null unless explicitly defined as "und" in container
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138758504
2016-11-10 21:15:35 +00:00
olly
2620045b0d Add debug logging when codec support checks fail
Issue: #2034

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138698239
2016-11-10 21:15:35 +00:00
olly
aefc5165fd Fix cache upgrade
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138687623
2016-11-10 21:15:28 +00:00
aquilescanta
b1fe274df3 Replace java.text.ParseException for ExoPlayer's ParserException
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138628300
2016-11-10 21:15:20 +00:00
andrewlewis
8236efe6a5 Provide an overlay FrameLayout in SimpleExoPlayerView.
This can be used by the app for showing arbitrary UI on top of the player (for
example, UI elements associated with an ad).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138610733
2016-11-10 21:15:20 +00:00
olly
d5cbb101ed SimpleExoPlayerView: Remove a bit of dead code
These variables are never read, since the underlying control
view reads them directly from the attrs.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138528246
2016-11-10 21:15:20 +00:00
olly
7b0effc2d0 Project default start pos to fix VOD->Live transitions
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138493584
2016-11-10 21:15:20 +00:00
olly
89ad5e6db3 Fix ExoPlayerImplInternal timestamp conversions
This fixes VOD->Live transitions, with the caveat that
the Live portion still ends up further behind the live
edge than intended. This will be fixed in a following
change.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138407066
2016-11-10 21:15:20 +00:00
olly
3c8db3b9cb Pass Timeline back with seek position
This change fixes the race condition where the internal
timeline is different to the externally visible timeline
when a seek is performed. We now resolve the seek position
using the externally visible timeline, then adjust the
period index as required for the internal timeline. If the
period is missing we follow similar logic for the existing
case where the playing period is removed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138402076
2016-11-10 21:15:20 +00:00
cdrolle
a4935a9ba0 Added support for multiple RawCC (CEA-608/CEA-708) tracks in DASH.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138392065
2016-11-10 21:14:57 +00:00
aquilescanta
0354ef24d4 Add support for splice info section reading in TS
This CL adds a SpliceInfoDecoder for the most common SCTE35 commands for splcing.
So far, it only includes TransportStreams, but porting it to HLS and DASH should be
fairly easy.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138389807
2016-11-10 21:14:57 +00:00
hoangtc
4cd8c77053 Add layer of indirection for DRM.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138383979
2016-11-10 21:14:29 +00:00
eguven
a6e2770116 Upgrade SimpleCacheSpan files during createCacheEntry call.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138379386
2016-11-10 21:14:29 +00:00
eguven
ff77d1e72c Add index file to hold header information for cached content.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138373878
2016-11-10 21:14:29 +00:00
aquilescanta
992cfdecc2 Feed timestamps from loaded chunks back to the playlist tracker
This is the first step towards allowing discontinuities in the
playlist tracking. Also changed durationSecs for durationUs in
MediaPlaylist.Segment.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138207732
2016-11-10 21:14:29 +00:00
olly
a5a2bc89f4 Push window->period seekTo conversions into ExoPlayerImplInternal
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138185910
2016-11-10 21:14:29 +00:00
olly
3e2cb9f89a Fix incorrect renderer reset enable position
handlePeriodPrepared
->setPlayingPeriodHolder
->enableRenderers

passes rendererPositionUs to renderer.enable(), but
this value is not set correctly.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138176114
2016-11-10 21:14:29 +00:00
zhihuichen
e2081f40fb move baseUrl from segments to representations: V2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138136090
2016-11-10 21:14:29 +00:00
olly
6c7ead5d0c Document all the ways our new UI components can be customised.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138082864
2016-11-10 21:14:28 +00:00
cdrolle
d9421f4fb9 Fixed issue when VOD-style period is present in a dynamic manifest
A VOD-style period in a dynamic manifest would result in a NullPointerException.
Also fix another issue in which an unrecognized mime type would also result in
NullPointerException.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138075137
2016-11-10 21:13:28 +00:00
aquilescanta
aaf38adc26 Add support for HLS live seeking
In order to expose the live window, it is necessary (unlike before) to refresh
the live playlists being played periodically so as to know where the user can
seek to. For this, the HlsPlaylistTracker is added, which is basically a map
from HlsUrl's to playlist. One of the playlists involved in the playback will
be chosen to define the live window. The playlist tracker it periodically.
The rest of the playilst will be loaded lazily. N.B: This means that for VOD,
playlists are not refreshed at all. There are three important features missing
in this CL(that will be added in later CLs):

* Blacklisting HlsUrls that point to resources that return 4xx response codes.
    As per [Internal: b/18948961].
* Allow loaded chunks to feed timestamps back to the tracker, to fix any
    drifting in live playlists.
* Dinamically choose the HlsUrl that points to the playlist that defines the
    live window.

Other features:
--------------

The tracker can also be used for keeping track of discontinuities. In the case
of single variant playlists, this is particularly useful. Might also work if
there is a that the live playlists are aligned (but this is more like working
around the issue, than actually solving it). For this, see [Internal: b/32166568]
and [Internal: b/28985320].

Issue:#87

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138054302
2016-11-10 20:54:03 +00:00
olly
7b3690a0a6 Fix onLoad* event media times for multi-period case
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137932100
2016-11-10 20:53:20 +00:00
olly
488c2d8270 Fixes for Issue #1962
- Use A/V tracks only for buffering position when available
  in ExtractorMediaPeriod.
- Fix layering of exo_simple_player_view so that subtitles
  are above album art. The test stream provided has both.
- Make album art in SimpleExoPlayer view respect the resize
  mode, like we do for video.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137698473
2016-10-31 19:49:54 +00:00
aquilescanta
daf7b948a1 Fix buffering state when selecting VTT track with no cues
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137697023
2016-10-31 19:49:54 +00:00
Oliver Woodman
c4b4e84579 Add artwork support to SimpleExoPlayerView + misc improvements 2016-10-27 12:47:26 +01:00
Oliver Woodman
8a89abcbf1 Merge branch 'dev-v2-id3' into dev-v2 2016-10-27 12:37:22 +01:00
olly
2c54363204 Report track groups and selections through ExoPlayer
TrackSelector no longer has a listener. Instead, tracks
change events are reported through ExoPlayer.EventListener.
Applications interested in retrieving the selection info
should retrieve it directly from the TrackSelector by
calling an exposed getter.

Pretty sure the ref'd issue is fixed as a side effect of
this change.

Issue: #1942

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137183073
2016-10-27 12:27:55 +01:00
aquilescanta
0b8e9754ca Pass initialization parameters to section readers
Unlike with PesReaders, sections don't have a standard way
of providing timestmaps or even generating tracks. We need
to pass this information so that readers decide what to do
with it.

Issue:#726

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137162494
2016-10-27 12:27:21 +01:00
aquilescanta
1809836c21 Provide a method for creating a reader for a particular PID
This allows the user to create section readers(usually) for reserved pids,
like SDT, EIT, CAT, etc.

Issue:#726

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137150853
2016-10-27 12:26:32 +01:00
[]inger
8b3025d450 Make control view layout resource customizable.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137145209
2016-10-27 12:25:52 +01:00
andrewlewis
ba6368a07a Don't try to access the caption manager when in edit mode.
Issue: #1991

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137131819
2016-10-27 12:25:10 +01:00
Oliver Woodman
8caaf0b5d9 Big cleanup of mp4 metadata extraction 2016-10-26 23:45:50 +01:00
Oliver Woodman
1b39d21ed4 Fix indentation and missing javadoc 2016-10-24 19:22:41 +01:00
Oliver Woodman
6dbce88102 Merge branch 'dev-v2-id3' of persistent-https://github.com/google/ExoPlayer into dev-v2-id3 2016-10-24 18:50:35 +01:00
Oliver Woodman
929620c189 Merge branch 'dev-v2' into dev-v2-id3 2016-10-24 18:49:43 +01:00
olly
99503e6e3a Fix playback of OGG with only a single payload page
Issue: #1976

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137044583
2016-10-24 18:43:49 +01:00
olly
5c83c28a1f Blacklist another non-OMX decoder
Issue: #1986

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137035576
2016-10-24 18:43:15 +01:00
olly
790e5fd2a1 Update gradle wrapper
Code coverage is disabled in V2 to workaround
https://code.google.com/p/android/issues/detail?id=226070

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137032839
2016-10-24 18:42:37 +01:00
olly
819ebf703a Assign track type TEXT for CEA708
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137011920
2016-10-24 18:42:02 +01:00
Oliver Woodman
00f9fc6728 Don't propagate GaplessInfoHolder when parsing mp4 metadata 2016-10-24 18:01:48 +01:00
aquilescanta
6e69b98517 Avoid throwing an exception when an ID3 header is not found
Issue:#1966

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136836332
2016-10-24 11:44:49 +01:00
aquilescanta
eeb37d73e7 Create the SectionPayloadReader interface
SectionPayloadReaders are provided to a SectionReader to
get whole sections(crc checked). This allows the injection
of custom section readers. E.G: SCTE35 messages.

Issue:#726

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136816612
2016-10-24 11:44:49 +01:00
andrewlewis
a0fe258e8d Fix/suppress some analysis warnings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136710546
2016-10-24 11:44:49 +01:00
aquilescanta
862552c2ed Convert ElementaryStreamReaderFactory into TsPayloadReaderFactory
In this CL:

* PesReader moves out of TsExtractor and becomes public.
* ElementaryStreamReaderFactory becomes TsPayloadReaderFactory and is
    moved to TsPayloadReader.
* The TsPayloadReaderFactory is in charge of wrapping any
    ElementaryStreamReaders with a PesReader.

Incoming:
* Extract SectionReader supperclass (analog to PesReader, but for
    sections) from Pat and Pmt readers.
* Add a ScteReader, wrapped by a section reader, and include it in
    the DefaultTsPayloadReaderFactory.

Issue:#726

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136707706
2016-10-24 11:44:49 +01:00
vitekn
b2222f8cb7 Null pointer exception fixed
pesPayloadReader can be null here because DefaultStreamReader.init() can return null on unknown streamId. If we have a junk transport stream in our content an exception will be thrown.
2016-10-21 13:07:08 +03:00
ojw28
6673483aca Merge pull request #1971 from google/dev-v2
Update dev-v2-id3
2016-10-20 12:43:38 +01:00
olly
f56b05f0d7 Bump version to r2.0.4
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136697697
2016-10-20 12:20:10 +01:00
aquilescanta
bebbf29a78 Fix NPE when trying to play H265 in Ts files
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136607848
2016-10-20 12:20:10 +01:00
Oliver Woodman
3e3248d712 Yet more misc ID3 improvements 2016-10-19 17:18:17 +01:00
olly
586e6257cd Add explicit TargetApi annotation to remove lint error
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136597149
2016-10-19 17:00:33 +01:00
olly
3a5cb43541 Fix use of API level 19 method
Issue: #1965

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136595233
2016-10-19 17:00:33 +01:00
olly
aa1002a0d6 Rollback "Add REQUIRE_HTTPS flag"
*** Reason for rollback ***

Flag doesn't enforce what it says it enforces, due to redirects

*** Original change description ***

Add REQUIRE_HTTPS flag

Note that it's not possible for the library to enforce that
the flag is adhered to, since it's possible for applications
to inject custom implementations of DataSource (there's no
requirement they even extend HttpDataSource for network
requesting implementations). It's possible for applications
to replace pretty much anything in the library, so there's
no other place we could put the flag where we could make
this guarantee. Hence this is a best-effort that will work
when...

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136583459
2016-10-19 17:00:03 +01:00
aquilescanta
aecbbdd36c Replace IndexOutOfBounds Exception for BehindLiveWindowException
This is a problem when two invocations of getNextChunk that retrieve
chunks (i.e. not playlists) occur too apart in time. In that case
the last loaded chunk has a media sequence that is behind the current
playlist.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136501291
2016-10-19 17:00:03 +01:00
olly
1cfc432bb8 Add REQUIRE_HTTPS flag
Note that it's not possible for the library to enforce that
the flag is adhered to, since it's possible for applications
to inject custom implementations of DataSource (there's no
requirement they even extend HttpDataSource for network
requesting implementations). It's possible for applications
to replace pretty much anything in the library, so there's
no other place we could put the flag where we could make
this guarantee. Hence this is a best-effort that will work
when using HttpDataSource implementations that we provide.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136500947
2016-10-19 17:00:03 +01:00
eguven
06fb29c939 Support caching of multi segment DASH, HLS and Smooth Streaming.
Use sha1 of content uri if a custom cache key or content id isn't provided.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136351830
2016-10-19 16:58:09 +01:00
Oliver Woodman
7e352295d7 Propagate ID3 data for MP3 2016-10-18 15:17:01 +01:00
Oliver Woodman
7594f5b78b Further enhance ID3 decoder + support 2016-10-18 15:02:35 +01:00
ojw28
e2ff401ea1 Merge pull request #1958 from google/dev-v2
Merge dev-v2 into dev-v2-id3
2016-10-17 22:52:12 +01:00
Oliver Woodman
66652f65bb Make Id3Util final 2016-10-17 22:47:03 +01:00
Oliver Woodman
4391014a7a Split genres into separate util class 2016-10-17 22:45:09 +01:00
Oliver Woodman
110c8f6f1f Improvements to ID3 decoder 2016-10-17 22:35:21 +01:00
olly
cecb1f5f76 Bump version + update release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136339035
2016-10-17 15:43:57 +01:00
aquilescanta
e873b4b6ab Change prepare() for maybePrepare() in HlsSampleStreamWrapper
This will allow asynchronous preparation.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136176854
2016-10-17 15:43:57 +01:00
Oliver Woodman
50aeb20cc2 Make Id3Decoder stateless again
One issue with the previous implementation was that
isUnsynchronized would not be set back to false if
previously set to true and if the next header has
majorVersion >= 4. In general, having the decoder be
stateless is clearer (and thread safe, albeit that
this property is not required).
2016-10-17 14:38:56 +01:00
klampert
dca4d16bef Release surfaces created to wrap SurfaceTextures
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136163292
2016-10-14 18:57:30 +01:00
olly
6acf59c4fc Fix Widevine L3 provisioning in V2
1. HttpMediaDrmCallback.executeProvisionRequest needs to specify
   an empty byte[], else we do a GET instead of a POST.
2. Content-Type should not be set when making the provision
   request, since there's no body.
3. DataSource implementations must correctly handle a non-null
   body with zero length. CronetDataSource was not handling this
   case. DefaultHttpDataSource was, but made a code modification
   to make it a little clearer. OkHttpDataSource seems to handle
   the case correctly, and it doens't look like the code can be
   made clearer.

Issue #1925

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136042641
2016-10-14 10:42:43 +01:00
olly
a22390c29b Parse CEA-708 codec for rawCC
Note that actually handling CEA-708 is not yet implemented,
and so this is a no-op change from a behavior point of view.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136038439
2016-10-14 10:42:43 +01:00
aquilescanta
e685edc179 Make interface implementation consistent among ExtractorOutputs
The method track(int id) currently has different behaviours across
implementations. This CL maps ids to track outputs, which means
that successive calls with the same id will return the same
TrackOutput instance. Also fixes TsExtractor inconsistent behavior
after a seek.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136026721
2016-10-14 10:42:43 +01:00
aquilescanta
ff712aead5 Try not adapting before failing with BehindLiveWindowException in Hls
Issue:#1782

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136025847
2016-10-14 10:42:43 +01:00
olly
64262085a7 Block when surface being replaced is non-null
A blocking call is necessary where we want to guarantee that
the player wont access the surface after the method call has
returned. We currently only do this for the case:

Surface->Null

But we should also do it for the case:

SurfaceA->SurfaceB

Since the caller may reasonably do something like destroy
SurfaceA immediately after it's been replaced.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135921296
2016-10-14 10:42:43 +01:00
aquilescanta
f18373eeb2 Decouple TsExtractor's readers from TrackOutputs
This allows the injectable reader factory to be a stateless factory, allows
the seeking to be consistent and will allow multiple CC channel support later
on.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135909712
2016-10-14 10:42:43 +01:00
Oliver Woodman
bffffb0fac Minor ID3 tweaks 2016-10-12 17:27:54 +01:00
ojw28
f4b8d9490a Merge pull request #1935 from google/dev-v2
Update dev-v2-id3 with dev-v2
2016-10-12 17:05:09 +01:00
olly
996fe47f8c Fix NPE releasing HlsMediaPeriod
Issue: #1907

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135798950
2016-10-11 18:16:28 +01:00
olly
29f3eb5e5a Fixes for retries
- Fix issue in ExoPlayerImpl where the timeline was null'd
  but onTimelineChanged was not fired.
- Add the ability to not reset the timeline. This is useful
  for retries where you know the timeline will be the same
  as it was previously.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135797577
2016-10-11 18:16:28 +01:00
olly
83107cc25d Fix missing release calls on loadingPeriodHolder
playingPeriodHolder can be null in the case that the first
period is still being prepared. We need to make sure we
release the period that's being prepared in such cases,
which is loadingPeriodHolder.

Issue: #1914

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135793472
2016-10-11 18:16:28 +01:00
olly
907b9bf4f6 Sanitize threading in CronetDataSource
- Move nearly all logic onto the calling thread (i.e. the thread
  calling open/read/close), to make threading correctness more
  obvious.
- Document which variables are read/written from which thread, and
  why the call sequences are safe.
- Fix thread safety issue that I think could probably cause data
  corruption in the case of a read timeout followed by another
  request into the DataSource.

Also:

- Relaxed content length checking to be consistent with the other
  http DataSource implementations, and avoided parsing the headers
  where they're not used.
- Fixed missing generics in CronetDataSourceFactory.
- Added TODO to work with servers that don't support partial range
  requests.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135702217
2016-10-11 18:16:28 +01:00
olly
4fab402274 Fix missing generics
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135700280
2016-10-11 18:16:28 +01:00
olly
d922a21160 Select the cenc sinf atom explicitly
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135692709
2016-10-11 18:16:28 +01:00
olly
91f8328a5f UI component improvements
- Make sure no events are posted on PlaybackControlView
  if it's not attached to a window. This can cause leaks.
  The target hide time is recorded if necessary and
  processed when the view is re-attached.
- Deduplicated PlaybackControlView.VisibilityListener
  invocations.
- Fixed timeouts to be more intuitive (I think).
- Fixed initial visibility of PlaybackControlView when
  used as part of SimpleExoPlayerView.
- Made some more attributes configurable from layout xml.

Issue: #1908
Issue: #1919
Issue: #1923

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135679988
2016-10-11 18:16:28 +01:00
Oliver Woodman
97e7fb85a7 ID3: Clean up logging + only add to audio track for MP4 2016-10-09 18:00:59 +01:00
Oliver Woodman
ba1da140c6 Further modifications to ID3 support
- Lots of misc cleanup
- Remove GaplessInfo from Metadata. IMO it doesn't quite belong there,
  and means it ends up being represented twice inside Format.
- Note: Changes untested, but will be tested in due course!
2016-10-09 16:27:58 +01:00
Oliver Woodman
3b34f850f2 Clean up ID3 frame implementations 2016-10-09 14:58:12 +01:00
Oliver Woodman
6a3b66987a Revert unrelated ContentDataSource change 2016-10-09 14:52:38 +01:00
Oliver Woodman
5a097a4c9d Merge branch 'albumMetadataV2.1' of git://github.com/cbfiddle/ExoPlayer into cbfiddle-albumMetadataV2.1 2016-10-09 14:47:48 +01:00
olly
6c12ec629a Some minor UI refinements
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135353593
2016-10-06 15:05:34 +01:00
[]inger
08965c03d0 Avoid memory leaks by removing callbacks from surface when SimpleExoPlayer is released.
Without this developers which reuse a SurfaceHolder with multiple instances of
SimpleExoPlayer need to call simpleExoPlayer.setVideoSurfaceHolder(null) to get
the SimpleExoPlayer.ComponentListener removed from the surface holder. If they
don't, the component listener is still registered and as a member class leaks
an instance of simpleExoPlayer.

Issue #1855

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135292439
2016-10-06 15:04:57 +01:00
olly
d334dfdcba Fix merging of selected streams.
Playback would fail if a renderer is toggled from consuming from
one child to another in a single step.

Issue: #1900

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135270356
2016-10-05 21:21:47 +01:00
[]inger
053dc27a3e Introduce resize mode for AspectRatioFrameLayout.
https://github.com/google/ExoPlayer/issues/1827

Three different modes available: fit (default), fixed_width, fixed_height
Developers need to use wrap_content for the dimension which is not fixed:

app:resize_mode="fixed_width"
android:layout_width="320dp"
android:layout_height="wrap_content"

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135264861
2016-10-05 21:21:13 +01:00
olly
2cf339e095 Bump version to 2.0.2 + document inclusion of OkHttp extension
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135260806
2016-10-05 21:20:34 +01:00
olly
89c438078e Fix retry crash in edge case
Configuration of retry currently fails if all of the
following are true, which is highly unlikely but does
occur in the ref'd issue.

1. Loading/extraction fails
2. Neither length of stream of a seek map is known
3. At least one track has been output by the extractor

Issue: #1899

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135228687
2016-10-05 18:07:48 +01:00
olly
1b90b7c12c Factor out common variables for publishing
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135215320
2016-10-05 18:07:13 +01:00
olly
7c3fe15426 Add convenience getPlayer methods to UI components
Issue: #1895

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135211179
2016-10-05 18:06:34 +01:00
olly
b3c6f1caae Finish cleaning DataSource implementations.
- Enfroce read returns 0 if readLength==0 everywhere.
- Fixes and simplifications for CronetDataSource.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135138232
2016-10-04 23:42:55 +01:00
olly
f8ed4cfdee Clean up some DataSource implementations
- Make read return 0 if readLength==0
- Return RESULT_END_OF_INPUT properly in the case that
  bytesRemaining is unset (this was broken previously,
  but only applies for assets > 2^31 bytes, so it's
  unlikely anyone ever hit this issue)

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135136541
2016-10-04 23:42:20 +01:00
aquilescanta
e288880aaf Fix Ac3 extractor sniff
Issue:#1875

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135100986
2016-10-04 23:40:53 +01:00
olly
b29b4f7e1a MergingMediaPeriod + subtitle fixes
- Correctly null out streams[j] in the case that a renderer
  is being disabled.
- Read discontinuities from all children, not just enabled
  ones. This fixes a failure when reading a discontinuity
  with all renderers disabled.
- Add in some assertions to make incorrect stream selection
  failures obvious and immediate.
- Relocate subtitles so they're above the shutter (needed so
  they continue to be visible when video is disabled but
  text is still enabled).

Issue: #1854

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135089944
2016-10-04 23:39:24 +01:00
aquilescanta
6306c26988 Add support for fragmented MP4 in HLS
This CL adds support for initialization segments in HLS. This is required mainly for(but not limited to) usage of fMP4. The fMP4 support only consists in creating the required extractor if the extension is .mp4, provided the initialization segment is correctly
loaded and passed to the extractor.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134997636
2016-10-04 23:38:47 +01:00
olly
69af389730 Trim allocator on stop/reset by default
This prevents a large amount of memory from being held
in the case that a player instance is released, but the
application is holding dangling references to the player
that are preventing it from being garbage collected.

Issue: #1855

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134992945
2016-10-03 17:44:01 +01:00
olly
f75f3d75b2 Fix sideloaded subtitles
- Fix NPE issue in SingleSampleMediaPeriod.
- Delay handling of EOS in TextRenderer until the last
  subtitle is fully played out.

Issue: #1882

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134979286
2016-10-03 17:43:28 +01:00
cdrolle
37806ee792 Added Basic CEA-708 caption support to ExoPlayer V2, roughly equivalent to the current state of CEA-608. It's still missing window (and the associated positioning and formatting) support, emulating a 3-line rollup.
Currently this has only been tested with the RawCC container, though it should work with anything that makes use of SeiReader (i.e. MPEG2-TS) with minimal changes to SeiReader.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134781660
2016-10-03 17:42:49 +01:00
andrewlewis
c381093a48 Update variable name in comment.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134776852
2016-09-30 14:40:38 +01:00
andrewlewis
ee4d297f22 Fix seeking in the last period.
When reading the last period, the readingPeriodHolder was set to null in
updatePeriods if it was the last period. (This would occur almost immediately
when playing a single-period source.) seekToPeriodPosition suppresses reusing a
loaded/prepared period if the reading period and playing period did not match,
which meant that the whole timeline was recreated when seeking in the last
period.

Leave readingPeriodHolder non-null. This means that at all times either
playingPeriodHolder == readingPeriodHolder (and they could be null or
non-null), or playingPeriodHolder and readingPeriodHolder differ and are both
non-null.

Also fix an issue where streams were never forced to be recreated during track
reselection when reading ahead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134774238
2016-09-30 14:40:06 +01:00
olly
7971a18a83 Revert back to default cue parameters until we support positioning
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134673236
2016-09-30 14:39:25 +01:00
olly
21626c417e Bump version to 2.0.1
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134662367
2016-09-29 16:30:10 +01:00
olly
8bf0243daf Fix mp3 extraction failure for short frames
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134660133
2016-09-29 16:29:35 +01:00
cdrolle
040fe3b194 Refactored the text.eia608 package to text.cea.
All of the classes in the text.eia608 package have been moved to
text.cea, and renamed with the "cea" prefix instead of "eia". All of
the buffering logic has been extracted from Cea608Decoder (formerly
Eia608Decoder) into the abstract CeaDecoder, which Cea608Decoder
extends. Cea608Decoder also now expects a 3-byte sample (i.e. the
entire cc_data_pkt instead of just the cc_data_1 and cc_data_2 bytes).
Classes like RawCcExtractor and SeiReader, responsible for creating
these samples, have also been updated accordingly.

This change is a necessary precursor to adding support for multi
-channel CEA-608 and CEA-708 captions.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134537482
2016-09-29 16:28:58 +01:00
andrewlewis
825ec70d31 Move preparation from MediaPeriod constructors to prepare().
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134504088
2016-09-28 11:26:12 +01:00
aquilescanta
c7b5c967ff Remove duplicate methods in DefaultTrackSelector
This encourages a single invalidation when setting different parameters.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134436136
2016-09-28 11:26:12 +01:00
aquilescanta
ed5decfafc Add ElementaryStreamReader's factory to inject custom readers in TSExtractor
Issue:#726

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134433012
2016-09-28 11:26:12 +01:00
andrewlewis
4a62b2688c Post onPrepared so it runs after createPeriod has finished.
Issue: #1853

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134409897
2016-09-28 11:26:12 +01:00
andrewlewis
85b61adb32 Call onPrepared/onSourceInfoRefreshed on the playback thread.
HlsSampleStreamWrapper and ExtractorMediaPeriod would call
onPrepared/onSourceInfoRefreshed from their loading threads. That was
problematic for ConcatenatingMediaSource and MergingMediaSource, which assume
that their callbacks are called on the same thread (iterating through timelines
from all sources and updating pendingTimelineSources respectively). This change
makes them post calls to the callbacks on the playback thread.

Generally, implementing a composite MediaSource is easier if
MediaPeriod.Callback's methods are all called on the same (playback) thread, so
this change makes that part of its contract.

Also post onContinueLoadingRequested from ExtractingLoadable because
MergingMediaPeriod.onContinueLoadingRequested reads trackGroups written on the
playback thread.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134407280
2016-09-28 11:26:12 +01:00
olly
eaf8218855 Fix shutter open/close behavior
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134389619
2016-09-28 11:26:12 +01:00
anjalibh
d74166cd35 Parse Projection, ProjectionPrivate
As described in https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md.
Also parse StereoMode as per standard matroska spec.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134302208
2016-09-28 11:26:00 +01:00
cdrolle
f5ebcb8d04 Modified the default position parameters of the Cue objects created by
Eia608Decoder.

Full preamble positioning will be provided in a subsequent CL. This CL
also contains some minor cleanup in Eia608Decoder and adds some TODOs
to handle the second channel.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134299337
2016-09-28 11:25:40 +01:00
aquilescanta
7273237b28 Add an immutable holder for track selection parameters
This solves the thread unsafety issue of the default track selector and
allows atomic configuration changes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134288525
2016-09-28 11:25:40 +01:00
olly
65eda1d105 Add missing generic types
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134099118
2016-09-28 11:25:40 +01:00
aquilescanta
94cc606091 Export variant codecs in HLS
Issue:#1772

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134073672
2016-09-28 11:25:40 +01:00
andrewlewis
8cf107408d Replace stbl consistency assertions with a warning.
Issue: #1850

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134073096
2016-09-28 11:25:40 +01:00
olly
654d914bb6 Fix DefaultHttpDataSource read when requested length is 0
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134063990
2016-09-28 11:25:40 +01:00
olly
57a2749a9d Fix playback of short duration content
Issue #1837

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133944552
2016-09-28 11:25:34 +01:00
andrewlewis
1546da899b Use @IntDef where possible.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133932812
2016-09-28 11:25:02 +01:00
olly
59ee4341c5 Fix buffering issue for live streams
Issue: #1825

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133401980
2016-09-16 18:56:40 +01:00
andrewlewis
22728d9ae4 Use new ParsableByteArray.reset where possible.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133384105
2016-09-16 18:56:02 +01:00
olly
c17190319b Rename assets to avoid naming conflicts
Issue #1823

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133267642
2016-09-16 18:54:09 +01:00
aquilescanta
70351bfae2 Create one HlsSampleStreamWrapper per track group
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133243031
2016-09-16 18:53:27 +01:00
andrewlewis
6a099f1c57 Clean up MP3 synchronization and fix handling < 4 frames.
Also add a test MP3 stream with one frame.

Make FakeExtractorInput's end of input detection to apply also for peekFully, and
make its skip and read methods read at least one byte.

Issue: #1732

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133241641
2016-09-16 18:52:42 +01:00
andrewlewis
b1f9798b89 Fix peeking the end of the stream then reading it.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133240502
2016-09-16 18:51:52 +01:00
olly
ab49425e43 Fix crash on pre-api-21 devices.
The four-arg constructor didn't exist in ViewGroup for
earlier API levels. I think it can probably be safely
omitted, unless you know otherwise?

Issue: #1820

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133156975
2016-09-14 20:18:13 +01:00
eguven
5512aae451 Revert CacheSpan EOS changes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133123235
2016-09-14 16:34:27 +01:00
olly
80d08a6e25 Fix the build
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133120924
2016-09-14 16:33:46 +01:00
olly
bf0d398ba8 Fix RawResourceDataSource remaining length
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133120449
2016-09-14 16:33:06 +01:00
Rik Heijdens
98a5e199f9 Corrected vertical positioning 2016-09-14 09:47:07 -04:00
Rik Heijdens
b87463a857 Fixed an off by one error and fixed iterating through the cues 2016-09-14 09:32:53 -04:00
olly
560071683f Guide V2 + a few related code tweaks
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133022058
2016-09-13 19:15:31 +01:00
benm
2ebabc54eb Support raw resources inside the APK as a DataSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133013132
2016-09-13 19:14:46 +01:00
aquilescanta
76a05ce30f Fix race condition in timestamp adjustment for HLS
If a Webvtt HlsChunkSource got to schedule its chunk load before the
master HlsChunkSource (the one that downloads the TS or the fMP4
chunks), the player would never get past the buffering state.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132985792
2016-09-13 17:47:07 +01:00
olly
f4248410d9 PlaybackControlView improvements
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132981908
2016-09-13 17:45:40 +01:00
olly
de67fa5017 Allow replacement of libraries for Opus/Flac/Ffmpeg too
- Also make some of the naming more concise + misc style cleanup.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132899979
2016-09-13 17:44:10 +01:00
olly
c46c6f18c2 Add DRM request headers to exolist.json format
Plus misc fixes related to the added samples.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132891534
2016-09-13 17:42:47 +01:00
olly
26e1306639 Fix HLS Timeline.isDynamic
- Also fix an issue that allowed blacklisting of all tracks,
due to incorrect index being used.
- Also fix an issue with track deselection for HLS.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132882151
2016-09-13 17:42:05 +01:00
andrewlewis
2da35769ff Fix some typos/consistency nits.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132876946
2016-09-13 17:41:24 +01:00
olly
383966b307 No-op cleanup for playback controls II
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132862043
2016-09-13 17:40:00 +01:00
aquilescanta
625bb4ed48 Fix PMT descriptors parsing bug
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132862014
2016-09-13 17:39:16 +01:00
olly
bcec597023 No-op cleanup for playback controls
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132859943
2016-09-13 17:38:40 +01:00
olly
8190089b32 Rename defaultStartPosition -> defaultPosition
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132858669
2016-09-13 17:37:59 +01:00
olly
94983675c2 Expose an unknown mimeType video track rather throwing in parser
Issue: #631

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132858217
2016-09-13 17:37:17 +01:00
olly
f2ddfb0867 Expose getPhysicalDisplaySize for non-primary display
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132856997
2016-09-13 17:35:58 +01:00
[]inger
7925342fa0 Provide a VideoView for simple use cases.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132855091
2016-09-13 17:35:11 +01:00
aquilescanta
7e51c3af74 Add continuity counter support in Transport Streams
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132684574
2016-09-13 17:33:38 +01:00
aquilescanta
3bad28ac91 Fix TsExtractor tests
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132561841
2016-09-13 17:32:55 +01:00
aquilescanta
c78010c212 Add support for language descriptors in MPEG-2 TS
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132559667
2016-09-13 17:32:10 +01:00
eguven
26466679df Added CacheDataSourceFactory, FileDataSourceFactory and CacheDataSinkFactory.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132556806
2016-09-08 16:29:48 +01:00
aquilescanta
cab02289f5 Generalize the PtsTimestampAdjuster
This allows the adjustment of timestamps in microseconds along with
TS timestamps. This is useful for containers that include the
timestamps in microseconds format, like fMP4 and WebVTT.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132547521
2016-09-08 16:29:48 +01:00
olly
04c28c6d7d Minimal change to fix seeking before prepare + finalize API
- This change fixes seeking before the prepare (or more
  accurately, before the timeline is set). The fix a minimal
  one to fix the behavior. It's inefficient compared to
  posting the pending seek onto the playback thread, which
  will be the long term solution.
- As of this change, I think we can call V2 "done". There are
  some loose ends to tie up, but the API is effectively
  finalized and the implementation is in a state where you
  can take it, use it and expect it to work.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132468107
2016-09-08 16:29:48 +01:00
olly
8f70845631 Tweak VideoListener doc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132433848
2016-09-08 16:29:48 +01:00
aquilescanta
651f5fafa7 HLS: Instantiate an AC3 extractor for .ec3 files
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132417755
2016-09-08 16:29:48 +01:00
aquilescanta
45d5d308b4 Add transport error indicator support to TsExtractor
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132307448
2016-09-08 16:29:48 +01:00
[]inger
7c48028fe7 Add support to render video onto a TextureView with SimpleExoPlayer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132306954
2016-09-08 16:29:48 +01:00
aquilescanta
12b7bbf803 Improve HLS master playlist parsing
Adds a few unused fields to HlsUrl and moves things towards the Hls
reimplementation we are looking for. Also fixes a bug related to
asuming every getNextChunk().loadable == null being related to
reaching the live edge.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132305206
2016-09-08 16:29:48 +01:00
olly
5f39b93d30 Properly release sample streams for DASH
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132301223
2016-09-08 16:29:48 +01:00
olly
e296d10c3f Start moving ExoPlayerImpl to use windows not periods
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132248872
2016-09-08 16:29:48 +01:00
aquilescanta
32867217a3 Improve profile/level check support for AVC
Issue:#1772

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132078273
2016-09-08 16:29:48 +01:00
Santiago Seifert
520e6caa60 Fixed style things from pull request 2016-09-08 12:59:21 +01:00
Sergio Moreno Mozota
e2722dee39 TsExtractor support for language code in the audio tracks. 2016-09-07 07:43:23 +02:00
Alan Snyder
776da10725 Fix merge issue 2016-09-05 15:39:40 -07:00
Alan Snyder
18ab96349e Support ID3/Apple metadata parsing in MP3 and MP4 files 2016-09-02 20:11:26 -07:00
olly
f8c05ebd93 Better selection of default start position for live
If the live window has a small duration, we currently
end up setting the default start position to be right
at the start of the window. This increases the chance
of a BehindLiveWindowException.

With this change we impose a minimum 5s gap between
the start of the window and the default start position.
If the window is *really* small (<10s) then doing this
would push the default start position too close to the
end of the window. We don't have much time to play with
in either direction in this case, so we put the default
start position in the middle of the window and hope for
the best.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132054802
2016-09-02 16:20:44 +01:00
eguven
06a644eccd DataSourceException: Used to specify a DataSource error.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132053698
2016-09-02 16:20:06 +01:00
olly
884bcb649e Support looping with LoopingMediaSource
Now you can do cool things (if you really want to!) like
play a video twice, then play a second video, then loop
the whole thing, all seamlessly.

new LoopingMediaSource(
  new LoopingMediaSource(firstVideoSource, 2),
  secondVideoSource));

You can also just loop, which is probably more useful :).

Issue: #490

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132049599
2016-09-02 16:19:27 +01:00
aquilescanta
fa500791c5 Rename Variant to HlsUrl and move into HlsMasterPlaylist
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132049545
2016-09-02 16:18:47 +01:00
olly
bd76ec8b13 Support duplicate entries in ConcatenatingMediaSource
People will inevitably try and do it, and it's pretty
easy to handle properly, so why not...

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132047019
2016-09-02 16:18:04 +01:00
olly
d48bf94145 MergingMediaSource fixes
- Don't send a timeline to the listener until all children
  have reported their timelines.
- Propagate a proper merge error if merging fails.
- The PlayerActivity hack is necessary due to the way Andorid's
  MediaController widget attaches to the window :(. It'll go
  away once we get our own player controls.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131958169
2016-09-02 16:17:23 +01:00
aquilescanta
a964da7922 Add support for PATs spread across multiple packets
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131946543
2016-09-02 16:16:41 +01:00
aquilescanta
a671ebd019 Add live media playlist refresh requests when live edge is reached
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131931868
2016-09-02 16:16:01 +01:00
eguven
860c6588c0 created DefaultHttpDataSourceFactory
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131931668
2016-09-02 16:15:18 +01:00
olly
ceebb4c561 Fix incorrect index in DefaultAllocator.trim
This could cause us to "lose" allocations backed by an
initial block, meaning they became unavailable for use
despite still being allocated.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131931465
2016-09-02 16:14:35 +01:00
olly
a779eabdc5 Update SDK / Tools.
- Centralise compileSdkVersion, targetSdkVersion and
  buildToolsVersion in a single place for gradle.
- Bump compileSdkVersion and targetSdkVersion to 24.
- Bump com.android.tools.build version to re-enable
  instant start.
- Bump targetSdkVersion in manifests (needed for
  internal builds).
- Use standard expandable_list_item from Android in
  the demo app, since ours doesn't look right when
  targeting API level 24. We were also setting the
  theme on the wrong element in the manifest, so I'm
  removing that line.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131929216
2016-09-02 16:12:55 +01:00
olly
962b5940c2 Update ExoPlayer documentation + tweak method naming
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131843222
2016-09-02 16:08:45 +01:00
Rik Heijdens
26fe1dc238 Removed unnecessary member variable 2016-09-01 15:01:17 +02:00
aquilescanta
50527c0a7d Add profile/level check support for AVC
Issue:#1772

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131812670
2016-08-31 15:26:02 +01:00
olly
d65feb682b Make public util method to get physical display size
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131810070
2016-08-31 15:26:02 +01:00
aquilescanta
f0c0b3efbf Decouple HlsSampleStream from HlsSampleStreamWrapper
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131731376
2016-08-31 15:26:02 +01:00
olly
797cd46e89 Detailed Javadoc for Timeline, Period and Window
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131715194
2016-08-31 15:26:02 +01:00
eguven
b88a5e1b12 Fix generateReleaseJavadoc "unmappable character for encoding ASCII" error.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131714051
2016-08-31 15:26:02 +01:00
eguven
bd7be1b5e7 Cache support unbounded requests.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131696858
2016-08-31 15:26:02 +01:00
olly
98919fe709 Add ExoMediaDrm/ExoMediaCrypto to V2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131693379
2016-08-31 15:25:35 +01:00
sharjeel
cf363f9e97 PSSH in MOOF support in Exo V2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131534334
2016-08-31 15:25:35 +01:00
olly
f8311a48ed Add some convenience constructors for Cronet in V2
- The need to pass a Clock is pretty much only for testing, so
  make the constructor that takes one package private + use
  the system clock for public constructors.
- Add default timeout values.
- Also make sure we set Content-Type in all license requests,
  since when using Cronet the stack requires it to be set.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131404298
2016-08-31 15:25:35 +01:00
aquilescanta
4f670addd2 Add support for AC-3 streams in HLS
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131398594
2016-08-31 15:25:35 +01:00
aquilescanta
e48462d564 Add codecs argument to createContainerFormat
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131398162
2016-08-31 15:25:35 +01:00
aquilescanta
d72e26ff35 Add CRC check for PMT
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131394778
2016-08-31 15:25:31 +01:00
aquilescanta
6528aef2bb Add automatic E-AC-3 detection to the Ac3Reader
This is done through the bitstream id field and allows removing
the isEac3 parameter from the constructor.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131393477
2016-08-31 15:25:31 +01:00
cchiappini
4df63314d4 Create Cronet extension in v2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131393395
2016-08-31 15:25:31 +01:00
olly
b53fa245ce Fix ID3 EOS detection for two-byte encodings
Issue: #1774

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131389528
2016-08-31 15:25:31 +01:00
aquilescanta
09c58004dc Add an AC3 bitstream extractor
Defined in ATSC Standard: Digital Audio Compression (AC-3, E-AC-3).
Link: http://atsc.org/wp-content/uploads/2015/03/A52-201212-17.pdf.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131294260
2016-08-31 15:25:31 +01:00
aquilescanta
af2b8fb7a6 Add CRC32 check for PAT section
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131294029
2016-08-31 15:25:25 +01:00
olly
0b6a93b468 Workaround missing data offsets in FMP4
If they're omitted, it's reasonable to assume it's because
they were uninteresting (i.e. sample data always tightly
packed at the start of the mdat). This is an issue for some
SmoothStreaming streams.

We actually already play such streams successfully, but
that's only due to another bug to be fixed in a following CL.
The same is true for V1, but given the low impact nature,
the fix will be V2 only.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131191975
2016-08-31 15:25:25 +01:00
olly
abaa4f1aad Don't update currentTrackBundle until end of block
If currentTrackBundle is updated at the start of the
block and then something goes wrong in the middle (e.g.
one of the skipFully calls) then the extractor wont
resume from the correct place.

This would be caught by our extractor tests if we had
a test sample that requires skipping to the sample data.
I'll try and construct one of those.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131191174
2016-08-31 15:25:25 +01:00
olly
42efb5413a SmoothStreaming fixes
- The -1 needs to be a 0. My bad.
- Create AAC CSD if not defined in manifest, like in V1.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131190995
2016-08-31 15:25:25 +01:00
aquilescanta
fd3d7be9c0 Fix data_offset not present bug in FragmentedMp4Extractor
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131183033
2016-08-31 15:25:25 +01:00
olly
ef7dd697b1 Fix ContentDataSource handling of AssetFileDescriptor
Also tweak how the null checks happen in a few DataSource
implementations (should be no-op changes, but allow you
to look at close() and be happy it does the right thing
without having to loop at the open() implementations).

Issue: #1759

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131172427
2016-08-31 15:25:25 +01:00
olly
5f1a2c71f0 Finalize V2 ExoPlayer API
There's still some internal to clean up to do, and in particular
it remains a TODO to be able to handle seek calls before the
timeline is set (for this CL, such calls are dropped). This change
does however finalize the API.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131171318
2016-08-31 15:25:25 +01:00
andrewlewis
85915f2ac1 Fix live window calculation and transition from VOD.
Fix the calculation of the seek window for multi-period DASH.

Snap the default initial position back to the start of its segment, to ensure
that the first sample provided when transitioning to a DASH live source is a
key-frame.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131052912
2016-08-31 15:25:25 +01:00
olly
458c7bfc05 Simplify ExoPlayerImplInternal
- Remove playingPeriodEndPositionUs. It doesn't look like it's
  required.
- Rename time variables to make it clearer what they are.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131027164
2016-08-31 15:25:24 +01:00
olly
94c908e89c Rename Window->MediaWindow, Timline->MediaTimeline
Window is potentially confusing with Android's Window class.
Once Window is renamed, it makes sense to rename Timeline too.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130938392
2016-08-31 15:25:24 +01:00
olly
fb55254f90 Fix a bunch more Javadoc
Also inline a few methods/classes where they can be made
private and therefore be removed from the public API.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130935090
2016-08-31 15:25:24 +01:00
aquilescanta
abdb8ddb6e Remove 1 track per type limitation in TsExtractor
Mainly, this allows the extractor to expose multiple audio tracks.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130928152
2016-08-31 15:25:18 +01:00
olly
d5607cfc47 Make Javadoc compile with Java8
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130922558
2016-08-31 15:25:18 +01:00
olly
9f1fc274c9 Add SimpleExoPlayer.getVolume API
Issue: #1754

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130780466
2016-08-31 15:25:18 +01:00
olly
2c84f016fe Parse and expose proj and st3d/stereo_mode
As described in:
https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130776689
2016-08-31 15:25:18 +01:00
olly
1579b68cf6 Sanitize constants
- Use a single constant for unset/unknown times across
  all time bases. Note also that this moves away from
  use of -1 for unset/unknown times in ms, which was a
  bad choice (it might conflict with real times, such
  as a time representing being just behind the start
  of a live window).
- Add a few other unset constants, and use them.
- Fix some hardcoding of -1 where existing constants
  should have been used.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130775594
2016-08-31 15:25:18 +01:00
andrewlewis
725337dab3 Fix VOD to live transitions.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130755346
2016-08-31 15:25:18 +01:00
olly
f2ee7ef07b Fix formatting
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130662159
2016-08-31 15:25:18 +01:00
olly
83e466d129 Toward API finalization
- Remove getNewPlayingPeriodIndex from MediaSource
- Remove all absolute references to period indices from
  Window. Their existence prevents ConcatenatingMediaSource
  from being able to efficiently handle children with
  large numbers of entries (e.g. a cursor backed source),
  since it would copy all windows into its merged timeline.
- Fix ExoPlayerImplInternal to attempt a restart in the
  case that the loading (but not yet prepared) period is
  removed, in absence of a playing period.
- Implement logic for finding the "next" period in the old
  timeline when attempting a retry.

Removing some of the nasty US<->MS conversions left as a
virtual TODO.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130659973
2016-08-31 15:25:18 +01:00
andrewlewis
eff82e920e Fix DASH multi-period transitions and manifest updates.
Period transitions can either be to new windows (in which case the default
position for the new window should be loaded) or to the next period of the
current window (in which case the the new period should be played from zero).
Fix the logic for calculating the new period index to load to implement this.

In processManifest, periodsById may contain periods that have been removed from
the manifest, which are still being used by the player (it releases periods on
receiving the source info refresh after processManifest returns). Ignore
periods that have been removed from the manifest when calling updateManifest.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130626441
2016-08-31 15:25:18 +01:00
olly
c009028dad Prepare for removal of period based ExoPlayer methods
- This change marks the methods that will be removed, and
  renames the Window methods to remove "Window" from their
  names.
- The Window methods need to be made to work (rather than
  throw exceptions) when the timeline isn't set. Once that
  gets done in a subsequent CL, the deprecated methods will
  be removed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130612979
2016-08-31 15:25:17 +01:00
andrewlewis
1695e2ac48 Fix DASH period index calculation.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130612920
2016-08-31 15:25:17 +01:00
olly
b2a28a140c Move default start position into Window
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130610236
2016-08-31 15:25:17 +01:00
olly
3e0bae616f Minor ExoPlayerImplInternal cleanup
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130547431
2016-08-31 15:25:17 +01:00
cdrolle
cdb0ef13c8 Expose timeout values in DefaultDataSourceFactory.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130522990
2016-08-31 15:25:07 +01:00
olly
b35648eafb Add window based methods to ExoPlayer
- This change also enables seeking in live windows in the
  ExoPlayer demo app.
- The added playlist doesn't transition properly by itself,
  but for manual transitions it works correctly, and
  demonstrates seeking into a default position.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130515880
2016-08-31 15:25:07 +01:00
olly
fa84aa2123 Incremental step toward correct event propagation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130509123
2016-08-31 15:25:07 +01:00
olly
317a8ef19b Simplify DashMediaSource and simulate manifest refreshes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130507478
2016-08-31 15:25:07 +01:00
andrewlewis
5296d5b198 Move isFinal flag to the Window.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130503190
2016-08-31 15:25:07 +01:00
eguven
671a15badf ExtractorMediaPeriod: Use URI sha1 hash as the DataSpec key.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130422264
2016-08-31 15:25:07 +01:00
olly
7bed85950e Fix/improve SmoothStreaming live window
- Add missing callback call.
- Allow injection of live edge offset.
- Refine calculation of live window size to correctly
  handle just-started streams where the DVR window
  hasn't yet grown to full size.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130412465
2016-08-31 15:25:06 +01:00
olly
e0773f705f Allow applications to specify the live edge offset.
Also allow use of suggestedPresentationDelay taken from the
manifest, and enable this by default.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130409924
2016-08-31 15:25:06 +01:00
andrewlewis
76f7fffb8d Clean up period identifiers.
SinglePeriodTimelines can all use the same identifier, as their identifier is
wrapped in a pair with the (fixed) source index when they are concatenated with
other sources' timelines.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130386297
2016-08-31 15:25:06 +01:00
olly
bb8cbbfbe8 Allow mapping of period->window
This is a 1:1 mapping. This change formalises the fact,
and makes it possible to easily query the mapping.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130375111
2016-08-31 15:25:06 +01:00
olly
e35f9addaf Remove playWhenReadyCommitted.
This was always a bit of a hack; for Play Movies. It may well
no longer be necessary, and if not I'd like to think of a nicer
or more general way of doing it. We can always bring it back
if needed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130373433
2016-08-31 15:25:06 +01:00
olly
18a8655343 Javadoc cleanup: ExoPlayer#x -> #x
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130369177
2016-08-31 15:25:06 +01:00
eguven
096f85202e Use manifest URL sha1 hash as the content id.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130293908
2016-08-31 15:25:06 +01:00
andrewlewis
63ab601d75 Use consistent identifiers for extractor periods.
Also, fix clearing the timeline for source info changes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130292700
2016-08-31 15:25:06 +01:00
andrewlewis
80227840f6 Post source info refreshes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130289294
2016-08-31 15:25:06 +01:00
olly
1a909fd163 Change SeekWindow -> Window, and add window duration.
- This avoids the need to have to use the timeline to
  calculate a window duration, which can be awkward.
- Window now represents a window of availability with
  an isSeekable flag, rather than a window of
  seekability.
- Promoted Timeline and Window to top package; they're
  pretty important :).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130278509
2016-08-31 15:25:06 +01:00
andrewlewis
b120bea029 Don't reuse MediaPeriods.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130266483
2016-08-31 15:25:06 +01:00
olly
b5e41a903d Remove buffered position edge case.
It's no longer safe to convert END_OF_SOURCE -> duration on
the main therad, since the Timeline from which the duration
is obtained is posted to the main thread, where-as the
buffered position is passed by updating a volatile. Hence
an update to the latter might become visible to the main
thread before the corresponding Timeline.

This change moves the conversion to the playback thread.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130265893
2016-08-31 15:25:06 +01:00
andrewlewis
6e24372414 Use integers as identifiers for DASH periods.
This is in preparation for making it so that periods aren't reused.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130113382
2016-08-31 15:25:05 +01:00
olly
0ca81b1a4c Make sure TrackSelections refer to the correct TrackGroups
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130111048
2016-08-31 15:25:05 +01:00
aquilescanta
fc5df6312d Add support for multiple truns in a single traf
This kind of mp4 files has been seen in Hls+fMp4 samples.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130094845
2016-08-31 15:25:05 +01:00
olly
d04fde1a53 Distinguish dense vs sparse tracks for buffering purposes
- For audio/video, we should report the minimum largest
  queued timestamp. This ensures that buffering continues
  rather than stops in the case of bad sample interleaving.
- If there are "sparse" tracks then they should be ignored
  for this calculation, otherwise the buffered position can
  end up getting stuck at some small value (e.g. if there's
  a text track containing a single sample with a small
  timestamp).
- In the edge case that there are only "sparse" tracks, we
  probably want to take the maximum largest queued time
  instead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130094266
2016-08-31 15:25:05 +01:00
eguven
c380ba2dc1 CacheSpan.isEOS (is end of stream) field shows whether the {@link CacheSpan} contains the end of the original stream.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130084365
2016-08-31 15:25:05 +01:00
olly
cc28aeadd8 Automated rollback
*** Reason for rollback ***

Referential equality was probably the right thing to do, since using .equals
breaks track selection in the case that a source exposes two or more tracks
whose formats are equal. We should fix the way overrides work instead.

*** Original change description ***

Fix multi-period transitions with track selection overrides

An override applies across periods provided they expose the
same track groups according to .equals, but the formats in
the override are then compared against the period's formats
according to ==. Use .equals consistently to fix.

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130083840
2016-08-31 15:24:50 +01:00
olly
1811b01b07 Report duration only via Timeline
It's error prone (and more code) to report two ways

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129999117
2016-08-31 13:25:21 +01:00
olly
d8ffafea65 Simplify Timeline classes a bit
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129993536
2016-08-31 13:24:44 +01:00
eguven
56bfa78f0a Enable test coverage report generation for library project.
To generate the reports, under 'v2' folder run:
./gradlew createDebugCoverageReport

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129991223
2016-08-31 13:24:06 +01:00
olly
5deb948d14 Bugfix: If no renderers enabled, we don't need buffer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129987973
2016-08-31 13:23:30 +01:00
olly
f9005c7a78 Bugfix: Allow discontinuity on selectTracks
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129987709
2016-08-31 13:22:54 +01:00
olly
153c0aef2b Rework MediaPeriod track selection
This change allows MediaPeriod instances to replace
SampleStream instances when the selection isn't changing.
It also allows MediaPeriod instances to retain a
SampleStream but indicate that the renderer consuming
from it needs to be reset.

The change is used to fix the ref'd bug, and is used to
do the same thing in HLS without the need for the source
to report a discontinuity. Note that reporting discontinuity
could cause unnecessary failure when used as a child of
MergingMediaSource.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129971782
2016-08-31 13:22:15 +01:00
olly
9092c5665b Bump V1 to 1.5.10 + Fix incorrect Javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129966073
2016-08-31 13:21:38 +01:00
vigneshv
a2dfc62e08 MatroskaExtractor: Implement subsample encryption
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129908648
2016-08-31 13:20:50 +01:00
Rik Heijdens
4d18e623d6 Split Cue Rendering up into 3 phases
Split Cue Rendering up into a layout, background drawing and foreground
drawing phase so that issues with overlapping 608 captions are being prevented.
2016-08-31 11:55:41 +02:00
Rik Heijdens
ad9f76eb62 Return a copy of the SpannableStringBuilder when building Cues
In order to force the SubtitlePainter to redraw cues
2016-08-31 11:13:32 +02:00
Rik Heijdens
35fa5e2ef7 Fixed foreground color midrow codes being handled as background colors 2016-08-31 10:57:04 +02:00
Rik Heijdens
71d83f3e84 Caption lines as separate cues 2016-08-30 14:28:55 +02:00
Rik Heijdens
7cd94819c7 Took care of caption styling priorities 2016-08-25 11:23:03 +02:00
Rik Heijdens
176ce48569 Improved line and tab offset mapping 2016-08-25 10:07:05 +02:00
Rik Heijdens
ce55587db4 Fixed comment
Alpha is stored in the first byte of an integer
2016-08-24 16:27:23 +02:00
Rik Heijdens
8b2af12447 Discard spans after seeking
Discard any spans that should not be applied because they don't belong
to what's in the current CC buffer.
2016-08-24 14:58:08 +02:00
Rik Heijdens
43e6e16168 Implemented PAC and Midrow code handling for EIA-608 captions 2016-08-24 14:13:07 +02:00
olly
f6fdcee9b3 Parse stz2 Atoms during mp4 extraction.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129892143
2016-08-10 20:16:05 +01:00
andrewlewis
e883b7c270 Clear the timeline on seeking if renderers are reading ahead.
If a renderer is reading ahead of the playing period, seeking within the
playing period would fail, because renderers would not be disabled but then try
to read from SampleStreams that have a released period.

Also, in the same circumstances, seeking within the reading period would fail,
because all renderers would be disabled, but their sample streams have already
been read. When they are reenabled they expect to see a format but don't
receive one.

In both cases, seeking can just clear the timeline. This only occurs in rare
circumstances when the player is reading ahead, so the cost of re-preparing
will not be incurred often, and allows the seeking logic to be simpler.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129891060
2016-08-10 20:15:30 +01:00
olly
932574a3cb Fix us/ms conversion error.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129871792
2016-08-10 20:14:10 +01:00
olly
91c7551cc3 Remove Timeline.UNKNOWN_PERIOD_COUNT
It's no longer used.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129870115
2016-08-10 20:13:37 +01:00
olly
d10c811bd8 Fix Tx3g decoding
Issue #1712

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129869936
2016-08-10 20:13:03 +01:00
olly
cd4cc1dc14 Add absolute start time to Timeline
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129869741
2016-08-10 20:12:29 +01:00
olly
4502a464dd Use ms for SeekWindow, for consistency with Timeline
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129868070
2016-08-10 20:11:56 +01:00
olly
c5a2f9b010 Expose seek window + start position for SmoothStreaming
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129867969
2016-08-10 20:11:23 +01:00
olly
2a15480102 Fix SmoothStreaming
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129851843
2016-08-10 20:10:49 +01:00
andrewlewis
23981a6fc4 Hide the shutter view when no video is being rendered.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129849825
2016-08-10 20:10:14 +01:00
olly
aab4e36d1a Don't reuse SampleStream instance in SingleSampleMediaSource
Referential equality is going to become important for detecting
whether a SampleStream has been replaced, so we need to create
new instances as we do elsewhere.

This also enables multiple SampleStreams to be provided for a
single TrackGroup, as is also true for DASH and SmoothStreaming.
It's forbidden to ask for multiple SampleStreams from a single
TrackGroup currently, but we may choose to relax that at some
point (and indicate whether it's allowed as a flag on each
TrackGroup).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129842336
2016-08-10 20:09:40 +01:00
olly
665c9fc14c Fix DASH period duration reporting
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129787235
2016-08-10 20:09:05 +01:00
andrewlewis
cdb706bac8 Fix period durations for single period and concatenated timelines.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129748865
2016-08-10 20:08:31 +01:00
andrewlewis
88bf1d0739 Expose the seekable window.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129747377
2016-08-10 20:07:56 +01:00
olly
39482f244b Fix broken Javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129733571
2016-08-10 20:07:20 +01:00
eguven
bd37216902 CacheSpan and Util.un/escapeFileName tests.
Fixed CacheSpan regexp for line breaks characters in key.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129631446
2016-08-10 20:06:06 +01:00
olly
b15ceba780 Enhance DefaultTrackSelector part 2
- Support specifying a preferred text language.
- Score based selection for text/audio/other tracks.
- Prefer default tracks to non-default ones.
- Allow overriding of base select*Track methods.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129626994
2016-08-10 20:05:31 +01:00
andrewlewis
95f4113456 Fix seeking into a different period that has been prepared.
When seekToPeriodPosition found that the seek destination period was already
prepared, it would not disable/re-enable renderers. This was fine if the
playing period wasn't changing, but in other cases the renderers would be left
reading the incorrect streams (and the underlying periods may have been
released).

Also, transition to the buffering state before re-enabling renderers, so that
the renderers are not started until leaving the buffering state.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129625632
2016-08-10 20:04:56 +01:00
olly
5783272444 Fix missing generics
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129624395
2016-08-10 20:04:19 +01:00
olly
a7cb98d991 Pass source to TransferListener events
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129622239
2016-08-10 20:03:30 +01:00
andrewlewis
3ef837341e Don't use OMX.qcom.audio.decoder.mp3 on LGE Optimus API 16.
Issue: #1714

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129600348
2016-08-08 11:53:30 +01:00
andrewlewis
c2c41558e5 Merge the internal timeline into ExoPlayerImplInternal.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129325922
2016-08-08 11:53:30 +01:00
olly
ee565300cb Enhance DefaultTrackSelector part 1
- Enforce viewport constraints for fixed video track selection.
- Select best fixed video track, not the first one.
- Better handling of video tracks with unknown dimensions.
- Mini bug fix.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129226593
2016-08-08 11:53:30 +01:00
olly
e26f72d454 Update @return to Returns where appropriate
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129201483
2016-08-08 11:16:33 +01:00
olly
490c5fea78 Further improve codec reconfiguration
- Only setup a codec to allow adaptation to other compatible
  formats in the stream. If something like the mimeType is
  changing adaptation will never be possible, so there's no
  point.
- Incorporate maxInputSize into the reconfiguration logic.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129088464
2016-08-08 11:15:44 +01:00
eguven
bd7c8fed1b While buffering check for errors even if renderes are ready.
On an edge case, player may get stuck when the renderers are ready but the buffer doesn't get full enough because of a fatal error in data source. An example state can be created by starting a live DASH stream and switching between normal and slow network connections.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129084824
2016-08-08 11:15:06 +01:00
olly
9a272068b4 Allow resetting of position when setting source
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129083335
2016-08-08 11:14:18 +01:00
olly
90ceade08f Add option to manually replace manifest URI
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129081694
2016-08-08 11:13:39 +01:00
olly
af8f1b8387 Fix multi-period transitions with track selection overrides
An override applies across periods provided they expose the
same track groups according to .equals, but the formats in
the override are then compared against the period's formats
according to ==. Use .equals consistently to fix.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129081591
2016-08-08 11:13:01 +01:00
olly
1bea48f249 Suppress noop format changes
For self-initializing segments, DefaultTrackOutput receives
a null format and then the actual format. This broke the
deduplication logic in InfoQueue.format, since there were
two transitions: FormatX->Null and Null->FormatX. This CL
allows deduplication to succeed in this case.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129081583
2016-08-08 11:12:22 +01:00
olly
02a79f8c51 Improve video canReconfigureCodec accuracy
The codec cannot be reconfigured if the format rotation
changes, or if the format dimensions exceed the current
decoder's configured maximum dimensions.

Issue #1707

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129004187
2016-08-08 11:10:59 +01:00
olly
17014e6264 Fix concat media source premature listener invocation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128987095
2016-08-08 11:09:36 +01:00
andrewlewis
c1729b640c Allow seeking to a default position in a period.
When seeking to the default position in a period, the containing source may
actually return a position in another period. Multi-period live sources can do
this to seek the player to the live edge.

ExoPlayerImplInternal uses the same functionality when the playback position
reaches the end of a period to determine what period/position to play next.
This means that when playback transitions to a multi-period live source from
some other source (playing a concatenation of those two sources), the player
will play the live edge rather than the beginning of the earliest period.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128984355
2016-08-08 11:08:50 +01:00
olly
abd5653dc4 Add Util.getUtf8Bytes to avoid warnings
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128980489
2016-08-08 11:08:11 +01:00
olly
3604d589c1 Deduplication AVC/HEVC config parsing + other TODOs
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128979671
2016-08-08 11:07:29 +01:00
andrewlewis
8d122a101d Use new import ordering.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128967776
2016-08-08 11:06:48 +01:00
olly
846f8e1d46 Enable track blacklisting for DASH and SmoothStreaming
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128721068
2016-07-28 20:04:41 +01:00
olly
f66b90e34b Eliminate cruft from the demo apps's PlayerActivity
Useful functionality promoted to core library:

1. Management of SurfaceHolder.Callback lifecycle
   promoted to SimpleExoPlayer
2. Ability to determine whether audio/video tracks
   exist but are all unsupported promoted to
   MappingTrackSelector.TrackInfo
3. Read external storage permissions check promoted
   to Util
4. SubtitleView given ability to act directly as a
   TextRenderer.Output to remove layer of indirection
5. SubtitleView given ability to configure itself to
   user's platform wide caption styling
6. KeyCompatibleMediaController promoted to library's
   UI package.

Relocation of boring stuff:

1. ID3 frame logging moved to EventLogger.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128714230
2016-07-28 20:04:41 +01:00
olly
3501332dd3 Converge track selection to a single place.
This change merges the duties of FormatEvaluator into
TrackSelection classes, so that both the static and
dynamic parts of track selection are implemented in a
single place.

New feature: Demo app now allows you to enable random
adaptation in the track selection dialog.

Notes:

- It should be quite easy to allow application side
track blacklisting in addition to source side, as an
extension to this. That would effectively allow
applications to do seamless/deferred track selection
by creating a TrackSelection with all tracks enabled,
and then toggling the blacklist flags to select the
ones they want to be active.

- It should be trivial to implement format blacklisting
for DASH and SS as an extension to this. Will do in a
follow up CL.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128707517
2016-07-28 20:04:40 +01:00
eguven
2040615cc8 Support for added and removed DASH periods.
Logic and some code is copied from V1.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128706688
2016-07-28 20:04:40 +01:00
olly
2f20fd7c03 Simple language + Javadoc consistency
- Invoked --> Called
- Gets --> Returns
- "True if X. False otherwise." --> "Whether X."
- Removed some @returns where the Javadoc is in "Returns X" form

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128678638
2016-07-28 20:04:40 +01:00
andrewlewis
dfdb3bbc95 Count buffer ahead periods rather than using their indices.
This is in preparation for allowing MediaSources to skip over periods when one
period ends, which is needed for starting to play a multi-period live stream
that is concatenated on to another period at the live edge.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128674659
2016-07-28 20:04:40 +01:00
aquilescanta
5818409f4e Add viewport size filtering to the DefaultTrackSelector
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128590422
2016-07-28 20:04:40 +01:00
olly
242bdffc80 Fix a few warnings.
- Suppress spurious resource type warnings.
- Make AS happy by making private method non-final.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128584391
2016-07-28 20:04:40 +01:00
olly
ac59bde2be Fix up a bunch more Javadoc.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128565942
2016-07-28 20:04:40 +01:00
olly
3cb5862621 Only pass "throwing" part of Loader to MediaSource children
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128492613
2016-07-28 20:04:40 +01:00
cdrolle
47346c39c1 Fixed minor error that occurred when the manifest was updated.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128472884
2016-07-28 20:04:39 +01:00
olly
dae87b66dd MediaPeriod.getDurationUs must report duration when known.
As per the spec of MediaPeriod.getDurationUs, when a live
stream ends we need to start returning the correct final
duration.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128471183
2016-07-28 20:04:39 +01:00
olly
c5aa376bc4 Rename only part of FormatEvaluator/TrackSelection merge
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128471102
2016-07-28 20:04:39 +01:00
olly
bf0bdd8d7c Move SsMediaPeriod in its own file
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128465118
2016-07-28 20:04:39 +01:00
olly
1722019e0c Move SmoothStreaming manifest refresh to source level.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128461778
2016-07-28 20:04:39 +01:00
cdrolle
1d79c26b34 Added support for RawCC (i.e. out-of-band EIA-608)
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128397367
2016-07-28 20:04:31 +01:00
olly
75e2aee92e Fix janky post-track-selection behavior for HLS
We were forgetting to reset renderers during track
selections where muxed media is used.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128391816
2016-07-28 19:40:54 +01:00
olly
0b4284d060 Remove TrackGroup.adaptive flag.
It's only "needed" for HLS, and this requirement will
go away soon. It's safe to remove the flag ahead of
this because a TrackSelector can/should not attempt to
adapt between multiple audio/text tracks.

Also remove unnecessary restrictions on TrackGroups
being non-empty and only of known types.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128376601
2016-07-28 19:40:15 +01:00
andrewlewis
d657360341 Expose period information from MediaSources.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128357449
2016-07-28 19:39:07 +01:00
andrewlewis
2a70a58f0a Fix non-DRM playback.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128353039
2016-07-28 19:38:30 +01:00
olly
eca3edb940 Small cleanup of Util constants.
- Remove null checks (never happens).
- Use "const".equals(Util.CONST) where possible.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128351654
2016-07-28 19:37:48 +01:00
mishragaurav
1624135c20 Parse widevine tag in manifest for secure decryption.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128345063
2016-07-28 19:37:12 +01:00
olly
abcd10513a Do TODO in HlsChunkSource
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128190311
2016-07-22 22:41:36 +01:00
olly
9e9634a1a2 Delete disabled tests
The classes these tests are written for have changed
so much we'll have to write them again. We can refer
to V1 if we want to look at what the old tests did, so
there's no need to keep this file in the V2 tree at
the moment.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128189076
2016-07-22 22:41:36 +01:00
olly
ba0a4235a0 Consistent Javadoc for text package
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128160177
2016-07-22 22:41:36 +01:00
olly
f0b73e5d5b Consistent Javadoc for upstream package
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128159118
2016-07-22 22:41:36 +01:00
olly
692d756ee6 Simplification: Move common logic to TrackSelection
- TrackSelection now exposes the selected formats, ordered
  by decreasing bandwidth. This removes the need for DASH,
  SS and HLS to do the sorting individually.
- The change also removes the need to reconstruct TrackSelection
  instances with a different group index in various places
  (e.g. MergingMediaPeriod).
- This is also a step toward potentially packaging the
  FormatEvaluator inside of the TrackSelection (TBD).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128159064
2016-07-22 22:41:36 +01:00
olly
6f1b24f10f Add some missing Javadoc from the drm package
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128085240
2016-07-22 22:41:36 +01:00
eguven
0909446133 Don't let renderer input buffer get too big if codec not available.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128082468
2016-07-22 22:41:36 +01:00
aquilescanta
68156ac7a4 Ignore sequence numbers when switching variants in HLS
According to the spec, there is no mandatory relation between segments'
sequence numbers of different variants. This CL ignores sequence numbers
when switching variants:

* In vod, the switching playback position is obtained by adding the
    duration of previous segments.
* In live playback this is not possible. It is assumed that the
    different live media playlists do not drift apart too much, so
    the playback position is obtained by subtracting the duration
    in reverse order.

In later CLs, the described mechanisms will become the fallback methods
by replacing them with the use of EXT-X-PROGRAM-DATE-TIME information
or more reliable sources.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128072663
2016-07-22 22:41:36 +01:00
aquilescanta
98c5b2b8d0 Treat empty stss boxes as absent
ISSUE: #1681

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128071668
2016-07-22 22:41:35 +01:00
cdrolle
5a7b046462 Re-added call to schedule manifest refreshes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127951757
2016-07-22 22:41:35 +01:00
olly
48f666a0e3 Merge HlsParserUtil into HlsPlaylistParser
It's the only place that uses it.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127927164
2016-07-22 22:41:35 +01:00
olly
722e05b8ba Some brevity/consistency renaming in source package
SmoothStreaming -> Ss
MediaPresentationDescription -> DashManifest
DashSingleSegmentIndex -> SingleSegmentIndex

Moved DASH and Ss manifest classes to matching
manifest packages for consistency. For Hls the
package is called playlist still, since that's
what they're widely known as.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127925961
2016-07-22 22:41:35 +01:00
olly
fc457e4c1b Move default DRM callback implementation to library
This also removes direct use of HttpURLConnection and
allows use of any HttpDataSource for license requests,
which means those using OkHttp can finally use the
same network stack for license requests as they're using
for everything else, without having to implement their
own callback.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127841045
2016-07-22 22:41:35 +01:00
andrewlewis
2ed55d97d1 Work around broken VP8 decoders.
Issue: #548

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127821150
2016-07-22 22:41:35 +01:00
olly
9304cb3f8f Plumb key-rotation and drm-playlist support
With this change, MediaCodecRenderer acquires a session
from its DrmSessionManager whenever the DrmInitData in
the format changes. The DrmSessionManager is permitted
to return the same session if it can be re-used.

This plumbing adds support for:

1. Key-rotation, in the case that a key-rotation-aware
   DrmSessionManager is used. Such an implementation will
   return the same DrmSession for every aquisition, but
   will be making use of multiple MediaDrm instances within
   that session to enable the rotation.

2. Playlists with mixed clear and protected content. One
   final piece to this will be to have each MediaPeriod
   provide its own license URL. We could also allow each
   MediaPeriod to specify the DRM UUID, but switching from
   PlayReady to Widevine in a playlist seems like quite a
   hypothetical thing.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127816046
2016-07-22 22:41:35 +01:00
olly
ba9a610ac2 Put additional Javadoc files under src
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127811486
2016-07-22 22:41:34 +01:00
cushon
0022487746 Avoid "unnecessary boolean expression" warning
This is a no-op change to avoid an error-prone unnecessary
boolean expression warning.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127787709
2016-07-22 22:40:59 +01:00
olly
6c2a967763 BandwidthMeter shouldn't extend TransferListener
There may be other ways to estimate bandwidth that don't
require listening to our own transfers.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127741651
2016-07-22 22:21:54 +01:00
olly
74b43e26bd Allow injection of custom ChunkSources
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127737169
2016-07-22 22:21:06 +01:00
olly
5360ddc519 Allow injection of custom FormatEvaluators
This was possible previously, but now we support things
like multi-period DASH we need to do the injection in
the form of factories rather than concrete instances.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127735816
2016-07-22 22:20:32 +01:00
olly
e7d95aff34 Update Renderer documentation
- Cleaned up documentation
- Removed getIndex from Renderer interface
- Renamed reset to be positionReset

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127731006
2016-07-22 22:19:56 +01:00
eguven
ff914afd7f Propagate MediaSource loading errors to the player.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127551577
2016-07-22 22:19:21 +01:00
olly
98a0c5f05c Fix restoring of position.
This change restores ExoPlayer to its previous behaviour.
I think we'll want a "resetPosition" boolean parameter on
setMediaSource at some point, but no need to add it right
now. Note that this would not always reset to the start
of the source. For a live playback it will reset to the
desired position (normally somewhere slightly behind the
live edge).

Issue: #1667
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127549700
2016-07-15 18:21:40 +01:00
andrewlewis
15631e12a8 Fix seeking to a non-loaded period.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127536151
2016-07-15 18:20:31 +01:00
olly
8a36ce697e Add Renderer.getCapabilities
Renderer no longer extends RendererCapabilities after this
change. Capabilities are instead accessed via a getter.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127532634
2016-07-15 18:19:57 +01:00
olly
dcc1ac56df Make Renderer an interface
In V1 we received complaints that Renderer was too locked down.
In particular, it wasn't possible to implement a Renderer that
wrapped another Renderer, since most of the methods were package
private and final (e.g. enable).

This change defines Renderer as a proper interface, removing
this limitation. A method-reordering-only change will follow
this one, to get things into a nice consistent/sane order in
each of the Renderer classes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127527995
2016-07-15 18:19:23 +01:00
olly
7c551081f5 Only pass RendererCapabilities to TrackSelectors
We should only give a TrackSelector access to what it
needs, not the whole Renderer. This is particular true
if [] happens, since more Renderer methods
will become publicly visible.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127526473
2016-07-15 18:18:50 +01:00
aquilescanta
97d9c94c1a Fix a typo and variable declaration order in Period
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127441130
2016-07-15 18:18:11 +01:00
olly
553023e63f Fix DASH periods mis-reporting their duration + cleanup
DashMediaPeriod.releasePeriod resets duration to 0, but
instances are currently being re-used through multiple
prepare/release cycles. Hence the duration needs to be
retained. This change fixes this issue, and also makes
variables final in DashMediaPeriod where possible.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127440080
2016-07-15 18:17:36 +01:00
eguven
bc77c3eb82 Call MediaSource prepare/release methods in ExoPlayerImplInternal.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127436600
2016-07-15 18:16:55 +01:00
olly
2d8b51a709 Convert extractor factory classes to static final objects
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127415273
2016-07-15 18:16:18 +01:00
olly
f758082d40 Big (and hopefully near-final) rename.
1. Rename "extensions" package to "decoder". It's used by both
   text and (should be used by) metadata, so it's no longer just
   for extensions.
2. Move Buffer objects move into the decoder package.
3. Rename SubtitleParser and MetadataParser to SubtitleDecoder
   and MetadataDecoder respectively, since they extend Decoder.
   Ditto for all subclasses.
4. Subtitle and Metadata decoders now throw their own exception
   types rather than ParserException.
5. Move MediaCodec classes into a mediacodec package, with the
   exception of the concrete audio and video renderers.
6. Create an audio package to hold the two audio renderer classes
   plus related util classes.
7. Create a video package to hold the one video renderer class
   plus related util classes.

After this change the following nice properties hold:

1. Want a video renderer? Look in the video package. Ditto for
   audio, text and metadata.
2. All TrackRenderer implementations use a decoder of some kind
   to decode buffers received from the source, so we have
   consistent terminology there.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127326805
2016-07-15 18:14:55 +01:00
olly
4f718363b5 Remove BandwidthMeter from SimpleExoPlayer
The BandwidthMeter should only be used by MediaSource
instances and the objects they reference, so there's
really no reason for the player to need to know about it.

This change sacrifices DebugTextViewHelper showing the
estimated bandwidth, but I think that's a price worth
paying.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127316755
2016-07-15 18:14:14 +01:00
eguven
4a5bb55920 Split DashMediaSource MediaPeriod implementation into DashMediaPeriod and support multiple periods.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127315877
2016-07-15 18:13:33 +01:00
aquilescanta
a0c1595725 Add support for CEA608 in MP4 and fMP4
Issue: #1658
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127312721
2016-07-15 18:12:57 +01:00
[]inger
e4a3483d6f Propagate audioSessionId.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127300225
2016-07-15 18:12:20 +01:00
andrewlewis
11e2e0e640 Release Extractors on the loader's thread.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127294338
2016-07-15 18:11:38 +01:00
olly
62ebcaf853 Remove unnecessary res placeholder files
I think these were needed for Eclipse only.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127232262
2016-07-15 18:11:05 +01:00
olly
ea0cfdeeb1 Remove dead code from SmoothStreamingChunkSource
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127232159
2016-07-15 18:10:29 +01:00
andrewlewis
acef34a6f3 Set the output buffer position/limit only if it's non-null.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127196797
2016-07-15 18:09:11 +01:00
olly
d4d1640808 Use extension rather than composition for track selection
It doesn't look like TrackSelectionPolicy is going to be
useful other than with DefaultTrackSelector, and it's kinda
confusing dealing with both "selector" and "policy"
terminology. This change does the following:

DefaultTrackSelector -> selector.MappingTrackSelector
DefaultTrackSelectionPolicy -> selector.DefaultTrackSelector
TrackSelectionPolicy -> [deleted]
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127196326
2016-07-15 18:08:36 +01:00
olly
67be677ddf Move more classes under source package
- Chunk package is only useful to source packages.
- BehindLiveWindowException is a source exception.
- SequenceableLoader is related to sources.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127195307
2016-07-15 18:08:00 +01:00
andrewlewis
e4b08117fc Use adaptation workaround on N7v1.
Also, only enable the workaround when the resolution isn't changing but the
format is changing.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127192637
2016-07-15 18:07:24 +01:00
olly
de27b2e043 TrackStream -> source.SampleStream
Also addded result constants to C to remove the dependency
on TrackStream from extractor.DefaultTrackOutput.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127192488
2016-07-15 18:06:48 +01:00
olly
be9d77c59c Add new UI package.
There aren't really enough classes to justify it right
now, but if we're going to do a VideoView equivalent and
sensible player controls at some point, it's worth making
now to get classes into the correct place.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127184374
2016-07-15 18:06:12 +01:00
andrewlewis
c936aee412 Fix condition for working around broken decoders.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127102633
2016-07-15 18:05:02 +01:00
olly
bcca373f5b Rename DecoderInfo -> MediaCodecDecoderInfo
All other MediaCodec specific classes are prefixed MediaCodec,
and we now have other decoders that aren't not related to
MediaCodec.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127093330
2016-07-15 18:04:19 +01:00
andrewlewis
fdf26d6a1f Work around volantis adaptation issue.
The volantis H.264/AVC decoder could get stuck when adapting between certain
stream formats where there was no change in resolution.

Queue a small Baseline profile SPS, PPS and IDR slice during adaptation on this
device, to force reallocation of reference frames.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127091330
2016-07-15 18:03:45 +01:00
eguven
464869cf57 Fix DASH duration.
As multi period DASH isn't supported yet use the duration of the first period only.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127086808
2016-07-15 18:03:09 +01:00
olly
4e86c55361 Introduce source package for sources
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127073630
2016-07-15 18:02:31 +01:00
olly
a89bf3a477 Allow merging of both periods and sources.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127073129
2016-07-15 18:01:15 +01:00
olly
9558a4cb99 Rename TrackRenderer -> Renderer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127065122
2016-07-15 18:00:32 +01:00
olly
8e0354c0a6 Finalize class naming
SampleSourceProvider -> MediaSource
SampleSource -> MediaPeriod
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126914964
2016-07-15 17:59:52 +01:00
olly
c9ec7beb92 Add streamType/capabilities for extension audio renderers
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126913487
2016-07-15 17:59:12 +01:00
aquilescanta
a845f1c4cc Add soft video constrains to DefaultTrackSelectionPolicy
Also make filterHdVideoTracks override setMaxVideoSize.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126904080
2016-07-15 17:58:36 +01:00
olly
08bd4546ca Blacklist mp3 decoder on HTC One S
Issue: #377
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126901901
2016-07-15 17:57:46 +01:00
olly
dbb43567a3 Finalize v2 directory + package name
- The package is renamed to avoid conflicts with v1, should any
app wish to include both v1 and v2 for a period of time. This is
similar to the approach used by some other open source projects
(e.g. okhttp).
- Copyright year is updated everywhere for completeness.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126895326
2016-07-08 12:12:09 +01:00
andrewlewis
af3452d231 Make SampleSources reusable and implement SampleSourceProvider.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126888556
2016-07-08 10:15:14 +01:00
andrewlewis
42d78b3559 Fix seeking before a source is set.
Before this change, calling seekTo then setPlayWhenReady would cause the player
throw an error, due to using the sample source provider before it's set.

Transition to the buffering state in seekToInternal only if we have a sample
source provider.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126804528
2016-07-07 20:50:35 +01:00
olly
e02ca775f3 Optimize release of multiple allocations.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126799524
2016-07-07 20:50:05 +01:00
olly
1a3de408ac A few bug fixes.
1. Suppress onContinueLoadingRequested until a source is
   prepared (since such calls are not supposed to be made
   until after preparation has completed).
2. Don't use the format evaluator in HlsChunkSource prior
   to prepration completing.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126794616
2016-07-07 20:49:31 +01:00
olly
8c0e0b690e Don't abbreviate String as Str
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126792706
2016-07-07 20:48:53 +01:00
olly
85741ff2d3 TTML: Parse and use frameRate/Multiplier + tickRate
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126792535
2016-07-07 20:48:17 +01:00
olly
2426907f34 Fix positioning issues with ttml regions.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126790829
2016-07-07 20:47:41 +01:00
aquilescanta
b523ff8d81 Added javadoc to DefaultTrackSelectionPolicy methods
Also fixed language comparison using Locale's.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126703125
2016-07-07 20:46:26 +01:00
olly
19d65a7a9d Report loading on/off changes via ExoPlayer.
Also attempt to clear up naming a little, using "buffering" to
mean the user visible buffering state, and "loading" to mean a
source being loaded.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126693592
2016-07-07 20:45:53 +01:00
andrewlewis
f4239eb571 Release Extractors when ExtractorSampleSource is released.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126691912
2016-07-07 20:45:20 +01:00
olly
660b26e3ad Make NetworkLock non-static and less specific.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126682871
2016-07-07 20:44:46 +01:00
andrewlewis
dd031691b0 Pass an ExtractorsFactory to ExtractorSampleSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126672854
2016-07-07 20:44:12 +01:00
olly
06fd826a5c Restore injection of non-default retry count.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126646585
2016-07-07 20:43:38 +01:00
olly
49a93daf9e Restore HLS playback tests.
This fixes HlsChunkSource to allow selection of variants
other than the first one (as originally ordered in the
master playlist) in the case that the first one is
blacklisted. Having done this, the two disabled tests can
be restored.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126646547
2016-07-07 20:43:03 +01:00
olly
8db06a332f Fix HlsTrackStreamWrapper chunk queue updating
Also fix possible repeat-preparation for HlsTrackStreamWrapper
and ExtractorSampleSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126640380
2016-07-07 20:42:27 +01:00
olly
7b9e47ec6b Event based buffering.
At a high level, everything that we need to load in sync
with anything else now implements a new SequenceableLoader
class. This includes ChunkTrackStream, since multiple
demuxed tracks in DASH/SS need to be loaded in sync with
one another. At a higher level, SampleSources are also
SequenceableLoaders, which allows them to be kept in sync
by MultiSampleSource.

CompositeSequenceableLoader is able to load multiple
instances SequenceableLoaders in sync with one another,
and is used in various places where this is required.

This change also removes LoadControl registration, which
was complicated and error prone.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126632861
2016-07-07 20:41:52 +01:00
andrewlewis
7b673fe432 Fix miscellaneous consistency/formatting things.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126631393
2016-07-07 20:41:18 +01:00
aquilescanta
9f017d71ef Add HD content filtering to DefaultTrackSelectionPolicy
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126324788
2016-07-07 20:40:00 +01:00
andrewlewis
a476e090bc Use getConstructor().newInstance() in ExtractorSampleSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126306436
2016-07-07 20:39:22 +01:00
andrewlewis
2e77f02e7e Remove non-standard color constant.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126286809
2016-07-07 20:38:49 +01:00
andrewlewis
33fc6126a7 Improve track selection with renderers reading ahead (playlists #6)
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126202210
2016-07-07 20:38:13 +01:00
olly
bd3574dfba Allow SampleSourceProvider concatenation, simplify demo.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126196431
2016-07-07 20:37:35 +01:00
olly
5c2bb2a852 Use the correct format for init segments loads.
This is causing getTrackIndex to fail for live playbacks.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126189387
2016-07-07 20:36:59 +01:00
olly
e33278436f Misc bugfixes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126175948
2016-07-07 20:36:25 +01:00
olly
ca81444f95 Event based preparation.
- Removes the load delay that was previously present after
  source preparation.
- Prevents premature failure in the case that the buffering
  source fails to prepare.
- SampleSource.Callback will get a second method in a
  subsequent CL, approximately meaning "tell me if I can load
  more stuff". This will remove the need for LoadControl and
  the complexity that comes with it.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126172573
2016-07-07 20:35:41 +01:00
olly
76f426e944 Introduce a global buffering policy.
This is required for buffering to work properly across
playlist transitions. It's also much simpler, since
specifying the buffering policy becomes independent of
the type of media being played (i.e. the source).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126051755
2016-07-07 20:34:57 +01:00
andrewlewis
fdd90256f4 Allow renderers to read ahead further than the next source.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125951381
2016-07-07 20:34:04 +01:00
andrewlewis
6031f89fe9 Limit the maximum number of sources to buffer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125698923
2016-07-07 20:32:47 +01:00
andrewlewis
aa313f234d Set TrackStreams to be final on renderers that will be disabled.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125691172
2016-07-07 20:32:11 +01:00
olly
494510d6ad Fix ready and ended conditions.
1. The readiness of the timeline is only relevant if there
   aren't any enabled renderers. It's also only ready if
   the source after the playing source is actually prepared
   (if not, we're waiting for preparation).
2. Prevent early transition to the ENDED state when the
   playback position hits the duration, but we're not at the
   final entry in the playlist.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125685193
2016-07-07 20:31:38 +01:00
olly
a8883baa69 Start cleaning up buffering.
- Always continue loading if we've got less than the minimum
  amount of media in the buffer.
- Use LoadControl in ExtractorSampleSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125679669
2016-07-07 20:31:04 +01:00
olly
5055a4aa91 Some restructing to make ExoPlayerImplInternal clearer.
- Update playbackInfo duration/position/bufferedPosition in a
  single place.
- Remove sampleSource variable, and remove side effects from
  getSampleSource. There was actually a subtle bug where
  getSampleSource wasn't called by anything where no renderers
  where enabled (meaning the source never transitioned).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125676540
2016-07-07 20:30:22 +01:00
olly
8eb1f3f57c Remove resumeInternal from ExoPlayerImplInternal.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125670965
2016-07-07 20:29:45 +01:00
olly
291b210be3 A source is fully buffered if it has no enabled tracks.
Also, getBufferedPosition shouldn't be called if no tracks
are selected.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125670213
2016-07-07 20:29:11 +01:00
olly
2746d59ea8 Handle TrackStream transitions in isSourceReady.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125669080
2016-07-07 20:28:27 +01:00
olly
79cbd390ab bufferedPositionUs cannot be UNSET.
Also do some naming cleanup + do ms->us seek conversion
in ExoPlayerImpl, since that's where we now do all the
conversions coming out of the player.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125662973
2016-07-07 20:27:53 +01:00
andrewlewis
e1d3c932fa Only update track streams in updateTrackStreams.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125661172
2016-07-07 20:27:14 +01:00
andrewlewis
fc2cdef208 Don't return a TrackStream from TrackRenderer.disable.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125659817
2016-07-07 20:26:37 +01:00
eguven
adc7ecec09 Support MPEG-TS streams that start/end with an incomplete TS packet or lost sync.
Issue: #1332
Issue: #1101
Issue: #1083
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125659191
2016-07-07 20:25:59 +01:00
aquilescanta
762ec41f95 Add support for HLS track selection flags
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125658752
2016-07-07 20:25:22 +01:00
olly
3e6c0ced82 A mini bit of Timeline simplification.
Pretty sure this does the same thing.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125581858
2016-07-07 20:24:45 +01:00
olly
5eca669474 Move renderers into Timeline.
The outer class should only deal with the enabled renderers.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125579652
2016-07-07 20:24:01 +01:00
andrewlewis
2073f3fce3 Expose source indices via ExoPlayer (playlists #5).
ExoPlayer.EventListener.onPositionDiscontinuity is notified during seeking and
transitioning from one source to the next.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125578976
2016-07-07 20:23:21 +01:00
olly
f9fa54cd5d Have seekTo return new position directly.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125476407
2016-07-07 20:22:38 +01:00
aquilescanta
e71cdb1bad Filter track support by profile and level
This CL only provides checks for HEVC codecs and adds codec information to Format
instances in DASH. Right now, we check that the supported profiles are advertised
individually and that the supported level is equal or higher than the requested codec
level.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125470489
2016-07-07 20:22:02 +01:00
eguven
0139f3f276 Remove unnecessary cloning.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125454697
2016-07-07 20:21:26 +01:00
Oliver Woodman
52c5342158 getBufferedPosition can't return unknown anymore 2016-07-07 20:15:27 +01:00
olly
4c434005d4 Remove/simplify some extractor tests.
We have our snazzy new file-based extractor tests now,
and the other ones have historically proven way more
hassle than they're worth (e.g. I spent a good few hours
once just trying to work out how to fix the Mp4 extractor
test, having established it was the test and not the
code that was broken!).

I think some more can go from the ogg package, but leaving
in place for now because it's a bit less clear what to
get rid of.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125330072
2016-07-07 20:11:18 +01:00
eguven
53cc88e2dc DefaultOggSeeker small optimization.
skipToNextPage() isn't necessary anymore.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125147444
2016-07-07 20:09:28 +01:00
olly
4fe6e5d755 Misc fixes for playback tests.
- AllowedVideoJoiningTimeMs must be set to 0 for tests so
  that tests which disable/enable video renderers don't
  register a large number of dropped frames.
- Fixed a threading issue that could cause occassional test
  failure.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124978843
2016-06-15 20:28:17 +01:00
olly
aab551e907 Add HlsTest to V2.
The ones that are commented out are legitimately broken
and will need a library fix.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124978438
2016-06-15 20:27:48 +01:00
olly
ec4c7d3acf Remove Eclipse support. Simplify manifests.
It looks like the manifests are essentially pointless,
but various tools are unhappy if I delete them.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124976509
2016-06-15 20:26:37 +01:00
andrewlewis
66a5c96c5a Calculate ExtractorSampleSource duration if unknown (playlists #4).
When buffering playlist items after the currently-playing one,
continueBuffering should take a position that is negative because the playback
position is before the start of the source being buffered. This change makes
sure that ExtractorSampleSources always have a known duration when they are
fully buffered, which means that the correct (negative) source-relative
position can be calculated.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124949409
2016-06-15 20:25:26 +01:00
eguven
e6267cd253 DefaultOggSeeker: use skipFully() instead skip().
skip() may skip less than what we want here.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124930478
2016-06-15 19:43:17 +01:00
andrewlewis
365812e820 Remove FrameworkSampleSource.
ExtractorSampleSource covers almost all use cases (except for AMR, AVI and
legacy Widevine). The FLAC extension must be compiled for support for FLAC
extraction.

FrameworkSampleSource has device-specific issues, makes blocking calls to the
underlying MediaExtractor, and does not provide much control over buffering.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124850102
2016-06-15 19:43:17 +01:00
andrewlewis
a6b7cfb5e4 Close ParsingLoadable input streams that fail to open.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124836804
2016-06-15 19:43:17 +01:00
olly
bd248ffee5 Ahem (fix bad constant value).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124836700
2016-06-15 19:43:17 +01:00
eguven
61df9aeb26 DashChunkSource: Workaround for missing segment at the end of the period.
Issue: #836
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124832221
2016-06-15 19:43:17 +01:00
olly
266c0dce40 Add DashTest to V2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124831095
2016-06-15 19:43:17 +01:00
olly
f4e4fd51c6 Clean up chunked media source event listeners.
- Event listener is now at the SampleSource level, since the
  individual ChunkTrackStream instances are created internally.
- Event listener receives events corresponding to loads made
  at the SampleSource level (e.g. manifest fetches) in addition
  to those made by the ChunkTrackStream instances.
- Added ability for FormatEvaluators to propagate arbitrary
  information (as an Object) through to the listeners. This was
  a request from YouTube.
- Added significantly more information to each event, for example
  the DataSpec that defines the load being made is now passed, as
  is timing information.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124732984
2016-06-15 19:43:17 +01:00
eguven
172bc4e8d8 Increase mkv test sample file seek granularity to have better seek results.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124724113
2016-06-15 19:43:17 +01:00
olly
5cd7deffe7 Add playback tests to V2.
DashTest will be migrated separately, since it's a little
more work.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124722462
2016-06-15 19:43:17 +01:00
olly
0978227a84 Create a new CodecCounters on enable
If the same instance is reset then rapidly re-enabling the
renderer after disabling it can prevent an application from
reading the final values at the time when the renderer was
disabled. Hence we now instantiate a new CodecCounters each
time. This is needed to migrate DashTest to V2.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124721106
2016-06-15 19:42:58 +01:00
andrewlewis
7ae9bf409b Play a sequence of sources (playlists #3).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124713796
2016-06-15 19:42:58 +01:00
olly
df4e4a72fa Print the name of the decoder we failed to query.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124712775
2016-06-15 19:42:58 +01:00
andrewlewis
189a2502c5 Fix order of arguments in Format.copyWithDrmInitData.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124705921
2016-06-15 19:42:58 +01:00
sharjeel
41b86f660c sgpd support in ExoV2
This is basically clone of [] for Exo V2.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124682237
2016-06-15 19:42:58 +01:00
andrewlewis
2a3b4f6780 Don't flip() TextTrackRenderer EoS input buffers.
TextTrackRenderer would unconditionally flip input buffers read from its
source TrackStream, but the data could be null in the case where the buffer
signaled end of stream. Only flip if the corresponding flag is not set.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124559077
2016-06-15 19:42:58 +01:00
eguven
4279e22138 TestUtil.assertOutput() also tests seeking.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124556278
2016-06-15 19:42:58 +01:00
aquilescanta
461751b194 Add codec profiles for video container/sample formats.
This allows better decoding support checking.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124550351
2016-06-15 19:42:58 +01:00
olly
ca9bd5e8e4 Define DATA_TYPE constants in C.
Things like manifests are loaded not in the context of a Chunk,
but we want to eventually be reporting all loading events. So
it makes senes to define data types at a global level.

Also added {@code} in a few places for consistency.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124549737
2016-06-15 19:42:58 +01:00
tasnimsunny
b4746eddb3 Add cache initializtion signal to CacheEvictor
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124374161
2016-06-15 19:42:12 +01:00
eguven
544d88ca56 PsExtractorTest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124355441
2016-06-15 19:42:12 +01:00
eguven
110c819939 FragmentedMp4ExtractorTest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124346810
2016-06-15 19:42:12 +01:00
olly
4a3980c71e Add format change events to SimpleExoPlayer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124344637
2016-06-15 19:42:12 +01:00
eguven
98b7e7f4e2 AdtsExtractorTest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124335597
2016-06-15 19:42:09 +01:00
eguven
57d6c49e73 TsExtractorTest: Speed up the test with a smaller test sample file.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124333753
2016-06-15 19:42:09 +01:00
eguven
cec658d573 ExtractorInput.setRetryPosition(): Called when reading fails and the required retry position is different from the last position.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124242428
2016-06-15 19:42:04 +01:00
olly
1a1a454d09 Remove stray break from HLS playlist parser.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124225444
2016-06-15 19:42:04 +01:00
olly
aa73e137d6 Propagate manifest format info through to renderers.
DASH and SS manifests define potentially useful information
that isn't present in the actual media streams. Primarily
the representation id, but bitrate, fps and language may
also be defined only at the manifest leve. This change merges
the information into the sample format that's propagated to
the renderers.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124225175
2016-06-15 19:42:04 +01:00
olly
cb9a64da33 Merge ID3 parsing improvements from GitHub.
- Parse APIC and TextInformation frames.
- In MPEG-TS, don't mind if packets contain end padding.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124079930
2016-06-15 19:42:04 +01:00
olly
444d21563c Fix MediaCodecUtil regression.
On older devices getCapabilitiesForType calls fail for some
secondary codecs. We didn't used to call getCapabilitiesForType
on secondary codecs, and so avoided this issue.

This change suppresses any exceptions encountered when
querying secondary decoders on API levels prior to N, to
restore previous behavior when a failure occurs.

Issue: #1534
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=124010242
2016-06-15 19:42:04 +01:00
andrewlewis
e684e42994 Clean up DefaultDataSources and add factory for okhttp DataSources.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123991352
2016-06-15 19:42:04 +01:00
olly
c622483f79 Enable seamless rejoing for Vp9 extension.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123982330
2016-06-15 19:42:04 +01:00
olly
afa1ad1a6a Keep playback position advancing when all renderers are disabled.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123977520
2016-06-15 19:42:04 +01:00
olly
69bd31f7c2 Fix video renderer rejoining.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123976645
2016-06-15 19:42:03 +01:00
andrewlewis
a100175b72 Rename TrackRenderer.reset to TrackRenderer.onReset.
This allows the TrackRenderer superclass to do things when the renderer is
reset, and makes resetting consistent with other 'events' on renderers.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123974633
2016-06-15 19:42:03 +01:00
olly
ff745ac444 Make ExtractorSampleSource constructor consistent.
The allocator and buffering policy (e.g. how large the buffer
is) is moving to the top level as part of playlist support,
so it no longer makes sense to inject these parameters as
args into ExtractorSampleSource's constructor.

Instantiating the allocator and buffer size inside of the
source is temporary and only until they're moved up.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123968976
2016-06-15 19:42:03 +01:00
aquilescanta
6fd610fc5f Added max video size selection to DefaultTrackSelectionPolicy.
It is possible to add use of this feature in the demo app, restricting the selected
tracks to the viewport size. But it should be added in a future CL.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123965232
2016-06-15 19:42:03 +01:00
eguven
ebd37cfb8e Moved testutils package to a seperate module so it can be accessed by the tests in other modules.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123964784
2016-06-15 19:42:03 +01:00
aquilescanta
105ef1da2d Discard trailing ctts entries with 0 sample counts
The bug this cl fixes is basically an uncaught case of []

Issue: #1567
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123963779
2016-06-15 19:42:03 +01:00
olly
443a656ada Fix build.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123958609
2016-06-15 19:42:03 +01:00
olly
7ef028c67b Fix delivery of onLoadCanceled to occur before thread dies.
This removes "message sent on dead thread" warnings in nearly
all cases, and guarantees delivery of load cancelation to event
listeners.

Issue: #426
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123957691
2016-06-15 19:42:03 +01:00
olly
8e717e2dee Properly disable sample queues when not selected.
- The main goal of this change is to remove the need for
  discardSamplesForDisabledTracks() in continueBuffering
  in HlsTrackStreamWrapper and ExtractorSampleSource. As
  a result we'll also save one Allocation per disabled
  track.
- Another benefit of this change is that Allocator.trim
  calls can no longer be dropped. This could previously
  happen on player release if the playback thread's
  Looper quit before delivery of onLoadCanceled which
  performed the trim in the case that a load needed to be
  canceled at the time of the release.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123957434
2016-06-15 19:42:03 +01:00
olly
14cb76a112 Make ExoPlayer systrace consistent.
Plus remove some unused util methods + make a few
warnings go away.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123888046
2016-06-15 19:42:03 +01:00
olly
5cde3aa314 Show toast if media contains only unplayable audio/video.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123885817
2016-06-15 19:42:03 +01:00
olly
00aef6ddb7 Always include extension renderers in SimplePlayer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123868547
2016-06-15 19:42:03 +01:00
olly
4888592c76 Fix HLS track selection.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123851448
2016-06-15 19:42:02 +01:00
eguven
94fa2ecfe5 WavExtractorTest and TsExtractorTest
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123848524
2016-06-15 19:42:02 +01:00
olly
ed19a582a7 Suppress source release failures.
This is similar to suppression of failures disabling the
renderers (in the block above).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123847812
2016-06-15 19:42:02 +01:00
andrewlewis
0565d8e100 Handle non-AAC/AVC encrypted audio/video sample entries.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123847497
2016-06-15 19:42:02 +01:00
eguven
ecad3bb396 MatroskaExtractorTest: removed unused local variables.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123847017
2016-06-15 19:42:02 +01:00
eguven
d99679a960 flv, mkv and mp4 extractor sample tests.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123845660
2016-06-15 19:42:02 +01:00
olly
eb021cabd1 Small cleanup.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123739334
2016-06-15 19:42:02 +01:00
olly
53b50a61fe Use manifest load start time to dictate refresh period.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123734239
2016-06-15 19:42:02 +01:00
olly
7f70ee911b Clean up chunked Sample/Chunk sources.
- Remove need for SampleSources to ref ChunkSources.
- Correctly propagate errors loading manifests through
  ChunkSource components.
- Fix some misc warnings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123732918
2016-06-15 19:42:02 +01:00
eguven
7aae5805b8 Added Mp3ExtractorTest and modified Mp3Extractor to pass the test.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123640738
2016-06-15 19:42:02 +01:00
eguven
5a4d82c7c2 TestUtil.assertOutput() uses "*.unklen.dump" file if only it exists and simulateUnknownLength is true.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123638992
2016-06-15 19:41:53 +01:00
olly
911d86bf2f Use Loader directly for manifest + utc timing loads.
Aside from deleting code, this change (a) adds retry
functionality for initial manifest fetches, (b) uses
the same loader for the utc timing fetch as for the
manifest.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123634812
2016-06-15 19:41:53 +01:00
aquilescanta
b61b3ab011 Fixed premature linebreak
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123620174
2016-06-15 19:41:53 +01:00
eguven
430985322d TestUtil.assertOutput() uses ExtractorFactory to create a new instance of the Extractor for each combination of simulation parameters.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123506162
2016-06-15 19:41:53 +01:00
olly
8322592ee8 Fix flag issue causing corrupt output on DRM playbacks.
The issue is visible for DRM playbacks because
BUFFER_FLAG_ENCRYPTED is being cleared, which results
in trying to play encrypted samples without decryption.
The issue would have also incorrectly cleared key frame
flags too, for both clear and encrypted playbacks, but
I don't think we're using that flag downstream anywhere
and so the issue wasn't visible.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123426582
2016-06-15 19:41:53 +01:00
aquilescanta
7bab9cabfb Added support for video track selection
We allow 2 configurations: Forcing seamless adaptiveness and allowing
mixed mime types adaptation.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123420364
2016-06-15 19:41:53 +01:00
olly
8744e8dce9 Refactor #6.HLS.4
Pull more logic up to HlsSampleSource. Somewhat regretfully,
this also backs out the optimization work done toward the
ref'd issue. I think that's one for another time perhaps...

Issue: #551
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123417413
2016-06-15 19:41:53 +01:00
olly
6d62962ab0 Bump version to 2.0.0.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123410989
2016-06-15 19:41:53 +01:00
eguven
651237ac4f Moved/renamed OggExtractorFileTests.parseFile(...) methods to TestUtil.assertOutput(...).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123410374
2016-06-15 19:41:53 +01:00
olly
800006d08d Remove TODOs that we have little urge to actually do.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123410274
2016-06-15 19:41:53 +01:00
eguven
ccfb6beb30 FakeExtractorOutput dump() and assertEquals(..., String dumpFile) methods to facilitate extractor test writing.
Changed OggExtractorFileTests to use dump files.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123407516
2016-06-15 19:41:52 +01:00
olly
abc5c41ff4 Provide setPlaybackParams convenience method.
It's not a comprehensive solution for setting the
playback speed because (a) it doesn't apply when
audio is disabled, and (b) we do some timestamp
interpolation in a few places where we assume real
time. However in practice it works pretty well and
most apps probably don't allow disabling of audio,
so I think it makes sense to expose it.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123406605
2016-06-15 19:41:52 +01:00
andrewlewis
5cf7c2ecf4 Separate enabling/setting TrackStreams in renderers (playlists #1).
This is in preparation for changing the TrackStream while keeping the renderer
enabled, to give seamless transitions for playlists.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123394733
2016-06-15 19:41:52 +01:00
eguven
17f8ac8adf Validate Extractor behavior when load position is reset to 0 following an error.
Added a new method TestUtil.consumeTestData() to emulate
the exact behaviour and modified OggExtractorFileTests to
use it. Rest of the test will be fixed in follow up CLs.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123320538
2016-06-15 19:41:35 +01:00
andrewlewis
c2b89d6285 Add SampleSourceProvider as a factory for SampleSources (playlists #2).
Initially only the first source index is used. In a later change,
ExoPlayerImplInternal will create SampleSources for different playlist item
indices as necessary.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123312595
2016-06-15 19:41:35 +01:00
olly
c650ab64bc Less silly generics for Loader.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123310694
2016-06-15 19:41:35 +01:00
olly
1ea149a4d2 Refactor #6.HLS.3
- Pull loading of the initial manifest up to HlsSampleSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123305312
2016-06-15 19:41:35 +01:00
olly
e74fc80aab Loader improvements.
This change moves generally useful functionality (load timing
and fatal error propagation) inside of Loader, so that callers
don't have to duplicate effort.

The change also makes use of generics so that the callback
receives a Loadable with a more specific type.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123304369
2016-06-15 19:41:35 +01:00
olly
db79f7989f Fix a few warnings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123302488
2016-06-15 19:41:35 +01:00
olly
10329eb111 Allow delivery to multiple messages in a single message.
Where multiple messages are required to be sent in order
to perform a player reconfiguration, it will usually be
desirable to process all messages in a single "transaction"
(i.e. without any rendering happening when only some of
the messages have been applied).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123228334
2016-06-15 19:41:34 +01:00
olly
f995509448 Give MSG constants different values.
This should be a no-op change, but it seems sensible to
have them not overlap.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123208140
2016-06-15 19:41:34 +01:00
olly
35d7dad047 Clean up SimpleExoPlayer.
- Simplify setSurface by always blocking when the surface
  is being cleared.
- Add analogous setVolume API.
- Support setting of playback params for extension audio
  decoders. We can probably use this to add a setPlaybackRate
  API to SimpleExoPlayer for API level 23 and above only,
  but we'd probably want to make sure it works properly when
  there's no audio track too, so some thought will be
  required.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123204581
2016-06-15 19:41:34 +01:00
olly
7d229003ad Add flexibility to DrmSessionManager.
DrmSessionManager is now an actual manager. For each session
request it may return a shared session (as things work now,
and as is suitable for Widevine VOD) or a separate instance
(e.g. for PlayReady where audio and video are protected with
different keys).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123203664
2016-06-15 19:41:34 +01:00
eguven
b6755c145e DefaultOggSeeker loop fix.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123191416
2016-06-15 19:41:34 +01:00
vigneshv
9609302b3d Support VPx in ISO-BMFF (MP4) Container
Netflix created a spec to encapsulate VPx codecs in ISO-BMFF (MP4)
Container [1]. This CL adds support for VP8 and VP9 video codecs
in the MP4 container.

[1] https://github.com/Netflix/vp9-dash/blob/master/Downloads/VPCodecISOMediaFileFormatBinding.pdf
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123160650
2016-06-15 19:41:34 +01:00
olly
ced7de15a9 Promote DemoPlayer to library as SimpleExoPlayer.
DemoPlayer moves into core library as SimpleExoPlayer, which
implements ExoPlayer.

Issue: #383
Issue: #592
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=123090184
2016-06-15 19:41:34 +01:00
olly
075e095cba Assume AAC-LC (or HE-AAC) in MPEG-TS.
Issue: #774
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122987179
2016-06-15 19:41:34 +01:00
aquilescanta
c539db68ca Add first default track selection policies
With this CL:
* The first supported video track found is selected.
* The first supported audio track with preferred language is selected.
  If none, we fallback to the first supported one.
* For text, we only present a selection if one of the tracks has the
  preferred language and the track is flagged as forced.

TODO list:
* Add a selection policy for video (probably related with adaptiveness).
* We should decide what to do with the default flag.
* Perhaps, if no audio with the preferred language(assuming there is one)
  is found, we should fall back to a text track that has the preferred
  language.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122985006
2016-06-15 19:41:34 +01:00
olly
58953d370f Simplify DemoPlayer + misc surrounding components.
1. Properly split out listening responsibilities so that
   DemoPlayer only listens to its own components.
2. Revert StreamingDrmSessionManager UnsupportedDrmScheme
   exceptions back to how they worked in V1, and inject
   a DrmSessionManager rather than a MediaDrmCallback into
   DemoPlayer.

This much better prepares DemoPlayer for promotion into
the core ExoPlayer library, since it removes assumptions
such as what SampleSource and DrmSessionManager impls
might be used with it.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122980952
2016-06-15 19:41:34 +01:00
eguven
9981a83c05 Fix Ogg/Flac sync exception.
Restores input position after flac block size read.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122978325
2016-06-15 19:41:33 +01:00
eguven
731d4283ab Ogg/Opus and Ogg/Flac search seeking
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122977123
2016-06-15 19:41:33 +01:00
olly
7465db2a22 Merge ID3 parsing improvements from GitHub.
- Parse APIC and TextInformation frames.
- In MPEG-TS, don't mind if packets contain end padding.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122743786
2016-06-15 19:41:33 +01:00
olly
83b43a6fe6 Assume 360p 4:3 H264 is supported from JB.
Issue: #1534
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122742666
2016-06-15 19:41:33 +01:00
andrewlewis
fb3fdb34c7 Send H.265 parameter sets in TSs to the decoder.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122730598
2016-06-15 19:41:33 +01:00
olly
7d4c786e21 Make DRM work in ExoPlayer V2.
Bigger changes will be coming, but this gets DRM back
up and working again.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122719062
2016-06-15 19:41:33 +01:00
aquilescanta
80f67d908a Add flagDefault and flagForced support for Matroska
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122636596
2016-06-15 19:41:33 +01:00
olly
d43824710e Fix seeking with WAV files.
Previously, rounding down to the nearest frame wasn't
being done correctly; seeking could seek into a sample.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122618668
2016-06-15 19:41:33 +01:00
aquilescanta
fce17e7ffc Added a trackSelectionFlags field to format.
This field will allow us to flexibly add information provided by the container
or streaming manifests related to the tracks that must be selected.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122559858
2016-06-15 19:41:33 +01:00
olly
a16a333df2 Clean up renderer event listeners.
- Don't report errors to listeners if playback will immediately
  fail. Doing so is redundant, since such errors are immediately
  reported through ExoPlayer's listener as a result of playback
  failure. We were also reporting these errors inconsistently
  across renderers.
- Reduce code duplication through EventDispatcher classes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122519976
2016-06-15 19:41:32 +01:00
olly
bfee449ed8 Fix FMP4 playback duration and absent tfdt handling.
- Parse duration from mehd box for FMP4.
- Handle absent tfdt boxes by accumulating decode time
  from one fragment to the next.

Issue: #1529
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122512416
2016-06-15 19:41:32 +01:00
olly
9e65693e91 Misc cleanup.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122506577
2016-06-15 19:41:32 +01:00
olly
a43144decf Don't require playback Looper to build DRM session manager.
This is required because in V2 we'll be instantiating DRM
session managers before the ExoPlayer instance (and hence
we wont have the Looper). This logic will be further cleaned
up in later CLs that overhaul DrmSessionManager in more
depth.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122453765
2016-06-15 19:41:32 +01:00
andrewlewis
537f193c88 Improve precision of fragmented/unfragmented MP4 sniffing.
Search up to 4 KB for both fragmented and unfragmented files.

Detect files with an mvex box in their moov box as fragmented.

Fix reading of brands.

Issue: #1523
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122429548
2016-06-15 19:41:32 +01:00
olly
ecf50c4f9e Fix too-long TAG + remove unused methods.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122426685
2016-06-15 19:41:32 +01:00
olly
2e8e8aba9d Always inject loadable retry count.
Now [DASH/SS]SampleSource instances are creating ChunkTrackStream
instances dynamically, it makes sense to always require that the
min retry count be injected from that level. The SampleSource
implementations should also use the retry count when refreshing
the manifest.

The option to configure the retry count on the SampleSource classes
will arrive in a later CL.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122424774
2016-06-15 19:41:32 +01:00
olly
6977c8f455 Bit of naming/documentation cleanup.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122423250
2016-06-15 19:41:32 +01:00
aquilescanta
2f4bfc3f5f Add the TrackSelectionPolicy to decouple track "assignment" and selection
Allows the user to provide their own criteria for selecting one of the available tracks
without having to reimplement the track assignment logic, i.e. linking type x tracks with
type x renderer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122422087
2016-06-15 19:41:32 +01:00
olly
23769fe82e Work around broken AAC decoder.
Issue: #1528
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122421357
2016-06-15 19:41:32 +01:00
olly
ca49d6ff40 Refactor #6.HLS.2
Rename HlsSampleSource2 -> HlsSampleSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122418334
2016-06-15 19:41:32 +01:00
olly
770f2c2c58 Refactor #6.HLS.1
1. Merge HlsOutput and HlsSampleSource -> HlsTrackStreamWrapper.
2. Rename HlsSource -> HlsSampleSource2. This will be renamed to
   HlsSampleSource in a subsequent CL.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122415970
2016-06-15 19:41:32 +01:00
andrewlewis
51cf8bed29 Fix UUID constant reference.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122412543
2016-06-15 19:41:32 +01:00
olly
d689a8fdfd Make Format implement Parcelable.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122407769
2016-06-15 19:41:31 +01:00
olly
efaea81194 Use CodecCounters consistently in all renderers.
- Increment skippedBufferCount for VPX and ADTR.
- Set maxConsecutiveDroppedOutputBufferCount count for VPX.
  Tweak its meaning to ignore skipped frames.
- Remove outputFormat/outputBuffer changed counts. These add
  limited value. Also, MediaCodec is moving toward a model where
  you don't see the output buffers changing because you dequeue
  them one at a time (like how our extension decoders work).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122258530
2016-06-15 19:41:31 +01:00
olly
3760f514a9 Flesh out ExoPlayer extensions.
1. AudioDecoderTrackRenderer now reports decoder initialization
   and AudioTrack underruns.
2. AudioDecoderTrackRenderer can now render more than one output
   buffer per call to doSomeWork, to be consistent with
   MediaCodecAudioTrackRenderer. This may also prevent audio
   underruns in the case that audio is fragmented into many small
   buffers.
3. AudioDecoderTrackRenderer now has an overridable method that
   receives the audio session id, to be consistent with
   MediaCodecAudioTrackRenderer.
4. Fix unsafe event notification in LibvpxVideoTrackRenderer.
5. Vpx and AudioDecoder extensions now increment the CodecCounter
   inputBufferCount field correctly.
6. Decoders now have names :).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122250009
2016-06-15 19:41:31 +01:00
andrewlewis
7e58f4cd9d Allow AudioDecoderTrackRenderers to override their output formats.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122247516
2016-06-15 19:41:31 +01:00
andrewlewis
403f164b75 Pass the sample Format to AudioDecoderTrackRenderer.createDecoder.
The FFmpeg extension can support various different MIME types, so pass the
whole format to configure the decoder.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122246589
2016-06-15 19:41:31 +01:00
olly
ea8d0a7aef Move UUID constants to C, and make C an interface.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122242006
2016-06-15 19:41:31 +01:00
olly
b53a941ffd Fix crash (by calling correct DecoderInfo constructor).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122159478
2016-06-15 19:41:31 +01:00
olly
e29cb37403 Fix WavExtractor bug.
When skipToData is called the peek position is not equal
to the read position of the input. Hence peeking a chunk
header and then skipping by that amount wont do the right
thing :)!
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122157603
2016-06-15 19:41:30 +01:00
olly
9bfe62a5a5 Support 32-bit WAV.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122157513
2016-06-15 19:41:30 +01:00
olly
7301b53829 Add MediaCodecSelector.getPassthroughDecoderInfo.
Issue: #1518
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122157463
2016-06-15 19:41:30 +01:00
andrewlewis
1dcd454477 Rename util.extensions package to extensions.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122151232
2016-06-15 19:41:30 +01:00
olly
68d39b5159 Remove DecoderInputBuffer.size
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122146105
2016-06-15 19:41:30 +01:00
olly
f9f95d638b Make ExtractorSampleSource amenable to proguarding.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122085277
2016-06-15 19:41:30 +01:00
olly
af78ff849a Add MediaCodecSelector.getPassthroughDecoderInfo.
Issue: #1518
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122080068
2016-06-15 19:41:30 +01:00
andrewlewis
7980e495a7 Remove an extra blank line in ExtractorSampleSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122065476
2016-06-15 19:41:30 +01:00
olly
5ca9f62753 Refactor #6.HLS.0
Mechanical step to create a new HlsSource in the library.
Note that naming is now confusing. This will be fixed in
the next CL, when:

HlsSource -> HlsSampleSource
HlsSampleSource+HlsOutput -> HlsOutput
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122054800
2016-06-15 19:41:30 +01:00
eguven
9ee3030b79 Opus initialization data should be in native order.
http://developer.android.com/reference/android/media/MediaCodec.html#CSD
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121957004
2016-06-15 19:41:30 +01:00
olly
58c0ab1779 Broaden OMX.SEC.MP3.Decoder blacklisting.
Issue: #398
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121949973
2016-06-15 19:41:30 +01:00
eguven
3674f9598e ogg't'opus reader
Support for opus content in ogg container.
TODO: Sample duration and seeking.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121940392
2016-06-15 19:41:29 +01:00
olly
30ab3bef9a Bump version to 1.5.8.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121931978
2016-06-15 19:41:29 +01:00
[]inger
28eaa2cb24 Support Ogg containers without a properly flagged last page.
Such files are slightly off spec but easy to support.(https://github.com/google/ExoPlayer/issues/1506)
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121927762
2016-06-15 19:41:09 +01:00
olly
b61e7cdbc4 Support 8-bit and 24-bit PCM with re-sampling.
This is a cleaned up version of the pull request below,
which will be merged with this change then applied on top.

https://github.com/google/ExoPlayer/pull/1490

Issue: #1246
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121926682
2016-06-15 19:41:09 +01:00
cblay
d2c524d726 Add open/read http exception classes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121871799
2016-06-15 19:40:39 +01:00
olly
9f2707cfa3 Push DrmInitData into Format.
- This means DrmInitData is propagated through sample queues (i.e.
  is effectively attached to every sample, so we can see when it
  changes when reading from the queue).
- It also allows different DrmInitData per track, which is possible
  in muxed MKV/WebM, and per Representation for DASH, although we
  wont be able to seamlessly adapt in the latter case.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121821928
2016-06-15 19:40:39 +01:00
olly
e284d6166a Remove AudioTrack API level 16 dependency.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121685491
2016-06-15 19:40:39 +01:00
olly
523f2662ef Skip arbitrary chunks before WAV fmt chunk.
I've seen a sample that has a LIST chunk prior to fmt. It
seems best just to skip all chunks until the format is
located. As per the RIFF spec:

"Programs must expect (and ignore) any unknown chunks
encountered, as with all RIFF forms."

https://www.aelius.com/njh/wavemetatools/doc/riffmci.pdf
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121682470
2016-06-15 19:40:39 +01:00
olly
99c0ba005a Add support for TTML Regions extent
This allows limiting the horizontal extension of the cues.
NOTE: So far, we only support percentages for size magnitudes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121682404
2016-06-15 19:40:39 +01:00
eguven
642b2009f3 Add extensions to v2 demo app.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121674924
2016-06-15 19:40:39 +01:00
cdrolle
cf0a31a7bb Fixed an NPE with self-initializing DASH segments.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121660680
2016-06-15 19:40:38 +01:00
olly
27132bb2da Update MediaCodecUtil in V2.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121566154
2016-06-15 19:40:38 +01:00
olly
7f98887468 Add support for rechunking fixed-sample-size data.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121565738
2016-06-15 19:40:38 +01:00
olly
1fea3fe3c0 Add support for TTML regions.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121564959
2016-06-15 19:40:38 +01:00
cdrolle
d978398faf Added SubtitleParser interface (extending Decoder)
SubtitleParser includes a method updating the current
playback position for parsers that need to be aware
of the position in order to determine how to batch
captions (i.e. Eia608Parser).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121519712
2016-06-15 19:40:09 +01:00
olly
6e86cafce0 Fix broken test.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121501144
2016-06-15 19:40:09 +01:00
olly
6e5ae4eddc Simplify DrmInitData.
- This moves to a single DrmInitData implementation that supports
  both specific and universal UUID matching. You can also do a
  combination of the two, which was not previously possible.
- The object model is simplified as a result. This is a precursor
  to a change where DrmInitData will be included directly in the
  Format to enable key rotation.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121472592
2016-06-15 19:40:09 +01:00
eguven
686816a610 Fix format constructor parameter order.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121468904
2016-06-15 19:40:09 +01:00
aquilescanta
45a46c3e6e Add getTrackType to allow track selection
In order to apply track type specific policies in
the track selection, we need to know the type of
the track renderer, this method returns one of the
constants defined in C.java of the form TRACK_TYPE_*
to allow renderer classification.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121369021
2016-06-15 19:39:52 +01:00
olly
6b9c43e578 Avoid expensive equality checks in DefaultTrackOutput.
If the media format changes from one Format object to another
one that's is equal (but not the same object), readData would
end up performing an expensive equality evaluation on every
invocation.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121362300
2016-06-15 19:39:52 +01:00
andrewlewis
c2bd01a756 Removed unused parameter.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121102072
2016-06-15 19:39:52 +01:00
olly
f0e6fff011 Remove unused private constants.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121101188
2016-06-15 19:39:52 +01:00
olly
a1299ea722 Have DrmInitData classes implement hashCode/equals.
This will be required for key rotation to work, since
we'll need a way to determine whether or not the init
data has changed.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121018211
2016-06-15 19:39:52 +01:00
andrewlewis
9b57487845 Handle gapless audio metadata in elst.
Only edit lists that truncate the first/last sample are supported, which is
sufficient to handle AAC encoder delay/padding.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121011278
2016-06-15 19:39:52 +01:00
olly
23cb9532c5 Refactor #6.5: Restore DASH UTC timing element support.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121002218
2016-06-15 19:39:52 +01:00
olly
0841d043b8 Refactor #6.4: Create child source instances on demand.
Dash/SS SampleSources now instantiate ChunkSource and
ChunkSampleSource (renamed to ChunkTrackStream) instances
on demand as tracks are enabled. The TrackGroups exposed
by the DASH/SS SampleSources are now constructed at the
top level.

Note that this change resolves the TODOs at the top of the
ChunkSource classes, allowing multiple adaptation sets of
the same type.

Next steps will include:

- Bring back UTC timing element support for DASH, which
  will be an extra request during preparation in  the DASH
  SampleSource.
- Simplification of manifest fetching to use a Loader directly
  in the two top level SampleSource classes. ManifestFetcher
  should eventually go away once HLS no longer needs it.
- Eventually, some consolidation between DASH/SS. There's a
  lot of common code there now.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121001777
2016-06-15 19:39:52 +01:00
olly
d82bb3f657 Refactor #6.3: Pull drm parsing up to SS SampleSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121001478
2016-06-15 19:39:52 +01:00
olly
eb3460b3aa Refactor #6.2: Start to simplify components.
Parse the duration of the media directly from the manifest
in the DASH/SS SampleSource implementations.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121001296
2016-06-15 19:39:52 +01:00
olly
b38d004553 Refactor #6.1: Pull up manifest requests.
This change pulls manifest refresh responsibility up to the
top level Dash/SS SampleSource implementations. In following
steps more of the manifest processing logic will be pulled
up (e.g. extracting track groups from the initial manifest),
which will allow ChunkSampleSource/ChunkSource instances to
be further simplified and created on demand.

I've avoided moving/renaming anything for now, so as to keep
it fairly easy to review.

Note that this change does the TODO related to releasing the
manifest fetchers.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121001139
2016-06-15 19:39:52 +01:00
olly
15a890c3ce Refactor #6.0: Add SampleSources for DASH and SS.
This is a mechanical change. The two new SampleSource classes
are forked from MultiSampleSource, with the logic that previously
was in the demo app's SourceBuilder methods copied into the
corresponding constructors. Subsequent steps will:

1. Pull the initial manifest processing from DashChunkSource and
SmoothStreamingChunkSource into the new SampleSource classes.
2. Remove the construction of ChunkSampleSource instances from
the constructors, instead instantiating children only as needed
when tracks are enabled.
3. Simplify ChunkSampleSource down into a ChunkTrackStream object.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121001021
2016-06-15 19:39:52 +01:00
cdrolle
3d14c7242d Refactored Eia608Parser so that it manipulates the caption string builder directly, avoiding unnecessary object allocation.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120926283
2016-06-15 19:39:52 +01:00
eguven
ab3489efc1 Remove unnecessary reset() method.
pageHeader.headerArray is only used in getNextSeekPosition()
in which populatePageHeader() resets them both at the beginning
anyway.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120902428
2016-06-15 19:39:35 +01:00
andrewlewis
845d250442 Restore renderer.isEnded check when updating the playback position.
If rendererMediaClock is non-null, the rendererMediaClockSource is enabled or
started, so remove the check in updatePositionUs.

When disabling renderers for track selection, renderers with changing track
selections always transition from started -> enabled.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120819483
2016-06-15 19:39:35 +01:00
olly
e88eeba859 Fix compiler warnings.
- You can't link to a generic type (apparently).
- Suppress unchecked conversion warning.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120817601
2016-06-15 19:39:35 +01:00
olly
7313c26a56 Properly document processOutputBuffer.
Plus add processOutputBuffersChanged just for consistency
with processOutputBuffer and processOutputFormat.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120811608
2016-06-15 19:39:35 +01:00
cdrolle
0bd26b74b2 Remove Eia608TrackRenderer
Functionality is moved into Eia608Parser, so that Eia608Parser
can be used with TextTrackRenderer, similar to all the other
text/subtitle formats. Modified some of the other
text/subtitle-related classes to support the new behaviour.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120755145
2016-06-15 19:39:11 +01:00
olly
6c45233653 Attempt to make drainOutputBuffer clearer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120722975
2016-06-15 19:39:11 +01:00
aquilescanta
81383f8022 Add full selector support to CSS in WebVTT
This CL allows near-complete support to CSS selectors (I say near because not every
CSS rule applies to WebVTT).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120717498
2016-06-15 19:39:11 +01:00
olly
5cbf75b619 Make AudioTrack.handleBuffer more sane.
Now uses buffer position + limit in both new and legacy modes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120713837
2016-06-15 19:39:11 +01:00
eguven
d1eb43ad62 V2 Extension fixes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120699171
2016-06-15 19:39:11 +01:00
olly
da5e4dbe92 Fix wrong-way-round-sign. Oops!
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120694784
2016-06-15 19:39:11 +01:00
andrewlewis
50f5616266 Fix documentation and logging in LongArray.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120693278
2016-06-15 19:39:11 +01:00
andrewlewis
c60470339b Remove unused parameter from ChunkSource.continueBuffering.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120691990
2016-06-15 19:39:11 +01:00
olly
854acaa1ac Set decode only flag in DefaultTrackOutput.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120553402
2016-06-15 19:39:11 +01:00
olly
9a893e3003 Fix thread-safety issue using DefaultTrackOutput.
Reading the format and/or a sample needs to be done as a
single operation. Else you can have a situation where the
queue is initially empty, and this happens:

1) Read downstream format X
2) Read downstream format X (unchanged)
3) Write format Y
4) Write first sample
5) Read first sample

The first sample then appears to be format X rather than Y.

Note that readData in the SampleSource implementations always
looks roughly the same. readReset is identical in all cases.
isReady is identical in all cases now I've fixed them to be
that way. So it should be pretty easy to get DefaultTrackOutput
to implement TrackStream directly, at which point a whole load
of duplication will disappear.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120546377
2016-06-15 19:39:11 +01:00
olly
90b7081824 Propagate resets at the source rather than track level.
- Code is simpler. We only ever reset all tracks.
- Allows the standalone media clock to be updated properly. This
  allows simpler recovery for live streams in ExtractorSampleSource.
- Fixes #1285 and paves the way for a fix for #758.

Issue: #1285
Issue: #758
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120530682
2016-06-15 19:39:10 +01:00
olly
2b13165738 Optimize HLS seeking.
I think the concept of a sparse track might need formalizing
in Format at some point. We should probably do a similar thing
with sparse tracks in ExtractorSampleSource as well. WDYT?

Issue: #551
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120530195
2016-06-15 19:39:10 +01:00
olly
b1de997388 Remove incorrect AudioTrack timestamp adjustment.
This is just wrong. I think there used to be an off-by-one
timestamp error in YouTube's fmp4 streams, and this code
was initially designed exclusively to play such streams. I
don't see this issue any more though, if it was ever there!
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120447694
2016-06-15 19:39:10 +01:00
olly
e390bdf98c Align Chunk/HLS sample sources.
Having moved HLS to use single sample queues per track, these
classes have become relatively similar. This CL aligns the two
to make this more obvious. It remains unclear whether it'll
ever be sensible to merge them; there are still some niggly
complications for HLS.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120429618
2016-06-15 19:39:10 +01:00
[]inger
ae8f95f64d Added Ogg/Vorbis samples to internal samples for main and experimental.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120425278
2016-06-15 19:39:10 +01:00
aquilescanta
c11fda04e5 Add CSS Specificity score system to WebvttCssStyle
This CL provides the necessary infrastructure to add styling by class. This was separated
into two different CLs to ease reviewing.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120336976
2016-06-15 19:39:10 +01:00
olly
0fc53f6e37 Fix Flac test + bring v2 fully in sync (I think!).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120335929
2016-06-15 19:39:10 +01:00
olly
6635dd0ef7 Fix infinite loop in AdtsExtractor sniffing malformed or non-ADTS streams.
Here is a WAV that exhibits this issue:
https://storage.googleapis.com/courtside-public/dcower/reaper_16bit_nonbwf.wav
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120334203
2016-06-15 19:39:10 +01:00
olly
157f5ff886 Workaround for issue #1443
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120334164
2016-06-15 19:39:10 +01:00
olly
8f2e56d59b Add support for a bext chunk *before* the fmt chunk in WAV files.
This can occur in some Broadcast Wave Format (BWF) files, such as those
produced by the Zoom H2n. See the included sample for an example.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120334117
2016-06-15 19:39:10 +01:00
olly
b3f732cd05 Fix parsing of QT sample desc version 2.
Also support "lpcm" and "sowt" sample descriptors.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120334017
2016-06-15 19:39:10 +01:00
olly
2a37b02ee2 Merge updates from GitHub.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120332794
2016-06-15 19:39:10 +01:00
olly
7638bea016 Bring V2 ogg extractor up to date.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120332721
2016-06-15 19:39:10 +01:00
andrewlewis
6f32636f40 Use long instead of int for MP3 sample counter.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120331805
2016-06-15 19:39:09 +01:00
olly
2e0518f47b Apply Android studio code analysis suggestions.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120326293
2016-06-15 19:39:09 +01:00
olly
48bc98f1ed Naming cleanup.
- RollingSampleBuffer -> DefaultTrackOutput
- TsChunk -> HlsMediaChunk
- Established hls.playlist package for HLS playlist things
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120325049
2016-06-15 19:39:09 +01:00
olly
69b431b8c2 Stop using SparseArray where a regular array will do.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120240634
2016-06-15 19:39:09 +01:00
olly
b5bdbedfd5 Move HLS to use a single RollingSampleBuffer per track.
Notes:
- RollingSampleBuffer will be renamed DefaultTrackOutput in a
  following CL, and variable naming will be sanitized.
- TsChunk will also be renamed to HlsMediaChunk, since it can
  be used for non-TS containers (e.g. MP3).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120240243
2016-06-15 19:39:09 +01:00
eguven
a7d7859478 Shared super class for LibflacAudioTrackRenderer and LibopusAudioTrackRenderer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120225655
2016-06-15 19:39:09 +01:00
olly
a760c9bfd9 Use RollingSampleBuffer directly for non-HLS.
This also fixes the largest queued timestamp to be the
correct value if upstream samples are discarded.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120207054
2016-06-15 19:39:09 +01:00
olly
5ce210e374 Propagate format information through RollingSampleBuffer.
At this point the only reason preventing the chunk package
from using RollingSampleBuffer directly, rather than
DefaultTrackOutput, is that the latter maintains the largest
parsed timestamp. This will be pushed inside the former in
the next CL. Following that, splicing logic will also be
pushed inside of RollingSampleBuffer, and HLS will be moved
over to using a single RollingSampleBuffer per track, with
the splicing done inline.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120206658
2016-06-15 19:39:09 +01:00
olly
4e0638ce06 Remove unnecessary extension of DefaultTrackOutput.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120123489
2016-06-15 19:39:09 +01:00
olly
4451be929d Move sample offset application to RollingSampleBuffer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120123335
2016-06-15 19:39:09 +01:00
olly
ffb4aeaa8c Remove pointless constructor argument.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120123223
2016-06-15 19:39:09 +01:00
olly
17d7a0cb4b Make RollingSampleBuffer implement TrackOutput
This is the first step toward merging of RollingSampleBuffer
and DefaultTrackOutput, which is a precursor to removing some
indirection for DASH/SS playbacks, and to moving HLS playbacks
to use a single output buffer per track (with inline splicing).

Where this is heading is that sample format changes will
eventually be attached to samples in the rolling buffer. This
will eliminate the need for piping sample formats around the
edges of the rolling buffer (e.g. via redirection in
ChunkExtractorWrapper and BaseMediaChunk.getSampleFormat).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120123093
2016-06-15 19:39:09 +01:00
andrewlewis
4161dc8d62 Infer TYPE_SS for .isml.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120119973
2016-06-15 19:39:08 +01:00
olly
5e93c0b6e4 Fix spurious comment.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120115490
2016-06-15 19:39:08 +01:00
olly
fa04c713f6 Discard all sample data for disabled tracks.
There's a more nuanced version of this where we actually
disable on the loading side, but it's quite tricky to get
the threading just right. I have a change that I'll
probably manage to clean up and send out at some point.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120106967
2016-06-15 19:39:08 +01:00
olly
1e4a3c162e Remove setVideoScalingMode call that doesn't do anything.
Oops, forgot this from my previous CL!
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120104992
2016-06-15 19:39:08 +01:00
olly
ed188d1bc8 Apply video scaling mode correctly.
Issue: #1428
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119952373
2016-06-15 19:39:08 +01:00
olly
c99250d9c5 Constant simplification.
- Use same constant for unknown/unset microsecond times/durations.
- Change constant values to be nowhere near the "normal" range.
- Misc cleanup.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119944019
2016-06-15 19:39:08 +01:00
olly
28e926602f Remove layer of indirection when piping sample data.
For DASH + SS, sample data is currently plumbed through:

Extractor
->ChunkExtractorWrapper
->ContainerMediaChunk
->DefaultTrackOutput
->RollingSampleNBuffer

This change bypasses the ContainerMediaChunk layer. It
should be possible to completely delete DefaultTrackOutput
in the future, but such a change may well be tied to
changes in HLS format splicing + how we buffer (or don't
buffer) disabled tracks.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119853857
2016-06-15 19:39:08 +01:00
aquilescanta
7ad34c5c5c Fix hashCode method for TrackSelection
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119842923
2016-06-15 19:39:08 +01:00
andrewlewis
e4ee19513c Remove ExoPlayer.STATE_PREPARING.
prepare(SampleSource) is renamed to setSource(SampleSource). The player
immediately transitions to STATE_BUFFERING when the source is set, at which
point doSomeWork is called.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119838825
2016-06-15 19:39:08 +01:00
olly
3ae1c615d9 LoadControl - Start cleaning up usage somewhat.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119758106
2016-06-15 19:39:07 +01:00
olly
fec7798005 Remove dead code + simplify commitSample.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119752741
2016-06-15 19:39:07 +01:00
aquilescanta
51df2dce46 Add support for voice selection in WebVTT CSS
Allow styling <v Someone>Hello</v> with ::cue(v[voice="Someone"]) { ... }.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119748009
2016-06-15 19:39:07 +01:00
andrewlewis
e594eccd4d Merge SampleSourceTrackRenderer into TrackRenderer.
TrackRenderer and SampleSourceTrackRenderer both now use a TrackStream
so they can be merged.

(This may also be useful for adding playlist support, in case TrackStreams need
to be replaced during playback.)
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119743228
2016-06-15 19:39:07 +01:00
aquilescanta
c2beffc6c5 WebVTT CSS Styling -- Support for element selectors
This CL allows style blocks to reference elements. For example: we could style
a cue with text "Sometimes <b>bold</b> is not enough" with the style block
::cue(b) { ... }.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119734779
2016-06-15 19:39:07 +01:00
olly
f963c626af Remove seeking to live edge.
This is in preparation for the player knowing about the live
window, at which point only correct playback positions will be
passed into ChunkSource implementations. Note that both
implementations bound the chunk index within range in case of,
for example, off-by-one errors caused by very recent manifest
updates.

This will temporarily cause live playbacks to always start at
the beginning of the current live window (we'll be trying to
play from t=0, which will be adjusted to the start of the live
window as a result of the bounding).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119733559
2016-06-15 19:39:07 +01:00
olly
730e4ac953 Remove workaround for FrameworkSampleSource.
FrameworkSampleSource will still be useful for audio, where
sample interleaving isn't an issue. We could optionally add
a "don't wait for first frame" boolean to the video renderer
if we *really* need to keep some form of this workaround in
place, but I'd rather not do so for now.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119733224
2016-06-15 19:39:07 +01:00
olly
35e0dd8401 Use a single set of track type constants.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119732992
2016-06-15 19:39:07 +01:00
olly
956cbe4a09 Delete Clock/FakeClock from V2 until we need them.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119655941
2016-06-15 19:39:07 +01:00
eguven
192f566a1b Copy opus extension v1->v2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119643009
2016-06-15 19:39:07 +01:00
aquilescanta
767c7ab169 Fixed id referencing in WebVTT CSS styling
In CSS, ids are references using #. The absence of # references elements.

NOTE: If the id of a cue was "1", we support its reference with ::cue(#1).
In CSS, however, this is not valid, and the number should be escaped with
\3 as in ::cue(\31). We still do not use number escaping (and I doubt
whether we should at some point).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119634708
2016-06-15 19:39:07 +01:00
aquilescanta
def59ebb26 Replaced full reference with import
This CL removes a warning by adding the import, and removes a qualified reference in the process.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119618343
2016-06-15 19:39:06 +01:00
aquilescanta
efe76def89 Add support to CSS in WebVTT files
This CL adds the support of CSS styling in Cues through id and "universal" cue selector.
The more sophisticated selectors will be left for later, because they requier a bit more
complex logic. Also narrowed a little bit the responsibilities of the WebvttCueParser to
move some to the WebvttParser.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119547731
2016-06-15 19:39:06 +01:00
andrewlewis
eb877f0cb7 Handle udta as a leaf atom.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119532634
2016-06-15 19:39:06 +01:00
olly
7170ff380c Remove V1 DASH multi-period + seeking-in-window from V2.
Both of these features are being promoted to first class
citizens in V2 (multi-period support will be handled via
playlists, seeking-in-window will be handled by exposing
the window/timeline from the player and via the normal
seek API). For now, it's much easier to continue the
refactoring process with the features removed.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119518675
2016-06-15 19:39:06 +01:00
cblay
1c0a120aeb Give the SimpleCache.initialize() Thread a better name.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119393264
2016-06-15 19:39:06 +01:00
olly
e5d028c425 Merge https://github.com/google/ExoPlayer/pull/1397.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119182077
2016-06-15 19:39:06 +01:00
olly
92ac270ce5 Return C constant rather than -1, as documented.
Note that the DataSourceInputStream read methods
are implementing a different interface (InputStream,
not DataSource), which is why -1 is still used in
that case.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119180851
2016-06-15 19:39:06 +01:00
eguven
05ef643e28 Copy from V1: Extractor.release() method releases all kept resources.
This method is needed by FlacExtractor to release native resources.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119143922
2016-06-15 19:39:06 +01:00
olly
7c35e38b4e Fix a few issues with SmoothStreaming in V2.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119049397
2016-06-15 19:39:06 +01:00
andrewlewis
3c1239826c Rename webm.WebmExtractor to mkv.MatroskaExtractor.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=119020538
2016-06-15 19:39:06 +01:00
olly
9282710f04 Decouple next chunk evaluation and queue trimming.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118925372
2016-06-15 19:39:06 +01:00
andrewlewis
1581b915d3 Fix documentation super-nit.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118924198
2016-06-15 19:39:05 +01:00
andrewlewis
3208e20673 Add ParsableNalUnitBitArray which unescapes while reading.
This replaces calls to unescape except for SEI unescaping.

Use the new ParsableNalUnitBitArray for reading the slice header in HLS
access unit detection and slice_type reading.

Unescape the SPS before parsing in FLV and MP4. Before this change it was
parsed in its original (escaped) form.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118777869
2016-06-15 19:39:05 +01:00
olly
b041b72bae Yet more simplifications.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118775612
2016-06-15 19:39:05 +01:00
olly
9c2a971109 Simple method re-ordering of SampleSource implementations.
The only change that's not re-ordering is to add a Util method
for usToMs to replace the ones in the HLS and Chunk sources.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118775359
2016-06-15 19:39:05 +01:00
olly
292b2402e6 More SampleSource simplification.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118775144
2016-06-15 19:39:05 +01:00
olly
a4d17282f1 Have loader implement retry logic.
This was made possible by the simplification of how DASH/SS
chunk replacement works. It is also a step towards eliminating
continueBuffering(), since continueBuffering() calls are no
longer relied upon to resume a backed off load.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118774865
2016-06-15 19:39:05 +01:00
olly
d83b89cfd0 Minor documentation tweak.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118774671
2016-06-15 19:39:05 +01:00
olly
b0c8a6132d Add DataSourceFactory + implementation.
Step 6 of the refactor involves moving the logic that's
currently in the SourceBuilder classes in the demo app
into new SampleSource classes in the library. These classes
will construct video/audio/text pipelines on-demand (i.e.
when tracks are enabled) rather than constructing them all
up front as is currently the case in the SourceBuilder
classes. Hence we need a way to instantiate DataSource
instances (i.e. a DataSourceFactory ;)).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118722180
2016-06-15 19:39:05 +01:00
olly
5f37e3c8fb Ensure we re-enter the correct state after seeking.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118579021
2016-06-15 19:39:05 +01:00
olly
3187bd0829 Align DASH/SS/HLS chunk replacement mechanisms.
DASH + SS previously had a ridiculously complicated chunk
replacement mechanism in resumeFromBackOff. It also didn't
allow replacement of the first media chunk in the queue,
even though it's possible to remove it in the case that no
corresponding samples have been consumed.

This CL moves DASH + SS to the simpler model used in the
HLS implementation, where the chunk source has a single
opportunity to cancel (and hence later replace) the chunk
when the load error occurs. With this change comes the
ability to replace the first media chunk in the queue in
all cases where it's possible to do so.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118573418
2016-06-15 19:39:05 +01:00
olly
d8e6b096c4 Refine fix for limbo state.
This fixes some nuances with the initial solution. Mainly,
that the TrackStreams returned by selectTrack could not be
used safely until after endTrackSelection was invoked. It
also reduces the need for member variables to track state
between the track selection methods.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118556651
2016-06-15 19:39:05 +01:00
olly
305d8aa049 Improve ExoCacheTest.
- Use FakeDataSource as the upstream source.
- Actually validate that caching is happening (i.e. reads happen
  on the upstream source only if the data hasn't been read through
  the CacheDataSource already).
- Move FakeClock to sit alongside the other Fake classes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118555903
2016-06-15 19:39:04 +01:00
olly
6cc507aac0 Make all DataSource implementations implement getUri.
In V2 we'll at some point start using DataSource factories
for creating DataSource instances. If there are two DataSource
interfaces this gets unnecessarily awkward.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118470751
2016-06-15 19:39:04 +01:00
olly
d869a8d2fa Fix networked WAV extraction (where # bytes read < # bytes requested).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118457489
2016-06-15 19:39:04 +01:00
andrewlewis
ce47d7be38 Fix TextTrackRenderer.isEnded().
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118455206
2016-06-15 19:39:04 +01:00
andrewlewis
ce9b309aa1 Rename SampleHolder to DecoderInputBuffer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118040127
2016-06-15 19:39:04 +01:00
olly
98fb6d150d Tighten when various SampleSource methods can be called.
This removes the need for each SampleSource implementation to
implement 3x "if(condition) {noop}" tests (ChunkSampleSource
and SingleSampleSource were missing some of these checks).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118036233
2016-06-15 19:39:04 +01:00
olly
050b0b66da Fix starting playback from t!=0
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118032818
2016-06-15 19:39:04 +01:00
olly
f09b86a1bb Fix SampleSource limbo state - Part II
This change optimizes startup and track selection for HLS. Changes
in HlsChunkSource avoid unnecessary re-requests for media playlists.
Changes in HlsSampleSource optimize exit from the limbo state (i.e.
when endTrackSelection is first called).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118026962
2016-06-15 19:39:04 +01:00
olly
b3ce415e88 Fix SampleSource limbo state by introducing explicit "selecting tracks" state.
1. SampleSource now has an explicit track selection state. This state is entered
   after the source is prepared, and also by calling startTrackSelection.
2. endTrackSelection commits selection changes, and is responsible for doing the
   right thing w.r.t starting/stopping/restarting load operations.
3. All sources now start or restart a load in the case of a new track selection.
   This fixes a problem where a source could be advanced by repeatedly disabling
   and re-enabling whilst paused. Some sources didn't restart a load in this case,
   since the position was unchanged, however the downstream renderer would then
   consume media up to the first keyframe in order to render something. Hence
   each disable/re-enable would advance by a keyframe.
4. This change will enable a subsequent change where we'll discard media for
   non-selected tracks earlier than we do currently (i.e. we'll hook the extractor
   to a dummy track output, so the samples will never be written to a rolling
   buffer). This will enable a further subsequent change where buffer contributions
   are per-renderer rather than per-source.

Issue: #1041
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118024436
2016-06-15 19:39:04 +01:00
andrewlewis
24b2c09287 Use longs rather than ints for HLS byterange.
Issue: #1387
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118024270
2016-06-15 19:39:04 +01:00
andrewlewis
d5c80a31e8 Update list of ExoPlayer extractors in FrameworkSampleSource.java.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118021856
2016-06-15 19:39:04 +01:00
olly
1e78ee82ce WAV extractor fixes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118021575
2016-06-15 19:39:04 +01:00
olly
0ee45550c9 Use longs rather than ints for HLS byterange.
Issue #1387
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118021498
2016-06-15 19:39:04 +01:00
olly
b9d2224550 Treat streams claiming to be AAC Main as AAC LC.
Issue: #1383
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118021452
2016-06-15 19:39:03 +01:00
andrewlewis
8571c81076 Move resetting the peek position to ExtractorSampleSource.
This fixes an issue where the PsExtractor would start reading
unsynchronized if sniff was called.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117958077
2016-06-15 19:39:03 +01:00
andrewlewis
1175f50fb8 Partially merge InputBuffer and SampleHolder.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117908518
2016-06-15 19:39:03 +01:00
ccwu
0d1ae1dd67 Change the signature of onQueuedInputBuffer
Expose the input buffer for Exoplayer V2. This allows subclasses to
parse the input buffer before it is decoded. One particular usage
of this is to allow parsing user data stored in the tracks
(e.g. SEI in H264), and incorporate the user data into the rendering.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117865971
2016-06-15 19:38:07 +01:00
andrewlewis
8353463bf5 Detect sample boundaries in H.264 TSs without AUDs.
Issue: #1263
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117813106
2016-06-15 19:38:06 +01:00
andrewlewis
fc716b5711 Signal end of stream in SampleHolder flags.
Also use MediaCodec buffer flag constants instead of those on MediaExtractor.

This is in preparation for merging InputBuffer and SampleHolder.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117810136
2016-06-15 19:38:06 +01:00
olly
733f2ccd1c Add WavExtractor for extracting samples from WAV files.
This version only supports 16-bit uncompressed PCM. A follow-up CL will
add support for other sample bit depths.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117809475
2016-06-15 19:38:06 +01:00
olly
a49c8dc86d Added loadErrorNotification to SingleSampleSource.
Also hooked up DemoPlayer to ExtractorSampleSource events.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117809051
2016-06-15 19:38:06 +01:00
olly
27ab1a2e65 Merge updates from GitHub.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117808998
2016-06-15 19:38:06 +01:00
olly
5b06bfd5a8 Fixed TS+H262 playback when no pts is available
If this situation is encountered, we assume that the encoder has a good reason to
do this and use the last pts + frameDuration as new pts.

Issue: #1295
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117808961
2016-06-15 19:38:06 +01:00
olly
1ca5378cda Track input/output cleanup.
- Remove special DefaultTrackOutput.sampleData method, and have
  SingleSampleMediaChunk use the regular one instead.
- Make DummyTrackOutput behave correctly is allowEndOfInput is
  false.
- Simplify progress tracking in ExtractorSampleSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117808659
2016-06-15 19:38:06 +01:00
aquilescanta
60ba7823e0 Add Css styles in the WebVTT parser
This is the first version and is still not linked to the WebVTT parser nor
does it support all the intended features, but it was left this way to
ease the review a little bit.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117722492
2016-06-15 19:38:06 +01:00
olly
e7a27245e7 Use new-style for loops specifically for arrays.
As per: http://developer.android.com/training/articles/perf-tips.html
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117716743
2016-06-15 19:38:06 +01:00
olly
2469f631ae Restore SampleSource.disable API
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117701759
2016-06-15 19:38:06 +01:00
cdrolle
14c5114049 Fixed issue in which unknown sample mime types would cause MediaPresentationDescription to throw an NPE.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117560114
2016-06-15 19:38:06 +01:00
olly
d870f37878 Always use same Format objects during DASH live playbacks.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117558066
2016-06-15 19:38:06 +01:00
olly
03ed811c7c Add missing eclipse files to experimental.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117544932
2016-06-15 19:38:06 +01:00
olly
0dc0d70397 Use SimpleDecoder for subtitles.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117543706
2016-06-15 19:38:05 +01:00
olly
ed4f83979e Add extensions package to V2.
- Not doing any renaming for now. It'll be easier to wait
  until after the extensions themselves are brought across.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117438338
2016-06-15 19:38:05 +01:00
olly
3c5a509af8 Remove unused method.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117338990
2016-06-15 19:38:05 +01:00
olly
1eff6cf210 Bring back multi-audio and VTT support for HLS.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117338865
2016-06-15 19:38:05 +01:00
andrewlewis
1d4305cb91 Remove redundant modifiers in ExoPlayer.java.
Based on

http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.3
http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.5
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117338783
2016-06-15 19:38:05 +01:00
olly
16e1eaf410 Removed VorbisUtilTests throws declarations to avoid warning
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117326253
2016-06-15 19:38:05 +01:00
olly
a067bd0965 Make OggVorbisExtractor seekable.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117252304
2016-06-15 19:38:05 +01:00
olly
4ffa3556dd Fix parsing of expandable class size.
Issue #1351
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117252069
2016-06-15 19:38:05 +01:00
olly
378b76363d Support non-square pixels in MKV.
Issue: #1360
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117251799
2016-06-15 19:38:05 +01:00
olly
8b22333ee9 Make default audio capabilities public + update extractor list.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117251647
2016-06-15 19:38:05 +01:00
olly
9777945ce2 Fix the 0 sample count ctts entry bug
When the ctts contained an entry that had a 0-valued entry count, the
parser would miss every other entry, failing the final assertion.
The standard does not seem to prevent the value 0 in the sample_count
field, so we need to allow it.

Issue: #1326
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117241945
2016-06-15 19:38:05 +01:00
olly
f04e412a1c Improve unsupported edts handling
When the edited sample sequence does not contain any sync sample Exoplayer does not provide
support. This CL changes the ArrayIndexOutOfBoundsException for a more explicative
ParserException.

Issue: #1336
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117241805
2016-06-15 19:38:05 +01:00
olly
f5b7ea676d Consider udta box as leaf
The MP4 standard considers the udta box as a regular container box. Quicktime, however,
considers it as a container (of only leaf atoms) that can have a terminating 32 bit
integer with value 0. Since this breaks the principle of not having content in container
boxes, this CL considers the udta box as a leaf box that contains other boxes and does
the parsing manually.

Issue: #1315
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117237255
2016-06-15 19:38:05 +01:00
olly
bbceb459fd Add loading error notification to ExtractorSampleSource
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117237109
2016-06-15 19:38:04 +01:00
olly
6fc8057146 Fix empty container box bug for fMP4 extractor
This fix derives from issue #1308, which came up in unfragmented mp4 files.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117236416
2016-06-15 19:38:04 +01:00
olly
eeddd6d8df Allow multiple renderers with MediaClock as long as only one is enabled.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117236319
2016-06-15 19:38:04 +01:00
olly
d0fa6bdbcc Fix handling of self initializing segments in DASH
The parsing of multiple moov boxes for a single ExtractorOutput incurred in
an assertion failure due to repeated track declarations. This CL makes each
new moov box replace any previous one. This change is transparent to the
client, no flags are provided to allow this feature.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117236246
2016-06-15 19:38:04 +01:00
olly
5f3fa3955b Set default max input size for H.263 and MPEG-4 video.
The minimum compression ratio matches the Nexus 5X MPEG-4 video decoder.

Issue: #1290
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117234657
2016-06-15 19:38:04 +01:00
olly
9d5aa0f983 Fix the build.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117234408
2016-06-15 19:38:04 +01:00
olly
7208819018 Count input buffers.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117228451
2016-06-15 19:38:04 +01:00
olly
0135aaa122 Migrate ExoCache CacheSpan filenames from v1 to v2
V2 supports encoding special characters while on disk.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117228319
2016-06-15 19:37:51 +01:00
olly
1ca32cced8 Fix empty container box bug
If a container box is empty, it is never removed
from the container box stack, breaking the extractor.

Issue: #1308
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117228211
2016-06-15 19:37:45 +01:00
olly
37e00c8c6f Support multiplexed fMP4.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117228173
2016-06-15 19:37:45 +01:00
olly
d20ce3fa16 Added FLAC to the Webm list of known types.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117226935
2016-06-15 19:37:45 +01:00
olly
9a40a4c77d Clean up enabled renderers + processing of resets.
- Made enabledRenderers an array to avoid loads of method calls.
- Made if so that enabled renderers are always called in a consistent
  order, rather than their order changing if they're enabled/disabled
  over time. This is likely to make performance more predictable.
- Split out reading of resets into a separate method. This method is
  now called directly after seeking on the source, so as to ensure
  instant propagation of the new position from source->renderers in
  the common case.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117225639
2016-06-15 19:37:45 +01:00
olly
9b467b7c1b DASH: Ignore stream defined index if manifest defines one.
Issue: #1287
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117225449
2016-06-15 19:37:45 +01:00
olly
ae2e858978 Fix incorrect playback speed of mono audio on MTK/JB devices.
Issue #801
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117225377
2016-06-15 19:37:45 +01:00
olly
8447781a44 Add workaround to discard NAL units up to the first SPS.
Some devices fail to decode an avc3 stream that doesn't start with an SPS (for
example, if an access unit delimiter appears first). Workaround the issue by
discarding input sample data up to the first SPS on those devices.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117224602
2016-06-15 19:37:45 +01:00
olly
fb1d2d9ee8 Add hooks for timestamp checking in MediaCodecTrackRenderer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117224468
2016-06-15 19:37:44 +01:00
olly
26ad44248a Fix a bug where ID3 data was read as sample data.
When reading unknown duration files with CBR seeking, the Mp3Extractor could
try to read sample data from 0. This happened because synchronization did not
skip over the ID3 data when it immediately found valid frames. When the invalid
sample data is read, the extractor tries to resynchronize from the next byte
(at offset 1), and this fails because the ID3 data at the start of the file is
longer than the synchronization search distance.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117224270
2016-06-15 19:37:44 +01:00
olly
d9d6b8540d HLS: Ignore AAC/H264 streams if we know they don't exist.
This is needed to support fully demuxed audio in HLS. For the
sample I have the video (only) variant still declares an AAC
stream. I suspect there's at least one toolchain out there that
hardcodes H264 and AAC streams in TS output.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117224224
2016-06-15 19:37:44 +01:00
olly
9cfff0b028 Merge cleaned version of https://github.com/google/ExoPlayer/pull/1234.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117224172
2016-06-15 19:37:44 +01:00
olly
99606f6e2e Allow equality assertions on FakeExtractorOutput.
The idea here is that you'll be able to feed data through an extractor
to a FakeExtractorOutput, then do the same again with some or all of the
simulated flakiness settings toggled on FakeExtractorInput, and then
assert that the output was the same in both cases.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117224019
2016-06-15 19:37:44 +01:00
olly
a1fc0a6b00 Set max input size for H.265/HEVC.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117220851
2016-06-15 19:37:44 +01:00
olly
b1c356fbab Simplify (i.e. remove) waiting for first sync frame.
The upstream source (or its stream) should always provide data
starting from a sync frame, so this logic shouldn't be necessary.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117220759
2016-06-15 19:37:44 +01:00
olly
b37e9f6980 For both alignment cue setting value and position cue setting alignment value,
allow "center".
This value (and not "middle") is listed in
https://w3c.github.io/webvtt/ ( WebVTT: The Web Video Text Tracks Format, Draft
Community Group Report, 21 December 2015).

Leaving the behavior for "middle" unchanged.
It was the value listed in older drafts, e.g.
https://www.w3.org/TR/2014/WD-webvtt1-20141113/ ( W3C First Public Working
Draft 13 November 2014 )
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117220612
2016-06-15 19:37:44 +01:00
olly
16f57e3919 Ignore repeated control characters in EIA608 subtitles.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117220536
2016-06-15 19:37:44 +01:00
olly
a1c74cb259 Give a calculation for H.264 level picture size limits.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117220482
2016-06-15 19:37:44 +01:00
olly
5a6d1435ab Fix overzealous ContentProtection filtering.
Failing to parse a UUID from a ContentProtection should only
result in filtering if there was actually a cenc:pssh element
there for us to get it from.

Issue: #1256
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117220417
2016-06-15 19:37:44 +01:00
olly
7cddd1b1d9 Move OGG extractor to use FakeExtractorInput + Simplify.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117220360
2016-06-15 19:37:44 +01:00
olly
bccffb017d Cleanup - Make PesReader classes static.
This avoids accessing PtsTimestampAdjuster through a thunk method,
and allows the PesReader classes to be static, which is nice in
general.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117220139
2016-06-15 19:37:44 +01:00
olly
300b58e530 Introduce FakeExtractorInput (based loosely on RecordableExtractorInput).
- Use it to simplify a bunch of tests.
- Will also replace RecordableExtractorInput in a subsequent CL.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117220030
2016-06-15 19:37:44 +01:00
olly
a1a48abe92 Apply gapless playback metadata for MP3/MP4 playback using MediaCodec.
Issue: #497
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117219944
2016-06-15 19:37:43 +01:00
olly
ba88091c7b Added MPEG2-Program Stream extractor.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117219856
2016-06-15 19:37:43 +01:00
olly
2b4dcbef3f Fix parsing of version 1 pssh boxes, and ignore version 2+.
Issue: #1195
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117155301
2016-06-15 19:37:43 +01:00
olly
64d7f2f846 Deduplicate functions for parsing hex strings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117149421
2016-06-15 19:37:43 +01:00
olly
554817cca6 Extract gapless playback data in MP4 files.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117148015
2016-06-15 19:37:43 +01:00
olly
2380857bf2 Clip the skip length in DefaultExtractorInput.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117141509
2016-06-15 19:37:43 +01:00
olly
a6ba84ade6 Update Mpd parser duration calculation.
Set the duration to the sum of the final period's start
+ duration (if available) if MPD@mediaPresentationDuration
isn't set in the manifest.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117141391
2016-06-15 19:36:30 +01:00
olly
61adcf98d2 Fix issue seeking backward when using SingleSampleSource.
Issue: #1193
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117136800
2016-06-15 19:36:30 +01:00
olly
c98f7e8348 Fixed the Mp4 embedded WebVTT playback
Issue: #1185
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117136646
2016-06-15 19:36:29 +01:00
olly
028ce2582c Fix handling of extended ID3 tags in MPEG-TS/HLS.
Issue #1181
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117136370
2016-06-15 19:36:29 +01:00
olly
b76db7acd2 Fix Javadoc typo.
Issue: #1235
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117131149
2016-06-15 19:36:29 +01:00
olly
c8d81abd52 WebM extractor tests: Fix up byte/int conversions.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117131005
2016-06-15 19:36:29 +01:00
olly
9d732d8c27 Robustness fixes for WebM extractor.
- readFully calls when reading a string or varint may have 0 length.
  The behavior of a 0 length read isn't well defined either at the
  ExtractorInput or DataSource level, particularly when the read may
  also coincide with EOS. We'll work on defining these cases properly
  going forward, but in the meantime this fix avoids attempting 0
  length reads.
- [Aside] UTF8 the is guaranteed default charset on Android.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117130356
2016-06-15 19:36:29 +01:00
olly
9f4e46bd3c Discard CSD buffers from the raw decoder in passthrough mode.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117129870
2016-06-15 19:36:29 +01:00
olly
835a9e9abe Use a separate MIME type for DTS Express.
DTS Express (which is DTS LBR according to http://www.mp4ra.org/codecs.html) is
not supported for passthrough playback currently. Associate a different MIME
type with it so that we don't try to use DTS passthrough for playing DTS
Express.

The MIME type for DTS Express is just vnd.dts.hd, with a profile parameter
indicating that it's DTS Express rather than one of the other formats.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117129583
2016-06-15 19:36:29 +01:00
olly
e116125c40 DashChunkSource: Handle minor timing differences
Handle minor timing difference between the different media content
and the available range values as specified in the MPD.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117127112
2016-06-15 19:06:46 +01:00
olly
c2eb9d5598 Disable funky FRC on L on nVidia shield.
The logic in the platform was causing captions and the reported
playback position to gradually drift out of sync with respect to
audio and video.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117126970
2016-06-15 18:54:51 +01:00
olly
8ef4af1358 Fix incorrect position calculation in VBRI seeker.
Issue: #1197
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117125081
2016-06-15 18:54:51 +01:00
olly
d3d63101d1 [Refactor - Step #5] Introduce TrackSelector
Notes:

- The way this works is that every time the player needs to
  select some tracks it invokes the TrackSelector. When a
  track selection is actually activated (i.e. "hits the
  screen") it gets passed back to the TrackSelector, which
  allows it to expose the current tracks through an API that
  it may choose to define. Since playlist support doesn't exist
  yet, it's currently the case that the pass-back always occurs
  immediately.
- A TrackSelector can invalidate its previous selections if its
  selection criteria changes. This will force the player to invoke
  it again to make a new selection. If the new selection is the
  same as the previous one for a renderer then the player handles
  this efficiently (i.e. turns it into a no-op).
- DefaultTrackSelector supports disabling/enabling of renderers.
  Separately, it supports overrides to select specific formats.
  Since formats may change (playlists/periods), overrides are
  specific to not only the renderer but also the set of formats
  that are available to it. If the formats available to a renderer
  change then the override will no longer apply. If the same set
  of formats become available at some point later, it will apply
  once more. This will nicely handle cases like ad-insertion where
  the ads have different formats, but all segments of main content
  use the same set of formats.
- In general, in  multi-period or playlist cases, the preferred
  way of selecting formats will be via constraints (e.g. "don't play
  HD", "prefer higher quality audio") rather than explicit format
  selections. The ability to set various constraints on
  DefaultTrackSelector is future work.

Note about the demo app:

- I've removed the verbose log toggle. I doubt anyone has
  ever used it! I've also removed the background audio option.
  Without using a service it can't be considered a reference
  implementation, so it's probably best to leave developers to
  figure this one out. Finally, listening to AudioCapabilities
  has also gone. This will be replaced by having the player
  detect and handle the capabilities change internally in a
  future CL. This will work by allowing a renderer to invalidate
  the track selections when its capabilities change, much like
  how a selector is able to invalidate the track selections in
  this CL.
- It's now possible to enable ABR with an arbitrary subset of
  tracks.
- Unsupported tracks are shown grayed out in the UI. I'm not
  showing tracks that aren't associated to any renderer, but we
  could optionally add that later.
- Every time the tracks change, there's logcat output showing
  all of the tracks and which ones are enabled. Unassociated
  tracks are displayed in this output.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117122202
2016-06-15 18:54:51 +01:00
olly
9c98c4bb10 Make Track[Group|GroupArray|Selection] consistent.
- I don't think the length is useful in hashCode; if the length
  is different then Arrays.hashCode should account for that.
- "this." just for consistency across these classes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=116641142
2016-06-15 18:54:51 +01:00
olly
00191848f7 Make TrackSelection implement equals/hashCode.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=116638211
2016-06-15 18:54:51 +01:00
olly
73400907fc Introduce TrackGroupArray.
This change replaces TrackGroup[] with TrackGroupArray. This is
to allow equality based hashCode and equals implementations.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=115563146
2016-06-15 18:54:51 +01:00
olly
d1cb4bc1af Fix hasSampleFormat in experimental version. Oops!
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=115561885
2016-06-15 18:54:51 +01:00
olly
1208d8ec75 Allow more precise reporting of format support.
This change allows a TrackRenderer to distinguish between the
"I don't support this type at all" case and the "I am a general
purpose renderer of this type, but cannot support the specific
subtype" case.

Bug=26622675
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=115454950
2016-06-15 18:54:51 +01:00
olly
6ba4fa3b51 Make SampleSource interfaces right for TrackSelector.
The TrackSelector API will look like:

TrackSelection[] selectTrack(
    TrackRenderer[] renderers, TrackGroup[] trackGroups);

In this CL:

- SampleSources return TrackGroup[], so that the result can be easily
  passed to the selector.
- TrackStream gets its own file to sit alongside other Track* classes.
- A TrackSelection object is introduced to encapsulate group and track
  indices.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=115251331
2016-06-15 18:54:51 +01:00
olly
39a924451a Return format and adaptation support from single method.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=114963314
2016-06-15 18:54:51 +01:00
olly
0e60335064 Add structure to ExoPlaybackException.
- Add a top level failure type (source/renderer/unexpected),
  and convenience methods for retrieving the underlying cause
  without needing to cast.
- Also add renderer index in the case of renderer failures.
- setIndex/getIndex is a little . . . unclean, but alternatives
  involve either having the top line of the stack trace be a
  non-interesting line, or loads of try/catch blocks in
  ExoPlayerImplInternal.

Issue: #777
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=114763073
2016-06-15 18:54:51 +01:00
olly
c48dd4f3e3 Use FormatEvaluator for HLS.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=114743795
2016-06-15 18:54:51 +01:00
olly
a7adcce018 One Format object to rule them all.
- Format can represent both container and sample formats.
  If a container contains a single track (as is true in
  DASH and SmoothStreaming) then the container Format can
  also contain sufficient information about the samples
  to allow for track selection. This avoids the Format to
  MediaFormat conversions that we were previously doing in
  ChunkSource implementations.

- One important result of this change is that adaptive
  format evaluation and static format selection now use the
  same format objects, which is a whole lot less confusing
  for someone who wants to implement both initial selection
  and subsequent adaptation logic. It's not in the V2 doc,
  but it may well make sense if the TrackSelector not only
  selects the tracks to enable for an adaptive playback, but
  also injects a FormatEvaluator when enabling them that will
  control the subsequent adaptive selections. That would make
  it so that all format selection logic originates from the
  same place.

- As part of this change, the adaptiveX variables are removed
  from the format object; they don't really correspond to a
  single format. This also saves on having to inject the max
  video dimensions through a bunch of classes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=114546777
2016-06-15 18:54:50 +01:00
olly
362d0400cd Don't pass chunk list to ChunkSource.disable().
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=114545827
2016-06-15 18:54:50 +01:00
olly
782817d524 Remove durationUs from MediaFormat.
Duration was originally included in MediaFormat to match the
framework class, but it actually doesn't make much sense. In
many containers there's no such thing as per-stream duration,
and in any case we don't really care. Setting the duration on
each format required excessive piping.

This change moves duration into SeekMap instead, which seems
to make a lot more sense because it's at the container level,
and because being able to seek is generally couplied with
knowing how long the stream is.

This change is also a step toward merging Format and MediaFormat
into a single class (because Format doesn't have a duration),
which is coming soon.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=114428500
2016-06-15 18:54:50 +01:00
olly
ebf87a3619 Simplify codec configuration.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=114427767
2016-06-15 18:54:50 +01:00
olly
335bb0aff2 Implement decoder capability checks in MediaCodecTrackRenderers.
[Step 4 - Partial, of []

- The capabilities checks previously performed in VideoFormatSelectorUtil
  are now performed in MediaCodecVideoTrackRenderer. This means they'll be
  useful for non-chunk use cases (e.g. when using ExtractorSampleSource).
- Added capabilities checks for audio in MediaCodecAudioTrackRenderer. We
  didn't check audio capabilities previously.
- Added functionality to allow a TrackRenderer to indicate the extent of
  its adaptive support.

The idea here is that a TrackSelector (to be introduced) will have access to:

(a) TrackGroups from the SampleSource that indicate whether they support
adaptive playbacks and the formats of each individual track.
(b) TrackRenderers that indicate whether they support adaptive playbacks as
well as how capable they are of rendering formats of individual tracks.

This is everything that a TrackSelector needs from the player components in
order to decide how to wire things up. Note that a TrackSelector may opt to
treat FORMAT_EXCEEDS_CAPABILITIES as FORMAT_HANDLED at its own risk, if it
thinks that it (or the user) knows better. This is a request that we've seen
from third parties for better handling cases where capabilities aren't
accurately reported by the underlying platform.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=114427428
2016-06-15 18:54:50 +01:00
cblay
6bc52262db Minor tweaks/fixes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=113868179
2016-06-15 18:54:38 +01:00
olly
43e1e7e83a ExoPlayer V2 Refactor - Misc
Delete SingleSampleChunkSource. I don't think it's really
useful for anything, now we have SingleSampleSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=113259289
2016-06-15 18:54:38 +01:00
olly
ce324f1ca9 ExoPlayer V2 Refactor - Step 7 (partial)
This change removes the need for SourceBuilders to load their
manifests before building their sources. This is done by pushing
initial manifest loads into the ChunkSource classes. This simplifies
the SourceBuilders a lot, and also DemoPlayer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=113259259
2016-06-15 18:54:38 +01:00
olly
be47148940 ExoPlayer V2 Refactor - Step 4
Notes:
1. The logic in ExoPlayerImplInternal is very temporary, until we
   have proper TrackSelector implementations. Ignore the fact that
   it's crazy and has loads of nesting.
2. This change removes all capabilities checking. TrackRenderer
   implementations will be updated to perform these checks in a
   subsequent CL.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=113151233
2016-06-15 18:54:26 +01:00
olly
6cb20525cb ExoPlayer V2 Refactor - Step 3
Move binding of tracks<->renderers to ExoPlayerImplInternal.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=113046018
2016-06-15 18:54:26 +01:00
olly
cdae9ac5d2 ExoPlayer V2 Refactor - Steps 1/2.
GitHub note - Apologies for the cryptic change descriptions,
they relate to a design doc that's not externally visible.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=113043764
2016-06-15 18:53:40 +01:00
Oliver Woodman
61d581fe44 Prepare for 2.x push 2016-06-15 13:36:09 +01:00
Oliver Woodman
39a7cea987 Bump version to 1.5.4 2016-01-22 16:07:16 +00:00
aquilescanta
a8a9e0de2a Removed permissions from the library manifest
Fixes: #1176
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112781092
2016-01-22 15:07:00 +00:00
andrewlewis
a9720457d8 Add support for playing DTS in HLS.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112774678
2016-01-22 13:37:31 +00:00
Oliver Woodman
a02fd14c31 Fix Eclipse project for library tests. 2016-01-22 12:19:49 +00:00
olly
7bf8080950 ExoPlayer: Remove deprecated methods.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112736771
2016-01-22 12:11:16 +00:00
olly
d804446b34 Implement seeking via a single code path.
When a seek is performed, renderers currently perform the
actions that they need to take in two places: Some changes
are performed in seekTo implementations. Other changes are
performed when discontinuities are read from the source.

In HLS we need to perform what is effectively a seek
originating in the source. To support this, this CL allows
discontinuities read from the source to modify the playback
position. All actions that renderers perform as a result
of a seek are moved to be performed when a discontinuity is
received.

Best way to understand CL:
- Look at SampleSource interface change and then at the
  concrete implementations, to make sure they've been
  changed properly.
- Look at SampleSourceTrackRenderer change.
- Look at concrete renderers. The general pattern is that
  code previously performed in seekTo and READ_DISCONTINUITY
  is merged into onDiscontinuity().

Note: This will be further untangled in V2.

Issue #676
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112720746
2016-01-22 12:11:16 +00:00
andrewlewis
3f0244e214 Read gapless playback metadata in files with Xing metadata.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112699916
2016-01-22 12:11:16 +00:00
andrewlewis
4bea0b184f Fix warnings in OggVorbisExtractorTest and VorbisBitArrayTest.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112699244
2016-01-22 12:11:16 +00:00
andrewlewis
9d89d48f56 Fix ParsableByteArrayTest.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112693523
2016-01-22 12:11:16 +00:00
andrewlewis
bed89730a7 Fix path to Mockito for Eclipse.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112691130
2016-01-22 12:11:15 +00:00
andrewlewis
588d5a6e55 Parse encoder delay and padding from ID3 metadata in MP3.
Based on AOSP's MP3Extractor.cpp and ID3.cpp.

Issue: #497
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112685664
2016-01-22 12:11:15 +00:00
andrewlewis
25fb2a826e Merge MP3 sniffing/synchronization functionality.
As part of this change, Extractor.sniff may read/skip (not just peek) if it
returns true. This allows Extractors to avoid parsing the input a second time in
read.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112683272
2016-01-22 12:11:15 +00:00
andrewlewis
e6637c50c2 Fix a couple of compilation warnings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112676296
2016-01-22 12:11:15 +00:00
Oliver Woodman
89ce1ccedf OggVorbisExtractor (WIP - Seeking not yet enabled) 2016-01-22 11:46:37 +00:00
Oliver Woodman
88fa1495c4 Use consistent naming for Xing headers/tags.
Also fix a couple of style nits.
2016-01-22 11:40:27 +00:00
Oliver Woodman
cef1f12f1d Add readString to ParsableByteArray 2016-01-22 11:40:02 +00:00
Oliver Woodman
eda8ac4e01 Add eventSourceId to onAvailableRangeChange events 2016-01-22 11:38:06 +00:00
andrewlewis
783467b8fb Work around broken MP3 decoder.
Issue: #398
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112412961
2016-01-18 19:22:47 +00:00
olly
a049382cd7 Treat seeks in HLS live to be at t=0, as in ExtractorSampleSource.
This makes sense until we need to support seeking in the live window.

Issue: #676
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112402026
2016-01-18 19:22:47 +00:00
olly
cef0f7a0b1 Apply flush workaround on S5 Mini devices with Exynos chipset.
Also apply the workaround for the secure variant of OMX.SEC.avc.dec.
Note that it's not necessary to do the same for the RK decoder in
the method below, since that workaround is targeted at SDK_INT<=17
and secure decoders only came along in 18.

Issue: #603
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112395376
2016-01-18 19:22:47 +00:00
ojw28
c01d0096ab Merge pull request #1155 from bartsidee/1095-dev
link track language attribute in Smoothstream parser
2016-01-16 15:37:07 +00:00
Bart van den Ende
8e1f14cbc3 resolve #1095 get language for all types, not just audio 2016-01-16 12:35:32 +01:00
Bart van den Ende
d5425bb64a resolve #1095 store the language as normalised attribute so we can access it from the track parser 2016-01-16 12:35:23 +01:00
Bart van den Ende
19cf24234c resolve #1095 map the audio track language to the element parser instead of the track parser 2016-01-16 12:35:04 +01:00
Oliver Woodman
9ab6c96169 Make TtmlColorParser comment a little clearer. 2016-01-15 19:18:19 +00:00
Oliver Woodman
c60dac7c46 Further tweaks to TTML color parsing. 2016-01-15 19:13:58 +00:00
Oliver Woodman
7974a61476 Fix TtmlColorParser test.
Also simplify the implementation slightly.
2016-01-15 19:06:27 +00:00
Oliver Woodman
b5c8595655 Resolve merge conflict 2016-01-15 18:53:30 +00:00
andrewlewis
284b7e7f28 Comment (e-)AC-3/DTS descriptor tags.
Also, use terminology from ATSC spec in Ac3Util comment.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112254908
2016-01-15 18:49:03 +00:00
andrewlewis
0900c53564 Set the passthrough buffer size based on encoded format bit rates.
After this change, AC-3 uses about 20 KB and DTS uses 49 KB.

For comparison, 'normal' PCM playbacks use by default (depending on the device
and input format) about 45 KB. For passthrough, the following buffer sizes were
used before this change:
- Nexus Player AC-3: 23 KB
- Nexus Player DTS: 25 KB
- NVIDIA Shield AC-3: 15 KB
- NVIDIA Shield DTS: 16 KB (caused underruns in some DTS-HD playbacks)
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112254836
2016-01-15 18:48:24 +00:00
andrewlewis
9bb124a011 Use uppercase for hex literals.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112252404
2016-01-15 18:47:43 +00:00
aquilescanta
5baf55176b Add support for Cue Settings and Spanned text in MP4WebVTT
Using the provided methods by the previous refactors, it is now possible to use all of the WebVTT features already available.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112243172
2016-01-15 18:47:00 +00:00
olly
d45f0b8b6d Reflow comments in Util.java
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112163984
2016-01-15 18:46:15 +00:00
aptly-io
e6132ed742 Fix RGBA color tuple parsing
The TTML 1 spec. defines an exact RGBA color tuple as #rrggbbaa
See https://www.w3.org/TR/ttml1/#style-value-color

Android's internal representation is ARGB.
The correct parsing therefore requires a bit of extra byte shuffling ...
2016-01-14 23:11:57 +01:00
olly
df7a96a7c4 Map SDK_INT for dev devices.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112162208
2016-01-14 18:14:00 +00:00