Update renderers to use new API

This commit is contained in:
Iwan Timmer
2014-06-25 02:58:33 +02:00
parent 6bd51894b0
commit 244359e048
2 changed files with 42 additions and 17 deletions
@@ -1,38 +1,50 @@
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.
* @author Iwan Timmer * @author Iwan Timmer
*/ */
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;
@@ -13,6 +14,9 @@ import java.util.List;
public class OmxDecoderRenderer implements VideoDecoderRenderer { 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) {
@@ -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;
} }
/** /**