diff --git a/mobile/android/base/Makefile.in b/mobile/android/base/Makefile.in index 8a38e8441bea..2ea9ac1cb848 100644 --- a/mobile/android/base/Makefile.in +++ b/mobile/android/base/Makefile.in @@ -145,6 +145,10 @@ GECKOVIEW_JARS = \ 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 diff --git a/mobile/android/base/moz.build b/mobile/android/base/moz.build index 0cf81bd7d9ab..8eec6bb7a0dd 100644 --- a/mobile/android/base/moz.build +++ b/mobile/android/base/moz.build @@ -1414,3 +1414,373 @@ gvjar.sources += ['generated/org/mozilla/gecko/' + x for x in [ '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', + ]] diff --git a/mobile/android/geckoview/build.gradle b/mobile/android/geckoview/build.gradle index 7dd70c55c44b..7b47bfe4162a 100644 --- a/mobile/android/geckoview/build.gradle +++ b/mobile/android/geckoview/build.gradle @@ -73,6 +73,10 @@ android { 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"