Commit graph

17903 commits

Author SHA1 Message Date
sheenachhabra
b9ade43a19 Fix nit issues in muxer end to end tests
Renamed MuxerEndToEndTest.java to Mp4MuxerEndToEndTest.java to align it with class under test.
Removed muxed prefix from dump file name because Mp4 implicitely means muxed only.

PiperOrigin-RevId: 513574681
2023-03-07 11:48:32 +00:00
tonihei
0f85157a0d Merge branch 'release-v2' into dev-v2 2023-03-03 10:45:21 +00:00
tonihei
bc3537260b
Merge pull request #11034 from google/release-v2-r2.18.4
r2.18.4
2023-03-03 10:01:45 +00:00
tonihei
86013bdc36 Update release notes for ExoPlayer 2.18.4
#minor-release

PiperOrigin-RevId: 513555559
(cherry picked from commit 4f68f891bc)
2023-03-02 17:58:16 +00:00
tonihei
c459b08b81 Fix lint-baseline.xml for latest UI translations
#minor-release

PiperOrigin-RevId: 513533248
(cherry picked from commit af6807d959)
2023-03-02 17:58:16 +00:00
tonihei
05ac6ab15d Update Javadoc for 2.18.4
PiperOrigin-RevId: 513516267
(cherry picked from commit 658b5030e4)
2023-03-02 17:58:15 +00:00
tonihei
4f68f891bc Update release notes for ExoPlayer 2.18.4
#minor-release

PiperOrigin-RevId: 513555559
2023-03-02 17:44:11 +00:00
tonihei
af6807d959 Fix lint-baseline.xml for latest UI translations
#minor-release

PiperOrigin-RevId: 513533248
2023-03-02 17:39:57 +00:00
andrewlewis
9f0a6f1619 Fix typo
PiperOrigin-RevId: 513529059
2023-03-02 17:35:30 +00:00
andrewlewis
389d5ea229 Fix name for FrameCacheGlShaderProgram
This implements `GlShaderProgram` (and is GL-specific).

PiperOrigin-RevId: 513528160
2023-03-02 17:31:16 +00:00
tonihei
658b5030e4 Update Javadoc for 2.18.4
PiperOrigin-RevId: 513516267
2023-03-02 17:26:57 +00:00
samrobinson
8642594379 Add getNormalizedTrackType, mapping image to video track type.
PiperOrigin-RevId: 513514142
2023-03-02 17:22:29 +00:00
tonihei
c641307110 Bump version numbers to Media3 1.0.0-rc02 and ExoPlayer 2.18.4
#minor-release

PiperOrigin-RevId: 513488487
(cherry picked from commit 3b16231e29)
2023-03-02 13:54:32 +00:00
tonihei
4298cfabc6 Update migration script to 1.0.0-rc02/2.18.4
PiperOrigin-RevId: 513482096
(cherry picked from commit b634005c5f)
2023-03-02 13:54:30 +00:00
tonihei
3b16231e29 Bump version numbers to Media3 1.0.0-rc02 and ExoPlayer 2.18.4
#minor-release

PiperOrigin-RevId: 513488487
2023-03-02 13:28:55 +00:00
tonihei
b634005c5f Update migration script to 1.0.0-rc02/2.18.4
PiperOrigin-RevId: 513482096
2023-03-02 13:24:56 +00:00
christosts
d5ae16c0c9 Extend documentation for ForwardingPlayer
Add some additional information which methods to override
for available commands.

#minor-release

PiperOrigin-RevId: 513251805
(cherry picked from commit a64a9e67ca)
2023-03-02 09:57:58 +00:00
tonihei
d3ef80106e Merge pull request #255 from mayurk2:use_edts_offset_if_it_is_for_entire_file
PiperOrigin-RevId: 513213229
(cherry picked from commit d2ba290746)
2023-03-02 09:57:58 +00:00
ibaker
a834d05387 Remove @see tags with <a> tags
These are not supported by Dackka

#minor-release

PiperOrigin-RevId: 513176533
(cherry picked from commit ef5a1ce932)
2023-03-02 09:57:58 +00:00
christosts
bfc12ef59a Minor change in ForwardingPlayer javadoc
#minor-release

PiperOrigin-RevId: 512897269
(cherry picked from commit 48047cf9e8)
2023-03-02 09:57:58 +00:00
tonihei
c23010d3f6 Update translations
#minor-release

PiperOrigin-RevId: 512890813
(cherry picked from commit 13a86b3833)
2023-03-02 09:57:58 +00:00
tonihei
996d66052e Ensure getPlaybackHeadPosition isn't called if not needed
Once the value returned from AudioTimestampPoller advances, we
only need getPlaybackHeadPosition to sample sync params and
verify the returned timestamp. Both of these happen less often
and we can avoid calling getPlaybackHeadPosition if we don't
actually need it.

PiperOrigin-RevId: 512882170
(cherry picked from commit 4cf7d3c7ac)
2023-03-02 09:57:58 +00:00
tonihei
3e7eeceb56 Fix some playback parameter signalling problems.
Playback parameter signalling can be quite complex because
 (a) the renderer clock often has a delay before it realizes
     that it doesn't support a previously set speed and
 (b) the speed set on media clock sometimes intentionally
     differs from the one surfaced to the user, e.g. during
     live speed adjustment or when overriding ad playback
     speed to 1.0f.

This change fixes two problems related to this signalling:
 1. When resetting the media clock speed at a period transition,
    we don't currently tell the renderers that this happened.
 2. When a delayed speed change update from the media clock is
    pending and the renderer for this media clock is disabled
    before the change can be handled, the pending update becomes
    stale but it still applied later and overrides any other valid
    speed set in the meantime.

Both edge cases are also covered by extended or new player tests.

Issue: google/ExoPlayer#10882

PiperOrigin-RevId: 512658918
(cherry picked from commit d363977156)
2023-03-02 09:57:54 +00:00
tofunmi
5c2eea86a2 README.md line reflow.
PiperOrigin-RevId: 513289716
2023-03-02 08:21:46 +00:00
tofunmi
a6e0b5b9d6 Image frame processing color transfer fix
Used an actual captured image with set color profile for test to minimise the chance of the test flaking. Also renamed the media/bitmap/overlay folder to media/bitmap/input_images for clarity.

PiperOrigin-RevId: 513273353
2023-03-02 08:17:45 +00:00
samrobinson
5438e6cdb4 Only init SpeedChangingAudioProcessor if Format.Metadata not null.
If the Metadata passed to SegmentSpeedProvider is null, then the
SegmentSpeedProvider will always return 1f from getSpeed.

Initializing a SpeedChangingAudioProcessor requires a SpeedProvider.
Once configured,this audioProcessor is always active, so buffers are
passed through it. Because getSpeed is always 1, the processor performs
a no-op, but still has to do a buffer copy for each buffer.

By not initializing the audio processor when metadata is null, this
copy can be skipped and the audio pipeline is more performant.

Note: This change does not affect the multiple media-item case, which
is not supported with speed changes, as per Transformer API
documentation.
PiperOrigin-RevId: 513261811
2023-03-02 08:13:34 +00:00
christosts
a64a9e67ca Extend documentation for ForwardingPlayer
Add some additional information which methods to override
for available commands.

#minor-release

PiperOrigin-RevId: 513251805
2023-03-01 18:18:54 +00:00
sheenachhabra
d2d9168f9d Move Mp4MuxerMetadataTest into muxer module
Changes include:
1. Move the test fine into muxer module.
2. Use dump file infra for test cases.
3. Add one additional test for adding float metadata.
4. Few improvements in the code.

In next CL will remove Mp4 term from the file name as we are not using this term in test file names.

PiperOrigin-RevId: 513222506
2023-03-01 18:14:52 +00:00
tonihei
d2ba290746 Merge pull request #255 from mayurk2:use_edts_offset_if_it_is_for_entire_file
PiperOrigin-RevId: 513213229
2023-03-01 18:10:49 +00:00
ibaker
3e1f8258c4 Delete VorbisUtil.CodeBook since it's not used
PiperOrigin-RevId: 513186205
2023-03-01 18:06:43 +00:00
ibaker
ef5a1ce932 Remove @see tags with <a> tags
These are not supported by Dackka

#minor-release

PiperOrigin-RevId: 513176533
2023-03-01 18:02:43 +00:00
andrewlewis
3634e552e6 Don't log removed encoders
We shouldn't have this logging unless we really need it to debug
a specific problem, as it can be noisy (even at debug level).

PiperOrigin-RevId: 512904412
2023-03-01 17:58:46 +00:00
ibaker
78357e42d2 Remove Dackka integration from media3 gradle files
Reference docs are now generated by the standard Jetpack machinery, so there's no need for us to generate these docs ourselves.

PiperOrigin-RevId: 512898248
2023-03-01 17:54:47 +00:00
christosts
48047cf9e8 Minor change in ForwardingPlayer javadoc
#minor-release

PiperOrigin-RevId: 512897269
2023-03-01 17:50:47 +00:00
tonihei
13a86b3833 Update translations
#minor-release

PiperOrigin-RevId: 512890813
2023-03-01 17:46:46 +00:00
kimvde
128d8ff036 Handle multiple sequences in a Composition
This lays the groundwork for full multi-asset, and more particularly for
adding looping background audio.

PiperOrigin-RevId: 512887888
2023-03-01 17:42:50 +00:00
tonihei
4cf7d3c7ac Ensure getPlaybackHeadPosition isn't called if not needed
Once the value returned from AudioTimestampPoller advances, we
only need getPlaybackHeadPosition to sample sync params and
verify the returned timestamp. Both of these happen less often
and we can avoid calling getPlaybackHeadPosition if we don't
actually need it.

PiperOrigin-RevId: 512882170
2023-03-01 17:38:51 +00:00
andrewlewis
05d3652443 Increase GL release timeout to 500 ms
Based on 1000 test runs an emulator, with the current timeout releasing
fails (even with no custom effects) about one percent of the time.
Releasing normally completes in about 30 ms but occasionally
`eglTerminate` took up to 200 ms (and even releasing an effect
took up to 80 ms in one case).

With the new timeout of 500 ms, we still catch stuck effects reasonably
quickly but the number of flaky test failures should be less than one in
ten thousand.

PiperOrigin-RevId: 512690715
2023-03-01 17:34:49 +00:00
bachinger
28545c6673 Add FakeMultiPeriodLiveTimeline and test case
This timeline will be used in unit test cases of follow-up
CLs. It basically can be used to emulate the timeline created by a
multi-period live media source when the real time advances.

PiperOrigin-RevId: 512665552
2023-03-01 17:30:52 +00:00
tofunmi
f2c06fff2b Create DataSourceBitmapLoader
PiperOrigin-RevId: 512659747
2023-03-01 17:26:55 +00:00
tonihei
d363977156 Fix some playback parameter signalling problems.
Playback parameter signalling can be quite complex because
 (a) the renderer clock often has a delay before it realizes
     that it doesn't support a previously set speed and
 (b) the speed set on media clock sometimes intentionally
     differs from the one surfaced to the user, e.g. during
     live speed adjustment or when overriding ad playback
     speed to 1.0f.

This change fixes two problems related to this signalling:
 1. When resetting the media clock speed at a period transition,
    we don't currently tell the renderers that this happened.
 2. When a delayed speed change update from the media clock is
    pending and the renderer for this media clock is disabled
    before the change can be handled, the pending update becomes
    stale but it still applied later and overrides any other valid
    speed set in the meantime.

Both edge cases are also covered by extended or new player tests.

Issue: google/ExoPlayer#10882

#minor-release

PiperOrigin-RevId: 512658918
2023-03-01 17:23:01 +00:00
tonihei
38639e5a5f Ensure output format is updated in sync with stream changes.
MediaCodecRenderer currently has two independent paths to trigger
events at stream changes:
 1. Detection of the last output buffer of the old stream to trigger
    onProcessedStreamChange and setting the new output stream offset.
 2. Detection of the first input buffer of the new stream to trigger
    onOutputFormatChanged.
Both events are identical for most media. However, there are two
problematic cases:
  A. (1) happens after (2). This may happen if the declared media
     duration is shorter than the actual last sample timestamp.
  B. (2) is too late and there are output samples between (1) and (2).
     This can happen if the new media outputs samples with a timestamp
     less than the first input timestamp.

This can be made more robust by:
 - Keeping a separate formatQueue for each stream to avoid case A.
 - Force outputting the first format after a stream change to
   avoid case B.

Issue: google/ExoPlayer#8594

#minor-release

PiperOrigin-RevId: 512586838
(cherry picked from commit a02c8d855c)
2023-02-28 18:05:48 +00:00
tonihei
095a0b5e6e Add workaround for wrong PerformancePoints on some devices.
Some devices were reported to have wrong PerformancePoint sets
that cause 60 fps to be marked as unsupported even though they
are supported.

Issue: google/ExoPlayer#10898

#minor-release

PiperOrigin-RevId: 512580395
(cherry picked from commit 04f0cc949f)
2023-02-28 18:05:47 +00:00
tonihei
f5c696729c Correctly update output info if previous stream has been fully rendered
The output info for a new stream is marked pending until the last
sample of the previous stream has been processed. However, this fails
if the previous stream has already been fully processed. We need to
detect this case explicitly to avoid signalling the output change one
sample too late.

#minor-release

PiperOrigin-RevId: 512572854
(cherry picked from commit 39935d7f12)
2023-02-28 18:05:47 +00:00
tonihei
5862fe4d8c Use more realistic time values for MediaCodecVideoRendererTest
This test became flaky after cbb6878f9f because some of the
unrealistic frame times ended up on the same release time.

Using realistic numbers avoids the flakiness.

PiperOrigin-RevId: 512566469
(cherry picked from commit 13700e0aec)
2023-02-28 18:05:47 +00:00
tonihei
29eeca3359 Do not specify export flags for protected system broadcasts.
Protected system broadcasts should not specify the export flag.
Marking them as NOT_EXPORTED breaks sticky broadcasts in some
cases.

Issue: google/ExoPlayer#10970

#minor-release

PiperOrigin-RevId: 512020154
(cherry picked from commit 34b9824201)
2023-02-28 18:05:47 +00:00
andrewlewis
342ae31a00 Add missing variant to package transformations
PiperOrigin-RevId: 512002735
(cherry picked from commit 1ef70cd6a0)
2023-02-28 18:05:41 +00:00
tonihei
629e1c515f Use ArrayDeque for pending output stream changes.
The current logic uses manual array operations to keep track of pending
changes. Modernize this code by using an ArrayDeque and a data class.
This also allows to extend the output stream information in the future.

This also fixes a bug where a position reset accidentally assigns a pending
stream offset instead of keeping the current one.

PiperOrigin-RevId: 511787571
(cherry picked from commit 4e0babdcd1)
2023-02-28 18:04:42 +00:00
tonihei
d0c07691d3 Indicate that SCTE-35 metadata in not supported with HLS
Issue: google/ExoPlayer#10992

#minor-release

PiperOrigin-RevId: 510988140
(cherry picked from commit 57a638aa88)
2023-02-28 18:04:03 +00:00
christosts
5f91e45f3c Skip rendering multiple frames on the same vsync
When rendering frames at a rate higher than the screen refresh rate,
e.g. playing at 8x, the player is releasing multiple frames at the same
release time (nanos) which are then dropped by the platform. The output
buffers are available later and as a result MediaCodec cannot keep up
decoding fast enough.

This change skips releasing multiple video frames on the same vsync
period and proactivelly drops the frame. The frame is counted as skipped
rather than dropped to differentiate with frames dropped due to slow
decoding.

PiperOrigin-RevId: 510964976
(cherry picked from commit cbb6878f9f)
2023-02-28 18:04:03 +00:00