mirror of
https://github.com/moonlight-stream/moonlight-embedded.git
synced 2026-06-17 06:11:36 +00:00
Update renderers to use new API
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
package com.limelight.binding.video;
|
package com.limelight.binding.video;
|
||||||
|
|
||||||
import com.limelight.nvstream.av.DecodeUnit;
|
|
||||||
import com.limelight.nvstream.av.video.VideoDecoderRenderer;
|
import com.limelight.nvstream.av.video.VideoDecoderRenderer;
|
||||||
|
import com.limelight.nvstream.av.video.VideoDepacketizer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of a video decoder and renderer.
|
* Implementation of a video decoder and renderer.
|
||||||
@@ -9,30 +9,42 @@ import com.limelight.nvstream.av.video.VideoDecoderRenderer;
|
|||||||
*/
|
*/
|
||||||
public class FakeVideoRenderer implements VideoDecoderRenderer {
|
public class FakeVideoRenderer implements VideoDecoderRenderer {
|
||||||
|
|
||||||
|
private Thread thread;
|
||||||
|
private boolean running;
|
||||||
|
|
||||||
@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) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start(final VideoDepacketizer depacketizer) {
|
||||||
|
thread = new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
while (running) {
|
||||||
|
try {
|
||||||
|
depacketizer.takeNextDecodeUnit();
|
||||||
|
} catch (InterruptedException ex) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
running = true;
|
||||||
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stop() {
|
public void stop() {
|
||||||
|
running = false;
|
||||||
|
thread.interrupt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void release() {
|
public void release() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean submitDecodeUnit(DecodeUnit decodeUnit) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCapabilities() {
|
public int getCapabilities() {
|
||||||
return CAPABILITY_DIRECT_SUBMIT;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.limelight.binding.video;
|
|||||||
import com.limelight.nvstream.av.ByteBufferDescriptor;
|
import com.limelight.nvstream.av.ByteBufferDescriptor;
|
||||||
import com.limelight.nvstream.av.DecodeUnit;
|
import com.limelight.nvstream.av.DecodeUnit;
|
||||||
import com.limelight.nvstream.av.video.VideoDecoderRenderer;
|
import com.limelight.nvstream.av.video.VideoDecoderRenderer;
|
||||||
|
import com.limelight.nvstream.av.video.VideoDepacketizer;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -14,6 +15,9 @@ public class OmxDecoderRenderer implements VideoDecoderRenderer {
|
|||||||
|
|
||||||
private final static byte[] BITSTREAM_RESTRICTIONS = new byte[] {(byte) 0xF1, (byte) 0x83, 0x2A, 0x00};
|
private final static byte[] BITSTREAM_RESTRICTIONS = new byte[] {(byte) 0xF1, (byte) 0x83, 0x2A, 0x00};
|
||||||
|
|
||||||
|
private Thread thread;
|
||||||
|
private boolean running;
|
||||||
|
|
||||||
@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) {
|
||||||
int err = OmxDecoder.init();
|
int err = OmxDecoder.init();
|
||||||
@@ -22,7 +26,19 @@ public class OmxDecoderRenderer implements VideoDecoderRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start(final VideoDepacketizer depacketizer) {
|
||||||
|
thread = new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
while (running) {
|
||||||
|
try {
|
||||||
|
decodeUnit(depacketizer.takeNextDecodeUnit());
|
||||||
|
} catch (InterruptedException ex) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
running = true;
|
||||||
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -35,9 +51,7 @@ public class OmxDecoderRenderer implements VideoDecoderRenderer {
|
|||||||
OmxDecoder.destroy();
|
OmxDecoder.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public void decodeUnit(DecodeUnit decodeUnit) {
|
||||||
public boolean submitDecodeUnit(DecodeUnit decodeUnit) {
|
|
||||||
boolean ok = true;
|
|
||||||
List<ByteBufferDescriptor> units = decodeUnit.getBufferList();
|
List<ByteBufferDescriptor> units = decodeUnit.getBufferList();
|
||||||
|
|
||||||
ByteBufferDescriptor header = units.get(0);
|
ByteBufferDescriptor header = units.get(0);
|
||||||
@@ -50,18 +64,17 @@ public class OmxDecoderRenderer implements VideoDecoderRenderer {
|
|||||||
this.replace(header, header.length*8+Integer.numberOfLeadingZeros(last & - last)%8-9, 2, BITSTREAM_RESTRICTIONS, 3*8);
|
this.replace(header, header.length*8+Integer.numberOfLeadingZeros(last & - last)%8-9, 2, BITSTREAM_RESTRICTIONS, 3*8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean ok = true;
|
||||||
for (int i=0;i<units.size();i++) {
|
for (int i=0;i<units.size();i++) {
|
||||||
ByteBufferDescriptor bbd = units.get(i);
|
ByteBufferDescriptor bbd = units.get(i);
|
||||||
if (ok)
|
if (ok)
|
||||||
ok = (OmxDecoder.decode(bbd.data, bbd.offset, bbd.length, i == (units.size()-1)) == 0);
|
ok = (OmxDecoder.decode(bbd.data, bbd.offset, bbd.length, i == (units.size()-1)) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCapabilities() {
|
public int getCapabilities() {
|
||||||
return CAPABILITY_DIRECT_SUBMIT;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user