1. 18 Nov, 2021 16 commits
    • Adjust timestamp even if frame is dropped. · 6f0f7dd1
      The `SefSlowMotionVideoSampleTransformer` drops frames by
      setting `buffer.data = null` and updates the timestamps of the
      frames it keeps. However, these buffers with dropped frames
      are still used in the pipeline as they may contain other useful
      information, specifically whether the end of the input has been
      reached. So, the timestamps should also be updated for the buffers
      where frames are dropped.
      
      PiperOrigin-RevId: 410797678
      hschlueter committed
    • Update bug number · 9f6cdb4c
      PiperOrigin-RevId: 410770666
      andrewlewis committed
    • Fix gldemo · fc0e6a07
      The GL program needs to be used before accessing its attributes.
      
      #minor-release
      
      PiperOrigin-RevId: 410768017
      andrewlewis committed
    • Set LogSessionId on MediaParser for progressive playbacks. · f946ade1
      PiperOrigin-RevId: 410766492
      tonihei committed
    • Migrate the cast demo app from PlayerView to StyledPlayerView · f6f03866
      StyledPlayerControlView can't really be used on its own (like
      PlayerControlView was used here), so we instead use the same
      StyledPlayerView instance for both local and casted playback,
      replacing the content with a cast icon while casting.
      
      PiperOrigin-RevId: 410764338
      ibaker committed
    • Ignore manual test from the transformer_mobile_test target. · f634ca33
      In the near future, we will be able to specify which tests run on this
      target explicitly, at which point this ignore will be removed.
      
      PiperOrigin-RevId: 410758785
      samrobinson committed
    • Assign class member in StyledPlayerControlView before using it · 70e2e8e4
      The local tracks variable was used to assign the initial subtext
      for the current track selection in the menu, but the new value
      was only assigned after the subtext has been evaluated.
      
      Assign the local variable first, so that the remaining accesses
      the latest value.
      
      Issue: google/ExoPlayer#9698
      PiperOrigin-RevId: 410750396
      tonihei committed
    • Avoid buffers used by OpenGL getting GC'ed · beccfaba
      The `GlUtil` wrappers for attributes/uniforms allocate buffers that are passed into OpenGL, and it seems that the distorted output was caused by these buffers being garbage collected.
      
      The issue was difficult to reproduce manually. Add a test that does repeated transcodes in a loop (marked `@Ignore` for now because it runs for a long time and requires network access so may be flaky) to make it easier to run many transcodes and look for inconsistent output. For now the consistency check is just based on the file size which is very likely to change if the actual video frames change.
      
      Verified that the test fails before, and passes once the attributes and uniforms are stored in fields as in this CL.
      
      PiperOrigin-RevId: 410581706
      andrewlewis committed
    • Merge transformer video renderers. · af1d5856
      This change merges `TransformerMuxingVideoRenderer` and
      `TransformerTranscodingVideoRenderer` into `TransformerVideoRenderer`.
      Besides all features supported by `TransformerTranscodingVideoRenderer`
      the new merged `TransformerVideoRenderer` also supports SEF slow motion
      flatting without re-encoding like the `TransformerMuxingVideoRenderer`.
      To do this, it uses a `SefSlowMotionVideoSampleTransformer` with
      the `PassthroughPipeline`.
      
      PiperOrigin-RevId: 410531478
      hschlueter committed
    • Transformer: Rename setOutputMimeType() to setContainerMimeType(). · 18a15fb9
      This mime type is technically for the Muxer, and determines
      the container used. In the context of the transformer, this can
      be thought of more as a container mime type, to avoid confusion
      with the video mime type and audio mime type.
      
      Deprecates setOutputMimeType().
      
      PiperOrigin-RevId: 410530707
      huangdarwin committed
    • Fix sequence number calculation logic. · f401d462
      Issue: google/ExoPlayer#9697
      
      Before, the `MAX_SEQUENCE_NUMBER` is 65535, such that the logic to get the next
      sequence number:
      
      `previousSeqNumber + 1 % MAX_SEQUENCE_NUMBER`
      
      yields 0 when `previousSeqNumber` is 65534. However, the next sequence number
      should be 65535.
      
      PiperOrigin-RevId: 410530098
      claincly committed
    • Set LogSessionId on MediaCodec. · 6ed75f1a
      PiperOrigin-RevId: 410516082
      tonihei committed
    • Set LogSessionId on AudioTrack. · 14ab4f80
      This requires forwarding the PlayerId to the AudioSink.
      
      PiperOrigin-RevId: 410509605
      tonihei committed
    • Enable immediate codec start after flush · 45a5a758
      We verified there is a race condition in the
      AsynchronousMediaCodecAdapter when flushing the adapter
      multiple times. The race condition results in calling MediaCodec.start()
      and MediaCodec.flush() in parallel and that makes the MediaCodec
      raise an exception.
      
      This changes the default behavior to call MediaCodec.start() on the
      same thread after MediaCodec.flush() to avoid the race condition.
      
      #minor-release
      
      PiperOrigin-RevId: 410509388
      christosts committed
    • Remove null keys from DefaultHttpDataSource#getResponseHeaders · 06755d42
      PiperOrigin-RevId: 410507648
      ibaker committed
    • Populate ICY headers into MediaMetadata · 349160a5
      Populate ICY headers into MediaMetadata so that they can
      propagate to the app via AnalyticsListener#onMediaMetadataChanged().
      This change copies IcyHeaders.name into MediaMetadata.description
      and IcyHeaders.genre into MediaMetadata.genre.
      
      Note: MediaItem.metadata maintain their precedence and overwrite any
      ICY headers parsed.
      
      Issue: google/ExoPlayer#9677
      
      #minor-release
      
      PiperOrigin-RevId: 410495676
      christosts committed
  2. 16 Nov, 2021 6 commits
  3. 15 Nov, 2021 7 commits
  4. 11 Nov, 2021 11 commits
    • Setup the initial instrumentation tests for transformer. · 793e675d
      Due to sharding, each test should be in a separate class.
      
      PiperOrigin-RevId: 409142436
      samrobinson committed
    • Merge #9678: Fix typo in Hello world documentation. · d88accd4
      PiperOrigin-RevId: 409129177
      tonihei committed
    • Fully support per-track-type selection overrides. · cb60425a
      Currently, TrackSelectionOverrides are documented as being applied
      per track type, meaning that one override for a type disables all
      other selections for the same track type. However, the actual
      implementation only applies it per track group, relying on the
      track selector to never select another renderer of the same type.
      
      This change fixes DefaultTrackSelector to fully adhere to the
      TrackSelectionsOverride definition. This solves problems when
      overriding tracks for extension renderers (see Issue: google/ExoPlayer#9675)
      and also simplifies a workaround added to StyledPlayerView.
      
      #minor-release
      
      PiperOrigin-RevId: 409121711
      tonihei committed
    • Async buffer queueing: do not throw from flush/shutdown · f43d6326
      The asynchronous MediaCodec adapter queues input buffers in a
      background thread. If a codec queueuing operation throws an exception,
      the buffer enqueuer will store it as a pending exception and re-throw it
      the next time the adapter will attempt to queue another input buffer.
      
      The buffer enqueuer's flush() and shutdown() may throw an exception if
      the pending error is set. This is subject to a race-condition in which
      the pending error can be set while the adapter is flushing/shutting down
      the enqueuer, e.g., if an input buffer is still being queued and the
      codec throws an exception. As a result, the adapter cannot flush or
      shutdown gracefully.
      
      This change makes the buffer enqueuer to ignore any pending error
      when flushing/shuttinf down so that the adapter can flush/release
      gracefully even if a queueing error was detected.
      
      PiperOrigin-RevId: 409113054
      christosts committed
    • Make TrackSelectionOverride.getTrackType public · 954531bd
      This method is helpful when iterating the list of track overrides
      to figure out which type the override applies to.
      
      Issue: google/ExoPlayer#9665
      PiperOrigin-RevId: 409108977
      tonihei committed
    • Add repeat/shuffle mode documentation to the playlist page. · 86f109c4
      We only had some documentation for a custom shuffle mode, but none
      for generic repeat or shuffle modes.
      
      #minor-release
      
      Issue: google/ExoPlayer#9611
      PiperOrigin-RevId: 409089623
      tonihei committed
    • Update track selection documentation. · 13806507
      The Javadoc of DefaultTrackSelector can be shortened as it's not the
      right place to document detailed options of the Player track selection
      parameters.
      
      The documentation page about track selection is updated to the new
      APIs and extended with most relevant options and information needed
      to work with ExoPlayer's track selection API.
      
      #minor-release
      
      PiperOrigin-RevId: 409088989
      tonihei committed
    • Plumb PlayerId to MediaSource. · 658def41
      MediaSource can be reused with other Player instances after they
      have been released, so we need to set the PlayerId when preparing
      the source. Access can mostly be handled by the implementation in
      BaseMediaSource.
      
      PiperOrigin-RevId: 408878824
      tonihei committed
    • Fix header name in WebServerDispatcher used for testing · bf1cf13c
      HTTP header names are case-insensitive, but all the others in this file
      are 'correctly' cased, so we might as well be consistent.
      
      PiperOrigin-RevId: 408840566
      ibaker committed
    • Add contract tests for DataSource#getResponseHeaders · dd95587c
      PiperOrigin-RevId: 408840409
      ibaker committed
    • Make DefaultHttpDataSourceContractTest an instrumentation test · e4695abc
      Robolectric uses the JRE HttpURLConnection [1], while real Android
      devices and emulators use OkHttp to implement HttpURLConnection. This
      can lead to important differences in behaviour, so it's better to use
      instrumentation tests when specific HTTP behaviour is important.
      
      [1] https://github.com/robolectric/robolectric/issues/6769#issuecomment-943556156
      
      PiperOrigin-RevId: 408840295
      ibaker committed