Commit ac3501dd by Drew Hill

make videoframereleasetimehelper get refresh rate when it's enabled, so we can…

make videoframereleasetimehelper get refresh rate when it's enabled, so we can reuse video renderer for multiple clips with different frame rates
parent a3be9376
......@@ -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.
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment