Call onProcessedStreamChange() for every media item change

Added `MCR.experimentalEnableProcessedStreamChangedAtStart()` to guard this new
feature.

PiperOrigin-RevId: 648886533
This commit is contained in:
claincly 2024-07-02 17:01:30 -07:00 committed by Copybara-Service
parent 3793a06bdd
commit 73da1c09bd
3 changed files with 24 additions and 0 deletions

View File

@ -4,6 +4,10 @@
* Common Library:
* ExoPlayer:
* `MediaCodecRenderer.onProcessedStreamChange()` can now be called for
every media item. Previously it was not called for the first one. Use
`MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()`
to enable this.
* Transformer:
* Track Selection:
* Extractors:

View File

@ -411,6 +411,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
private OutputStreamInfo outputStreamInfo;
private long lastProcessedOutputBufferTimeUs;
private boolean needToNotifyOutputFormatChangeAfterStreamChange;
private boolean experimentalEnableProcessedStreamChangedAtStart;
/**
* @param trackType The {@link C.TrackType track type} that the renderer handles.
@ -513,6 +514,16 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
elapsedRealtimeUs);
}
/**
* Enables the renderer to invoke {@link #onProcessedStreamChange()} on the first stream.
*
* <p>When not enabled, {@link #onProcessedStreamChange()} is invoked from the second stream
* onwards.
*/
public void experimentalEnableProcessedStreamChangedAtStart() {
this.experimentalEnableProcessedStreamChangedAtStart = true;
}
/**
* Returns minimum time playback must advance in order for the {@link #render} call to make
* progress.
@ -724,6 +735,9 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
setOutputStreamInfo(
new OutputStreamInfo(
/* previousStreamLastBufferTimeUs= */ C.TIME_UNSET, startPositionUs, offsetUs));
if (experimentalEnableProcessedStreamChangedAtStart) {
onProcessedStreamChange();
}
} else if (pendingOutputStreamChanges.isEmpty()
&& (largestQueuedPresentationTimeUs == C.TIME_UNSET
|| (lastProcessedOutputBufferTimeUs != C.TIME_UNSET

View File

@ -103,6 +103,7 @@ public class MediaCodecRendererTest {
InOrder inOrder = inOrder(renderer);
inOrder.verify(renderer).onOutputStreamOffsetUsChanged(0);
inOrder.verify(renderer).onProcessedStreamChange();
inOrder.verify(renderer).onOutputFormatChanged(eq(format1), any());
inOrder.verify(renderer).onProcessedOutputBuffer(0);
inOrder.verify(renderer).onProcessedOutputBuffer(100);
@ -163,6 +164,7 @@ public class MediaCodecRendererTest {
InOrder inOrder = inOrder(renderer);
inOrder.verify(renderer).onOutputStreamOffsetUsChanged(0);
inOrder.verify(renderer).onProcessedStreamChange();
inOrder.verify(renderer).onOutputFormatChanged(eq(format1), any());
inOrder.verify(renderer).onProcessedOutputBuffer(0);
inOrder.verify(renderer).onProcessedOutputBuffer(100);
@ -226,6 +228,7 @@ public class MediaCodecRendererTest {
InOrder inOrder = inOrder(renderer);
inOrder.verify(renderer).onOutputStreamOffsetUsChanged(0);
inOrder.verify(renderer).onProcessedStreamChange();
inOrder.verify(renderer).onOutputFormatChanged(eq(format1), any());
inOrder.verify(renderer).onProcessedOutputBuffer(0);
inOrder.verify(renderer).onProcessedOutputBuffer(100);
@ -287,6 +290,7 @@ public class MediaCodecRendererTest {
InOrder inOrder = inOrder(renderer);
inOrder.verify(renderer).onOutputStreamOffsetUsChanged(0);
inOrder.verify(renderer).onProcessedStreamChange();
inOrder.verify(renderer).onOutputStreamOffsetUsChanged(0);
inOrder.verify(renderer).onProcessedStreamChange();
inOrder.verify(renderer).onOutputFormatChanged(eq(format2), any());
@ -356,6 +360,7 @@ public class MediaCodecRendererTest {
InOrder inOrder = inOrder(renderer);
inOrder.verify(renderer).onOutputStreamOffsetUsChanged(0);
inOrder.verify(renderer).onProcessedStreamChange();
inOrder.verify(renderer).onOutputFormatChanged(eq(format1), any());
inOrder.verify(renderer).onProcessedOutputBuffer(0);
inOrder.verify(renderer).onProcessedOutputBuffer(100);
@ -496,6 +501,7 @@ public class MediaCodecRendererTest {
/* forceSecure= */ false)),
/* enableDecoderFallback= */ false,
/* assumedMinimumCodecOperatingRate= */ 44100);
experimentalEnableProcessedStreamChangedAtStart();
}
@Override