1. 09 Jun, 2022 8 commits
  2. 07 Jun, 2022 10 commits
  3. 31 May, 2022 8 commits
  4. 30 May, 2022 14 commits
    • Update the Gradle Wrapper and Android Gradle Plugin · 3ba9d7e1
      The current verion of AGP warns it doesn't support Android API 32 [1].
      
      The wrapper was upgraded with ([instructions](https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:upgrading_wrapper)):
      ```shell
      $ ./gradlew wrapper --gradle-version 7.4.2 --distribution-type all
      ```
      
      [1]
      ```
      WARNING:We recommend using a newer Android Gradle plugin to use compileSdk = 32
      
      This Android Gradle plugin (7.0.3) was tested up to compileSdk = 31
      
      This warning can be suppressed by adding
          android.suppressUnsupportedCompileSdk=32
          to this project's gradle.properties
      
          The build will continue, but you are strongly encouraged to update your project to
          use a newer Android Gradle Plugin that has been tested with compileSdk = 32
      ```
      
      #minor-release
      
      PiperOrigin-RevId: 451893214
      ibaker committed
    • Use fluent assertions · 9d460023
      Gives a bit more information upon failures
      
      PiperOrigin-RevId: 451882968
      aquilescanta committed
    • Add constants for custom actions UI customization · 40f5fb55
      PiperOrigin-RevId: 451875964
      bachinger committed
    • Fix release notes typo from `PlaceHolder` to `Placeholder` · a40d3e4c
      The classes were renamed to `PlaceholderXXX` in
      https://github.com/androidx/media/commit/33373d0d0a159ad9c9c3590c838098c4c1530910
      
      #minor-release
      
      PiperOrigin-RevId: 451872006
      ibaker committed
    • Implement session extras for Media3 and legacy controllers · 85a936ec
      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
    • Skip BitrateAnalysisTest if device is incapable. · a629d094
      Add bitrate check to the "can encode" criteria.
      
      PiperOrigin-RevId: 451868042
      claincly committed
    • Add missing tests for custom layout notification · bf3d81c2
      PiperOrigin-RevId: 451859199
      bachinger committed
    • Add a constant for the legacy controller version · 7af9f020
      PiperOrigin-RevId: 451857459
      bachinger committed
    • Remove MediaMetadata.mediaUrl · 581c6b54
      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
    • Replace MediaItemFiller by asynchronous callback. · 6b782d10
      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
    • Improve playlist operation behavior of session test MockPlayer · 342be88d
      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
    • Add sessionImpl to PostSessionTask · c814f791
      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
    • Add RequestMetadata to MediaItem · 6d776a5a
      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
    • Retain stream time offsets through codecs · b25d00a7
      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