22214 Commits

Author SHA1 Message Date
tonihei
a3c9060daa Work around SurfaceView creation issues on API<26 for tests
PiperOrigin-RevId: 731643287
2025-02-27 02:26:47 -08:00
jbibik
addf01b9a8 [ui-compose] Add PlaybackSpeedState to control playbackParameters.speed
A state holder that handles interaction with a UI component that toggles through a range of playback speeds.

[demo-compose] Use PlaybackSpeedState to create PlaybackSpeedTextButton

Add the button to the bottom extra controls.

PiperOrigin-RevId: 731449526
2025-02-26 14:09:12 -08:00
Copybara-Service
366e5eccf8 Merge pull request #2190 from nift4:main
PiperOrigin-RevId: 731316955
2025-02-26 07:57:38 -08:00
ibaker
ca80c001e2 Suppress UnnecessarilyFullyQualified lint in DefaultRenderersFactory
Also only fully-qualify the media3 types, since these are the ones that
are at risk of moving - I don't think `android.os.Handler` is going
anywhere, and doesn't need to be proguard-kept anyway.

PiperOrigin-RevId: 731315177
2025-02-26 07:50:18 -08:00
tianyifeng
e4369b2317 Allow setting time range for adaptive media in DownloadRequest
PiperOrigin-RevId: 731314103
2025-02-26 07:45:55 -08:00
ibaker
275e7d3dbd Rewrite ClearKey UUID to Common PSSH UUID in PSSH box on API < 27
Without this change, content that contains a PSSH box with only
the ClearKey UUID is not playable on devices with API < 27.

This includes our `sample_fragmented_clearkey.mp4` test content.

PiperOrigin-RevId: 731308444
2025-02-26 07:24:34 -08:00
simakova
5417279982 Add missing links to the effect demo README
PiperOrigin-RevId: 731305090
2025-02-26 07:12:40 -08:00
claincly
e3e9d88b04 Rename listener in FinalShaderProgramWrapper
This is to support adding more listener methods later for dynamic effect change

PiperOrigin-RevId: 731297518
2025-02-26 06:47:31 -08:00
ibaker
37aaef0b32 Upgrade to Gradle 8.10.2 and AGP 8.8.1
This resolves the jacoco log spam when running Robolectric tests on
JDK 21, and therefore unblocks bumping our Java language level to 21.

PiperOrigin-RevId: 731297393
2025-02-26 06:45:57 -08:00
nift4
b38d3f8f0d Reuse a variable in DefaultAudioSink 2025-02-26 14:44:12 +00:00
jbibik
afea6962c2 [ui-compose] Add default value to PlayerSurface's surfaceType
PlayerView's default surface type was also SURFACE_VIEW.

This allows for a simple `PlayerSurface(player)` usage by most developers.

The order of the arguments needs to be changed, because `modifier` should be the first default argument (https://android.googlesource.com/platform/frameworks/support/+/androidx-main/compose/docs/compose-component-api-guidelines.md#parameter)

PiperOrigin-RevId: 731294658
2025-02-26 06:36:04 -08:00
Copybara-Service
ac1cf206c8 Merge pull request #2180 from nift4:main
PiperOrigin-RevId: 731276598
2025-02-26 05:27:44 -08:00
sheenachhabra
d16fdcb8cc Reset maxTrackDurationUs when a new fragment is written
When there is both audio and video track, then fragment
creation is driven by video track (a combination of duration
so far + next key frame). But if there is no video track, then
the duration so far drives the fragment creation.

Due to bug, when there is only audio track, only first
fragment was created as expected and then a new fragment is
created for every audio sample.

#cherrypick

PiperOrigin-RevId: 731257696
2025-02-26 04:18:49 -08:00
ibaker
20ea05063b Suppress some instrumentation tests on older API levels
PiperOrigin-RevId: 731257575
2025-02-26 04:16:48 -08:00
claincly
5d9c2e309e Add APIs for redrawing effects.
PiperOrigin-RevId: 731255074
2025-02-26 04:08:32 -08:00
ibaker
a6debf4904 Rollback of 3b38a7a43b
PiperOrigin-RevId: 731248658
2025-02-26 03:44:47 -08:00
tonihei
4f039eaafa Add ClippingConfiguration.allowUnseekableMedia
PiperOrigin-RevId: 731240278
2025-02-26 03:11:19 -08:00
tonihei
676fe86028 Add DefaultPreloadManagerBinderStressTest
Based on the idea for the ExoPlayer stress tests, we can set up more
stress tests for other components that verify
the components do not use system binder calls on the main thread.

PiperOrigin-RevId: 730964902
2025-02-25 11:32:51 -08:00
tonihei
8937fb1df7 Add binder stress test for ExoPlayer setup
The test compares creating and interacting with the player
with and without additional binder stress on the system process.

If the ExoPlayer interactions do not use binder calls, the overall
runtime should be within the same range (allowing for some additional
leeway due to the generally increased CPU usage).

Verified the test passes 20/20 without flakes and fails 19/20 even
with a single binder call.

PiperOrigin-RevId: 730963633
2025-02-25 11:28:37 -08:00
tonihei
19c7b21275 Move audio focus management to ExoPlayerImplInternal
This ensures all AudioManager calls are moved off the main
thread.

Having the audio focus management on the playback thread
also allows future improvements like requesting audio focus
only just before the player becomes ready (which is recommended
but not currently done by ExoPlayer).

PiperOrigin-RevId: 730962299
2025-02-25 11:25:25 -08:00
Copybara-Service
2c866ce50b Merge pull request #2113 from colinkho:lastrebufferinssp
PiperOrigin-RevId: 730919539
2025-02-25 09:38:40 -08:00
ibaker
6ffa0854d5 Define how PBA.peekChar behaves for UTF-8 multi-byte characters
PiperOrigin-RevId: 730908033
2025-02-25 09:04:37 -08:00
bachinger
cecee3bdda Add explicit property windowStartTimeUs to TimelineWindowDefinition
Before this change constructors of `TimelineWindowDefinition` used
`windowOffsetInFirstPeriodUs` for both, `positionInFirstPeriodUs`
and `startTimeUs` of the exposed `Timeline.Window`.

Adding `windowStartTimeUs` differentiates these two properties which
allows using `FakeTimeline` for unit tests that emulate live streams
with a forward moving live window in the period like `HlsMediaSource`
constructs a `SinglePeriodTimeline` for live.

A `TimelineWindowDefinition.Builder` is added for API usability and
sanitation.

PiperOrigin-RevId: 730892809
2025-02-25 08:17:24 -08:00
Copybara-Service
57d4f8354a Merge pull request #2135 from bubenheimer:handleMoveMediaItems_docfix
PiperOrigin-RevId: 730886871
2025-02-25 08:00:35 -08:00
ibaker
c4eef6042b Bump play-services-cast-framework cast dependency to 21.5.0
This resolves an app crash on devices with Google Play Services
installed but disabled due to `FLAG_MUTABLE` on a `PendingIntent`.

Issue: androidx/media#2178

#cherrypick

PiperOrigin-RevId: 730885329
2025-02-25 07:54:54 -08:00
ibaker
ecb83f3b73 Add missing call to adjustUuid in FrameworkMediaDrm
Before API 27, the platform DRM components incorrectly expected
`C.COMMON_PSSH_UUID` instead of `C.CLEARKEY_UUID` in order to perform
ClearKey decryption. `FrameworkMediaDrm` is responsible for doing this
adjustment on these API levels, but this call was missed when
refactoring some DRM code in
c872af4bc0.

This led to `MediaCodec$CryptoException: Operation not supported in this
configuration` errors when doing ClearKey playback on devices with
API < 27. This was because the earlier, clearer error from the
`MediaCrypto` constructor was being swallowed and transformed to
`requiresSecureDecoder = true` by the `catch` logic in
`FrameworkMediaDrm.requiresSecureDecoder`.

This change also makes the error handling in
`FrameworkMediaDrm.requiresSecureDecoder` more robust by assuming
`requiresSecure = false` for ClearKey (and true for all other DRM
schemes), since we know that ClearKey never supports secure decoding.
This will help avoid more ClearKey playback failures if we see other,
unrelated, errors at this point.

Issue: androidx/media#1732

#cherrypick

PiperOrigin-RevId: 730882278
2025-02-25 07:42:52 -08:00
tianyifeng
d58740367b Add an option in DownloadHelper to log debug information
Add a debugLoggingEnabled parameter in DownloadHelper constructor and forMediaItem overloads. For backward compatibility, this is disabled by default. Currently the debug logging is for track selection results only.

PiperOrigin-RevId: 730881600
2025-02-25 07:41:10 -08:00
tonihei
a3f281dff8 Add kotlin-stdlib to aar workaround list
#cherrypick

PiperOrigin-RevId: 730880594
2025-02-25 07:38:02 -08:00
dancho
da402cfd64 Add experimentalSetCodecsToParseWithinGopSampleDependencies to HLS
HLS extractors were missing
experimentalSetCodecsToParseWithinGopSampleDependencies prior to this patch.

PiperOrigin-RevId: 730878460
2025-02-25 07:31:30 -08:00
ivanbuper
1399e77249 Add createShortBuffer() to TestUtil
PiperOrigin-RevId: 730875642
2025-02-25 07:20:13 -08:00
Ian Baker
51eb4d6504 Keep the old MidiRenderer constructor deprecated for now 2025-02-25 14:34:15 +00:00
Copybara-Service
cc44de8757 Merge pull request #2115 from MGaetan89:use_objects_equals
PiperOrigin-RevId: 730860597
2025-02-25 06:30:48 -08:00
Ian Baker
4f08312ea5 Add release note 2025-02-25 14:24:19 +00:00
Ian Baker
c950f1c5e3 Format with google-java-format 2025-02-25 14:22:52 +00:00
nift4
5b97ad71f4 Make MIDI renderer respect custom audio sink 2025-02-25 14:22:52 +00:00
Googler
3b38a7a43b Add CookieHandler support to HttpEngineDataSource.
The original behaviour of the `handleSetCookieRequests` is preserved.
A bug is addressed, where it woulld set `Set-Cookie` header in the client request (as opposed to the expected `Cookies`).

PiperOrigin-RevId: 730857996
2025-02-25 06:19:20 -08:00
Copybara-Service
85467b9b57 Merge pull request #2145 from v-novaltd:dsparano-exo328
PiperOrigin-RevId: 730853667
2025-02-25 06:05:18 -08:00
tonihei
94e8a64938 Add more dump file changes 2025-02-25 12:50:20 +00:00
sheenachhabra
bdbcdf1660 Implement blank frame insertion when video track goes missing
If an sequence has both audio and video tracks running but then
the next media item has only audio, then insert blank frames to
continue video track.

PiperOrigin-RevId: 730828269
2025-02-25 04:34:17 -08:00
tianyifeng
a016adc6b1 Remove deprecated constructors in SegmentDownloader and its subclasses
PiperOrigin-RevId: 730828186
2025-02-25 04:32:39 -08:00
ibaker
fe19d8c9be Fix casting in ParsableByteArray.peekCharacterAndSize
This was introduced in 841bdc6efe.

There's no need to cast the `char` (2 bytes) down to a `byte` in order
to pack it into an `int` (4 bytes) alongside a short (2 bytes).

We also don't need to use `short` to track the character count (max 4
with UTF-8) - a single byte is enough. This change also uses
`Ints.fromBytes` to avoid having to reason about how casting &
bit-shifting interact.

This change introduces a test which reproduces the failure reported in
Issue: androidx/media#2167.

#cherrypick

PiperOrigin-RevId: 730809219
2025-02-25 03:18:30 -08:00
tonihei
3f493eaf9e Clarify that multiple LibraryParams fields can be set
Issue: androidx/media#2159
PiperOrigin-RevId: 730805485
2025-02-25 03:03:00 -08:00
bachinger
a75da2f5f3 Add withRemovedAdGroupCountBefore to AdPlaybackState
Adds a helper method to remove ad groups from the
ad playback state before a given period time.

PiperOrigin-RevId: 730804505
2025-02-25 02:58:39 -08:00
ivanbuper
ee6eb98d4b Rollback of 6e9a2cc0cd
PiperOrigin-RevId: 730482824
2025-02-24 09:32:45 -08:00
sheenachhabra
493e5a5eb1 Refactor common input feeding method into MuxerTestUtil
PiperOrigin-RevId: 730452200
2025-02-24 08:02:57 -08:00
claincly
2f5a72a165 Add javadoc to clarify using bitmap
PiperOrigin-RevId: 730441676
2025-02-24 07:25:13 -08:00
tonihei
5610cc8465 Do not change audio capabilities for error recovery without context
If the deprecated path without a context is used, the capabilities
are set externally and can't recover automatically back to the real
capabilities.

Issue: androidx/media#2168
PiperOrigin-RevId: 730427339
2025-02-24 06:33:23 -08:00
Marc Baechinger
b4bff587c0 Add inline comments to test case 2025-02-24 13:16:16 +01:00
Marc Baechinger
1d5f7598e9 Merge release notes 2025-02-24 13:15:59 +01:00
Colin Kho
dd641c1979 Add lastRebufferRealtimeMs to LoadControl.Parameters 2025-02-24 13:14:21 +01:00