Call onProcessedStreamChange()
for every media item change
Added `MCR.experimentalEnableProcessedStreamChangedAtStart()` to guard this new feature. PiperOrigin-RevId: 648886533
This commit is contained in:
parent
3793a06bdd
commit
73da1c09bd
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user