From 0c2aba9ce15775a232f4d44beea1457a017bacf3 Mon Sep 17 00:00:00 2001 From: tonihei Date: Fri, 8 Sep 2023 03:15:23 -0700 Subject: [PATCH] Add MediaPeriodId to CompositeMediaSource.getMediaTimeForChildMediaTime This callback asks to correct the media time in a composition, but doesn't provide the MediaPeriodId as the necessary context to do this. PiperOrigin-RevId: 563699344 --- RELEASENOTES.md | 2 ++ .../source/CompositeMediaSource.java | 31 +++++++++++++------ .../exoplayer/source/WrappingMediaSource.java | 10 ++++-- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 668b2212ef..0cdee0f8b8 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -16,6 +16,8 @@ query parameters ([#553](https://github.com/androidx/media/issues/553)). * Fix `ConcurrentModificationException` in `ExperimentalBandwidthMeter` ([#612](https://github.com/androidx/media/issues/612)). + * Add `MediaPeriodId` parameter to + `CompositeMediaSource.getMediaTimeForChildMediaTime`. * Transformer: * Changed `frameRate` and `durationUs` parameters of `SampleConsumer.queueInputBitmap` to `TimestampIterator`. diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/CompositeMediaSource.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/CompositeMediaSource.java index 1aa0c50499..3b58c177ee 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/CompositeMediaSource.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/CompositeMediaSource.java @@ -193,10 +193,13 @@ public abstract class CompositeMediaSource extends BaseMediaSource { * @param childSourceId The unique id used to prepare the child source. * @param mediaTimeMs A media time in the {@link MediaPeriod} of the child source, in * milliseconds. + * @param mediaPeriodId The {@link MediaPeriodId} of the {@link MediaPeriod} of the child source, + * or null if the time does not relate to a specific {@link MediaPeriod}. * @return The corresponding media time in the {@link MediaPeriod} of the composite source, in * milliseconds. */ - protected long getMediaTimeForChildMediaTime(@UnknownNull T childSourceId, long mediaTimeMs) { + protected long getMediaTimeForChildMediaTime( + @UnknownNull T childSourceId, long mediaTimeMs, @Nullable MediaPeriodId mediaPeriodId) { return mediaTimeMs; } @@ -239,7 +242,7 @@ public abstract class CompositeMediaSource extends BaseMediaSource { MediaLoadData mediaLoadData) { if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) { mediaSourceEventDispatcher.loadStarted( - loadEventData, maybeUpdateMediaLoadData(mediaLoadData)); + loadEventData, maybeUpdateMediaLoadData(mediaLoadData, mediaPeriodId)); } } @@ -251,7 +254,7 @@ public abstract class CompositeMediaSource extends BaseMediaSource { MediaLoadData mediaLoadData) { if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) { mediaSourceEventDispatcher.loadCompleted( - loadEventData, maybeUpdateMediaLoadData(mediaLoadData)); + loadEventData, maybeUpdateMediaLoadData(mediaLoadData, mediaPeriodId)); } } @@ -263,7 +266,7 @@ public abstract class CompositeMediaSource extends BaseMediaSource { MediaLoadData mediaLoadData) { if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) { mediaSourceEventDispatcher.loadCanceled( - loadEventData, maybeUpdateMediaLoadData(mediaLoadData)); + loadEventData, maybeUpdateMediaLoadData(mediaLoadData, mediaPeriodId)); } } @@ -277,7 +280,10 @@ public abstract class CompositeMediaSource extends BaseMediaSource { boolean wasCanceled) { if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) { mediaSourceEventDispatcher.loadError( - loadEventData, maybeUpdateMediaLoadData(mediaLoadData), error, wasCanceled); + loadEventData, + maybeUpdateMediaLoadData(mediaLoadData, mediaPeriodId), + error, + wasCanceled); } } @@ -285,7 +291,8 @@ public abstract class CompositeMediaSource extends BaseMediaSource { public void onUpstreamDiscarded( int windowIndex, @Nullable MediaPeriodId mediaPeriodId, MediaLoadData mediaLoadData) { if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) { - mediaSourceEventDispatcher.upstreamDiscarded(maybeUpdateMediaLoadData(mediaLoadData)); + mediaSourceEventDispatcher.upstreamDiscarded( + maybeUpdateMediaLoadData(mediaLoadData, mediaPeriodId)); } } @@ -293,7 +300,8 @@ public abstract class CompositeMediaSource extends BaseMediaSource { public void onDownstreamFormatChanged( int windowIndex, @Nullable MediaPeriodId mediaPeriodId, MediaLoadData mediaLoadData) { if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) { - mediaSourceEventDispatcher.downstreamFormatChanged(maybeUpdateMediaLoadData(mediaLoadData)); + mediaSourceEventDispatcher.downstreamFormatChanged( + maybeUpdateMediaLoadData(mediaLoadData, mediaPeriodId)); } } @@ -366,9 +374,12 @@ public abstract class CompositeMediaSource extends BaseMediaSource { return true; } - private MediaLoadData maybeUpdateMediaLoadData(MediaLoadData mediaLoadData) { - long mediaStartTimeMs = getMediaTimeForChildMediaTime(id, mediaLoadData.mediaStartTimeMs); - long mediaEndTimeMs = getMediaTimeForChildMediaTime(id, mediaLoadData.mediaEndTimeMs); + private MediaLoadData maybeUpdateMediaLoadData( + MediaLoadData mediaLoadData, @Nullable MediaPeriodId childMediaPeriodId) { + long mediaStartTimeMs = + getMediaTimeForChildMediaTime(id, mediaLoadData.mediaStartTimeMs, childMediaPeriodId); + long mediaEndTimeMs = + getMediaTimeForChildMediaTime(id, mediaLoadData.mediaEndTimeMs, childMediaPeriodId); if (mediaStartTimeMs == mediaLoadData.mediaStartTimeMs && mediaEndTimeMs == mediaLoadData.mediaEndTimeMs) { return mediaLoadData; diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/WrappingMediaSource.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/WrappingMediaSource.java index 88ebe7a58e..fd254efeb9 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/WrappingMediaSource.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/WrappingMediaSource.java @@ -205,8 +205,9 @@ public abstract class WrappingMediaSource extends CompositeMediaSource { } @Override - protected final long getMediaTimeForChildMediaTime(Void childSourceId, long mediaTimeMs) { - return getMediaTimeForChildMediaTime(mediaTimeMs); + protected final long getMediaTimeForChildMediaTime( + Void childSourceId, long mediaTimeMs, @Nullable MediaPeriodId mediaPeriodId) { + return getMediaTimeForChildMediaTime(mediaTimeMs, mediaPeriodId); } /** @@ -216,10 +217,13 @@ public abstract class WrappingMediaSource extends CompositeMediaSource { * * @param mediaTimeMs A media time in the {@link MediaPeriod} of the child source, in * milliseconds. + * @param mediaPeriodId The {@link MediaPeriodId} of the {@link MediaPeriod} of the child source, + * or null if the time does not relate to a specific {@link MediaPeriod}. * @return The corresponding media time in the {@link MediaPeriod} of the wrapping source, in * milliseconds. */ - protected long getMediaTimeForChildMediaTime(long mediaTimeMs) { + protected long getMediaTimeForChildMediaTime( + long mediaTimeMs, @Nullable MediaPeriodId mediaPeriodId) { return mediaTimeMs; }