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