001package com.github.sarxos.webcam;
002
003import java.awt.Dimension;
004import java.awt.image.BufferedImage;
005import java.nio.ByteBuffer;
006
007
008/**
009 * Webcam device abstraction.
010 * 
011 * @author Bartosz Firyn (SarXos)
012 */
013public interface WebcamDevice {
014
015        /**
016         * This interface should be implemented by all webcam devices supporting
017         * possibility to access raw bytes or direct bytes buffer from native webcam
018         * device.
019         * 
020         * @author Bartosz Firyn (SarXos)
021         */
022        public static interface BufferAccess {
023
024                /**
025                 * Get image in form of raw bytes. Do <b>not</b> use this buffer to set
026                 * bytes value, it should be used only for read purpose!
027                 * 
028                 * @return Bytes buffer
029                 */
030                ByteBuffer getImageBytes();
031
032        }
033
034        public static interface FPSSource {
035
036                /**
037                 * Get current device FPS.
038                 * 
039                 * @return FPS
040                 */
041                double getFPS();
042
043        }
044
045        /**
046         * Get device name.
047         * 
048         * @return Device name
049         */
050        String getName();
051
052        /**
053         * Get the list of all possible image resolutions.
054         * 
055         * @return Possible resolutions
056         */
057        Dimension[] getResolutions();
058
059        /**
060         * Get currently set image size.
061         * 
062         * @return The size which is currently set
063         */
064        Dimension getResolution();
065
066        /**
067         * Set new expected image size.
068         * 
069         * @param size the size to be set
070         */
071        void setResolution(Dimension size);
072
073        /**
074         * Fetch image from underlying camera.
075         * 
076         * @return Image
077         */
078        BufferedImage getImage();
079
080        /**
081         * Open device, it can be closed any time.
082         */
083        void open();
084
085        /**
086         * Close device, however it can be open again.
087         */
088        void close();
089
090        /**
091         * Dispose device. After device is disposed it cannot be open again.
092         */
093        void dispose();
094
095        /**
096         * Is webcam device open?
097         * 
098         * @return True if webcam device is open, false otherwise
099         */
100        boolean isOpen();
101}