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

View File

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