mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Don't release a frame when not force rendering when paused.
And rename method `releaseOutputFrame` to `releaseProcessedFrameInternal` for consistency. Removed misplaced comment. PiperOrigin-RevId: 506005744
This commit is contained in:
parent
2c690618e5
commit
928faf5378
@ -2162,8 +2162,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
|||||||
*/
|
*/
|
||||||
public void releaseProcessedFrames(long positionUs, long elapsedRealtimeUs) {
|
public void releaseProcessedFrames(long positionUs, long elapsedRealtimeUs) {
|
||||||
checkStateNotNull(frameProcessor);
|
checkStateNotNull(frameProcessor);
|
||||||
// Locking the entire releasing flow may block the FrameProcessor thread running
|
|
||||||
// onOutputFrameAvailable().
|
|
||||||
while (!processedFramesTimestampsUs.isEmpty()) {
|
while (!processedFramesTimestampsUs.isEmpty()) {
|
||||||
boolean isStarted = renderer.getState() == STATE_STARTED;
|
boolean isStarted = renderer.getState() == STATE_STARTED;
|
||||||
long bufferPresentationTimeUs = checkNotNull(processedFramesTimestampsUs.peek());
|
long bufferPresentationTimeUs = checkNotNull(processedFramesTimestampsUs.peek());
|
||||||
@ -2177,8 +2175,10 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
|||||||
|
|
||||||
boolean shouldReleaseFrameImmediately = renderer.shouldForceRender(positionUs, earlyUs);
|
boolean shouldReleaseFrameImmediately = renderer.shouldForceRender(positionUs, earlyUs);
|
||||||
if (shouldReleaseFrameImmediately) {
|
if (shouldReleaseFrameImmediately) {
|
||||||
releaseOutputFrame(FrameProcessor.RELEASE_OUTPUT_FRAME_IMMEDIATELY);
|
releaseProcessedFrameInternal(FrameProcessor.RELEASE_OUTPUT_FRAME_IMMEDIATELY);
|
||||||
break;
|
break;
|
||||||
|
} else if (!isStarted || positionUs == renderer.initialPositionUs) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only release frames that are reasonably close to presentation.
|
// Only release frames that are reasonably close to presentation.
|
||||||
@ -2197,7 +2197,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
|||||||
// FrameProcessor input frames in this case.
|
// FrameProcessor input frames in this case.
|
||||||
boolean isLastFrame = processedLastFrame && processedFramesTimestampsUs.size() == 1;
|
boolean isLastFrame = processedLastFrame && processedFramesTimestampsUs.size() == 1;
|
||||||
if (renderer.shouldDropOutputBuffer(earlyUs, elapsedRealtimeUs, isLastFrame)) {
|
if (renderer.shouldDropOutputBuffer(earlyUs, elapsedRealtimeUs, isLastFrame)) {
|
||||||
releaseOutputFrame(FrameProcessor.DROP_OUTPUT_FRAME);
|
releaseProcessedFrameInternal(FrameProcessor.DROP_OUTPUT_FRAME);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2213,7 +2213,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
|||||||
pendingOutputSizeChangeNotificationTimeUs = C.TIME_UNSET;
|
pendingOutputSizeChangeNotificationTimeUs = C.TIME_UNSET;
|
||||||
renderer.maybeNotifyVideoSizeChanged(processedFrameSize);
|
renderer.maybeNotifyVideoSizeChanged(processedFrameSize);
|
||||||
}
|
}
|
||||||
releaseOutputFrame(adjustedFrameReleaseTimeNs);
|
releaseProcessedFrameInternal(adjustedFrameReleaseTimeNs);
|
||||||
if (isLastFrame) {
|
if (isLastFrame) {
|
||||||
releasedLastFrame = true;
|
releasedLastFrame = true;
|
||||||
}
|
}
|
||||||
@ -2239,7 +2239,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
|||||||
canEnableFrameProcessing = true;
|
canEnableFrameProcessing = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void releaseOutputFrame(long releaseTimeNs) {
|
private void releaseProcessedFrameInternal(long releaseTimeNs) {
|
||||||
checkStateNotNull(frameProcessor);
|
checkStateNotNull(frameProcessor);
|
||||||
frameProcessor.releaseOutputFrame(releaseTimeNs);
|
frameProcessor.releaseOutputFrame(releaseTimeNs);
|
||||||
processedFramesTimestampsUs.remove();
|
processedFramesTimestampsUs.remove();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user