From 244359e048643404544a69ece008d49e5c1e584e Mon Sep 17 00:00:00 2001 From: Iwan Timmer Date: Wed, 25 Jun 2014 02:58:33 +0200 Subject: [PATCH] Update renderers to use new API --- .../binding/video/FakeVideoRenderer.java | 32 +++++++++++++------ .../binding/video/OmxDecoderRenderer.java | 27 ++++++++++++---- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/src/com/limelight/binding/video/FakeVideoRenderer.java b/src/com/limelight/binding/video/FakeVideoRenderer.java index 36dc40b..ac0b127 100644 --- a/src/com/limelight/binding/video/FakeVideoRenderer.java +++ b/src/com/limelight/binding/video/FakeVideoRenderer.java @@ -1,38 +1,50 @@ package com.limelight.binding.video; -import com.limelight.nvstream.av.DecodeUnit; import com.limelight.nvstream.av.video.VideoDecoderRenderer; +import com.limelight.nvstream.av.video.VideoDepacketizer; /** * Implementation of a video decoder and renderer. * @author Iwan Timmer */ public class FakeVideoRenderer implements VideoDecoderRenderer { + + private Thread thread; + private boolean running; @Override public void setup(int width, int height, int redrawRate, Object renderTarget, int drFlags) { } - + @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 public void stop() { + running = false; + thread.interrupt(); } @Override public void release() { } - @Override - public boolean submitDecodeUnit(DecodeUnit decodeUnit) { - return true; - } - @Override public int getCapabilities() { - return CAPABILITY_DIRECT_SUBMIT; + return 0; } - + } diff --git a/src/com/limelight/binding/video/OmxDecoderRenderer.java b/src/com/limelight/binding/video/OmxDecoderRenderer.java index f15f521..3271b1f 100644 --- a/src/com/limelight/binding/video/OmxDecoderRenderer.java +++ b/src/com/limelight/binding/video/OmxDecoderRenderer.java @@ -3,6 +3,7 @@ package com.limelight.binding.video; import com.limelight.nvstream.av.ByteBufferDescriptor; import com.limelight.nvstream.av.DecodeUnit; import com.limelight.nvstream.av.video.VideoDecoderRenderer; +import com.limelight.nvstream.av.video.VideoDepacketizer; import java.util.List; @@ -13,6 +14,9 @@ import java.util.List; public class OmxDecoderRenderer implements VideoDecoderRenderer { private final static byte[] BITSTREAM_RESTRICTIONS = new byte[] {(byte) 0xF1, (byte) 0x83, 0x2A, 0x00}; + + private Thread thread; + private boolean running; @Override public void setup(int width, int height, int redrawRate, Object renderTarget, int drFlags) { @@ -22,7 +26,19 @@ public class OmxDecoderRenderer implements VideoDecoderRenderer { } @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 @@ -35,9 +51,7 @@ public class OmxDecoderRenderer implements VideoDecoderRenderer { OmxDecoder.destroy(); } - @Override - public boolean submitDecodeUnit(DecodeUnit decodeUnit) { - boolean ok = true; + public void decodeUnit(DecodeUnit decodeUnit) { List units = decodeUnit.getBufferList(); 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); } + boolean ok = true; for (int i=0;i