Video renderers assume that the player position is advancing linearly while in
the started state. MediaCodecVideoRenderer schedules frames for rendering in the
future in the expectation that the player position is advancing.
This assumption is not currently true when using a position from the AudioTrack:
the player position can be fixed for (in the worst case) up to about 100 ms
before it starts increasing. This leads to an effect where the first frame is
rendered then a few other frames are rendered, then there's a pause before
frames start being rendered smoothly.
Work around this issue by checking whether the position has started advancing
before scheduling frames to be rendered in the future.
It might be preferable to make the audio renderer only become ready when its
timestamp can start advancing, but this is likely to be complicated.
Issue: #3841
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190937429
In audio processors an audio frame consists of a sample (which is 2 bytes for
16-bit PCM) for each channel. Sonic used "sample" to refer to this.
We've already diverged from the original source for Sonic quite a bit (deleting
code and making stylistic changes) and there haven't been upstream changes so
far, so it seems fine to start making more substantial changes here.
There should be no behavior changes here.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190916793
In Gradle 4.4, it is a bug to resolve a configuration before the lint task is
created ([see [] Therefore, to upgrade
gradle version, we need to change the "generateJavadoc" task to remove using
files() call during initialization phase, but change move this to doFirst()
instead.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190634090
Currently, we are treating all codecs starting with "mp4a" as AAC. However,
some codec strings starting with "mp4a" are not AAC format, as should be
treated differently.
GitHub: #3779
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=189163517
Use string concatenation for Metadata.Entry instances, and add
Util.formatInvariant for numerical formatting.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190915643
This adds two options to the ClippingMediaSource which allow proper clipping
of live streams:
1. The clipping stays fixed relative to already created media periods. That
means that playback actually progresses through the clipped media and
eventually reaches the end of the clipping. The window is also marked
as non-dynamic to let playback end in this case.
2. Allow to specify a clipping duration relative to the default position to
be able to specify the duration of live stream which is to be played.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190911049
*** Reason for rollback ***
b/76391022 was caused by a timestamp correction in StabilizableSimpleExoPlayer which will be fixed with this CL.
*** Original change description ***
Automated g4 rollback of changelist 189570277.
*** Reason for rollback ***
causes b/76391022, motion still playback in Photos is broken
*** Original change description ***
Used fixed time frame in clipping media period.
Currently, whenever the clipping is updated, we move the time frame of the
clipped period to start at 0. This causes problems when we are already playing
this period and the renderer position does no longer match the stream
positions.
This change keeps the time frame of the...
***
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190906020
- Ensure that no memory is used by audio processors that are always inactive, by
only allocating in flush() if active. If data was already allocated but a
processor becomes inactive we assume that the allocation may be needed in
future so do not remove it (e.g., in the case of ResamplingAudioProcessor).
- Make SilenceSkippingAudioProcessor set up its buffers in flush(), and clarify
that it is always necessary to call flush() if configure() returns true.
- Make reset() reset all state for all processors.
- Use @Nullable state or empty arrays for inactive audio processor buffers.
- Miscellaneous style/consistency cleanup.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190895783
A merge error in a previous change removed the drmSessionManager from
the player factory call.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190769364
In some situations, the timeline can't be specified because it is created
internally by the media source under test. If the test still needs to wait for
a timeline update, this change allows to do that by specifying an expected
timeline of null.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190768386
Doing that in the current order may result in cases where we have a player
instance but a null media source and thus the next call to initializePlayer
will fail.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190765633
This uses a simple threshold-based algorithm for classifying audio frames as
silent, and removes silences from input audio that last longer than a given
duration.
The plan is to expose this functionality via PlaybackParameters in a later
change.
Issue: #2635
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190737027
They don't really belong there; it was basically a convenience
thing where one of the arguments to the track selector was being
packaged up in the result to avoid having to hold a separate
reference to it.
This change is being made as a precursor to a subsequent change
where creating the TrackSelectorResult will move from
MappingTrackSelector to DefaultTrackSelector. DefaultTrackSelector
doesn't currently have access to the un-mapped tracks, and so is
unable to create a TrackSelectorResult. It's IMO preferable to
keep it that way rather than passing them down just so they can
be included in the result.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190640594
In Gradle 4.4, it is a bug to resolve a configuration before the lint task is
created ([see [] Therefore, to upgrade
gradle version, we need to change the "generateJavadoc" task to remove using
files() call during initialization phase, but change move this to doFirst()
instead.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190634090
*** Reason for rollback ***
causes b/76391022, motion still playback in Photos is broken
*** Original change description ***
Used fixed time frame in clipping media period.
Currently, whenever the clipping is updated, we move the time frame of the
clipped period to start at 0. This causes problems when we are already playing
this period and the renderer position does no longer match the stream
positions.
This change keeps the time frame of the clipped media period as it is and
instead specifies the offset of the window in the period.
***
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190628272
Erroneous condition:
===================
If the track selection contains a subset of the available variants in the
master playlist, but only the selected variants return 404, the playlist
tracker will never propagate the error.
Fix:
====
The Chunk source will propagate the playlist load error if no more
alternative playlists are available (because all are already blacklisted).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190624484
Currently, MediaPeriod states that continueLoading may be called
during preparation. Some implementations would throw an error if
this happened.
Also make MediaPeriod documentation clearer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190596870
If the AudioTimestamp was sampled before play() was called, it was incorrectly
returned to the caller for sanity-checking. Fix this behavior by dropping the
timestamp internally in the AudioTimestampPoller.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190584412
This change enables feeding decoders from the closest sync frame
before a specified seek position, where-as previously we'd
always feed decoders from the start of the chunk. This avoids
decoding and discarding many audio samples during each seek. The
same benefit also applies to video chunks containing more than
one key-frame.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190539547
This will allow SimpleExoPlayer to auto-register its own listener before the
drm session manager is used to set-up the renderers.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190478174
This adds callbacks for creating, releasing, and starting to read from media
periods.
Such events allow listeners to keep a list of active media periods. This is
useful to determine when no further events for a certain media period are
expected. It also allows listeners to associate renderer events unambigiously
with a reading media period.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190462717
And in ContentMetadata javadoc emphasize that it's a snapshot.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=190461436