mirror of
https://github.com/samsonjs/media.git
synced 2026-03-25 09:25:53 +00:00
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
3 changed files with 24 additions and 0 deletions
|
|
@ -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…
Reference in a new issue