Bug 1341990 - Part 3: Include ExoPlayer in Firefox for Android builds. draft
authorKilik Kuo <kikuo@mozilla.com>
Fri, 19 May 2017 10:49:44 -0700
changeset 583169 ea5b0e54f3dbd67018570f700d49eb86daadc977
parent 583168 c3e0fedc3a25b813ec6ad5126e2f2b25d54e3b70
child 583550 c73260437fe0a7a2124f78ee85df93ff1a4ad7eb
child 584398 581938b4909eec326e2abb09009e798ad6c3525c
push id60314
push userbmo:kikuo@mozilla.com
push dateTue, 23 May 2017 18:56:39 +0000
bugs1341990
milestone55.0a1
Bug 1341990 - Part 3: Include ExoPlayer in Firefox for Android builds. MozReview-Commit-ID: 7fTQO9PD365
mobile/android/base/Makefile.in
mobile/android/base/moz.build
mobile/android/geckoview/build.gradle
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -140,16 +140,20 @@ GECKOVIEW_JARS = \
   constants.jar \
   gecko-R.jar \
   gecko-mozglue.jar \
   gecko-util.jar \
   gecko-view.jar \
   sync-thirdparty.jar \
   $(NULL)
 
+ifdef MOZ_ANDROID_HLS_SUPPORT
+GECKOVIEW_JARS += exoplayer2.jar
+endif
+
 ifdef MOZ_INSTALL_TRACKING
 GECKOVIEW_JARS += gecko-thirdparty-adjust_sdk.jar
 endif
 
 ifdef MOZ_ANDROID_MMA
 GECKOVIEW_JARS += gecko-thirdparty-leanplum_sdk.jar
 endif
 
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -1409,8 +1409,378 @@ gvjar.sources += ['generated/org/mozilla
     'media/ICodec.java',
     'media/ICodecCallbacks.java',
     'media/IMediaDrmBridge.java',
     'media/IMediaDrmBridgeCallbacks.java',
     'media/IMediaManager.java',
     'process/IChildProcess.java',
     'process/IProcessManager.java',
 ]]
+
+if CONFIG['MOZ_ANDROID_HLS_SUPPORT']:
+    gvjar.extra_jars += [
+        'exoplayer2.jar',
+    ]
+
+    exoplayer2_jar = add_java_jar('exoplayer2')
+
+    exoplayer2_jar.javac_flags += [
+        '-Xlint:all,-serial,-rawtypes,-unchecked,-fallthrough',
+    ]
+
+    exoplayer2_jar.extra_jars += [
+        CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
+    ]
+
+    exoplayer2_jar.sources += [geckoview_thirdparty_source_dir + 'java/com/google/android/exoplayer2/' + x for x in [
+        'audio/Ac3Util.java',
+        'audio/AudioCapabilities.java',
+        'audio/AudioCapabilitiesReceiver.java',
+        'audio/AudioDecoderException.java',
+        'audio/AudioProcessor.java',
+        'audio/AudioRendererEventListener.java',
+        'audio/AudioTrack.java',
+        'audio/ChannelMappingAudioProcessor.java',
+        'audio/DtsUtil.java',
+        'audio/MediaCodecAudioRenderer.java',
+        'audio/ResamplingAudioProcessor.java',
+        'audio/SimpleDecoderAudioRenderer.java',
+        'audio/Sonic.java',
+        'audio/SonicAudioProcessor.java',
+        'BaseRenderer.java',
+        'C.java',
+        'decoder/Buffer.java',
+        'decoder/CryptoInfo.java',
+        'decoder/Decoder.java',
+        'decoder/DecoderCounters.java',
+        'decoder/DecoderInputBuffer.java',
+        'decoder/OutputBuffer.java',
+        'decoder/SimpleDecoder.java',
+        'decoder/SimpleOutputBuffer.java',
+        'DefaultLoadControl.java',
+        'DefaultRenderersFactory.java',
+        'drm/DecryptionException.java',
+        'drm/DefaultDrmSessionManager.java',
+        'drm/DrmInitData.java',
+        'drm/DrmSession.java',
+        'drm/DrmSessionManager.java',
+        'drm/ExoMediaCrypto.java',
+        'drm/ExoMediaDrm.java',
+        'drm/FrameworkMediaCrypto.java',
+        'drm/FrameworkMediaDrm.java',
+        'drm/HttpMediaDrmCallback.java',
+        'drm/KeysExpiredException.java',
+        'drm/MediaDrmCallback.java',
+        'drm/OfflineLicenseHelper.java',
+        'drm/UnsupportedDrmException.java',
+        'drm/WidevineUtil.java',
+        'ExoPlaybackException.java',
+        'ExoPlayer.java',
+        'ExoPlayerFactory.java',
+        'ExoPlayerImpl.java',
+        'ExoPlayerImplInternal.java',
+        'ExoPlayerLibraryInfo.java',
+        'extractor/ChunkIndex.java',
+        'extractor/DefaultExtractorInput.java',
+        'extractor/DefaultExtractorsFactory.java',
+        'extractor/DefaultTrackOutput.java',
+        'extractor/DummyTrackOutput.java',
+        'extractor/Extractor.java',
+        'extractor/ExtractorInput.java',
+        'extractor/ExtractorOutput.java',
+        'extractor/ExtractorsFactory.java',
+        'extractor/flv/AudioTagPayloadReader.java',
+        'extractor/flv/FlvExtractor.java',
+        'extractor/flv/ScriptTagPayloadReader.java',
+        'extractor/flv/TagPayloadReader.java',
+        'extractor/flv/VideoTagPayloadReader.java',
+        'extractor/GaplessInfoHolder.java',
+        'extractor/mkv/DefaultEbmlReader.java',
+        'extractor/mkv/EbmlReader.java',
+        'extractor/mkv/EbmlReaderOutput.java',
+        'extractor/mkv/MatroskaExtractor.java',
+        'extractor/mkv/Sniffer.java',
+        'extractor/mkv/VarintReader.java',
+        'extractor/mp3/ConstantBitrateSeeker.java',
+        'extractor/mp3/Mp3Extractor.java',
+        'extractor/mp3/VbriSeeker.java',
+        'extractor/mp3/XingSeeker.java',
+        'extractor/mp4/Atom.java',
+        'extractor/mp4/AtomParsers.java',
+        'extractor/mp4/DefaultSampleValues.java',
+        'extractor/mp4/FixedSampleSizeRechunker.java',
+        'extractor/mp4/FragmentedMp4Extractor.java',
+        'extractor/mp4/MetadataUtil.java',
+        'extractor/mp4/Mp4Extractor.java',
+        'extractor/mp4/PsshAtomUtil.java',
+        'extractor/mp4/Sniffer.java',
+        'extractor/mp4/Track.java',
+        'extractor/mp4/TrackEncryptionBox.java',
+        'extractor/mp4/TrackFragment.java',
+        'extractor/mp4/TrackSampleTable.java',
+        'extractor/MpegAudioHeader.java',
+        'extractor/ogg/DefaultOggSeeker.java',
+        'extractor/ogg/FlacReader.java',
+        'extractor/ogg/OggExtractor.java',
+        'extractor/ogg/OggPacket.java',
+        'extractor/ogg/OggPageHeader.java',
+        'extractor/ogg/OggSeeker.java',
+        'extractor/ogg/OpusReader.java',
+        'extractor/ogg/StreamReader.java',
+        'extractor/ogg/VorbisBitArray.java',
+        'extractor/ogg/VorbisReader.java',
+        'extractor/ogg/VorbisUtil.java',
+        'extractor/PositionHolder.java',
+        'extractor/rawcc/RawCcExtractor.java',
+        'extractor/SeekMap.java',
+        'extractor/TrackOutput.java',
+        'extractor/ts/Ac3Extractor.java',
+        'extractor/ts/Ac3Reader.java',
+        'extractor/ts/AdtsExtractor.java',
+        'extractor/ts/AdtsReader.java',
+        'extractor/ts/DefaultTsPayloadReaderFactory.java',
+        'extractor/ts/DtsReader.java',
+        'extractor/ts/DvbSubtitleReader.java',
+        'extractor/ts/ElementaryStreamReader.java',
+        'extractor/ts/H262Reader.java',
+        'extractor/ts/H264Reader.java',
+        'extractor/ts/H265Reader.java',
+        'extractor/ts/Id3Reader.java',
+        'extractor/ts/MpegAudioReader.java',
+        'extractor/ts/NalUnitTargetBuffer.java',
+        'extractor/ts/PesReader.java',
+        'extractor/ts/PsExtractor.java',
+        'extractor/ts/SectionPayloadReader.java',
+        'extractor/ts/SectionReader.java',
+        'extractor/ts/SeiReader.java',
+        'extractor/ts/SpliceInfoSectionReader.java',
+        'extractor/ts/TsExtractor.java',
+        'extractor/ts/TsPayloadReader.java',
+        'extractor/wav/WavExtractor.java',
+        'extractor/wav/WavHeader.java',
+        'extractor/wav/WavHeaderReader.java',
+        'Format.java',
+        'FormatHolder.java',
+        'IllegalSeekPositionException.java',
+        'LoadControl.java',
+        'mediacodec/MediaCodecInfo.java',
+        'mediacodec/MediaCodecRenderer.java',
+        'mediacodec/MediaCodecSelector.java',
+        'mediacodec/MediaCodecUtil.java',
+        'metadata/emsg/EventMessage.java',
+        'metadata/emsg/EventMessageDecoder.java',
+        'metadata/id3/ApicFrame.java',
+        'metadata/id3/BinaryFrame.java',
+        'metadata/id3/ChapterFrame.java',
+        'metadata/id3/ChapterTocFrame.java',
+        'metadata/id3/CommentFrame.java',
+        'metadata/id3/GeobFrame.java',
+        'metadata/id3/Id3Decoder.java',
+        'metadata/id3/Id3Frame.java',
+        'metadata/id3/PrivFrame.java',
+        'metadata/id3/TextInformationFrame.java',
+        'metadata/id3/UrlLinkFrame.java',
+        'metadata/Metadata.java',
+        'metadata/MetadataDecoder.java',
+        'metadata/MetadataDecoderException.java',
+        'metadata/MetadataDecoderFactory.java',
+        'metadata/MetadataInputBuffer.java',
+        'metadata/MetadataRenderer.java',
+        'metadata/scte35/PrivateCommand.java',
+        'metadata/scte35/SpliceCommand.java',
+        'metadata/scte35/SpliceInfoDecoder.java',
+        'metadata/scte35/SpliceInsertCommand.java',
+        'metadata/scte35/SpliceNullCommand.java',
+        'metadata/scte35/SpliceScheduleCommand.java',
+        'metadata/scte35/TimeSignalCommand.java',
+        'ParserException.java',
+        'PlaybackParameters.java',
+        'Renderer.java',
+        'RendererCapabilities.java',
+        'RendererConfiguration.java',
+        'RenderersFactory.java',
+        'SimpleExoPlayer.java',
+        'source/AdaptiveMediaSourceEventListener.java',
+        'source/BehindLiveWindowException.java',
+        'source/chunk/BaseMediaChunk.java',
+        'source/chunk/BaseMediaChunkOutput.java',
+        'source/chunk/Chunk.java',
+        'source/chunk/ChunkedTrackBlacklistUtil.java',
+        'source/chunk/ChunkExtractorWrapper.java',
+        'source/chunk/ChunkHolder.java',
+        'source/chunk/ChunkSampleStream.java',
+        'source/chunk/ChunkSource.java',
+        'source/chunk/ContainerMediaChunk.java',
+        'source/chunk/DataChunk.java',
+        'source/chunk/InitializationChunk.java',
+        'source/chunk/MediaChunk.java',
+        'source/chunk/SingleSampleMediaChunk.java',
+        'source/ClippingMediaPeriod.java',
+        'source/ClippingMediaSource.java',
+        'source/CompositeSequenceableLoader.java',
+        'source/ConcatenatingMediaSource.java',
+        'source/EmptySampleStream.java',
+        'source/ExtractorMediaPeriod.java',
+        'source/ExtractorMediaSource.java',
+        'source/hls/Aes128DataSource.java',
+        'source/hls/DefaultHlsDataSourceFactory.java',
+        'source/hls/HlsChunkSource.java',
+        'source/hls/HlsDataSourceFactory.java',
+        'source/hls/HlsManifest.java',
+        'source/hls/HlsMediaChunk.java',
+        'source/hls/HlsMediaPeriod.java',
+        'source/hls/HlsMediaSource.java',
+        'source/hls/HlsSampleStream.java',
+        'source/hls/HlsSampleStreamWrapper.java',
+        'source/hls/playlist/HlsMasterPlaylist.java',
+        'source/hls/playlist/HlsMediaPlaylist.java',
+        'source/hls/playlist/HlsPlaylist.java',
+        'source/hls/playlist/HlsPlaylistParser.java',
+        'source/hls/playlist/HlsPlaylistTracker.java',
+        'source/hls/TimestampAdjusterProvider.java',
+        'source/hls/WebvttExtractor.java',
+        'source/LoopingMediaSource.java',
+        'source/MediaPeriod.java',
+        'source/MediaSource.java',
+        'source/MergingMediaPeriod.java',
+        'source/MergingMediaSource.java',
+        'source/SampleStream.java',
+        'source/SequenceableLoader.java',
+        'source/SinglePeriodTimeline.java',
+        'source/SingleSampleMediaPeriod.java',
+        'source/SingleSampleMediaSource.java',
+        'source/TrackGroup.java',
+        'source/TrackGroupArray.java',
+        'source/UnrecognizedInputFormatException.java',
+        'text/CaptionStyleCompat.java',
+        'text/cea/Cea608Decoder.java',
+        'text/cea/Cea708Cue.java',
+        'text/cea/Cea708Decoder.java',
+        'text/cea/CeaDecoder.java',
+        'text/cea/CeaOutputBuffer.java',
+        'text/cea/CeaSubtitle.java',
+        'text/cea/CeaUtil.java',
+        'text/Cue.java',
+        'text/dvb/DvbDecoder.java',
+        'text/dvb/DvbParser.java',
+        'text/dvb/DvbSubtitle.java',
+        'text/SimpleSubtitleDecoder.java',
+        'text/SimpleSubtitleOutputBuffer.java',
+        'text/subrip/SubripDecoder.java',
+        'text/subrip/SubripSubtitle.java',
+        'text/Subtitle.java',
+        'text/SubtitleDecoder.java',
+        'text/SubtitleDecoderException.java',
+        'text/SubtitleDecoderFactory.java',
+        'text/SubtitleInputBuffer.java',
+        'text/SubtitleOutputBuffer.java',
+        'text/TextRenderer.java',
+        'text/ttml/TtmlDecoder.java',
+        'text/ttml/TtmlNode.java',
+        'text/ttml/TtmlRegion.java',
+        'text/ttml/TtmlRenderUtil.java',
+        'text/ttml/TtmlStyle.java',
+        'text/ttml/TtmlSubtitle.java',
+        'text/tx3g/Tx3gDecoder.java',
+        'text/tx3g/Tx3gSubtitle.java',
+        'text/webvtt/CssParser.java',
+        'text/webvtt/Mp4WebvttDecoder.java',
+        'text/webvtt/Mp4WebvttSubtitle.java',
+        'text/webvtt/WebvttCssStyle.java',
+        'text/webvtt/WebvttCue.java',
+        'text/webvtt/WebvttCueParser.java',
+        'text/webvtt/WebvttDecoder.java',
+        'text/webvtt/WebvttParserUtil.java',
+        'text/webvtt/WebvttSubtitle.java',
+        'Timeline.java',
+        'trackselection/AdaptiveTrackSelection.java',
+        'trackselection/BaseTrackSelection.java',
+        'trackselection/DefaultTrackSelector.java',
+        'trackselection/FixedTrackSelection.java',
+        'trackselection/MappingTrackSelector.java',
+        'trackselection/RandomTrackSelection.java',
+        'trackselection/TrackSelection.java',
+        'trackselection/TrackSelectionArray.java',
+        'trackselection/TrackSelector.java',
+        'trackselection/TrackSelectorResult.java',
+        'upstream/Allocation.java',
+        'upstream/Allocator.java',
+        'upstream/AssetDataSource.java',
+        'upstream/BandwidthMeter.java',
+        'upstream/ByteArrayDataSink.java',
+        'upstream/ByteArrayDataSource.java',
+        'upstream/cache/Cache.java',
+        'upstream/cache/CacheDataSink.java',
+        'upstream/cache/CacheDataSinkFactory.java',
+        'upstream/cache/CacheDataSource.java',
+        'upstream/cache/CacheDataSourceFactory.java',
+        'upstream/cache/CachedContent.java',
+        'upstream/cache/CachedContentIndex.java',
+        'upstream/cache/CachedRegionTracker.java',
+        'upstream/cache/CacheEvictor.java',
+        'upstream/cache/CacheSpan.java',
+        'upstream/cache/CacheUtil.java',
+        'upstream/cache/LeastRecentlyUsedCacheEvictor.java',
+        'upstream/cache/NoOpCacheEvictor.java',
+        'upstream/cache/SimpleCache.java',
+        'upstream/cache/SimpleCacheSpan.java',
+        'upstream/ContentDataSource.java',
+        'upstream/crypto/AesCipherDataSink.java',
+        'upstream/crypto/AesCipherDataSource.java',
+        'upstream/crypto/AesFlushingCipher.java',
+        'upstream/crypto/CryptoUtil.java',
+        'upstream/DataSink.java',
+        'upstream/DataSource.java',
+        'upstream/DataSourceException.java',
+        'upstream/DataSourceInputStream.java',
+        'upstream/DataSpec.java',
+        'upstream/DefaultAllocator.java',
+        'upstream/DefaultBandwidthMeter.java',
+        'upstream/DefaultDataSource.java',
+        'upstream/DefaultDataSourceFactory.java',
+        'upstream/DefaultHttpDataSource.java',
+        'upstream/DefaultHttpDataSourceFactory.java',
+        'upstream/DummyDataSource.java',
+        'upstream/FileDataSource.java',
+        'upstream/FileDataSourceFactory.java',
+        'upstream/HttpDataSource.java',
+        'upstream/Loader.java',
+        'upstream/LoaderErrorThrower.java',
+        'upstream/ParsingLoadable.java',
+        'upstream/PriorityDataSource.java',
+        'upstream/PriorityDataSourceFactory.java',
+        'upstream/RawResourceDataSource.java',
+        'upstream/TeeDataSource.java',
+        'upstream/TransferListener.java',
+        'upstream/UdpDataSource.java',
+        'util/Assertions.java',
+        'util/AtomicFile.java',
+        'util/Clock.java',
+        'util/CodecSpecificDataUtil.java',
+        'util/ColorParser.java',
+        'util/ConditionVariable.java',
+        'util/FlacStreamInfo.java',
+        'util/LibraryLoader.java',
+        'util/LongArray.java',
+        'util/MediaClock.java',
+        'util/MimeTypes.java',
+        'util/NalUnitUtil.java',
+        'util/ParsableBitArray.java',
+        'util/ParsableByteArray.java',
+        'util/ParsableNalUnitBitArray.java',
+        'util/Predicate.java',
+        'util/PriorityTaskManager.java',
+        'util/ReusableBufferedOutputStream.java',
+        'util/SlidingPercentile.java',
+        'util/StandaloneMediaClock.java',
+        'util/SystemClock.java',
+        'util/TimestampAdjuster.java',
+        'util/TraceUtil.java',
+        'util/UriUtil.java',
+        'util/Util.java',
+        'util/XmlPullParserUtil.java',
+        'video/AvcConfig.java',
+        'video/ColorInfo.java',
+        'video/HevcConfig.java',
+        'video/MediaCodecVideoRenderer.java',
+        'video/VideoFrameReleaseTimeHelper.java',
+        'video/VideoRendererEventListener.java',
+    ]]
--- a/mobile/android/geckoview/build.gradle
+++ b/mobile/android/geckoview/build.gradle
@@ -68,16 +68,20 @@ android {
         abortOnError false
     }
 
     sourceSets {
         main {
             java {
                 srcDir "${topsrcdir}/mobile/android/geckoview/src/thirdparty/java"
 
+                if (!mozconfig.substs.MOZ_ANDROID_HLS_SUPPORT) {
+                    exclude 'com/google/android/exoplayer2/**'
+                }
+
                 // TODO: support WebRTC.
                 // if (mozconfig.substs.MOZ_WEBRTC) {
                 //     srcDir "${topsrcdir}/media/webrtc/trunk/webrtc/modules/audio_device/android/java/src"
                 //     srcDir "${topsrcdir}/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src"
                 //     srcDir "${topsrcdir}/media/webrtc/trunk/webrtc/modules/video_render/android/java/src"
                 // }
 
                 // TODO: don't use AppConstants.