@Override public void close() { // not initialized = do nothing, no need to close if (!initializer.isInitialized()) { return; } if (!open) { return; } pipeStop(); open = false; }
@Override public BufferedImage getImage() { initializer.initialize(); LOG.trace("Device {} get image", getName()); try { return exchanger.exchange(null); } catch (InterruptedException e) { throw new WebcamException("Image exchange has been interrupted", e); } }
@Override public void dispose() { close(); LOG.debug("Teardowning device {}", getName()); initializer.teardown(); GsUtils.dispose(source); GsUtils.dispose(filter); GsUtils.dispose(convert); GsUtils.dispose(sink); GsUtils.dispose(pipe); disposed = true; }
@Override public void open() { if (disposed) { throw new WebcamException("Cannot open device because it has been already disposed"); } if (open) { return; } initializer.initialize(); final String name = getName(); final Dimension resolution = getResolution(); final String str = new StringBuilder(MIME_VIDEO_X_RAW) .append(",") .append("width=").append(resolution.width).append(",") .append("height").append(resolution.height) .toString(); final Caps caps = Caps.fromString(str); LOG.debug("Opening device {} with caps {}", name, caps); filter.setCaps(caps); pipePlay(); open = true; }
private Dimension[] findResolutions() { initializer.initialize(); pipeReady(); try { return findResolutions0(); } finally { pipeStop(); } }