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:
Drew Hill 2017-10-12 08:39:06 -04:00
parent a3be937650
commit ac3501dd84
2 changed files with 22 additions and 16 deletions

View File

@ -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

View File

@ -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.
*