001    package com.github.sarxos.webcam;
002    
003    import java.awt.Dimension;
004    import java.awt.image.BufferedImage;
005    import java.nio.ByteBuffer;
006    
007    
008    /**
009     * Webcam device abstraction.
010     * 
011     * @author Bartosz Firyn (SarXos)
012     */
013    public 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            /**
035             * Get device name.
036             * 
037             * @return Device name
038             */
039            String getName();
040    
041            /**
042             * Get the list of all possible image resolutions.
043             * 
044             * @return Possible resolutions
045             */
046            Dimension[] getResolutions();
047    
048            /**
049             * Get currently set image size.
050             * 
051             * @return The size which is currently set
052             */
053            Dimension getResolution();
054    
055            /**
056             * Set new expected image size.
057             * 
058             * @param size the size to be set
059             */
060            void setResolution(Dimension size);
061    
062            /**
063             * Fetch image from underlying camera.
064             * 
065             * @return Image
066             */
067            BufferedImage getImage();
068    
069            /**
070             * Open device, it can be closed any time.
071             */
072            void open();
073    
074            /**
075             * Close device, however it can be open again.
076             */
077            void close();
078    
079            /**
080             * Dispose device. After device is disposed it cannot be open again.
081             */
082            void dispose();
083    
084            /**
085             * Is webcam device open?
086             * 
087             * @return True if webcam device is open, false otherwise
088             */
089            boolean isOpen();
090    
091    }