1. 09 Aug, 2021 4 commits
    • Move `requiresSecureDecoder` logic into `ExoMediaDrm` · 849c3074
      The result is plumbed back to `MediaCodecRenderer` via a new
      `DrmSession#requiresSecureDecoder` method.
      
      This allows us to use the `MediaDrm#requiresSecureDecoder` method added
      in Android 12:
      https://developer.android.com/reference/android/media/MediaDrm#requiresSecureDecoder(java.lang.String)
      
      This change also removes
      `FrameworkMediaCrypto#forceAllowInsecureDecoderComponents`, replacing it
      with equivalent logic in `FrameworkMediaDrm#requiresSecureDecoder`.
      
      PiperOrigin-RevId: 389616038
      ibaker committed
    • Add ability to disable Surface.setFrameRate calls · 0097a79c
      Adding a CHANGE_FRAME_RATE_STRATEGY_ALWAYS strategy is
      omitted from this commit, since adding it is more complicated
      than just plumbing it through and leaving everything else
      unchanged. Specifically, VideoFrameReleaseTimeHelper would
      need updating to behave differently when such a strategy is
      enabled. It currently calls setFrameRate in cases such as
      pausing, seeking and re-buffering, on the assumption that
      changes to the underlying display refresh rate will only be
      made if they can be done seamlessly. For a mode in which
      this will not be the case, it makes more sense to stick to
      the content frame-rate when these events occur. It may also
      make sense to only use explicit content frame-rate values,
      and not those inferred from individual frame timestamps.
      Finally, for adaptive content containing a mix of frame-rates,
      it makes sense to use the maximal frame-rate across all
      variants, and to avoid calling setFrameRate on switches from
      one variant to another.
      
      Applications that know the frame-rate of their content can
      set ExoPlayer's strategy to CHANGE_FRAME_RATE_STRATEGY_OFF and
      then use setFrameRate directly on the output surface. Note that
      this is likely to be a better option for apps than anything we
      could implement in ExoPlayer, because the application layer
      most likely knows the frame-rate of the content earlier than
      ExoPlayer does (e.g., to perform the disruptive mode switch
      at the same time as an activity transition).
      
      Adding CHANGE_FRAME_RATE_STRATEGY_ALWAYS will be deferred
      until there's clear demand for it. In the meantime, we'll
      recommend the alternative approach above.
      
      PiperOrigin-RevId: 389610965
      olly committed
    • Fix constants.gradle bug ref · eb74856c
      PiperOrigin-RevId: 389579365
      olly committed
    • Add a factory option to enable logging RTSP messages. · be19624a
      Many GH users find it hard to print out RTSP messages if they use ExoPlayer
      as an external dependency.
      
      PiperOrigin-RevId: 389197812
      claincly committed
  2. 06 Aug, 2021 8 commits
  3. 05 Aug, 2021 5 commits
  4. 04 Aug, 2021 6 commits
    • Simplify network-related error codes · 7375fe31
      This change removes ERROR_CODE_IO_NETWORK_UNAVAILABLE,
      ERROR_CODE_IO_NETWORK_CONNECTION_CLOSED, and ERROR_CODE_IO_DNS_FAILED
      in favor of keeping only ERROR_CODE_IO_NETWORK_CONNECTION_FAILED.
      
      PiperOrigin-RevId: 388715972
      aquilescanta committed
    • Tweak use of TimestampAdjuster for seeking · a34809bb
      - Fix use of getTimestampOffsetUs in TsExtractor where
        getFirstSampleTimestampUs should have been used.
      - Don't reset TimestampAdjuster if it's in no-offset mode.
      - Improve comment clarity
      
      #minor-release
      
      PiperOrigin-RevId: 388682711
      olly committed
    • Set HlsSampleStreamWrapper.trackType for audio-only playlists · 4b1609d5
      For audio-only playlists, when formats are communicated to the app with
      AnalyticsListener.onDownstreamFormatChanged(), the passed MediaLoadData
      do not indicate this is an audio track and therefore the
      PlaybackStatsListener cannot derive audio format-related information.
      
      This change sets the main SampleStreamWrappers track type to AUDIO, if
      the master playlist contains only audio variants.
      
      Issue: #9175
      
      #minor-release
      
      PiperOrigin-RevId: 388676060
      christosts committed
    • Change how AnalyticsCollector releases listeners · 07c49cda
      The AnalyticsCollector releases listeners lazily so that listener
      callbacks triggered on the application looper after
      SimpleExoPlayer.release() are still handled. The change in ListenerSet
      to post the onEvents callback on the front of the application looper
      changed (correctly) how onEvents are propagated, however this made
      the AnalyticsCollector deliver onEvents with out-of-order EventTimes.
      
      This change fixes AnalyticsCollector to trigger onPlayerReleased() and
      the matching onEvents() event in the correct order.
      
      #minor-release
      
      PiperOrigin-RevId: 388668739
      christosts committed
    • Standardise API-level specific nested classes · 6157c615
      This change aligns all the names for classes that are 'holders of static
      methods' to be `ApiNN`. Classes that hold state are named meaningfully
      based on that state.
      
      PiperOrigin-RevId: 388641064
      ibaker committed
  5. 03 Aug, 2021 5 commits
  6. 02 Aug, 2021 12 commits