Commit graph

8641 commits

Author SHA1 Message Date
hschlueter
107ffdf56f Add emulator video transcoding test that counts frames.
This test tests that all frames are processed when transcoding
video to a different sample MIME type (and that the transformation
completes successfully).

PiperOrigin-RevId: 424896014
2022-02-01 14:18:58 +00:00
tonihei
022b5144b1 Add getRenderer method to ExoPlayer.
This allows access to custom renderers, for example to send messages
or to access custom fields and methods.

PiperOrigin-RevId: 424878963
2022-02-01 14:11:36 +00:00
claincly
9151103968 Rollback of 651fa0dbb7
*** Original commit ***

Apply suggested AVC profile depending on the API version.

***

PiperOrigin-RevId: 424856077
2022-01-28 14:43:54 +00:00
tonihei
174d99481a Remove opt-out for suppressing wrong thread usage error.
Enforcing the correct thread usage has been enabled since 2.13.0.
Opting-out of this enforement is dangerous as it can hide very hard
to debug bugs.

PiperOrigin-RevId: 424815808
2022-01-28 14:33:43 +00:00
kimvde
1402bd6f54 Fix NPE in Transformer.getProgress()
If muxerWrapper.release() was throwing an exception, the progress state
was not updated and getProgress could throw an exception.

#minor-release

PiperOrigin-RevId: 424696783
2022-01-28 10:19:00 +00:00
andrewlewis
6e305936b8 Remove FOREGROUND_SERVICE permission
This shouldn't be required for transformer instrumentation tests, as they don't use a foreground service.

PiperOrigin-RevId: 424654463
2022-01-28 10:15:17 +00:00
kimvde
98a997295e Make sure that onTransformationError is called once
The second error is probably a consequence of the first one.

#minor-release

PiperOrigin-RevId: 424619944
2022-01-28 10:11:58 +00:00
kimvde
8ec18086f2 Fix transformer stuck forever
When the decoder output buffer was partially read, a call to
Codec.getOutputBuffer() was returning the same buffer, but with the
position reset to 0. The reason was that, in
Codec.maybeDequeueAndSetOutputBuffer(), mediaCodec.getOutputBuffer()
was called with the same buffer index (L350 in old rev), even though
there was already a buffer available (outputBufferIndex >=0). This
change avoids calling mediaCodec.getOutputBuffer() if the previous
buffer has not been released.

#minor-release

PiperOrigin-RevId: 424612197
2022-01-28 10:08:36 +00:00
hschlueter
8123ef5d71 Take encoder resolution fallback into account in video sample pipeline.
If the encoder picks a fallback resolution the video pipeline needs
to take this into account when configuring the frameEditor and when
setting up the fallback TransformationRequest that's passed to the
fallbackListener.

PiperOrigin-RevId: 424611290
2022-01-28 10:04:49 +00:00
krocard
901a5a4845 Make audio track min buffer size configurable.
Move the code in its own class as DefaultAudioTrack
is getting very big. It also help for testability.

The new class is easily configurable and highly tested.
Manual test was used to catch any regression.

https://github.com/google/ExoPlayer/issues/8891

PiperOrigin-RevId: 424602011
2022-01-28 10:01:27 +00:00
tonihei
777246d9dc Remove unneccessary nullability.
AnalyticsCollector can't be null when passed into ExoPlayerImplInternal,
so there is no need to pass it around as nullable.

PiperOrigin-RevId: 424594031
2022-01-28 09:58:06 +00:00
tonihei
145e923dce Fix flakiness in DefaultPlaybackSessionManagerTest
Two of the sessions are finished at the same time in the test
and the order of the corresponding callbacks depends on the randomly
generated session string and the order these strings are stored in a
HashSet.

Update test to assert both callbacks are called and they contain the
right arguments, but don't assert on the order of these two callbacks.

PiperOrigin-RevId: 424548819
2022-01-28 09:54:32 +00:00
tonihei
73d9728f6a Enforce unit speed for ad playback
Ad playback shouldn't be affected by manual speed adjustments set
by the user. This change enforces unit speed for ad playback.

Issue: google/ExoPlayer#9018
PiperOrigin-RevId: 424546258
2022-01-28 09:51:09 +00:00
ibaker
be43ac7563 Propagate error policy to ProgressiveMediaSource used for subtitles
This only affects playbacks using the
experimentalUseProgressiveMediaSourceForSubtitles method.

Also update the SingleSampleMediaSource instantiation to be more
similar, to try and highlight differences like this in future.

PiperOrigin-RevId: 424545980
2022-01-28 09:47:36 +00:00
tonihei
8c685aba4b Move playback speed update at period transitions to reading period.
In some cases we need to update the PlaybackParameters at period
boundaries, for example when switching from live to VOD and live
playback speed adjustment was still active at the point of switching.

Currently, we send the update when the playing MediaPeriod changes in
EPII, which is slightly too late because the new speed gets only applied
after the entire existing AudioTrack buffer has been played out.

We can time the update slightly better by updating the values at the
point where we change the reading period. This makes the update slightly
too early because it also applies to all samples currently in the
decoder. But generally, this is a lot better because the time spent
in the decoder is likely to be considerably lower than the duration of
the AudioTrack buffer.

Note that this change isn't perfectly aligning to the period boundary,
but reduces the number of samples with the wrong speed to a minimum.
If we are getting around to add additional code that allows updating
the speed at exactly the boundary, it also needs to be triggered from
the reading period update, so the new code location is also helpful in
the future.

Issue: google/ExoPlayer#9018
PiperOrigin-RevId: 424540551
2022-01-28 09:44:07 +00:00
olly
5d7641c6f1 Fix some lint warnings
PiperOrigin-RevId: 424383900
2022-01-28 09:37:06 +00:00
Andrew Lewis
e58ffc0682 Merge pull request #9893 from moneytoo:mkv-vtt
PiperOrigin-RevId: 424382031
2022-01-28 09:33:35 +00:00
Andrew Lewis
db7b2e55c0 Merge pull request #9865 from aureliendrouet:unused-param-chunk-extractor-factory
PiperOrigin-RevId: 424379489
2022-01-28 09:29:51 +00:00
Andrew Lewis
fe7e5b8181 Merge pull request #9864 from OxygenCobalt:vorbis-comments
PiperOrigin-RevId: 424355325
2022-01-28 09:22:51 +00:00
claincly
651fa0dbb7 Apply suggested AVC profile depending on the API version.
PiperOrigin-RevId: 424322341
2022-01-28 09:19:29 +00:00
olly
aceacb05ca Fix spurious unsupported tracks toast in demo apps
PiperOrigin-RevId: 424062588
2022-01-25 20:05:06 +00:00
olly
abef4f4e14 Use translatable playback speed strings
Issue: google/ExoPlayer#9811
PiperOrigin-RevId: 423855051
2022-01-25 20:01:06 +00:00
olly
34102ee1e2 Update translations
Issue: google/ExoPlayer#9811
PiperOrigin-RevId: 423849421
2022-01-25 19:57:15 +00:00
kimvde
793a0993c5 Various nits in Transformer
PiperOrigin-RevId: 423822317
2022-01-25 19:53:21 +00:00
tonihei
caa0a09c2f Finish pending session if there is one before creating a new one.
PiperOrigin-RevId: 423819515
2022-01-25 19:45:46 +00:00
olly
6af74e7f0f Add missing AudioFormat encoding conversions
PiperOrigin-RevId: 423786422
2022-01-25 19:41:56 +00:00
kimvde
5e583d34ee Fix Javadoc formatting
#minor-release

PiperOrigin-RevId: 423314840
2022-01-25 19:37:38 +00:00
hschlueter
2f4ef89510 Delete old TODO.
This was resolved in 081700f72b where the
Video/AudioSamplePipeline call this method before calling
the FallbackListener.

PiperOrigin-RevId: 423284258
2022-01-25 19:33:44 +00:00
claincly
cd076f7622 Ignore invalid RTP-Info header value.
Issue: google/ExoPlayer#9619

(and a few other GH issues related to invalid RTP-Info header)

PiperOrigin-RevId: 423283017
2022-01-25 19:29:51 +00:00
claincly
5a60db3328 Handle when RTSP track timing is not available.
Issue: google/ExoPlayer#9775

We got a few issues for this on GH already. Some RTSP servers do not provide
track timing in PLAY responses, or the timings are invalid.

Missing timing means the RTSP stream is not seekable. Added method to
1. Update the timeline that seek is not possible
2. Report read discontinuity so that playback can start from the beginning.

PiperOrigin-RevId: 423281439
2022-01-25 19:26:04 +00:00
hschlueter
4cf9106581 Transcode to a muxer-supported sample MIME type.
If the output sample MIME type is inferred from the input
but is not supported by the muxer, we fallback to transcoding
to a supported sample MIME type.
The audio and video renderers need to make sure not to select the PassthroughSamplePipeline for this case. Which sample MIME type
to choose is decided by the EncoderFactory.

PiperOrigin-RevId: 423272812
2022-01-25 19:22:23 +00:00
bachinger
e2cf266b1c Set the next live ad in ad group to avoid rebuffering
To avoid the `MediaPeriodQueue`to discard the reading period, we can set the next ad of an ad group early and then (possibly) only change it's duration once we receive the actual duration. This way we avoid a rebuffering as a result of the reading period being discarded.

The change also takes care to properly set ad break and their durations when we join the live stream at the moment when an ad is playing.

PiperOrigin-RevId: 423163467
2022-01-25 19:17:42 +00:00
tonihei
7c60e67f84 End finished sessions on timeline updates.
We currently only end sessions on Timeline updates if the associated media
is no longer in the playlist. But we should also end all sessions that are
finished as a result of the timeline update (similar to how this is done for
discontinuities). This issue was introduced by 394ab7bcfd

PiperOrigin-RevId: 423075855
2022-01-25 19:13:49 +00:00
tonihei
301fcd649a Ensure network transfers are associated with the right session
We currently don't check which session is causing a network transfer
(it could be a preloaded item in a playlist). To clearly associate
network transfer data with sessions, we need to keep track of
transferred bytes and transfer time per session.

PiperOrigin-RevId: 422867845
2022-01-25 19:05:44 +00:00
hschlueter
081700f72b Communicate sample MIME type changes to FallbackListener.
We may fall back to a different sample MIME type because
a) the sample MIME type inferred from the input is not supported
by the muxer or b) no encoders are available for the the requested
sample MIME type.

PiperOrigin-RevId: 422849036
2022-01-25 19:01:49 +00:00
christosts
4502a1ee63 Extend support for audio spatialization in MediaCodecAudioRenderer
With this change, the MediaCodecAudioRenderer configures the MediaCodec
to not downmix audio only if spatialization can be applied. This way,
decoders who are downmixing by default are left doing so when
spatialization cannot be applied. The renderer re-initializes the codec
when spatialization properties change mid-playback.

PiperOrigin-RevId: 422822952
2022-01-25 18:57:50 +00:00
hschlueter
6212e6c8ee Make defensive copies of the transformation matrix.
TransformationRequest is otherwise immutable, so if we modify the
transformationMatrix in place (done before this cl) this may cause
confusing behaviour for apps when they reuse a TransformationRequest.

PiperOrigin-RevId: 422822916
2022-01-25 18:53:48 +00:00
tonihei
b2ecce4d07 Reset some state values when a session is finished.
Currently, we keep the values for dropped/played frames, audio underruns
and current formats from the last session, causing double reporting
of counters and wrong track change reasons for formats. All these
values should be reset when the active session is finished, so that the
new session can start from scratch.

PiperOrigin-RevId: 422798406
2022-01-25 18:49:27 +00:00
tonihei
d15350ab01 Avoid ending session early if an unrelated other session is finished
Currently, we always end the current session if onSessionFinished is
called. However, the finished session may not be the active one (for
example when discarding prebuffered items in a playlist). To make this
code more robust, we can save the active session id explicitly and only
end this session.

PiperOrigin-RevId: 422788542
2022-01-25 18:45:28 +00:00
hschlueter
dbc4dcf0f2 Merge muxer and encoder output format error codes.
After implementing fallback, it won't always be possible to
differentiate between muxer and encoder as the cause of an output
format not being supported.

PiperOrigin-RevId: 422780443
2022-01-25 18:41:34 +00:00
claincly
9942d42f69 Support encoding square videos.
PiperOrigin-RevId: 422585277
2022-01-25 18:33:06 +00:00
claincly
e0aa61681d Throw NPE instead of IAE when sampleMimeType is null.
PiperOrigin-RevId: 422550627
2022-01-25 18:29:00 +00:00
bachinger
7ba79cfa42 Split ad playback state and recalculate window and period duriations
This change enables the ImaServerSideAdInsertionMediaSource for multi-period content. The global ad playback state is split into pieces for each period and the window and period durations are calculated accordingly in the ServerSideAdInsertionTimeline.

For multi-period live content (DASH), the ad playback state is not set with this change. This is deferred to a follow up CL. Splitting is very tricky. For each timeline update the windowStartTimeUs may vary for some milliseconds relative to the start of the period.positionInWindowUs. This requires to either introduce some fuzzy logic or to choose a different approach than for multi-period VOD. Because mistakes within the playback states of subsequent moving live windows produces crashes, it seems sensible to defer this for now and keep this change in a separate future CL (unblock further work, easy to rollback).

In this state, live DASH stream are working and the ad overlay is placed over the player correctly bu the SDK. However, ads are not reported by the position discontinuity event. Similarly, the player.isPlayingAd() does never returns true when a ad period is playing.

PiperOrigin-RevId: 422539770
2022-01-25 18:23:00 +00:00
claincly
9b3483ec5f Use encoder output format for configuring the Encoder.
This CL implements fixing the input format to the encoder spec. Fixed
parameters include:
- MIME type
- Profile & level
- Resolution
- frame rate, and
- bitrate

PiperOrigin-RevId: 422513738
2022-01-25 18:14:41 +00:00
aquilescanta
25a362ec67 Remove last SampleQueue.release allocation
By making AllocationNode fields non-final

PiperOrigin-RevId: 422403816
2022-01-25 18:10:29 +00:00
huangdarwin
bb0a641555 Transformer GL: Add image diff in test.
PiperOrigin-RevId: 422392959
2022-01-25 18:06:21 +00:00
huangdarwin
41be22ef65 Transformer GL: Add pixel tests for transformation.
Rotation, translation, and scale tests on a normal video.

PiperOrigin-RevId: 422383176
2022-01-25 18:02:30 +00:00
tonihei
789b574be1 Use Util method to infer stream type instead of just mime type.
The MediaMetricsListener currently just looks at the mime type and
doesn't use the inference based on the URI if no mime type is set.

Also change default type to OTHER to avoid classifying streams from
URLs without clear file extension as progressive.

PiperOrigin-RevId: 422373381
2022-01-25 17:57:54 +00:00
Marcel Dopita
6b3187ccf1 Support MKV embedded WebVTT captions 2022-01-24 18:12:43 +01:00
OxygenCobalt
f6bee303e7
Swap inheritance hierarchy between vorbis types
Instead of having types in flac inherit types in vorbis, make types in
vorbis inherit types in flac. This is a bit of a hack and somewhat
messy, but it retains backwards compatibility.
2022-01-18 06:18:58 -07:00
OxygenCobalt
9c1018679a
Fix nitpicks
Fix some more nitpicks I encountered.
2022-01-17 15:10:25 -07:00
OxygenCobalt
a4682cbff5
Fix FlacStreamMetadata compile failure
Comment concatenation was accidentally not added previously, which
results in a testing failure.
2022-01-17 10:34:49 -07:00
OxygenCobalt
fc08f866ce
Rework vorbis comment parsing
Collapse the two variations of `VorbisUtil.buildMetadata` into a single
method called `VorbisUtil.parseVorbisComments` that only takes a list
of vorbis strings, compared to previously where it would take strings
and picture frame instance. Any code that relied on the old signature
now either concatenates picture frames and vorbis comments or copies
vorbis comments into an existing metadata instance.
2022-01-17 09:59:20 -07:00
OxygenCobalt
7a88829ea6
Misc cleanup
Group up some other minor changes with the vorbis comment utils.
2022-01-17 09:17:45 -07:00
OxygenCobalt
b9191615ee
Rework OPUS comment header parsing
Simplify how the comment header is parsed and eliminate a few possible
bugs in the process, such as:
- Metadata being overwritten directly by the comments header.
- The packet being rewound to 0 if it cannot find a comment header,
which might result in the cursor being moved to a bad position.
2022-01-17 09:09:01 -07:00
OxygenCobalt
9597ecbb31
Clean up VorbisUtil
Try to eliminate some nitpicks regarding VorbisUtil.
2022-01-17 08:04:34 -07:00
OxygenCobalt
0ea8567b6b
Superclass deprecated vorbis metadata types
In the old `flac` module, superclass the deprecated types under the
moved types in the `vorbis` module. This ensures backwards compat
with existing library users.
2022-01-17 07:54:39 -07:00
tonihei
b3981be8b9 Limit adaptive selections to same level of decoder support
Adaptive video and audio selections will be limited to formats with
the same level of DecoderSupport and HardwareAccelatationSupport, unless
specifically allowed by new flags.

If different levels of decoder support are available, prefer primary
over fallback decoders and hardware-accelerated over software decoders
(in this order). For video, also prefer more efficient codecs, if both
are supported by hardware-accelerated primary decoders.

Issue: google/ExoPlayer#4835
Issue: google/ExoPlayer#9565
PiperOrigin-RevId: 422345048
2022-01-17 14:40:57 +00:00
hschlueter
4145273bc4 Revise TransformationRequest MIME type validation.
PiperOrigin-RevId: 422333929
2022-01-17 14:36:18 +00:00
hschlueter
2e7ca0b7b8 Add javadoc to TransformationRequest's public fields.
PiperOrigin-RevId: 422325859
2022-01-17 14:31:40 +00:00
tonihei
327ec97e58 Reorder adaptive video track preferences.
This change moves the video track selection to the generic
selection method introcuced for audio and text. This ensures
we can apply the same criteria for fixed and adaptive video
track selections. Implicitly, this reorders the preferences
for adaptive tracks to give non-quality preferences (like
preferred MIME type or preferred role flags) a higher priority
than number of tracks in the selection.

Issue: google/ExoPlayer#9519
PiperOrigin-RevId: 422310902
2022-01-17 14:20:21 +00:00
tonihei
3f47da1fd6 Reset readingPositionUs in BaseRenderer.enable
This does currently only happen by chance in replaceStream (called from
enable) if the stream previosly played read until C.TIME_END_OF_SOURCE.

enable already makes all changes done in resetPosition (except resetting
the reading position), so it's less error-prone and makes the intention
clearer if the same code is called from both enable and resetPosition.

The effect of this bug was quite limited because the numerical value
of readingPositionUs was only relevant for periods with changing
durations and server-side inserted ads.

PiperOrigin-RevId: 422300690
2022-01-17 14:15:48 +00:00
olly
d0c13733e4 Don't sample VSYNC when not started
PiperOrigin-RevId: 421855453
2022-01-17 14:11:04 +00:00
bachinger
c4a2579b43 Inherit parent properties for manifests with dvb profile only
Issue: google/ExoPlayer#9856
PiperOrigin-RevId: 421842579
2022-01-17 14:06:06 +00:00
hschlueter
f747fed874 Add FallbackListener.
The app will be notified about fallback using a callback on
Transformer.Listener. Fallback may be applied separately for
the audio and video options, so an intermediate internal
FallbackListener is needed to accumulate and merge the track-specific
changes to the TransformationRequest.

PiperOrigin-RevId: 421839991
2022-01-17 14:01:10 +00:00
tonihei
d2d6227188 De-duplicate track selection code.
We currently run (almost) the same code for all track types.
De-duplicate this by using a single method that takes functional
interfaces for track-type dependent logic.

This has the benefit that all track-type dependent logic is
contained within their subclasses and the generic logic doesn't
need to make any assumption about the eligibility of tracks for
selection or adaptation, and doesn't need to access Parameters.

Make this change for audio and text only for now. Video can
be updated in a subsequent change.

PiperOrigin-RevId: 421811411
2022-01-17 13:51:18 +00:00
Aurelien Drouet
7777ebd173 fix: unused parameter chunkExtractorFactory 2022-01-17 10:27:29 +09:00
OxygenCobalt
49967483f6
Merge remote-tracking branch 'origin/dev-v2' into vorbis-comments
Line up this branch with the dev branch instead of the release branch.
2022-01-15 19:05:49 -07:00
huangdarwin
f216fa2042 Transformer GL: Clarify variables and comments.
Simplifying and clarifying variables, and adding comments.

Tested by confirming demo-gl and demo-transformer both
correctly display videos

PiperOrigin-RevId: 421792079
2022-01-14 15:34:09 +00:00
ibaker
a01ead0283 Fix deprecation suppression in RendererCapabilities
This string is case-sensitive.

PiperOrigin-RevId: 421781437
2022-01-14 15:26:18 +00:00
ibaker
66c272c9b0 Reword javadoc of TracksInfo.isTypeSupportedOrEmpty
The existing wording would be correct if prefixed with
"Returns false if [...]", but it seems confusing to a document a boolean
method in terms the condition it returns false - so I reworded it in
terms of when it returns true.

#minor-release

PiperOrigin-RevId: 421682584
2022-01-14 15:22:26 +00:00
ibaker
a36e0cf255 Promote MappedTrackInfo.RendererSupport IntDef to public
This is referred to from the public API surface, so it should also be
public: https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/trackselection/MappingTrackSelector.MappedTrackInfo.html#getRendererSupport(int)

#minor-release

PiperOrigin-RevId: 421578232
2022-01-14 15:18:26 +00:00
hschlueter
80851807f2 Use specific error code for exceptions during encoding/decoding.
After this change exceptions throw by MediaCodec during
encoding/decoding will result in TransformationExceptions with
ERROR_CODE_ENCODING_FAILED/ERROR_CODE_DECODING_FAILED.
Before this change ERROR_CODE_FAILED_RUNTIME_CHECK was used.

PiperOrigin-RevId: 421560396
2022-01-14 15:09:52 +00:00
huangdarwin
05924eaa52 Transformer GL: Add pixel test instructions for physical devices
Expected images are taken on emulators, so a larger acceptable
difference from expected images must be accepted on physical devices.

PiperOrigin-RevId: 421543441
2022-01-14 15:06:10 +00:00
aquilescanta
8d81bd58d8 Remove Allocator.release(Allocation[]) and references
PiperOrigin-RevId: 421530365
2022-01-14 15:02:22 +00:00
hschlueter
755df46a6b Remove Transformer-specific things from MediaCodecAdapter.
PiperOrigin-RevId: 421514944
2022-01-14 14:58:40 +00:00
tonihei
b09b8dc2ab Disable live speed adjustment where it has no benefit
Live speed adjustment is used for all live playback at the moment,
but has no user visible effect if the media is not played with low
latency. To avoid unnecessary adjustment during playback without
benefit, this change restricts the live speed adjustment to cases
where either the user requested a speed value in the MediaItem or the
media specifically defined a low-latency stream.

Issue: google/ExoPlayer#9329
PiperOrigin-RevId: 421514283
2022-01-14 14:54:49 +00:00
tonihei
b77204eb4d Update test relying on network type detection to run on all API levels.
This ensures we test the API level specific logic, in particular
around 5G-NSA detection.

Robolectric has a remaining bug that it doesn't support listening
to service state changes. Hence, we need to ignore some tests on
these API levels still until this is fixed.

PiperOrigin-RevId: 421505951
2022-01-14 14:50:58 +00:00
samrobinson
4647a747ca Uncomment line.
Accidentally commented out the Ignore annotation.

PiperOrigin-RevId: 421304369
2022-01-14 14:47:04 +00:00
samrobinson
d18c572d24 Add a Builder for TransformationResult.
PiperOrigin-RevId: 421278099
2022-01-14 14:43:10 +00:00
hschlueter
f8d84eec59 Allow multiple Transformer listeners to be registered.
Multiple listeners can be added to Transformer and its builder.
All or specific listeners can also be removed.

PiperOrigin-RevId: 421047650
2022-01-14 14:39:20 +00:00
hschlueter
bf32ae50d7 Remove MediaCodecAdapter dependency from Transformer.
Codec and its factories can use MediaCodec directly as for API >= 21,
the SynchronousMediaCodecAdapter methods used in Codec just correspond
to a single MediaCodec call each so there is no reason to have another
wrapping layer.

PiperOrigin-RevId: 421041177
2022-01-14 14:35:37 +00:00
hschlueter
a93e8cc620 Update Muxer exception javadoc to match MuxerWrapper.
PiperOrigin-RevId: 421039869
2022-01-14 14:31:41 +00:00
hschlueter
6888a791f0 Add error code and exception type for muxing failures.
Exceptions thrown by MediaMuxer are converted MuxerExceptions
and later to TransformationExceptions with ERROR_CODE_MUXING_FAILED.

PiperOrigin-RevId: 421033721
2022-01-14 14:27:51 +00:00
tonihei
607ef989fb Fix decoder fallback logic for Dolby Atmos and Dolby Vision.
The media codec renderers have fallback logic in getDecoderInfos
to assume that E-AC3 decoders can handle the 2D version of E-AC3-JOC and
that H264/H265 decoders can handle some base layer of Dolby Vision
content. Both fallbacks are useful if there is no decoder for the
enhanced Dolby formats.

Both fallbacks are not applied during track selection at the moment
because the separate MediaCodecInfo.isCodecSupported method verifies
that the mime type corresponding to format.codecs is the same as the
decoder mime type (which isn't true for the fallback case).

To fix the fallback logic, we can just completely remove this additional
check because it's not needed in the context of this method that is only
called after we already established that the decoder can handle the
format.sampleMimeType.

In addition, we need to map the Dolby Vision profiles to the equivalent
H264/H265 profile to make the codec profile comparison sensible again.

PiperOrigin-RevId: 420959104
2022-01-14 14:20:08 +00:00
aquilescanta
c3b470f308 Remove most allocations in SampleQueue.release
SampleQueues may be released in the context of a finally block
after an out of memory error. Allocating in that scenario can
throw yet a new OutOfMemoryError. By safely releasing SampleQueue
memory, we increase the possibility of handling the error
gracefully.

PiperOrigin-RevId: 420859022
2022-01-14 14:16:26 +00:00
olly
8c89c9c688 Require playback to be stuck for a minimum period before failing
PiperOrigin-RevId: 420738165
2022-01-14 14:12:26 +00:00
ibaker
15dc86382f Remove setTag from (Ss|Hls|Dash)MediaSource.Factory
This method has been deprecated since 2.12.0 ([commit](d1bbd3507a)).

Also remove
DashMediaSource.Factory#setLivePresentationDelayMs(long, boolean), this
method has been deprecated since 2.13.0 ([commit](41b58d503a)).

PiperOrigin-RevId: 420719877
2022-01-10 13:00:58 +00:00
ibaker
915f091ebd Remove 'styled' from styledPlayerControlView field name
This class is already called StyledPlayerControlViewLayoutManager, it
seems unecessary to repeate the 'styled' word again in this context.

PiperOrigin-RevId: 420711161
2022-01-10 12:57:27 +00:00
ibaker
103b170a56 Rename some references from PlayerView to LegacyPlayerView
These were missed in 46ab94bd41

These references will be re-written to PlayerView when exporting to
exoplayer2, so this commit results in some small reformatting changes.

Also fix a reference to LegacyPlayerControlView that should be
StyledPlayerControlView.

PiperOrigin-RevId: 420707706
2022-01-10 12:53:59 +00:00
andrewlewis
0af7f5c287 Fix spherical scene rendering
The draw method was disabling vertex attrib arrays but not re-enabling them. Remove the call to disable the vertex attrib arrays so that then remain enabled after the program is created.

Manually verified by setting the surface type to spherical in the demo app and playing a spherical sample video.

Issue: google/ExoPlayer#9782
PiperOrigin-RevId: 420707503
2022-01-10 12:49:46 +00:00
ibaker
93af4ad4a7 Add tests for DefaultTrackSelector handling of forced & default tracks
Issue: google/ExoPlayer#9797
PiperOrigin-RevId: 420707176
2022-01-10 12:46:08 +00:00
claincly
d59cfb736a Replace static method with a static field.
PiperOrigin-RevId: 420307694
2022-01-10 12:42:34 +00:00
OxygenCobalt
29d978fdd4
Cleanup VorbisUtil
Slightly cleanup VorbisUtil.
2022-01-09 18:52:54 -07:00
OxygenCobalt
90b3056820
Refactor changes
Refactor the overall module to place the unified vorbis tags into a
single package called `vorbis`. Also re-intoduce the vorbis tags
in their original `flac` module, but deprecate them.
2022-01-09 16:16:20 -07:00
OxygenCobalt
435e7d5a81
Add opus metadata parsing
Add metadata parsing for the Opus format.
2022-01-09 15:54:24 -07:00
OxygenCobalt
60df845d4a
Fix vorbis tests
The vorbis tests did not expect metadata normally. Now they do.
2022-01-09 11:52:33 -07:00
OxygenCobalt
d7a40679de
Refactor vorbis metadata parsing into xiph
Move all picture and vorbis frame parsing into a new xiph module. This
commit also adds cover frame parsing from vorbis comments as well.
2022-01-09 11:29:18 -07:00
OxygenCobalt
d6eae9ad5f
Add vorbis comment parsing to OggReader
Change how OggReader handles the CommentsHeader instance, enabling
VorbisComment tags to be parsed from it.
2022-01-09 10:50:04 -07:00
bachinger
bd52b19a85 Make EventSampleStream honour FLAG_PEEK and FLAG_OMIT_SAMPLE_DATA
#minor-release

PiperOrigin-RevId: 420289147
2022-01-07 16:57:38 +00:00