mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-21 12:03:02 +00:00
Don't skip frames when rendering
This commit is contained in:
parent
bf1c7dd675
commit
22ecdd9cf8
@ -20,7 +20,6 @@ public class MediaCodecDecoderRenderer implements VideoDecoderRenderer {
|
|||||||
private ByteBuffer[] videoDecoderInputBuffers;
|
private ByteBuffer[] videoDecoderInputBuffers;
|
||||||
private MediaCodec videoDecoder;
|
private MediaCodec videoDecoder;
|
||||||
private Thread rendererThread;
|
private Thread rendererThread;
|
||||||
private int redrawRate;
|
|
||||||
private boolean needsSpsFixup;
|
private boolean needsSpsFixup;
|
||||||
|
|
||||||
public static final List<String> blacklistedDecoderPrefixes;
|
public static final List<String> blacklistedDecoderPrefixes;
|
||||||
@ -91,8 +90,6 @@ public class MediaCodecDecoderRenderer implements VideoDecoderRenderer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setup(int width, int height, int redrawRate, Object renderTarget, int drFlags) {
|
public void setup(int width, int height, int redrawRate, Object renderTarget, int drFlags) {
|
||||||
this.redrawRate = redrawRate;
|
|
||||||
|
|
||||||
MediaCodecInfo safeDecoder = findSafeDecoder();
|
MediaCodecInfo safeDecoder = findSafeDecoder();
|
||||||
if (safeDecoder != null) {
|
if (safeDecoder != null) {
|
||||||
videoDecoder = MediaCodec.createByCodecName(safeDecoder.getName());
|
videoDecoder = MediaCodec.createByCodecName(safeDecoder.getName());
|
||||||
@ -121,7 +118,6 @@ public class MediaCodecDecoderRenderer implements VideoDecoderRenderer {
|
|||||||
rendererThread = new Thread() {
|
rendererThread = new Thread() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
long nextFrameTimeUs = 0;
|
|
||||||
BufferInfo info = new BufferInfo();
|
BufferInfo info = new BufferInfo();
|
||||||
while (!isInterrupted())
|
while (!isInterrupted())
|
||||||
{
|
{
|
||||||
@ -138,14 +134,7 @@ public class MediaCodecDecoderRenderer implements VideoDecoderRenderer {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (outIndex >= 0) {
|
if (outIndex >= 0) {
|
||||||
boolean render = false;
|
videoDecoder.releaseOutputBuffer(outIndex, true);
|
||||||
|
|
||||||
if (currentTimeUs() >= nextFrameTimeUs) {
|
|
||||||
render = true;
|
|
||||||
nextFrameTimeUs = computePresentationTime(redrawRate);
|
|
||||||
}
|
|
||||||
|
|
||||||
videoDecoder.releaseOutputBuffer(outIndex, render);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -154,14 +143,6 @@ public class MediaCodecDecoderRenderer implements VideoDecoderRenderer {
|
|||||||
rendererThread.start();
|
rendererThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static long currentTimeUs() {
|
|
||||||
return System.nanoTime() / 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
private long computePresentationTime(int frameRate) {
|
|
||||||
return currentTimeUs() + (1000000 / frameRate);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start() {
|
||||||
startRendererThread();
|
startRendererThread();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user