001    package com.github.sarxos.webcam.ds.ipcam.device.xvision;
002    
003    import java.awt.Dimension;
004    import java.net.MalformedURLException;
005    import java.net.URL;
006    
007    import com.github.sarxos.webcam.WebcamException;
008    import com.github.sarxos.webcam.ds.ipcam.IpCamDevice;
009    import com.github.sarxos.webcam.ds.ipcam.IpCamMode;
010    
011    
012    /**
013     * Speed Dome X104S IP Camera by XVision.
014     * 
015     * @author Bartosz Firyn (SarXos)
016     */
017    public class X104S extends IpCamDevice {
018    
019            public static final Dimension SIZE_SXGA = new Dimension(1280, 1024);
020            public static final Dimension SIZE_VGA = new Dimension(640, 480);
021            public static final Dimension SIZE_QVGA = new Dimension(320, 240);
022            public static final Dimension SIZE_QQVGA = new Dimension(160, 128);
023    
024            //@formatter:off
025            private static final Dimension[] SIZES = new Dimension[] { 
026                    SIZE_SXGA, 
027                    SIZE_VGA, 
028                    SIZE_QVGA, 
029                    SIZE_QQVGA,
030            };
031            //@formatter:on
032    
033            private URL base = null;
034    
035            public X104S(String name, String urlBase) {
036                    this(name, toURL(urlBase));
037            }
038    
039            public X104S(String name, URL base) {
040                    super(name, null, IpCamMode.PUSH);
041                    this.base = base;
042            }
043    
044            @Override
045            public Dimension[] getResolutions() {
046                    return SIZES;
047            }
048    
049            @Override
050            public void setResolution(Dimension size) {
051    
052                    int index = -1;
053                    for (int i = 0; i < SIZES.length; i++) {
054                            if (SIZES[i].equals(size)) {
055                                    index = i;
056                                    break;
057                            }
058                    }
059    
060                    if (index == -1) {
061                            throw new IllegalArgumentException(String.format("Incorrect size %s", size));
062                    }
063    
064                    super.setResolution(size);
065            }
066    
067            @Override
068            public URL getURL() {
069    
070                    int index = -1;
071                    for (int i = 0; i < SIZES.length; i++) {
072                            if (SIZES[i].equals(getResolution())) {
073                                    index = i;
074                                    break;
075                            }
076                    }
077    
078                    String r = "";
079                    switch (index) {
080                            case 0:
081                                    r = "sxga";
082                                    break;
083                            case 1:
084                                    r = "vga";
085                                    break;
086                            case 2:
087                                    r = "qvga";
088                                    break;
089                            case 3:
090                                    r = "qqvga";
091                                    break;
092                    }
093    
094                    String url = String.format("%s/video.cgi?resolution=%s&random=0.%s", base, r, System.currentTimeMillis());
095    
096                    try {
097                            return new URL(url);
098                    } catch (MalformedURLException e) {
099                            throw new WebcamException(String.format("Incorrect URL %s", url), e);
100                    }
101            }
102    
103    }