StyledPlayerControlView can't really be used on its own (like
PlayerControlView was used here), so we instead use the same
StyledPlayerView instance for both local and casted playback,
replacing the content with a cast icon while casting.
PiperOrigin-RevId: 410764338
The local tracks variable was used to assign the initial subtext
for the current track selection in the menu, but the new value
was only assigned after the subtext has been evaluated.
Assign the local variable first, so that the remaining accesses
the latest value.
Issue: google/ExoPlayer#9698
PiperOrigin-RevId: 410750396
We verified there is a race condition in the
AsynchronousMediaCodecAdapter when flushing the adapter
multiple times. The race condition results in calling MediaCodec.start()
and MediaCodec.flush() in parallel and that makes the MediaCodec
raise an exception.
This changes the default behavior to call MediaCodec.start() on the
same thread after MediaCodec.flush() to avoid the race condition.
#minor-release
PiperOrigin-RevId: 410509388
Populate ICY headers into MediaMetadata so that they can
propagate to the app via AnalyticsListener#onMediaMetadataChanged().
This change copies IcyHeaders.name into MediaMetadata.description
and IcyHeaders.genre into MediaMetadata.genre.
Note: MediaItem.metadata maintain their precedence and overwrite any
ICY headers parsed.
Issue: google/ExoPlayer#9677
PiperOrigin-RevId: 410495676
StyledPlayerControlView can't really be used on its own (like
PlayerControlView was used here), so we instead use the same
StyledPlayerView instance for both local and casted playback,
replacing the content with a cast icon while casting.
PiperOrigin-RevId: 410764338
In the near future, we will be able to specify which tests run on this
target explicitly, at which point this ignore will be removed.
PiperOrigin-RevId: 410758785
The local tracks variable was used to assign the initial subtext
for the current track selection in the menu, but the new value
was only assigned after the subtext has been evaluated.
Assign the local variable first, so that the remaining accesses
the latest value.
Issue: google/ExoPlayer#9698
PiperOrigin-RevId: 410750396
The `GlUtil` wrappers for attributes/uniforms allocate buffers that are passed into OpenGL, and it seems that the distorted output was caused by these buffers being garbage collected.
The issue was difficult to reproduce manually. Add a test that does repeated transcodes in a loop (marked `@Ignore` for now because it runs for a long time and requires network access so may be flaky) to make it easier to run many transcodes and look for inconsistent output. For now the consistency check is just based on the file size which is very likely to change if the actual video frames change.
Verified that the test fails before, and passes once the attributes and uniforms are stored in fields as in this CL.
PiperOrigin-RevId: 410581706
This change merges `TransformerMuxingVideoRenderer` and
`TransformerTranscodingVideoRenderer` into `TransformerVideoRenderer`.
Besides all features supported by `TransformerTranscodingVideoRenderer`
the new merged `TransformerVideoRenderer` also supports SEF slow motion
flatting without re-encoding like the `TransformerMuxingVideoRenderer`.
To do this, it uses a `SefSlowMotionVideoSampleTransformer` with
the `PassthroughPipeline`.
PiperOrigin-RevId: 410531478
This mime type is technically for the Muxer, and determines
the container used. In the context of the transformer, this can
be thought of more as a container mime type, to avoid confusion
with the video mime type and audio mime type.
Deprecates setOutputMimeType().
PiperOrigin-RevId: 410530707
Issue: google/ExoPlayer#9697
Before, the `MAX_SEQUENCE_NUMBER` is 65535, such that the logic to get the next
sequence number:
`previousSeqNumber + 1 % MAX_SEQUENCE_NUMBER`
yields 0 when `previousSeqNumber` is 65534. However, the next sequence number
should be 65535.
PiperOrigin-RevId: 410530098
We verified there is a race condition in the
AsynchronousMediaCodecAdapter when flushing the adapter
multiple times. The race condition results in calling MediaCodec.start()
and MediaCodec.flush() in parallel and that makes the MediaCodec
raise an exception.
This changes the default behavior to call MediaCodec.start() on the
same thread after MediaCodec.flush() to avoid the race condition.
#minor-release
PiperOrigin-RevId: 410509388
Populate ICY headers into MediaMetadata so that they can
propagate to the app via AnalyticsListener#onMediaMetadataChanged().
This change copies IcyHeaders.name into MediaMetadata.description
and IcyHeaders.genre into MediaMetadata.genre.
Note: MediaItem.metadata maintain their precedence and overwrite any
ICY headers parsed.
Issue: google/ExoPlayer#9677
#minor-release
PiperOrigin-RevId: 410495676
When selecting an explicit track or "Auto", we need to remove any
existing track type disabling. Otherwise the track override won't work.
Issue: google/ExoPlayer#9692
PiperOrigin-RevId: 410250313
When selecting an explicit track or "Auto", we need to remove any
existing track type disabling. Otherwise the track override won't work.
Issue: google/ExoPlayer#9692
PiperOrigin-RevId: 410250313
Simple, initial implementation to allow setResolution()
to set the output height, for downscaling/upscaling.
Per TODOs, follow-up CLs may change layering, add UI,
or allow querying decoders for more resolution options.
PiperOrigin-RevId: 410203343
We already parse essential and supplemental properties from the
Representation, but don't add them to our Representation class so that
they can be accessed by users.
Issue: google/ExoPlayer#9579
PiperOrigin-RevId: 409961990
The main point of the IDLE state is that the player is not holding
resources. Clarify this in the documentation of STATE_IDLE, prepare and
stop.
PiperOrigin-RevId: 409950785
We already parse essential and supplemental properties from the
Representation, but don't add them to our Representation class so that
they can be accessed by users.
Issue: google/ExoPlayer#9579
PiperOrigin-RevId: 409961990
The main point of the IDLE state is that the player is not holding
resources. Clarify this in the documentation of STATE_IDLE, prepare and
stop.
PiperOrigin-RevId: 409950785
The decoder writes to `OpenGlFrameEditor`'s input `Surface`
and the `OpenGlFrameEditor` writes to the encoder's input `Surface`.
PiperOrigin-RevId: 409931796
If the number of samples changes, the sizes will help us to verify whether they are just split differently or extra data was added.
PiperOrigin-RevId: 407346280