- 30 May, 2022 31 commits
-
-
Marc Baechinger committed
-
Gives a bit more information upon failures PiperOrigin-RevId: 451882968
aquilescanta committed -
PiperOrigin-RevId: 451875964
bachinger committed -
The classes were renamed to `PlaceholderXXX` in https://github.com/androidx/media/commit/33373d0d0a159ad9c9c3590c838098c4c1530910 #minor-release PiperOrigin-RevId: 451872006
ibaker committed -
This provides an (unstable) API for apps to broadcast session extras Bundle to all connected controllers and set the extras in the legacy session. Similar to the custom layout, the extras Bundle is not part of the Media3 session state. This means that when a Media3 controller connects to the session after the broadcast, the extras needs to be sent to that controller in `MediaSession.Callback.onPostConnect(MediaSession session, ControllerInfo controller)`. PiperOrigin-RevId: 451871731
bachinger committed -
Add bitrate check to the "can encode" criteria. PiperOrigin-RevId: 451868042
claincly committed -
PiperOrigin-RevId: 451859199
bachinger committed -
PiperOrigin-RevId: 451857459
bachinger committed -
This value only existed to allow setting media URLs from external sources (e.g. in a MediaController) so that a player can start playing this item. Now that we have MediaItem.RequestMetadata.mediaUrl we can remove this value from MediaMetadata because it's request metadata, not media metadata. PiperOrigin-RevId: 451857413
tonihei committed -
The MediaItemFiller is not flexible enough for most realworld usages because: - it doesn't allow asynchronous resolution of MediaItems (e.g. to look up URIs from a database) - it doesn't allow to batch updates for multiple items or do more advanced customizations (e.g. expanding a mediaId representing a playlist to multiple items). Both issues can be solved by passing in a list of items and returning a ListenableFuture. The callback itself can also move into MediaSession.Callback for consistency with the other callbacks. PiperOrigin-RevId: 451857319
tonihei committed -
The MockPlayer currently: - uses separate fields for single mediaItem vs multiple mediaItems - replaces all items on addMediaItem operations - does nothing on remove/move operations. Fix all of this by using a single field that replicates the player operations directly. Some tests also need to be updated to make them more realistic (for example only removing items from a playlist that have previously been added). PiperOrigin-RevId: 451857271
tonihei committed -
In some cases it's helpful to have access to the session (e.g. to get the PlayerWrapper) from within the PostSessionTask implementations. This change forwards the existing sessionImpl instance to all these callbacks. PiperOrigin-RevId: 451857191
tonihei committed -
These fields can be used to transport additional request properties when the requester doesn't know the details needed for the actual playback (i.e. the LocalConfiguration). PiperOrigin-RevId: 451857093
tonihei committed -
ExoPlayer applies a large time offset to buffers so that, if the input has negative timestamps, generally buffers seen by the decoders should have positive timestamps. Modify how the offset is handled in `Transformer` so that decoders and encoders generally see positive timestamps, by leaving the offset on samples when reading them in the base renderer (remove the code that removed the offset), and then removing the offset when muxing. Also update the frame processor chain and slow motion flattening code to retain the existing behavior after this change (these both need original media presentation timestamps) Tested via existing end-to-end tests and manually verified that the overlay frame processor shows the expected original media timestamps. Aside: we don't need the same logic as ExoPlayer to track stream offsets across the decoder yet, because we don't try to handle stream changes during playback in single asset editing. (There is an edge case of multi-period DASH that may not work but I doubt anyone will use that as input to `Transformer` before we change the code to handle multi-asset properly.) In future we should try to refactor interaction with the decoder to use the same code for Transformer and ExoPlayer. PiperOrigin-RevId: 451846055
andrewlewis committed -
PiperOrigin-RevId: 451831531
ibaker committed -
PiperOrigin-RevId: 451824740
bachinger committed -
PiperOrigin-RevId: 451428202
samrobinson committed -
Most devices won't support 8k decoding, so they'll skip this test entirely. As the video is quite short, this test shouldn't be any longer than the nearby, long-running 4k60 test. PiperOrigin-RevId: 451423368
huangdarwin committed -
PiperOrigin-RevId: 451410714
bachinger committed -
PiperOrigin-RevId: 451392021
samrobinson committed -
PiperOrigin-RevId: 451384408
samrobinson committed -
Unconditionally sleep for offload, if the audio buffer is full. Previously ExoPlayer would not sleep if the expected wake-up was in 2s. This was to prevent underrun if the wake-up was delayed. Experiments have shown that the wakup audio buffer is far more than 2s (around 1min). Additionally, the metric was incorrect because it measured both, AudioTrack + DSP. Finally, this metric was erroneous after a gapless transition, when the head position would reset to 0 and thus the computed delay until next wakeup was too large. PiperOrigin-RevId: 451383701
bachinger committed -
PiperOrigin-RevId: 451380267
hschlueter committed -
PiperOrigin-RevId: 451371681
hschlueter committed -
SSIM calculation requires the input and output dimensions to be identical. For devices that can't encode the input dimensions, skip SSIM calculations and log the cause. Only apply this on tests where the encoder may not support the input file dimensions. PiperOrigin-RevId: 451364904
huangdarwin committed -
Decode-only video frames (needed when the frame at / first frame after the clipping start is not a key frame) need to be decoded but not passed to the frame processor chain or encoder. The clipping start offset needs to be removed from the frame timestamps in the passthrough and video pipelines. There are no changes needed for this in the audio pipeline, as it doesn't use the input timestamps -- it uses its own timestamps derived from the buffer sizes instead. Also add demo option to try this out. #minor-release PiperOrigin-RevId: 451353609
hschlueter committed -
PiperOrigin-RevId: 451155897
bachinger committed -
There's no need to manually construct a 'default' DefaultDataSource.Factory instance, we can just pass the `Context` to `DefaultMediaSourceFactory` and let it construct the `DefaultDataSource.Factory` internally. PiperOrigin-RevId: 451155747
ibaker committed -
PiperOrigin-RevId: 451142799
hschlueter committed -
Also update names of implementations to match design doc. In follow-ups, SingleFrameGlTextureProcessor will become an abstract implementation of a new GlTextureProcessor interface. Texture processor makes sense as it processes OpenGL textures. The term frame processor will be used for something else in follow-ups. PiperOrigin-RevId: 451142085
hschlueter committed -
PiperOrigin-RevId: 451135097
ibaker committed
-
- 26 May, 2022 7 commits
-
-
* Rename (via deprecation) `MediaItem.DrmConfiguration.Builder#forceSessionsForAudioAndVideoTracks` to `setForceSessionsForAudioAndVideoTracks`. This is more consistent with existing 'force' method names both in this class and in `TrackSelectionParameters.Builder`. * Add missing `@Nullable` annotation to the parameter for `MediaItem.SubtitleConfiguration.Builder#setMimeType`. This annotation is already present on the `MediaItem.SubtitleConfiguration#mimeType` field that this setter corresponds to. PiperOrigin-RevId: 450941336
ibaker committed -
There is a problem with the ImageReader formats used by the SSIM helper that only occurs for Nexus 5 API 21, so as a workaround we can skip the SSIM calculation on Nexus 5 API 21. This skips just the SSIM calculation (by setting the value to 1.0 instead and logging). The tests still run when SSIM is skipped so that we can detect other failures. PiperOrigin-RevId: 450903183
hschlueter committed -
Decoding and encoding 320x240 H264 video should be supported on all devices from Android 5.0 based on CDD requirements. https://source.android.com/compatibility/5.0/android-5.0-cdd#5_2_video_encoding 640x360 encoding doesn't seem to be supported on Nexus 5. PiperOrigin-RevId: 450901715
hschlueter committed -
This value is only needed by subclasses of `Rating`, all of which are in this package (the `Rating` constructor is already package-private to ensure this). PiperOrigin-RevId: 450886872
ibaker committed -
Representing HTTP headers in a `java.util.Map` is error-prone, because the names (keys) need to be case-insensitive (per [RFC 2616 section 4.2](https://datatracker.ietf.org/doc/html/rfc2616#section-4.2)) but this is fundamentally technically incompatible with the `Map` interface (e.g. with headers `{"key": ["val_1", "val_2"]}` then `get("key")` and `get("KeY")` both return the same list, but `size()` returns `1`). It also breaks as soon as you copy the `Map` into a non-case-insensitive (i.e. normal) `Map` implementation, e.g. Guava's `ImmutableMap`. It's risky that a line as 'innocent' as `ImmutableMap.copyOf(headers)` could break things so badly. For now it's enough to keep this field unstable (it's currently the only reference to HTTP headers in the stable API). We can consider stabilising an improved HTTP header representation in future. PiperOrigin-RevId: 450708598
ibaker committed -
4K decoding is not supported (not required to be supported) on all devices, e.g., Nexus 5 does not support it. PiperOrigin-RevId: 450682519
hschlueter committed -
PiperOrigin-RevId: 450643824
tonihei committed
-
- 23 May, 2022 2 commits
-
-
Recreating an EGLSurface for a surface that already has an EGLSurface is not allowed according to the [documentation](https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglCreatePlatformWindowSurface.xhtml). This fix was tested on the devices listed in the bug description (Pixel 5a, Nexus 5). PiperOrigin-RevId: 450473569
hschlueter committed -
https://github.com/androidx/media/commit/e01bb47263bb509497b79bf0a475c3bd385dcb95
*** Original commit *** Rollback of https://github.com/androidx/media/commit/07302a23bd5894d57514c68b2db499ac46726e77 *** Original commit *** Remove `@Nullable` from `MediaSource.Factory` setters The null-behaviour of these methods creates a minimization footgun, because **any** call to these setters will prevent R8 from removing the default implementation (even if it's never used by the app) - this is because R8 can't tell the default imple... *** PiperOrigin-RevId: 450453325
ibaker committed
-