1. 31 Oct, 2022 15 commits
    • Set BROWSER_SERVICE_EXTRAS_KEY_SEARCH_SUPPORTED automatically · 4c9ca8fa
      This root extra needs to be set by apps manually in media1 and we
      can do that automatically in Media3 based on the available session
      commands.
      
      #minor-release
      
      PiperOrigin-RevId: 484286833
      bachinger committed
    • Use MediaBrowserCompat.rootHints as connections hints · 21022c77
      In Media3 there is the useful concept of connection hints that a
      client can set when building the session and that are sent to the
      service and passed to the `Callback.onConnect()` method when the
      browser connects.
      
      These connection hints are then included in the `ControllerInfo`
      object that later will be passed to every callback method and the
      implementor can then take decisions specific to these connection
      hints.
      
      These connection hints are not available in media1. However, when
      an app creates a `MediaBrowserCompat` object, the constructor takes
      a rootHint object that is sent to
      `MediaBrowserServiceCompat.onGetRoot()`.
      
      This change uses the browser rootHints as the connection hints when
      creating the `ControllerInfo` for legacy browsers and makes them
      available to the `MediaLibrarySession.Callback` domain methods in
      the same way as connection hints of a Media3 browser.
      
      PiperOrigin-RevId: 484220748
      bachinger committed
    • Make adding ad live breaks more robust · 64e9e888
      This change makes adding ad events in live streams more robust by allowing ad
      groups to grow in number of ads if more ad events are received than initially
      announced by the SDK.
      
      With the IMA prefetch feature, an AdPod can grow in size in certain conditions
      like from initially 2 ads to 4 ads being part of the ad group. With this change,
      if an additional ad event arrives while the ad group is still being played,
      the ad group is expanded. If the event arrives late and the ad group is already
      completed, a new group is created for the remaining ads.
      
      This also covers the case where we join the live stream while an ad is being
      played and we missed at least one LOADED event from the SDK. Ads of the group
      before the first LOADED event are ignored in such a case.
      
      PiperOrigin-RevId: 484214760
      bachinger committed
    • Add muxer timer to detect when generating an output sample is too slow · 16cb5cbc
      This allows to throw when the Transformer is stuck or is too slow.
      
      PiperOrigin-RevId: 484179037
      kimvde committed
    • Add AudioProcessor.AudioFormat equals method. · e6079c38
      PiperOrigin-RevId: 483983486
      samrobinson committed
    • Mute input video player in transformer demo · f1ca4f41
      PiperOrigin-RevId: 483969411
      tofunmi committed
    • Fix `Cea608Decoder` handling of service switch commands in field 2 · 8c0f7827
      From ANSI-CTA-608-E R-2014 section 8.4:
      > When closed captioning is used on line 21, field 2, it shall conform
      > to all of the applicable specifications and recommended practices as
      > defined for field 1 services with the following differences:
      > 1. The non-printing character of the miscellaneous control-character
      >    pairs that fall in the range of 0x14, 0x20 to 0x14, 0x2F in field 1,
      >    shall be replaced with 0x15, 0x20 to 0x15, 0x2F when used in field
      >    2.
      > 2. The non-printing character of the miscellaneous control-character
      >    pairs that fall in the range of 0x1C, 0x20 to 0x1C, 0x2F in field
      >    1, shall be replaced with 0x1D, 0x20 to 0x1D, 0x2F when used in
      >    field 2.
      
      This basically means that `cc1=0x15` in field 2 should be interpreted as
      `cc1=0x14` in field 1, and same for `0x1D -> 0x1C`.
      
      The `isMiscCode`  method above already handles this by ignoring the LSB
      (the only difference between `0x14` and `0x15`, and `0x1C` and `0x1D`)
      by AND-ing with `0xF6` instead of `0xF7`. This change uses the same
      trick in `isServiceSwitchCommand`.
      
      Issue: google/ExoPlayer#10666
      #minor-release
      PiperOrigin-RevId: 483927506
      ibaker committed
    • Move `DefaultAudioSink.AudioProcessorChain` to `AudioProcessorChain` · 7fcb53da
      Split inner interface into separate file, which will go in common
      module. The old interface will be deprecated and extends the new.
      
      #cleanup
      
      PiperOrigin-RevId: 483732226
      samrobinson committed
    • Move AudioProcessor to common. · fc345428
      PiperOrigin-RevId: 483699606
      samrobinson committed
    • Add GL utility methods to get 4x4 identity and set identity · be7bb0ee
      PiperOrigin-RevId: 483671580
      claincly committed
    • Add injection of `BitmapLoader` from `MediaSession`. · 3f69df72
      * Add `BitmapLoader` in `MediaSession.Builder` and `MediaLibrarySession.Builder`.
      * Pass `BitmapLoader` into the constructor of `MediaSession`, `MediaSessionImpl`, `MediaLibrarySession` and `MediaLibrarySessionImpl`.
      * Add an interface method `loadBitmapFromMetadata(MediaMetadata)` in `BitmapLoader`.
      * Remove the reference of `BitmapLoader` in `DefaultMediaNotificationProvider`.
      
      PiperOrigin-RevId: 483654596
      tianyifeng committed
    • Create NotificationChannel in DefaultMediaNotificationProvider.Api26 · 026aea7d
      The inner class avoids a verification failure, which can lead to slower
      execution at runtime.
      
      PiperOrigin-RevId: 483639417
      ibaker committed
    • Use int for an unsigned byte value in Cea608Decoder · c9a0aa9d
      This is a no-op, but it's more 'correct' because it avoids any potential
      sign mix-ups that come from storing an unsigned byte (with a
      potentially set MSB) in a signed java byte variable.
      
      PiperOrigin-RevId: 483409798
      ibaker committed
    • Add CanIgnoreReturnValue to AudioProcessor#configure + implementations · 8723e74b
      Although it can be useful to check the output format, it's not required or needed.
      
      For some AudioProcessor implementations, it is stated/obvious that
      the output format will match the input, in which case there is no
      a need to check the return value.
      
      #cleanup
      
      PiperOrigin-RevId: 483403679
      samrobinson committed
    • Merge pull request #141 from tzugen:patch-4 · e2a77f7b
      PiperOrigin-RevId: 483395026
      microkatz committed
  2. 24 Oct, 2022 25 commits