Skip to content

Commit

Permalink
Add method to MediaSourceEventListener.EventDispatcher to submit even…
Browse files Browse the repository at this point in the history
…ts through a lambda function. This allows clients that implement this interface to submit customized event dispatching logic to the EventDispatcher's listeners
  • Loading branch information
colinkho committed Sep 17, 2024
1 parent 6632e64 commit b049c81
Showing 1 changed file with 24 additions and 37 deletions.
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

0 comments on commit b049c81

Please sign in to comment.