From 304243a457fb67b977444a8a8fde950cc7f498ae Mon Sep 17 00:00:00 2001 From: Bartosz Firyn Date: Wed, 6 Feb 2013 14:05:27 +0100 Subject: [PATCH] Small changes in processor, fix tests --- .../java/com/github/sarxos/webcam/Webcam.java | 23 ++----------- .../github/sarxos/webcam/WebcamProcessor.java | 17 +--------- .../com/github/sarxos/webcam/WebcamTest.java | 34 +++++++++++++++++++ 3 files changed, 38 insertions(+), 36 deletions(-) diff --git a/webcam-capture/src/main/java/com/github/sarxos/webcam/Webcam.java b/webcam-capture/src/main/java/com/github/sarxos/webcam/Webcam.java index ca139ddf..c8665d07 100644 --- a/webcam-capture/src/main/java/com/github/sarxos/webcam/Webcam.java +++ b/webcam-capture/src/main/java/com/github/sarxos/webcam/Webcam.java @@ -84,7 +84,7 @@ public void run() { /** * Webcam tasks processor synchronize non-thread-safe operations. */ - private static WebcamProcessor processor = null; + private static WebcamProcessor processor = new WebcamProcessor(); /** * Webcam discovery service. @@ -500,10 +500,6 @@ public static synchronized WebcamDriver getDriver() { driver = new WebcamDefaultDriver(); } - if (!driver.isThreadSafe()) { - processor = new WebcamProcessor(); - } - return driver; } @@ -524,10 +520,6 @@ public static synchronized void setDriver(WebcamDriver driver) { resetDriver(); Webcam.driver = driver; - - if (!driver.isThreadSafe()) { - processor = new WebcamProcessor(); - } } /** @@ -555,10 +547,6 @@ public static synchronized void setDriver(Class driverCl } catch (IllegalAccessException e) { throw new WebcamException(e); } - - if (!driver.isThreadSafe()) { - processor = new WebcamProcessor(); - } } /** @@ -566,22 +554,17 @@ public static synchronized void setDriver(Class driverCl *
* This method is not thread-safe! */ - public static void resetDriver() { + public static synchronized void resetDriver() { DRIVERS_LIST.clear(); DRIVERS_LIST.addAll(Arrays.asList(DRIVERS_DEFAULT)); - driver = null; - if (discovery != null) { discovery.shutdown(); discovery = null; } - if (processor != null) { - processor.shutdown(); - processor = null; - } + driver = null; } /** diff --git a/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamProcessor.java b/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamProcessor.java index 6f49e74c..ba9879cd 100644 --- a/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamProcessor.java +++ b/webcam-capture/src/main/java/com/github/sarxos/webcam/WebcamProcessor.java @@ -36,8 +36,6 @@ private static final class AtomicProcessor implements Runnable { private SynchronousQueue inbound = new SynchronousQueue(true); private SynchronousQueue outbound = new SynchronousQueue(true); - private volatile boolean running = true; - /** * Process task. * @@ -50,14 +48,9 @@ public WebcamTask process(WebcamTask task) throws InterruptedException { return outbound.take(); } - public void stop() { - running = false; - } - @Override public void run() { - running = true; - while (running) { + while (true) { WebcamTask t = null; try { (t = inbound.take()).handle(); @@ -109,12 +102,4 @@ public void process(WebcamTask task) { throw new WebcamException("Processing interrupted", e); } } - - /** - * Stop processing thread. - */ - public void shutdown() { - processor.stop(); - started.set(false); - } } diff --git a/webcam-capture/src/test/java/com/github/sarxos/webcam/WebcamTest.java b/webcam-capture/src/test/java/com/github/sarxos/webcam/WebcamTest.java index 51311578..7d22ba79 100644 --- a/webcam-capture/src/test/java/com/github/sarxos/webcam/WebcamTest.java +++ b/webcam-capture/src/test/java/com/github/sarxos/webcam/WebcamTest.java @@ -22,75 +22,109 @@ public class WebcamTest { @Before public void prepare() { + System.out.println(Thread.currentThread().getName() + ": Register dummy driver"); Webcam.registerDriver(DummyDriver.class); } @After public void cleanup() { + System.out.println(Thread.currentThread().getName() + ": Reset driver"); Webcam.resetDriver(); } @Test public void test_getWebcams() { + System.out.println(Thread.currentThread().getName() + ": test_getWebcams() start"); + List webcams = Webcam.getWebcams(); List devices = DummyDriver.getInstance().getDevices(); Assert.assertTrue(webcams.size() > 0); Assert.assertEquals(devices.size(), webcams.size()); + + System.out.println(Thread.currentThread().getName() + ": test_getWebcams() end"); } @Test public void test_getDefault() { + System.out.println(Thread.currentThread().getName() + ": test_getDefault() start"); + List webcams = Webcam.getWebcams(); List devices = DummyDriver.getInstance().getDevices(); Assert.assertNotNull(Webcam.getDefault()); Assert.assertSame(webcams.get(0), Webcam.getDefault()); Assert.assertSame(devices.get(0), Webcam.getDefault().getDevice()); + + System.out.println(Thread.currentThread().getName() + ": test_getDefault() end"); } @Test public void test_open() { + + System.out.println(Thread.currentThread().getName() + ": test_open() start"); + Webcam webcam = Webcam.getDefault(); webcam.open(); Assert.assertTrue(webcam.isOpen()); webcam.open(); Assert.assertTrue(webcam.isOpen()); + + System.out.println(Thread.currentThread().getName() + ": test_open() end"); } @Test public void test_close() { + System.out.println(Thread.currentThread().getName() + ": test_close() start"); + Webcam webcam = Webcam.getDefault(); webcam.open(); + Assert.assertSame(DummyDriver.class, Webcam.getDriver().getClass()); + Assert.assertTrue(webcam.isOpen()); webcam.close(); Assert.assertFalse(webcam.isOpen()); webcam.close(); Assert.assertFalse(webcam.isOpen()); + + System.out.println(Thread.currentThread().getName() + ": test_close() end"); } @Test public void test_getImage() { + System.out.println(Thread.currentThread().getName() + ": test_getImage() start"); + Webcam webcam = Webcam.getDefault(); webcam.open(); + + Assert.assertSame(DummyDriver.class, Webcam.getDriver().getClass()); + Image image = webcam.getImage(); Assert.assertNotNull(image); + + System.out.println(Thread.currentThread().getName() + ": test_getImage() end"); } @Test public void test_getSizes() { + System.out.println(Thread.currentThread().getName() + ": test_getSizes() start"); + Dimension[] sizes = Webcam.getDefault().getViewSizes(); + Assert.assertSame(DummyDriver.class, Webcam.getDriver().getClass()); + Assert.assertNotNull(sizes); Assert.assertEquals(2, sizes.length); + + System.out.println(Thread.currentThread().getName() + ": test_getSizes() end"); } @Test