mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-19 19:13:03 +00:00
Use a less power intensive way of keeping the DVFS state friendly
This commit is contained in:
parent
49e51f5f6f
commit
08bcd97594
@ -31,7 +31,8 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
private MediaCodecInfo hevcDecoder;
|
private MediaCodecInfo hevcDecoder;
|
||||||
|
|
||||||
private MediaCodec videoDecoder;
|
private MediaCodec videoDecoder;
|
||||||
private Thread rendererThread, spinnerThread;
|
private Thread rendererThread;
|
||||||
|
private Thread[] spinnerThreads;
|
||||||
private boolean needsSpsBitstreamFixup, isExynos4;
|
private boolean needsSpsBitstreamFixup, isExynos4;
|
||||||
private boolean adaptivePlayback, directSubmit;
|
private boolean adaptivePlayback, directSubmit;
|
||||||
private boolean constrainedHighProfile;
|
private boolean constrainedHighProfile;
|
||||||
@ -97,6 +98,8 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
public MediaCodecDecoderRenderer(int videoFormat) {
|
public MediaCodecDecoderRenderer(int videoFormat) {
|
||||||
//dumpDecoders();
|
//dumpDecoders();
|
||||||
|
|
||||||
|
spinnerThreads = new Thread[Runtime.getRuntime().availableProcessors()];
|
||||||
|
|
||||||
avcDecoder = findAvcDecoder();
|
avcDecoder = findAvcDecoder();
|
||||||
if (avcDecoder != null) {
|
if (avcDecoder != null) {
|
||||||
LimeLog.info("Selected AVC decoder: "+avcDecoder.getName());
|
LimeLog.info("Selected AVC decoder: "+avcDecoder.getName());
|
||||||
@ -346,19 +349,26 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
rendererThread.start();
|
rendererThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startSpinnerThread() {
|
private void startSpinnerThreads() {
|
||||||
spinnerThread = new Thread() {
|
LimeLog.info("Using "+spinnerThreads.length+" spinner threads");
|
||||||
@Override
|
for (int i = 0; i < spinnerThreads.length; i++) {
|
||||||
public void run() {
|
spinnerThreads[i] = new Thread() {
|
||||||
// This thread exists to keep the CPU at a higher DVFS state on devices
|
@Override
|
||||||
// where the governor scales clock speed sporadically, causing dropped frames.
|
public void run() {
|
||||||
while (!isInterrupted()) {
|
// This thread exists to keep the CPU at a higher DVFS state on devices
|
||||||
Thread.yield();
|
// where the governor scales clock speed sporadically, causing dropped frames.
|
||||||
|
while (!isInterrupted()) {
|
||||||
|
try {
|
||||||
|
Thread.sleep(0, 1);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
};
|
spinnerThreads[i].setPriority(Thread.MIN_PRIORITY);
|
||||||
spinnerThread.setPriority(Thread.MIN_PRIORITY);
|
spinnerThreads[i].start();
|
||||||
spinnerThread.start();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int dequeueInputBuffer() {
|
private int dequeueInputBuffer() {
|
||||||
@ -392,7 +402,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start() {
|
||||||
startRendererThread();
|
startRendererThread();
|
||||||
startSpinnerThread();
|
startSpinnerThreads();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -405,11 +415,15 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
rendererThread.join();
|
rendererThread.join();
|
||||||
} catch (InterruptedException ignored) { }
|
} catch (InterruptedException ignored) { }
|
||||||
|
|
||||||
// Halt the spinner thread
|
// Halt the spinner threads
|
||||||
spinnerThread.interrupt();
|
for (Thread t : spinnerThreads) {
|
||||||
try {
|
t.interrupt();
|
||||||
spinnerThread.join();
|
}
|
||||||
} catch (InterruptedException ignored) { }
|
for (Thread t : spinnerThreads) {
|
||||||
|
try {
|
||||||
|
t.join();
|
||||||
|
} catch (InterruptedException ignored) { }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user