[go: nahoru, domu]

Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Impr/doris 1730 migrate exo 2.18.4 #77

Merged
merged 2,085 commits into from
Mar 21, 2023
Merged
Changes from 1 commit
Commits
Show all changes
2085 commits
Select commit Hold shift + click to select a range
d2f7fb1
Provide access to original media timestamps in AudioSink.
tianyif Oct 6, 2022
8081804
Add a FrameProcessor flag to drop the processed frame
claincly Oct 6, 2022
ee9bff0
Document the allowed values of TsPayloadReader.Flags IntDef
icbaker Oct 7, 2022
15e316d
HDR: Disable tone mapping on unsupported pixel build ID.
dway123 Oct 7, 2022
bd616e1
Bump dexmaker version
christosts Oct 7, 2022
efb7bf2
Remove late frame dropping in FrameProcessor
claincly Oct 7, 2022
e8a5ac9
Adjust track selection with Dolby Vision if display does not support
microkatz Oct 10, 2022
dc80523
Treat NO_VALUE as zero when adding up total required bitrate
tonihei Oct 10, 2022
5d8daba
Add local file picker to ConfigurationActivity
a-googler Oct 11, 2022
abefef9
Demo: Read long values from trim slider.
dway123 Oct 11, 2022
2244549
Demo: Hide player controls by default.
dway123 Oct 12, 2022
4198dde
Demo: Shorten trim range from 60 seconds to 10 seconds.
dway123 Oct 12, 2022
3aca9bc
Add Cea608DecoderTest
icbaker Oct 12, 2022
267725c
Remove supportsSampleMimeType from Muxer.Factory
kim-vde Oct 13, 2022
a8921b7
Fix blank toast in Transformer Demo
a-googler Oct 13, 2022
1bea506
Migrate media constants from androidx.media.util.MediaConstants
marcbaechinger Oct 13, 2022
b362736
Ensure sessions without MediaPeriodId are ended after seek to new item
tonihei Oct 13, 2022
8ffdc3a
Mark effectively-final PlayerControlView fields as actually final
icbaker Oct 14, 2022
d9c60dc
Effect: Remove unused private int ouptutTexId in pixel tests.
dway123 Oct 14, 2022
12314ab
Fix the position of IntDef annotations on fields in the UI module
icbaker Oct 14, 2022
e3d0ee9
Fix display settings window UI bug for foldable devices.
a-googler Oct 14, 2022
fbc8019
Add copybara annotated import statement for special cases
marcbaechinger Oct 17, 2022
7cc3f11
Add manifest to make gradle build work
marcbaechinger Oct 17, 2022
1c6cea8
Add DefaultMuxer forwarding to FrameworkMuxer
kim-vde Oct 18, 2022
fb1c9de
Remove more references to overriding layouts from Player(Control)View
icbaker Oct 18, 2022
5de37d2
Fix parameter comment block.
Samrobbo Oct 18, 2022
66d56be
Remove deprecated setOutputMimeType
kim-vde Oct 18, 2022
66bae60
GL: Move loadAsset to GlProgram, where it's used.
dway123 Oct 18, 2022
ed9bc9a
Ensure onMediaItemTransition is sent for repeats of the same item
tonihei Oct 18, 2022
e54127c
Test: Update MatrixProcessorPixelTest to use input width and height.
dway123 Oct 18, 2022
f56d714
Remove ForwardingPlayer special case from PlayerControlView.setPlayer
icbaker Oct 19, 2022
5c0175e
Effect: Remove unnecessary "this" qualifier
dway123 Oct 19, 2022
f42d18f
Make Muxer public
kim-vde Oct 19, 2022
0b0101e
HDR: Support RGBA_1010102 in GlUtil as a parameter.
dway123 Oct 19, 2022
1b6bef0
Corrected ordering of javadoc params
a-googler Oct 19, 2022
e13bbbc
Merge pull request #10578 from thucngv:release-v2
marcbaechinger Oct 20, 2022
df15f9c
Use static import for Assertions in MCVR
claincly Oct 14, 2022
fc32f0d
Merge pull request #183 from jasper-apps:bugfix/make-download-notific…
marcbaechinger Oct 20, 2022
6f94b8e
Map lib-effect from androidx to exoplayer2
marcbaechinger Oct 19, 2022
dc8098a
Remove muxerFactory dependency on playerListener
kim-vde Oct 20, 2022
b97a959
Change areSizeAndRateSupported to use PerfomancePoint.covers
microkatz Oct 20, 2022
84375a4
Fix some incorrect comments in Cea608DecoderTest
icbaker Oct 24, 2022
d2c4f74
Merge pull request #10618 from vishnuchilakala:fix/do_not_send_conten…
rohitjoins Oct 24, 2022
23b070d
Merge pull request #162 from ittiam-systems:rtp-mp4a-latm
rohitjoins Oct 24, 2022
b20752f
Add DAI specific methods to AdPlaybackState
marcbaechinger Oct 21, 2022
154cd42
Add CanIgnoreReturnValue to AudioProcessor#configure + implementations
Samrobbo Oct 24, 2022
0f5245f
Use int for an unsigned byte value in Cea608Decoder
icbaker Oct 24, 2022
f7f371f
Clarify sideloaded subtitle example
icbaker Oct 25, 2022
053e14a
Add GL utility methods to get 4x4 identity and set identity
claincly Oct 25, 2022
8debe79
Move AudioProcessor to common.
Samrobbo Oct 25, 2022
fe9bad1
Move `DefaultAudioSink.AudioProcessorChain` to `AudioProcessorChain`
Samrobbo Oct 25, 2022
6b3bec8
Fix `Cea608Decoder` handling of service switch commands in field 2
icbaker Oct 26, 2022
81b3e40
Mute input video player in transformer demo
a-googler Oct 26, 2022
861cd9a
Add AudioProcessor.AudioFormat equals method.
Samrobbo Oct 26, 2022
94f3b1b
Add muxer timer to detect when generating an output sample is too slow
kim-vde Oct 27, 2022
f06e8ee
Make adding ad live breaks more robust
marcbaechinger Oct 27, 2022
d652020
Add test for muxer watchdog timer
kim-vde Oct 27, 2022
c02d477
Upgrade dackka and fix some generation errors
andrewlewis Oct 28, 2022
a3de075
Disable the muxer watchdog if all tracks have ended.
Samrobbo Oct 28, 2022
86ac8f5
Bump appTargetSDKVersion to 33
marcbaechinger Oct 28, 2022
375978b
Tighten the wording for sending a pull request.
rohitjoins Oct 31, 2022
721487a
Disable failing tests of FlacExtractorSeekTest
rohitjoins Oct 31, 2022
e4d77f7
Enfore minCompileSdk version when depending on ExoPlayer/Media3 libs
tonihei Oct 31, 2022
7bfc645
Removed move transformation for exoplayer2 audio package-info.java
microkatz Nov 1, 2022
69112df
HDR: Generalize Pixel 6 workaround to TP
dway123 Nov 1, 2022
61b1cfc
Load bitmaps for `MediaMetadataCompat` and handle the metadata updates.
tianyif Nov 1, 2022
e48fe57
Apply tone mapping workaround to Pixel Watch as well.
dway123 Nov 1, 2022
10d06dd
Fix Dackka/Metalava errors in the effects module
icbaker Nov 2, 2022
b25e1e2
Fix Dackka javadoc errors in protected methods
icbaker Nov 3, 2022
dadf281
Add 'Player.getVideoSurfaceSize' that returns the size of the surface
a-googler Nov 3, 2022
b949b6b
HDR Test: Add link to tested method.
dway123 Nov 3, 2022
cc9823d
Disable publishing block when media3 included in another build.
yschimke Nov 3, 2022
fe47393
Add @SuppressWarnings to unblock T SDK for <unknown commit>
a-googler Nov 4, 2022
9ad5650
HDR: Update test FileUtil to handle null ColorInfo.
dway123 Nov 7, 2022
0969819
HDR: Set decoder codec profile and level if available.
dway123 Nov 7, 2022
194a32c
Move muxer initialization off application thread
SheenaChhabra Nov 7, 2022
f3f2f93
Move muxing inside sample pipelines
kim-vde Nov 8, 2022
f5acc9e
Set targetSdkVersion of main demo app back to 29
marcbaechinger Nov 8, 2022
881838b
Move slow mo logic to sample pipelines
kim-vde Nov 9, 2022
95d9e49
Merge Issue: google/ExoPlayer#10762: Fix ffmpeg jni wrapper returning…
Tolriq Nov 9, 2022
1ffe6a7
Add ExoPlayerAssetLoader
kim-vde Nov 9, 2022
70f74fd
Change UnsupportedEncodingException to IllegalArgumentException
SheenaChhabra Nov 9, 2022
98c981f
Set HDR color info on FrameworkMuxer
claincly Nov 9, 2022
39d9aef
HDR: Implement ForceInterpretHdrVideoAsSdr
dway123 Nov 9, 2022
01f30f0
Fix Dackka/Metalava errors in the ExoPlayer module
icbaker Nov 10, 2022
2540dee
Fix Dackka/Metalava errors in the HLS and RTSP modules
icbaker Nov 10, 2022
925e733
Fix Dackka/Metalava errors in av1, flac, ffmpeg, midi, and opus modules
icbaker Nov 10, 2022
7f706c8
Fix Dackka/Metalava errors in test_utils module
icbaker Nov 10, 2022
77c8875
Fix Dackka parameter name error in `Gav1Decoder` and `VpxDecoder`
icbaker Nov 10, 2022
386e2af
Set targetSdkVersion of main demo app to 29
christosts Nov 10, 2022
ab501dd
Fix parameter name mismatch in MappingTrackSelector.selectTracks
icbaker Nov 10, 2022
23518e2
Configure Dackka to generate javadoc for protected methods
icbaker Nov 10, 2022
d976041
Add missing IntDef on MediaSource.Factory.getSupportedTypes overrides
icbaker Nov 10, 2022
dd49f24
Reformat demo build.gradle file
icbaker Nov 10, 2022
704e84f
Add `@ForOverride` to `DecoderAudioRenderer` `protected` methods
icbaker Nov 11, 2022
54d3dbf
Reformat demo build.gradle file
icbaker Nov 14, 2022
5def6e4
Calculate SSAI window duration for live periods with unset duration.
tonihei Nov 15, 2022
88804dd
Mark iterationFinished when triggering release event.
tonihei Nov 15, 2022
db2ab52
Set valid channel masks for 8 and 12 channels on all Android versions
christosts Nov 15, 2022
6108c05
Rename getVideoSurfaceSize to getSurfaceSize
tonihei Nov 15, 2022
f4259f3
Filter bogus AndroidX core jar file when creating javadoc
microkatz Nov 17, 2022
bd6570f
Remove @hide javadoc annotation from ExoPlayer GitHub
icbaker Nov 17, 2022
66995db
Version bump to exoplayer:2.18.2 and media3:1.0.0-beta03
microkatz Nov 21, 2022
aef5330
Update JavaDoc for exoplayer:2.18.2
microkatz Nov 22, 2022
9b0790e
Reorder some release notes in other sections.
tonihei Nov 22, 2022
a114b0e
Fix compilation error in ffmpeg JNI layer
christosts Nov 22, 2022
a9444c8
Merge pull request #10806 from google/release-v2-r2.18.2
microkatz Nov 23, 2022
0c74758
Remove two media3-only release notes from the ExoPlayer release notes
icbaker Nov 24, 2022
3a654c1
Update migration script
marcbaechinger Dec 21, 2022
97d7ed7
Changed decoder list sort to order by functional support of format
microkatz Nov 11, 2022
e2e7c43
Fix NPE when listener is not set
a-googler Nov 16, 2022
e42c65b
Add setPlaybackLooper ExoPlayer builder method
a-googler Nov 16, 2022
0d11d55
Mark broadcast receivers as not exported
tonihei Nov 17, 2022
d99a667
Throw exception if a released player is passed to TestPlayerRunHelper
icbaker Nov 17, 2022
be2bdbd
Add additional codecs to the eosPropagationWorkaround list.
tonihei Nov 17, 2022
fcf5452
Pass correct frame size for passthrough playback
christosts Nov 17, 2022
f1a9a6b
Add remaining state and getters to SimpleBasePlayer
tonihei Nov 18, 2022
87b1c30
Add `set -eu` to all shell scripts
icbaker Nov 21, 2022
dda5f95
Fixed missing imports for Metadata and AdPlaybackState for Exoplayer
microkatz Nov 21, 2022
fbab7de
Fixed Exoplayer imports for SimpleBasePlayerTest
microkatz Nov 22, 2022
f527632
Add `DefaultExtractorsFactory.setTsSubtitleFormats`
icbaker Nov 22, 2022
4a46935
Reorder some release notes in other sections.
tonihei Nov 22, 2022
989e2f7
Merge pull request #10786 from TiVo:p-aacutil-test-impl
icbaker Nov 24, 2022
20e54a8
Exclude tracks from `PlayerInfo` if not changed
marcbaechinger Nov 23, 2022
35a900a
Parse and set `peakBitrate` for Dolby TrueHD(AC-3) and (E-)AC-3
rohitjoins Nov 23, 2022
2910117
Rollback of https://github.com/google/ExoPlayer/commit/01eddb34f55590…
rohitjoins Nov 23, 2022
b4a88d6
Rollback of https://github.com/google/ExoPlayer/commit/ea3552c1a030d8…
rohitjoins Nov 24, 2022
64b32c4
Remove two media3-only release notes from the ExoPlayer release notes
icbaker Nov 24, 2022
062f0e3
Use `ParsableBitArray` instead of `ParsableByteArray`
rohitjoins Nov 24, 2022
7e733aa
Convert bitrates to bps before setting it
rohitjoins Nov 24, 2022
0fb501e
Remove flakiness from DefaultAnalyticsCollectorTest
tonihei Nov 25, 2022
a68ab5f
Clean up javadoc on `Metadata.Entry.populateMediaMetadata`
icbaker Nov 25, 2022
83b7f80
Ensure messages sent on a dead thread don't block FakeClock execution
tonihei Nov 28, 2022
cbc2547
Merge pull request #10799 from OxygenCobalt:id3v2-multi-value
rohitjoins Nov 29, 2022
50e686e
Split up `Id3DecoderTest` methods
icbaker Nov 28, 2022
70a55ef
Remove impossible `UnsupportedEncodingException` from `Id3Decoder`
icbaker Nov 28, 2022
44d12a5
Merge pull request #10776 from dongvanhung:feature/add_support_clear_…
rohitjoins Nov 29, 2022
69ded0f
Bump cast sdk version and remove workaround for live duration
marcbaechinger Nov 29, 2022
b6477dd
Add configuration to support OPUS offload
tonihei Nov 29, 2022
d792378
Use audio bitrate to calculate AudioTrack min buffer in passthrough
christosts Nov 29, 2022
2921cb7
Rename SimpleBasePlayer.PlaylistItem to MediaItemData
tonihei Nov 30, 2022
8246587
Parse and set bitrates in `Ac3Reader`
rohitjoins Nov 30, 2022
8ec46cd
Add media type to MediaMetadata
tonihei Dec 1, 2022
2bfced9
Add support for most setters in SimpleBasePlayer
tonihei Dec 1, 2022
eb51ad5
Merge pull request #10750 from Stronger197:subrip_utf_16
icbaker Dec 12, 2022
05151ba
Split SubripDecoder and ParsableByteArray tests
icbaker Dec 1, 2022
d0691aa
Removed ExoPlayer specific states from SimpleBasePlayer
microkatz Dec 2, 2022
e342b70
Fix `TextRenderer` exception when a subtitle file contains no cues
icbaker Dec 2, 2022
fec7b1b
Fix `ExoPlayerTest` to use `C.TIME_UNSET` instead of `C.POSITION_UNSET`
icbaker Dec 2, 2022
5fd6ce5
Fix threading of onFallbackApplied callback
tonihei Dec 2, 2022
d2d45db
Add javadoc links to README files
icbaker Dec 6, 2022
a65d9e9
Support release in SimpleBasePlayer
tonihei Dec 7, 2022
a599289
Replace MediaMetadata folderType by isBrowsable
tonihei Dec 7, 2022
4566416
Remove debug timeout multiplier.
tonihei Dec 8, 2022
3dfbfd3
Clarify and correct allowed multi-threading for some Player methods
tonihei Dec 8, 2022
b9365f5
Forward seek command details to seekTo method in BasePlayer
tonihei Dec 13, 2022
47b811e
Reset isLoading when calling SimpleBasePlayer.stop/release
tonihei Dec 13, 2022
aa2158d
Document the reason for defining private method `defaultIfNull`
rohitjoins Dec 13, 2022
951fea2
Remove parameters with default values from bundle in `MediaItem`
rohitjoins Dec 13, 2022
0e921d1
Clear one-off events from state as soon as they are triggered.
tonihei Dec 14, 2022
8e2692d
Allow unset index and position values + remove period index
tonihei Dec 14, 2022
b9fd7fd
Remove parameters with `null` values from bundle in `MediaMetadata`
rohitjoins Dec 15, 2022
5ff9069
Use theme when loading drawables on API 21+
marcbaechinger Dec 15, 2022
4b7a005
Rename `EMPTY_MEDIA_ITEM` to `PLACEHOLDER_MEDIA_ITEM`
rohitjoins Dec 16, 2022
f178486
Clarify behavior for out-of-bounds indices and align implementations
tonihei Dec 16, 2022
0ab7c75
Check if codec still exists before handling tunneling events
tonihei Dec 16, 2022
2c17c6e
Add playlist and seek operations to SimpleBasePlayer
tonihei Dec 19, 2022
65daec3
Remove ellipsis from Player javadoc
icbaker Dec 19, 2022
beeb6e7
Fix Dackka error due to param name mismatch
icbaker Dec 19, 2022
730f3a3
Clarify some Player command and method javadoc
icbaker Dec 20, 2022
de203fe
Document the relationship between Player methods and available commands
icbaker Dec 20, 2022
7afdc9e
Add error messages to correctness assertions in SimpleBasePlayer
tonihei Dec 21, 2022
3cb0195
Fix recursive loop when registering controller visibility listeners
icbaker Dec 21, 2022
a212bc9
Update migration script
marcbaechinger Dec 21, 2022
0417dba
Bump IMA SDK version to 3.29.0
marcbaechinger Dec 21, 2022
e4fa94a
Check `MediaMetadata` bundle to verify keys are skipped
rohitjoins Dec 21, 2022
9b11686
Optimise bundling for `AdPlaybackState` using `AdPlaybackState.NONE`
rohitjoins Dec 21, 2022
ee72778
Fix order of playback controls in RTL layout
icbaker Dec 22, 2022
1e97da9
Enable RTL support in the demo app
icbaker Dec 22, 2022
25c964d
Remove player listener on the application thread of the player
marcbaechinger Dec 22, 2022
fea5eea
Check bundles in `MediaItem` to verify keys are skipped
rohitjoins Jan 4, 2023
f3a1f2f
Optimise bundling for `Timeline.Window` and `Timeline.Period`
rohitjoins Jan 4, 2023
25e6f62
Throw a ParserException instead of a NullPointerException if the samp…
a-googler Jan 4, 2023
f9ae0a6
Fix typo in `DefaultTrackSelector.Parameters` field
rohitjoins Jan 5, 2023
0b95e2c
Initialise fields used for bundling as String directly
rohitjoins Jan 5, 2023
f438607
Update bandwidth meter estimates
tonihei Jan 10, 2023
61eeb8b
Add focusSkipButtonWhenAvailable to focus UI on ATV
marcbaechinger Jan 10, 2023
b1b9c12
Request notification permission in demo app for API 33+
marcbaechinger Jan 11, 2023
fc4415b
Document that `DownloadService` needs notification permissions
marcbaechinger Jan 11, 2023
8f37ad6
Add AdsLoader.focusSkipButton()
marcbaechinger Jan 11, 2023
4b3c74f
Clarify what default settings are being used for SSAI AdsLoader
marcbaechinger Jan 16, 2023
cebc0fa
Disables play/pause button when there's nothing to play
a-googler Jan 17, 2023
7f20729
Make availableCommands known when bundling PlayerInfo
tonihei Jan 17, 2023
31aae77
Fix javadoc references to `writeSampleData`
rohitjoins Jan 18, 2023
ea1301a
Correctly filter PlayerInfo by available getter commands.
tonihei Jan 18, 2023
b169386
Extend command GET_CURRENT_MEDIA_ITEM to more methods.
tonihei Jan 19, 2023
197109e
Explicitly document most Player.Listener methods in terms of getters
icbaker Jan 19, 2023
128fed8
Undo unreleased changes from transforming-media.md
kim-vde Jan 23, 2023
92686b3
Minor fix in transforming-media.md
christosts Jan 24, 2023
26c8c55
Suppress warnings in ImaUtil
christosts Jan 24, 2023
3bb3c60
Document two limitations with subtitle sideloading
icbaker Jan 25, 2023
5350d06
Add missing command checks in UI module
tonihei Jan 25, 2023
b9bb323
Tweak UI behavior when commands are missing.
tonihei Jan 27, 2023
ace97fa
Match MergingMediaPeriod track selection by period index in id
microkatz Jan 27, 2023
284bf97
Fix timestamp comparison for seeks in fMP4
tonihei Jan 27, 2023
4dfa7ca
Fix (another) `LeanbackPlayerAdapter` param name mismatch
icbaker Jan 31, 2023
76e8740
Merge pull request #10793 from fraunhoferfokus:dash-thumbnail-support
christosts Feb 1, 2023
7269d2a
Publish ConcatenatingMediaSource2
marcbaechinger Feb 1, 2023
f731a46
Update release notes for ExoPlayer 2.18.3
christosts Feb 13, 2023
7dbc2d4
Version bump for ExoPlayer 2.18.3 & media3-1.0.0-rc01
christosts Feb 14, 2023
f5d442f
Update javadoc for ExoPlayer 2.18.3
christosts Feb 15, 2023
57bd861
Update javadoc for ExoPlayer 2.18.3
christosts Feb 15, 2023
68ca399
Update javadoc for ExoPlayer 2.18.3
christosts Feb 15, 2023
f72ca83
Merge pull request #10995 from google/release-v2-r2.18.3
christosts Feb 16, 2023
8f1aeca
Detect HEVC HDR10 codec profile more accurately
christosts Feb 6, 2023
bc9f2be
Fix AudioTrackPositionTracker logic for playback speed adjustments
tonihei Feb 7, 2023
3dcdfe5
Merge pull request #248 from lemondoglol:update-segment-size
microkatz Feb 8, 2023
3bd0896
Merge pull request #10959 from balachandarlinks:handle-sql-exception-…
christosts Feb 14, 2023
58650b8
Document spatialization behavior constants.
tonihei Feb 10, 2023
2794992
Add null check to `ExoPlayerImpl.isTunnelingEnabled`
icbaker Feb 10, 2023
aeff51c
AsynchronousMediaCodecAdapter: surface queueing errors sooner
christosts Feb 10, 2023
65f2e16
Add ad event listeners in the Looper event of the ad manager callback
marcbaechinger Feb 13, 2023
89acf3c
Catch IllegalArgumentExceptions in RTSP Response parsing
microkatz Feb 13, 2023
52d5ff4
Add exception cause to thrown exception
a-googler Feb 14, 2023
61a38a1
Map `PLAYER_STATE_LOADING` to `STATE_BUFFERING`
marcbaechinger Feb 17, 2023
0563c43
Reduce number of calls to AudioTrack.getPlaybackHeadPosition
tonihei Feb 20, 2023
5f91e45
Skip rendering multiple frames on the same vsync
christosts Feb 20, 2023
d0c0769
Indicate that SCTE-35 metadata in not supported with HLS
tonihei Feb 20, 2023
629e1c5
Use ArrayDeque for pending output stream changes.
tonihei Feb 23, 2023
342ae31
Add missing variant to package transformations
andrewlewis Feb 24, 2023
29eeca3
Do not specify export flags for protected system broadcasts.
tonihei Feb 24, 2023
5862fe4
Use more realistic time values for MediaCodecVideoRendererTest
tonihei Feb 27, 2023
f5c6967
Correctly update output info if previous stream has been fully rendered
tonihei Feb 27, 2023
095a0b5
Add workaround for wrong PerformancePoints on some devices.
tonihei Feb 27, 2023
38639e5
Ensure output format is updated in sync with stream changes.
tonihei Feb 27, 2023
3e7eece
Fix some playback parameter signalling problems.
tonihei Feb 27, 2023
996d660
Ensure getPlaybackHeadPosition isn't called if not needed
tonihei Feb 28, 2023
c23010d
Update translations
tonihei Feb 28, 2023
bfc12ef
Minor change in ForwardingPlayer javadoc
christosts Feb 28, 2023
a834d05
Remove @see tags with <a> tags
icbaker Mar 1, 2023
d3ef801
Merge pull request #255 from mayurk2:use_edts_offset_if_it_is_for_ent…
tonihei Mar 1, 2023
d5ae16c
Extend documentation for ForwardingPlayer
christosts Mar 1, 2023
4298cfa
Update migration script to 1.0.0-rc02/2.18.4
tonihei Mar 2, 2023
c641307
Bump version numbers to Media3 1.0.0-rc02 and ExoPlayer 2.18.4
tonihei Mar 2, 2023
05ac6ab
Update Javadoc for 2.18.4
tonihei Mar 2, 2023
c459b08
Fix lint-baseline.xml for latest UI translations
tonihei Mar 2, 2023
86013bd
Update release notes for ExoPlayer 2.18.4
tonihei Mar 2, 2023
bc35372
Merge pull request #11034 from google/release-v2-r2.18.4
tonihei Mar 3, 2023
7efc278
Merge tag 'r2.18.4' into impr/DORIS-1730-migrate-exo-2.18.4
guoen21 Mar 16, 2023
f10bf19
chore: update the yaml file
guoen21 Mar 21, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Reduce number of calls to AudioTrack.getPlaybackHeadPosition
This call may cause performance overhead in some situations,
for example if the AudioTrack needs to query an offload DSP
for the current position. We don't need to check this multiple
times per doSomeWork iteration as the value is unlikely to
change in any meaningful way.

PiperOrigin-RevId: 510957116
(cherry picked from commit 829b49d)
  • Loading branch information
tonihei committed Feb 28, 2023
commit 0563c4327f257bcf848667ade58011df61520229
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer2.audio;

import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import static com.google.android.exoplayer2.util.Util.castNonNull;
import static java.lang.Math.max;
import static java.lang.Math.min;
Expand All @@ -26,7 +27,6 @@
import androidx.annotation.IntDef;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Util;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
Expand Down Expand Up @@ -146,6 +146,9 @@ void onSystemTimeUsMismatch(
/** The duration of time used to smooth over an adjustment between position sampling modes. */
private static final long MODE_SWITCH_SMOOTHING_DURATION_US = C.MICROS_PER_SECOND;

/** Minimum update interval for getting the raw playback head position, in milliseconds. */
private static final long RAW_PLAYBACK_HEAD_POSITION_UPDATE_INTERVAL_MS = 5;

private static final long FORCE_RESET_WORKAROUND_TIMEOUT_MS = 200;

private static final int MAX_PLAYHEAD_OFFSET_COUNT = 10;
Expand Down Expand Up @@ -174,7 +177,8 @@ void onSystemTimeUsMismatch(

private boolean isOutputPcm;
private long lastLatencySampleTimeUs;
private long lastRawPlaybackHeadPosition;
private long lastRawPlaybackHeadPositionSampleTimeMs;
private long rawPlaybackHeadPosition;
private long rawPlaybackHeadWrapCount;
private long passthroughWorkaroundPauseOffset;
private int nextPlayheadOffsetIndex;
Expand All @@ -199,7 +203,7 @@ void onSystemTimeUsMismatch(
* @param listener A listener for position tracking events.
*/
public AudioTrackPositionTracker(Listener listener) {
this.listener = Assertions.checkNotNull(listener);
this.listener = checkNotNull(listener);
if (Util.SDK_INT >= 18) {
try {
getLatencyMethod = AudioTrack.class.getMethod("getLatency", (Class<?>[]) null);
Expand Down Expand Up @@ -235,7 +239,7 @@ public void setAudioTrack(
needsPassthroughWorkarounds = isPassthrough && needsPassthroughWorkarounds(outputEncoding);
isOutputPcm = Util.isEncodingLinearPcm(outputEncoding);
bufferSizeUs = isOutputPcm ? framesToDurationUs(bufferSize / outputPcmFrameSize) : C.TIME_UNSET;
lastRawPlaybackHeadPosition = 0;
rawPlaybackHeadPosition = 0;
rawPlaybackHeadWrapCount = 0;
passthroughWorkaroundPauseOffset = 0;
hasData = false;
Expand All @@ -257,15 +261,15 @@ public void setAudioTrackPlaybackSpeed(float audioTrackPlaybackSpeed) {
}

public long getCurrentPositionUs(boolean sourceEnded) {
if (Assertions.checkNotNull(this.audioTrack).getPlayState() == PLAYSTATE_PLAYING) {
if (checkNotNull(this.audioTrack).getPlayState() == PLAYSTATE_PLAYING) {
maybeSampleSyncParams();
}

// If the device supports it, use the playback timestamp from AudioTrack.getTimestamp.
// Otherwise, derive a smoothed position by sampling the track's frame position.
long systemTimeUs = System.nanoTime() / 1000;
long positionUs;
AudioTimestampPoller audioTimestampPoller = Assertions.checkNotNull(this.audioTimestampPoller);
AudioTimestampPoller audioTimestampPoller = checkNotNull(this.audioTimestampPoller);
boolean useGetTimestampMode = audioTimestampPoller.hasAdvancingTimestamp();
if (useGetTimestampMode) {
// Calculate the speed-adjusted position using the timestamp (which may be in the future).
Expand Down Expand Up @@ -332,12 +336,12 @@ public long getCurrentPositionUs(boolean sourceEnded) {

/** Starts position tracking. Must be called immediately before {@link AudioTrack#play()}. */
public void start() {
Assertions.checkNotNull(audioTimestampPoller).reset();
checkNotNull(audioTimestampPoller).reset();
}

/** Returns whether the audio track is in the playing state. */
public boolean isPlaying() {
return Assertions.checkNotNull(audioTrack).getPlayState() == PLAYSTATE_PLAYING;
return checkNotNull(audioTrack).getPlayState() == PLAYSTATE_PLAYING;
}

/**
Expand All @@ -348,7 +352,7 @@ public boolean isPlaying() {
* @return Whether the caller can write data to the track.
*/
public boolean mayHandleBuffer(long writtenFrames) {
@PlayState int playState = Assertions.checkNotNull(audioTrack).getPlayState();
@PlayState int playState = checkNotNull(audioTrack).getPlayState();
if (needsPassthroughWorkarounds) {
// An AC-3 audio track continues to play data written while it is paused. Stop writing so its
// buffer empties. See [Internal: b/18899620].
Expand Down Expand Up @@ -429,7 +433,7 @@ public boolean pause() {
if (stopTimestampUs == C.TIME_UNSET) {
// The audio track is going to be paused, so reset the timestamp poller to ensure it doesn't
// supply an advancing position.
Assertions.checkNotNull(audioTimestampPoller).reset();
checkNotNull(audioTimestampPoller).reset();
return true;
}
// We've handled the end of the stream already, so there's no need to pause the track.
Expand Down Expand Up @@ -480,7 +484,7 @@ private void maybeSampleSyncParams() {
}

private void maybePollAndCheckTimestamp(long systemTimeUs, long playbackPositionUs) {
AudioTimestampPoller audioTimestampPoller = Assertions.checkNotNull(this.audioTimestampPoller);
AudioTimestampPoller audioTimestampPoller = checkNotNull(this.audioTimestampPoller);
if (!audioTimestampPoller.maybePollTimestamp(systemTimeUs)) {
return;
}
Expand Down Expand Up @@ -516,8 +520,7 @@ private void maybeUpdateLatency(long systemTimeUs) {
// Compute the audio track latency, excluding the latency due to the buffer (leaving
// latency due to the mixer and audio hardware driver).
latencyUs =
castNonNull((Integer) getLatencyMethod.invoke(Assertions.checkNotNull(audioTrack)))
* 1000L
castNonNull((Integer) getLatencyMethod.invoke(checkNotNull(audioTrack))) * 1000L
- bufferSizeUs;
// Check that the latency is non-negative.
latencyUs = max(latencyUs, 0);
Expand Down Expand Up @@ -555,7 +558,7 @@ private void resetSyncParams() {
*/
private boolean forceHasPendingData() {
return needsPassthroughWorkarounds
&& Assertions.checkNotNull(audioTrack).getPlayState() == AudioTrack.PLAYSTATE_PAUSED
&& checkNotNull(audioTrack).getPlayState() == AudioTrack.PLAYSTATE_PAUSED
&& getPlaybackHeadPosition() == 0;
}

Expand All @@ -581,56 +584,63 @@ private long getPlaybackHeadPositionUs() {
* @return The playback head position, in frames.
*/
private long getPlaybackHeadPosition() {
AudioTrack audioTrack = Assertions.checkNotNull(this.audioTrack);
long currentTimeMs = SystemClock.elapsedRealtime();
if (stopTimestampUs != C.TIME_UNSET) {
// Simulate the playback head position up to the total number of frames submitted.
long elapsedTimeSinceStopUs = (SystemClock.elapsedRealtime() * 1000) - stopTimestampUs;
long elapsedTimeSinceStopUs = (currentTimeMs * 1000) - stopTimestampUs;
long mediaTimeSinceStopUs =
Util.getMediaDurationForPlayoutDuration(elapsedTimeSinceStopUs, audioTrackPlaybackSpeed);
long framesSinceStop = (mediaTimeSinceStopUs * outputSampleRate) / C.MICROS_PER_SECOND;
return min(endPlaybackHeadPosition, stopPlaybackHeadPosition + framesSinceStop);
}
if (currentTimeMs - lastRawPlaybackHeadPositionSampleTimeMs
>= RAW_PLAYBACK_HEAD_POSITION_UPDATE_INTERVAL_MS) {
updateRawPlaybackHeadPosition(currentTimeMs);
lastRawPlaybackHeadPositionSampleTimeMs = currentTimeMs;
}
return rawPlaybackHeadPosition + (rawPlaybackHeadWrapCount << 32);
}

private void updateRawPlaybackHeadPosition(long currentTimeMs) {
AudioTrack audioTrack = checkNotNull(this.audioTrack);
int state = audioTrack.getPlayState();
if (state == PLAYSTATE_STOPPED) {
// The audio track hasn't been started.
return 0;
// The audio track hasn't been started. Keep initial zero timestamp.
return;
}

long rawPlaybackHeadPosition = 0xFFFFFFFFL & audioTrack.getPlaybackHeadPosition();
if (needsPassthroughWorkarounds) {
// Work around an issue with passthrough/direct AudioTracks on platform API versions 21/22
// where the playback head position jumps back to zero on paused passthrough/direct audio
// tracks. See [Internal: b/19187573].
if (state == PLAYSTATE_PAUSED && rawPlaybackHeadPosition == 0) {
passthroughWorkaroundPauseOffset = lastRawPlaybackHeadPosition;
passthroughWorkaroundPauseOffset = this.rawPlaybackHeadPosition;
}
rawPlaybackHeadPosition += passthroughWorkaroundPauseOffset;
}

if (Util.SDK_INT <= 29) {
if (rawPlaybackHeadPosition == 0
&& lastRawPlaybackHeadPosition > 0
&& this.rawPlaybackHeadPosition > 0
&& state == PLAYSTATE_PLAYING) {
// If connecting a Bluetooth audio device fails, the AudioTrack may be left in a state
// where its Java API is in the playing state, but the native track is stopped. When this
// happens the playback head position gets stuck at zero. In this case, return the old
// playback head position and force the track to be reset after
// {@link #FORCE_RESET_WORKAROUND_TIMEOUT_MS} has elapsed.
if (forceResetWorkaroundTimeMs == C.TIME_UNSET) {
forceResetWorkaroundTimeMs = SystemClock.elapsedRealtime();
forceResetWorkaroundTimeMs = currentTimeMs;
}
return lastRawPlaybackHeadPosition;
return;
} else {
forceResetWorkaroundTimeMs = C.TIME_UNSET;
}
}

if (lastRawPlaybackHeadPosition > rawPlaybackHeadPosition) {
if (this.rawPlaybackHeadPosition > rawPlaybackHeadPosition) {
// The value must have wrapped around.
rawPlaybackHeadWrapCount++;
}
lastRawPlaybackHeadPosition = rawPlaybackHeadPosition;
return rawPlaybackHeadPosition + (rawPlaybackHeadWrapCount << 32);
this.rawPlaybackHeadPosition = rawPlaybackHeadPosition;
}
}