Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions RELEASENOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@
overriding this method in `DefaultLoadControl`). The default
implementation of `LoadControl` disables preloading in case an app is
using a custom implementation of `LoadControl`.
* Add method `MediaSourceEventListener.EventDispatcher.dispatchEvent()` to
allow invoking events of subclass listeners
([1736](https://github.com/androidx/media/pull/1736)).
* Transformer:
* Track Selection:
* Extractors:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import androidx.media3.common.Format;
import androidx.media3.common.Player;
import androidx.media3.common.util.Assertions;
import androidx.media3.common.util.Consumer;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.exoplayer.source.MediaSource.MediaPeriodId;
import java.io.IOException;
Expand Down Expand Up @@ -259,12 +260,9 @@ public void loadStarted(

/** Dispatches {@link #onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}. */
public void loadStarted(LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {
for (ListenerAndHandler listenerAndHandler : listenerAndHandlers) {
MediaSourceEventListener listener = listenerAndHandler.listener;
postOrRun(
listenerAndHandler.handler,
() -> listener.onLoadStarted(windowIndex, mediaPeriodId, loadEventInfo, mediaLoadData));
}
dispatchEvent(
(listener) ->
listener.onLoadStarted(windowIndex, mediaPeriodId, loadEventInfo, mediaLoadData));
}

/** Dispatches {@link #onLoadCompleted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}. */
Expand Down Expand Up @@ -304,13 +302,9 @@ public void loadCompleted(

/** Dispatches {@link #onLoadCompleted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}. */
public void loadCompleted(LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {
for (ListenerAndHandler listenerAndHandler : listenerAndHandlers) {
MediaSourceEventListener listener = listenerAndHandler.listener;
postOrRun(
listenerAndHandler.handler,
() ->
listener.onLoadCompleted(windowIndex, mediaPeriodId, loadEventInfo, mediaLoadData));
}
dispatchEvent(
(listener) ->
listener.onLoadCompleted(windowIndex, mediaPeriodId, loadEventInfo, mediaLoadData));
}

/** Dispatches {@link #onLoadCanceled(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}. */
Expand Down Expand Up @@ -350,13 +344,9 @@ public void loadCanceled(

/** Dispatches {@link #onLoadCanceled(int, MediaPeriodId, LoadEventInfo, MediaLoadData)}. */
public void loadCanceled(LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {
for (ListenerAndHandler listenerAndHandler : listenerAndHandlers) {
MediaSourceEventListener listener = listenerAndHandler.listener;
postOrRun(
listenerAndHandler.handler,
() ->
listener.onLoadCanceled(windowIndex, mediaPeriodId, loadEventInfo, mediaLoadData));
}
dispatchEvent(
(listener) ->
listener.onLoadCanceled(windowIndex, mediaPeriodId, loadEventInfo, mediaLoadData));
}

/**
Expand Down Expand Up @@ -419,14 +409,10 @@ public void loadError(
MediaLoadData mediaLoadData,
IOException error,
boolean wasCanceled) {
for (ListenerAndHandler listenerAndHandler : listenerAndHandlers) {
MediaSourceEventListener listener = listenerAndHandler.listener;
postOrRun(
listenerAndHandler.handler,
() ->
listener.onLoadError(
windowIndex, mediaPeriodId, loadEventInfo, mediaLoadData, error, wasCanceled));
}
dispatchEvent(
(listener) ->
listener.onLoadError(
windowIndex, mediaPeriodId, loadEventInfo, mediaLoadData, error, wasCanceled));
}

/** Dispatches {@link #onUpstreamDiscarded(int, MediaPeriodId, MediaLoadData)}. */
Expand All @@ -445,12 +431,8 @@ public void upstreamDiscarded(int trackType, long mediaStartTimeUs, long mediaEn
/** Dispatches {@link #onUpstreamDiscarded(int, MediaPeriodId, MediaLoadData)}. */
public void upstreamDiscarded(MediaLoadData mediaLoadData) {
MediaPeriodId mediaPeriodId = Assertions.checkNotNull(this.mediaPeriodId);
for (ListenerAndHandler listenerAndHandler : listenerAndHandlers) {
MediaSourceEventListener listener = listenerAndHandler.listener;
postOrRun(
listenerAndHandler.handler,
() -> listener.onUpstreamDiscarded(windowIndex, mediaPeriodId, mediaLoadData));
}
dispatchEvent(
(listener) -> listener.onUpstreamDiscarded(windowIndex, mediaPeriodId, mediaLoadData));
}

/** Dispatches {@link #onDownstreamFormatChanged(int, MediaPeriodId, MediaLoadData)}. */
Expand All @@ -473,11 +455,16 @@ public void downstreamFormatChanged(

/** Dispatches {@link #onDownstreamFormatChanged(int, MediaPeriodId, MediaLoadData)}. */
public void downstreamFormatChanged(MediaLoadData mediaLoadData) {
dispatchEvent(
(listener) ->
listener.onDownstreamFormatChanged(windowIndex, mediaPeriodId, mediaLoadData));
}

/** Dispatches to a function that supplies a {@link MediaSourceEventListener}. */
public void dispatchEvent(Consumer<MediaSourceEventListener> event) {
for (ListenerAndHandler listenerAndHandler : listenerAndHandlers) {
MediaSourceEventListener listener = listenerAndHandler.listener;
postOrRun(
listenerAndHandler.handler,
() -> listener.onDownstreamFormatChanged(windowIndex, mediaPeriodId, mediaLoadData));
postOrRun(listenerAndHandler.handler, () -> event.accept(listener));
}
}

Expand Down