make videoframereleasetimehelper get refresh rate when it's enabled, so we can reuse video renderer for multiple clips with different frame rates
This commit is contained in:
parent
a3be937650
commit
ac3501dd84
@ -236,7 +236,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
|||||||
tunnelingAudioSessionId = getConfiguration().tunnelingAudioSessionId;
|
tunnelingAudioSessionId = getConfiguration().tunnelingAudioSessionId;
|
||||||
tunneling = tunnelingAudioSessionId != C.AUDIO_SESSION_ID_UNSET;
|
tunneling = tunnelingAudioSessionId != C.AUDIO_SESSION_ID_UNSET;
|
||||||
eventDispatcher.enabled(decoderCounters);
|
eventDispatcher.enabled(decoderCounters);
|
||||||
frameReleaseTimeHelper.enable();
|
frameReleaseTimeHelper.enable(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -38,10 +38,10 @@ public final class VideoFrameReleaseTimeHelper {
|
|||||||
private static final long VSYNC_OFFSET_PERCENTAGE = 80;
|
private static final long VSYNC_OFFSET_PERCENTAGE = 80;
|
||||||
private static final int MIN_FRAMES_FOR_ADJUSTMENT = 6;
|
private static final int MIN_FRAMES_FOR_ADJUSTMENT = 6;
|
||||||
|
|
||||||
private final VSyncSampler vsyncSampler;
|
private VSyncSampler vsyncSampler;
|
||||||
private final boolean useDefaultDisplayVsync;
|
private boolean useDefaultDisplayVsync;
|
||||||
private final long vsyncDurationNs;
|
private long vsyncDurationNs;
|
||||||
private final long vsyncOffsetNs;
|
private long vsyncOffsetNs;
|
||||||
|
|
||||||
private long lastFramePresentationTimeUs;
|
private long lastFramePresentationTimeUs;
|
||||||
private long adjustedLastFrameTimeNs;
|
private long adjustedLastFrameTimeNs;
|
||||||
@ -71,24 +71,16 @@ public final class VideoFrameReleaseTimeHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private VideoFrameReleaseTimeHelper(double defaultDisplayRefreshRate) {
|
private VideoFrameReleaseTimeHelper(double defaultDisplayRefreshRate) {
|
||||||
useDefaultDisplayVsync = defaultDisplayRefreshRate != DISPLAY_REFRESH_RATE_UNKNOWN;
|
setSync(defaultDisplayRefreshRate);
|
||||||
if (useDefaultDisplayVsync) {
|
|
||||||
vsyncSampler = VSyncSampler.getInstance();
|
|
||||||
vsyncDurationNs = (long) (C.NANOS_PER_SECOND / defaultDisplayRefreshRate);
|
|
||||||
vsyncOffsetNs = (vsyncDurationNs * VSYNC_OFFSET_PERCENTAGE) / 100;
|
|
||||||
} else {
|
|
||||||
vsyncSampler = null;
|
|
||||||
vsyncDurationNs = -1; // Value unused.
|
|
||||||
vsyncOffsetNs = -1; // Value unused.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables the helper.
|
* Enables the helper.
|
||||||
*/
|
*/
|
||||||
public void enable() {
|
public void enable(Context context) {
|
||||||
haveSync = false;
|
haveSync = false;
|
||||||
if (useDefaultDisplayVsync) {
|
if (useDefaultDisplayVsync) {
|
||||||
|
setSync(getDefaultDisplayRefreshRate(context));
|
||||||
vsyncSampler.addObserver();
|
vsyncSampler.addObserver();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -102,6 +94,20 @@ public final class VideoFrameReleaseTimeHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setSync(double defaultDisplayRefreshRate) {
|
||||||
|
|
||||||
|
useDefaultDisplayVsync = defaultDisplayRefreshRate != DISPLAY_REFRESH_RATE_UNKNOWN;
|
||||||
|
if (useDefaultDisplayVsync) {
|
||||||
|
vsyncSampler = VSyncSampler.getInstance();
|
||||||
|
vsyncDurationNs = (long) (C.NANOS_PER_SECOND / defaultDisplayRefreshRate);
|
||||||
|
vsyncOffsetNs = (vsyncDurationNs * VSYNC_OFFSET_PERCENTAGE) / 100;
|
||||||
|
} else {
|
||||||
|
vsyncSampler = null;
|
||||||
|
vsyncDurationNs = -1; // Value unused.
|
||||||
|
vsyncOffsetNs = -1; // Value unused.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adjusts a frame release timestamp.
|
* Adjusts a frame release timestamp.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user