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;
|
||||
tunneling = tunnelingAudioSessionId != C.AUDIO_SESSION_ID_UNSET;
|
||||
eventDispatcher.enabled(decoderCounters);
|
||||
frameReleaseTimeHelper.enable();
|
||||
frameReleaseTimeHelper.enable(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -38,10 +38,10 @@ public final class VideoFrameReleaseTimeHelper {
|
||||
private static final long VSYNC_OFFSET_PERCENTAGE = 80;
|
||||
private static final int MIN_FRAMES_FOR_ADJUSTMENT = 6;
|
||||
|
||||
private final VSyncSampler vsyncSampler;
|
||||
private final boolean useDefaultDisplayVsync;
|
||||
private final long vsyncDurationNs;
|
||||
private final long vsyncOffsetNs;
|
||||
private VSyncSampler vsyncSampler;
|
||||
private boolean useDefaultDisplayVsync;
|
||||
private long vsyncDurationNs;
|
||||
private long vsyncOffsetNs;
|
||||
|
||||
private long lastFramePresentationTimeUs;
|
||||
private long adjustedLastFrameTimeNs;
|
||||
@ -71,24 +71,16 @@ public final class VideoFrameReleaseTimeHelper {
|
||||
}
|
||||
|
||||
private VideoFrameReleaseTimeHelper(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.
|
||||
}
|
||||
setSync(defaultDisplayRefreshRate);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables the helper.
|
||||
*/
|
||||
public void enable() {
|
||||
public void enable(Context context) {
|
||||
haveSync = false;
|
||||
if (useDefaultDisplayVsync) {
|
||||
setSync(getDefaultDisplayRefreshRate(context));
|
||||
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.
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user