Repository: openmeetings
Updated Branches:
  refs/heads/master 7bc1800f9 -> 381838de8


[OPENMEETINGS-1714] more issues are fixed


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/381838de
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/381838de
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/381838de

Branch: refs/heads/master
Commit: 381838de81b518b6330ada11c0ba81b426a28e1f
Parents: 7bc1800
Author: Maxim Solodovnik <[email protected]>
Authored: Fri Sep 29 13:16:53 2017 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Fri Sep 29 13:16:53 2017 +0700

----------------------------------------------------------------------
 .../db/dto/basic/ServiceResult.java             |   4 +-
 .../openmeetings/screenshare/CaptureScreen.java |  26 ++--
 .../apache/openmeetings/screenshare/Core.java   |  31 +++--
 .../screenshare/ScreenV1Encoder.java            |  30 ++---
 .../screenshare/gui/ScreenDimensions.java       | 120 +++++++++++++++----
 .../gui/ScreenHeightMouseListener.java          |   8 +-
 .../screenshare/gui/ScreenMouseListener.java    |   6 +-
 .../screenshare/gui/ScreenSharerFrame.java      | 100 +++++++++-------
 .../gui/ScreenWidthMouseListener.java           |   8 +-
 .../screenshare/gui/ScreenXMouseListener.java   |   6 +-
 .../screenshare/gui/ScreenYMouseListener.java   |   6 +-
 .../openmeetings/screenshare/job/EncodeJob.java |  19 +--
 .../openmeetings/screenshare/job/RemoteJob.java |  22 ++--
 .../util/OpenmeetingsVariables.java             |   5 +-
 .../openmeetings/web/app/Application.java       |   3 +-
 15 files changed, 242 insertions(+), 152 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/ServiceResult.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/ServiceResult.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/ServiceResult.java
index eb617d1..1bed23b 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/ServiceResult.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/ServiceResult.java
@@ -31,8 +31,8 @@ import org.apache.openmeetings.util.OmException;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class ServiceResult implements Serializable {
        private static final long serialVersionUID = 1L;
-       public static ServiceResult UNKNOWN = new 
ServiceResult(OmException.UNKNOWN.getKey(), Type.ERROR);
-       public static ServiceResult NO_PERMISSION = new 
ServiceResult("error.notallowed", Type.ERROR);
+       public static final ServiceResult UNKNOWN = new 
ServiceResult(OmException.UNKNOWN.getKey(), Type.ERROR);
+       public static final ServiceResult NO_PERMISSION = new 
ServiceResult("error.notallowed", Type.ERROR);
        private String message;
        private String type;
        @XmlType(namespace="org.apache.openmeetings.db.dto.basic.type")

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java
index 0ce3502..eb7fc8d 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java
@@ -19,7 +19,6 @@
 package org.apache.openmeetings.screenshare;
 
 import static org.apache.openmeetings.screenshare.Core.QUARTZ_GROUP_NAME;
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.FPS;
 import static org.apache.openmeetings.screenshare.util.Util.getQurtzProps;
 import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -29,6 +28,7 @@ import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.openmeetings.screenshare.gui.ScreenDimensions;
 import org.apache.openmeetings.screenshare.job.CursorJob;
 import org.apache.openmeetings.screenshare.job.EncodeJob;
 import org.apache.openmeetings.screenshare.job.SendJob;
@@ -50,7 +50,7 @@ public class CaptureScreen extends Thread {
        private static final Logger log = getLogger(CaptureScreen.class);
        private final static String QUARTZ_CURSOR_TRIGGER_NAME = 
"CursorTrigger";
        private final static String QUARTZ_CURSOR_JOB_NAME = "CursorJob";
-       private Core core;
+       private final Core core;
        private int timestampDelta;
        private volatile AtomicInteger timestamp = new AtomicInteger(0);
        private volatile AtomicBoolean sendFrameGuard = new 
AtomicBoolean(false);
@@ -65,6 +65,8 @@ public class CaptureScreen extends Thread {
        private Number streamId;
        private boolean startPublish = false;
        private Scheduler _scheduler;
+       private final JobDetail cursorJob;
+       private final Trigger cursorTrigger;
 
        public CaptureScreen(Core coreScreenShare, IScreenShare client, String 
host, String app, int port) {
                core = coreScreenShare;
@@ -72,6 +74,12 @@ public class CaptureScreen extends Thread {
                this.host = host;
                this.app = app;
                this.port = port;
+               cursorJob = 
JobBuilder.newJob(CursorJob.class).withIdentity(QUARTZ_CURSOR_JOB_NAME, 
QUARTZ_GROUP_NAME).build();
+               cursorTrigger = TriggerBuilder.newTrigger()
+                               .withIdentity(QUARTZ_CURSOR_TRIGGER_NAME, 
QUARTZ_GROUP_NAME)
+                               
.withSchedule(simpleSchedule().withIntervalInMilliseconds(1000 / Math.min(5, 
core.getDim().getFPS())).repeatForever())
+                               .build();
+               cursorJob.getJobDataMap().put(CursorJob.CAPTURE_KEY, this);
        }
 
        private Scheduler getScheduler() {
@@ -107,8 +115,8 @@ public class CaptureScreen extends Thread {
                                Thread.sleep(60);
                        }
 
-                       timestampDelta = 1000 / FPS;
-                       se = new ScreenV1Encoder(3 * FPS); //send keyframe 
every 3 seconds
+                       timestampDelta = 1000 / core.getDim().getFPS();
+                       se = new ScreenV1Encoder(core.getDim()); //send 
keyframe every 3 seconds
                        startTime = System.currentTimeMillis();
 
                        JobDetail encodeJob = 
JobBuilder.newJob(EncodeJob.class).withIdentity("EncodeJob", 
QUARTZ_GROUP_NAME).build();
@@ -220,12 +228,6 @@ public class CaptureScreen extends Thread {
                try {
                        Scheduler s = getScheduler();
                        if (sendCursor) {
-                               JobDetail cursorJob = 
JobBuilder.newJob(CursorJob.class).withIdentity(QUARTZ_CURSOR_JOB_NAME, 
QUARTZ_GROUP_NAME).build();
-                               Trigger cursorTrigger = 
TriggerBuilder.newTrigger()
-                                               
.withIdentity(QUARTZ_CURSOR_TRIGGER_NAME, QUARTZ_GROUP_NAME)
-                                               
.withSchedule(simpleSchedule().withIntervalInMilliseconds(1000 / Math.min(5, 
FPS)).repeatForever())
-                                               .build();
-                               
cursorJob.getJobDataMap().put(CursorJob.CAPTURE_KEY, this);
                                s.scheduleJob(cursorJob, cursorTrigger);
                        } else {
                                
s.deleteJob(JobKey.jobKey(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME));
@@ -234,4 +236,8 @@ public class CaptureScreen extends Thread {
                        log.error("Unexpected Error schedule/unschedule cursor 
job", e);
                }
        }
+
+       public ScreenDimensions getDim() {
+               return core.getDim();
+       }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/Core.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/Core.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/Core.java
index 86e76a8..08af0d1 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/Core.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/Core.java
@@ -19,12 +19,6 @@
 package org.apache.openmeetings.screenshare;
 
 import static java.lang.Boolean.TRUE;
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeX;
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeY;
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerHeight;
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerWidth;
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerX;
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerY;
 import static org.apache.openmeetings.screenshare.util.Util.getQurtzProps;
 import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -38,6 +32,7 @@ import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.LinkedBlockingQueue;
 
+import org.apache.openmeetings.screenshare.gui.ScreenDimensions;
 import org.apache.openmeetings.screenshare.gui.ScreenSharerFrame;
 import org.apache.openmeetings.screenshare.job.RemoteJob;
 import org.quartz.JobBuilder;
@@ -65,7 +60,6 @@ import 
org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
 
 public class Core implements IPendingServiceCallback, INetStreamEventHandler {
        private static final Logger log = getLogger(Core.class);
-       public static float Ampl_factor = 1f;
        final static String QUARTZ_GROUP_NAME = "ScreenShare";
        final static String QUARTZ_REMOTE_JOB_NAME = "RemoteJob";
        final static String QUARTZ_REMOTE_TRIGGER_NAME = "RemoteTrigger";
@@ -107,6 +101,7 @@ public class Core implements IPendingServiceCallback, 
INetStreamEventHandler {
        private SchedulerFactory schdlrFactory;
        private Scheduler schdlr;
        private LinkedBlockingQueue<Map<String, Object>> remoteEvents = new 
LinkedBlockingQueue<>();
+       private final ScreenDimensions dim;
 
        private CaptureScreen getCapture() {
                if (_capture == null) {
@@ -121,6 +116,7 @@ public class Core implements IPendingServiceCallback, 
INetStreamEventHandler {
        // 
------------------------------------------------------------------------
 
        public Core(String[] args) {
+               dim = new ScreenDimensions();
                try {
                        
System.setProperty("org.terracotta.quartz.skipUpdateCheck", "true");
                        for (String arg : args) {
@@ -222,11 +218,11 @@ public class Core implements IPendingServiceCallback, 
INetStreamEventHandler {
                try {
                        Point mouseP = MouseInfo.getPointerInfo().getLocation();
 
-                       float scaleFactor = (1.0f * resizeX) / spinnerWidth;
+                       float scaleFactor = (1.0f * dim.getResizeX()) / 
dim.getSpinnerWidth();
 
                        // Real size: Real mouse position = Resize : X
-                       int x = (int)(Ampl_factor * (mouseP.getX() - spinnerX) 
* scaleFactor);
-                       int y = (int)(Ampl_factor * (mouseP.getY() - spinnerY) 
* scaleFactor);
+                       int x = (int)((mouseP.getX() - dim.getSpinnerX()) * 
scaleFactor);
+                       int y = (int)((mouseP.getY() - dim.getSpinnerY()) * 
scaleFactor);
 
                        if (instance.getConnection() != null) {
                                if (Red5.getConnectionLocal() == null) {
@@ -256,8 +252,8 @@ public class Core implements IPendingServiceCallback, 
INetStreamEventHandler {
                        }
                        Map<String, Object> map = new HashMap<>();
 
-                       int scaledWidth = (int)(Ampl_factor * resizeX);
-                       int scaledHeight = (int)(Ampl_factor * resizeY);
+                       int scaledWidth = dim.getResizeX();
+                       int scaledHeight = dim.getResizeY();
 
                        map.put("screenWidth", scaledWidth);
                        map.put("screenHeight", scaledHeight);
@@ -329,6 +325,11 @@ public class Core implements IPendingServiceCallback, 
INetStreamEventHandler {
                }
        }
 
+       public void sharingStop() {
+               startSharing = false;
+               captureScreenStop("stopStreaming");
+       }
+
        public void recordingStop() {
                startRecording = false;
                captureScreenStop("stopRecording");
@@ -540,7 +541,7 @@ public class Core implements IPendingServiceCallback, 
INetStreamEventHandler {
                                        log.debug("createPublishStream result 
stream id: {}; name: {}", getCapture().getStreamId(), broadcastId);
                                        
instance.publish(getCapture().getStreamId(), broadcastId, "live", this);
 
-                                       log.debug("setup capture thread 
spinnerWidth = {}; spinnerHeight = {};", spinnerWidth, spinnerHeight);
+                                       log.debug("setup capture thread 
spinnerWidth = {}; spinnerHeight = {};", dim.getSpinnerWidth(), 
dim.getSpinnerHeight());
 
                                        if (!getCapture().isAlive()) {
                                                
getCapture().setSendCursor(startSharing);
@@ -603,4 +604,8 @@ public class Core implements IPendingServiceCallback, 
INetStreamEventHandler {
        public LinkedBlockingQueue<Map<String, Object>> getRemoteEvents() {
                return remoteEvents;
        }
+
+       public ScreenDimensions getDim() {
+               return dim;
+       }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/ScreenV1Encoder.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/ScreenV1Encoder.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/ScreenV1Encoder.java
index b5500bd..7fa9980 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/ScreenV1Encoder.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/ScreenV1Encoder.java
@@ -18,8 +18,6 @@
  */
 package org.apache.openmeetings.screenshare;
 
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeX;
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeY;
 import static org.red5.io.IoConstants.FLAG_CODEC_SCREEN;
 import static org.red5.io.IoConstants.FLAG_FRAMETYPE_INTERFRAME;
 import static org.red5.io.IoConstants.FLAG_FRAMETYPE_KEYFRAME;
@@ -33,38 +31,30 @@ import java.io.OutputStream;
 import java.util.zip.Deflater;
 
 import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.openmeetings.screenshare.gui.ScreenDimensions;
 import org.red5.server.net.rtmp.event.VideoData;
 
 public class ScreenV1Encoder extends BaseScreenEncoder {
        private int[][] last = null;
-       private static int KEY_FRAME_INDEX = 25;
        private static int DEFAULT_BLOCK_SIZE = 32;
        private static int DEFAULT_SCREEN_WIDTH = 1920;
        private static int DEFAULT_SCREEN_HEIGHT = 1080;
        private int keyFrameIndex;
        private int frameCount = 0;
-       private int blockSize;
+       private int blockSize = DEFAULT_BLOCK_SIZE;
        private ByteArrayOutputStream ba = new ByteArrayOutputStream(50 + 3 * 
DEFAULT_SCREEN_WIDTH * DEFAULT_SCREEN_HEIGHT);
        private byte[] areaBuf = null;
        private Deflater d = new Deflater(Deflater.DEFAULT_COMPRESSION);
        private byte[] zipBuf = null;
        private VideoData unalteredFrame = null;
+       private final ScreenDimensions dim;
 
-       public ScreenV1Encoder() {
-               this(KEY_FRAME_INDEX, DEFAULT_BLOCK_SIZE);
-       }
-
-       public ScreenV1Encoder(int keyFrameIndex) {
-               this(keyFrameIndex, DEFAULT_BLOCK_SIZE);
-       }
-
-       //will create square blocks
-       public ScreenV1Encoder(int keyFrameIndex, int blockSize) {
-               this.keyFrameIndex = keyFrameIndex;
+       public ScreenV1Encoder(ScreenDimensions dim) {
+               this.dim = dim;
+               this.keyFrameIndex = 3 * dim.getFPS();
                if (blockSize < 16 || blockSize > 256 || blockSize % 16 != 0) {
                        throw new RuntimeException("Invalid block size passed: 
" + blockSize + " should be: 'from 16 to 256 in multiples of 16'");
                }
-               this.blockSize = blockSize;
 
                areaBuf = new byte[3 * blockSize * blockSize];
                zipBuf = new byte[3 * blockSize * blockSize];
@@ -86,7 +76,7 @@ public class ScreenV1Encoder extends BaseScreenEncoder {
                if (unalteredFrame == null) {
                        ByteArrayOutputStream ba = new 
ByteArrayOutputStream(200);
 
-                       Rectangle _area = new Rectangle(resizeX, resizeY);
+                       Rectangle _area = new Rectangle(dim.getResizeX(), 
dim.getResizeY());
                        //header
                        ba.write(getTag(FLAG_FRAMETYPE_INTERFRAME, 
FLAG_CODEC_SCREEN));
                        writeShort(ba, _area.width + ((blockSize / 16 - 1) << 
12));
@@ -189,9 +179,9 @@ public class ScreenV1Encoder extends BaseScreenEncoder {
                os.write( n       & 0xFF);
        }
 
-       public static int[][] getImage(Rectangle screen, Robot robot) {
-               int[][] buffer = new int[resizeX][resizeY];
-               BufferedImage image = resize(robot.createScreenCapture(screen), 
new Rectangle(resizeX, resizeY));
+       public static int[][] getImage(ScreenDimensions dim, Rectangle screen, 
Robot robot) {
+               int[][] buffer = new int[dim.getResizeX()][dim.getResizeY()];
+               BufferedImage image = resize(robot.createScreenCapture(screen), 
new Rectangle(dim.getResizeX(), dim.getResizeY()));
                for (int x = 0; x < image.getWidth(); ++x) {
                        for (int y = 0; y < image.getHeight(); ++y) {
                                buffer[x][y] = image.getRGB(x, y);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenDimensions.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenDimensions.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenDimensions.java
index c23e5ef..14c5235 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenDimensions.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenDimensions.java
@@ -23,36 +23,41 @@ import java.awt.Toolkit;
 
 public class ScreenDimensions {
        public static final int ROUND_VALUE = 16;
+
+       public enum ScreenQuality {
+               VeryHigh
+               , High
+               , Medium
+               , Low
+       }
        /**
         * image recalcing value's from the virtual Screen drawer
         */
-       public static int width = 200;
-       public static int height = 0;
+       private int width = 200;
+       private int height = 0;
 
        /**
         * Values calced by the original Screen
         */
-
-       public static double ratio = 0;
-
-       public static int widthMax = 0;
-       public static int heightMax = 0;
+       private double ratio;
+       private final int widthMax;
+       private final int heightMax;
 
        /**
         * Values set by the virtualScreen
         */
-       public static int spinnerWidth = 0;
-       public static int spinnerHeight = 0;
-       public static int spinnerX = 0;
-       public static int spinnerY = 0;
+       private int spinnerWidth;
+       private int spinnerHeight;
+       private int spinnerX;
+       private int spinnerY;
 
-       public static ScreenQuality quality = ScreenQuality.Medium;
-       public static int FPS = 10;
+       private ScreenQuality quality = ScreenQuality.Medium;
+       private int FPS = 10;
 
-       public static int resizeX = 640;
-       public static int resizeY = 480;
+       private int resizeX;
+       private int resizeY;
 
-       static {
+       public ScreenDimensions() {
                Dimension screenSize = 
Toolkit.getDefaultToolkit().getScreenSize();
                ratio = screenSize.getHeight() / screenSize.getWidth();
                widthMax = (int)screenSize.getWidth();
@@ -66,10 +71,83 @@ public class ScreenDimensions {
                resizeY = 400;
        }
 
-       public enum ScreenQuality {
-               VeryHigh
-               , High
-               , Medium
-               , Low
+       public int getResizeX() {
+               return resizeX;
+       }
+
+       public void setResizeX(int resizeX) {
+               this.resizeX = resizeX;
+       }
+
+       public int getResizeY() {
+               return resizeY;
+       }
+
+       public void setResizeY(int resizeY) {
+               this.resizeY = resizeY;
+       }
+
+       public int getSpinnerWidth() {
+               return spinnerWidth;
+       }
+
+       public void setSpinnerWidth(int spinnerWidth) {
+               this.spinnerWidth = spinnerWidth;
+       }
+
+       public int getSpinnerHeight() {
+               return spinnerHeight;
+       }
+
+       public void setSpinnerHeight(int spinnerHeight) {
+               this.spinnerHeight = spinnerHeight;
+       }
+
+       public int getSpinnerX() {
+               return spinnerX;
+       }
+
+       public void setSpinnerX(int spinnerX) {
+               this.spinnerX = spinnerX;
+       }
+
+       public int getSpinnerY() {
+               return spinnerY;
+       }
+
+       public void setSpinnerY(int spinnerY) {
+               this.spinnerY = spinnerY;
+       }
+
+       public int getWidth() {
+               return width;
+       }
+
+       public int getWidthMax() {
+               return widthMax;
+       }
+
+       public int getHeight() {
+               return height;
+       }
+
+       public int getHeightMax() {
+               return heightMax;
+       }
+
+       public ScreenQuality getQuality() {
+               return quality;
+       }
+
+       public void setQuality(ScreenQuality quality) {
+               this.quality = quality;
+       }
+
+       public int getFPS() {
+               return FPS;
+       }
+
+       public void setFPS(int fPS) {
+               FPS = fPS;
        }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenHeightMouseListener.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenHeightMouseListener.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenHeightMouseListener.java
index ca7a61b..ee03bc5 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenHeightMouseListener.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenHeightMouseListener.java
@@ -25,7 +25,7 @@ import java.awt.event.MouseEvent;
 import javax.swing.event.MouseInputAdapter;
 
 public class ScreenHeightMouseListener extends MouseInputAdapter  {
-       private ScreenSharerFrame frame;
+       private final ScreenSharerFrame frame;
        private double y = 0;
 
        public ScreenHeightMouseListener(ScreenSharerFrame frame) {
@@ -60,10 +60,10 @@ public class ScreenHeightMouseListener extends 
MouseInputAdapter  {
                }
                double newY = e.getY();
 
-               int newHeight = ScreenDimensions.spinnerHeight - (int)(y - 
newY);
-               int newSpinnerY = ScreenDimensions.spinnerY + newHeight;
+               int newHeight = frame.getDim().getSpinnerHeight() - (int)(y - 
newY);
+               int newSpinnerY = frame.getDim().getSpinnerY() + newHeight;
 
-               if (newSpinnerY >= 0 && newSpinnerY <= 
ScreenDimensions.heightMax) {
+               if (newSpinnerY >= 0 && newSpinnerY <= 
frame.getDim().getHeightMax()) {
                        frame.setDoUpdateBounds(false);
                        frame.setSpinnerHeight(newHeight);
                        frame.setDoUpdateBounds(true);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenMouseListener.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenMouseListener.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenMouseListener.java
index ced9963..ed561c3 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenMouseListener.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenMouseListener.java
@@ -25,7 +25,7 @@ import java.awt.event.MouseEvent;
 import javax.swing.event.MouseInputAdapter;
 
 public class ScreenMouseListener extends MouseInputAdapter {
-       private ScreenSharerFrame frame;
+       private final ScreenSharerFrame frame;
        private int x = 0;
        private int y = 0;
 
@@ -63,8 +63,8 @@ public class ScreenMouseListener extends MouseInputAdapter {
                int newX = e.getX();
                int newY = e.getY();
 
-               int newXPosition = ScreenDimensions.spinnerX - (this.x - newX);
-               int newYPosition = ScreenDimensions.spinnerY - (this.y - newY);
+               int newXPosition = frame.getDim().getSpinnerX() - (this.x - 
newX);
+               int newYPosition = frame.getDim().getSpinnerY() - (this.y - 
newY);
                if (newXPosition >= 0) {
                        frame.setSpinnerX(newXPosition);
                }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenSharerFrame.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenSharerFrame.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenSharerFrame.java
index 5f27998..c3d72ae 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenSharerFrame.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenSharerFrame.java
@@ -19,8 +19,6 @@
 package org.apache.openmeetings.screenshare.gui;
 
 import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.ROUND_VALUE;
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeX;
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeY;
 import static org.slf4j.LoggerFactory.getLogger;
 
 import java.awt.AWTException;
@@ -114,6 +112,7 @@ public class ScreenSharerFrame extends JFrame {
        private String recordingTipLabel;
        private String publishingTipLabel;
        private JCheckBox audioNotify;
+       private final Core core;
 
        private class PublishTextField extends JTextField {
                private static final long serialVersionUID = 1L;
@@ -230,6 +229,7 @@ public class ScreenSharerFrame extends JFrame {
         * @throws IOException
         */
        public ScreenSharerFrame(final Core core, String[] textLabels) throws 
AWTException {
+               this.core = core;
                setTitle(getTextLabel(textLabels, 0)); //#id 730
                setBackground(Color.WHITE);
                setResizable(false);
@@ -274,7 +274,7 @@ public class ScreenSharerFrame extends JFrame {
                                if (sharingStarted) {
                                        if (!sharingActionRequested) {
                                                sharingActionRequested = true;
-                                               core.stopSharing();
+                                               core.sharingStop();
                                        } else {
                                                logger.warn("Sharing action is 
already requested");
                                        }
@@ -351,8 +351,8 @@ public class ScreenSharerFrame extends JFrame {
                panelScreen.setLayout(null);
                panelScreen.setBackground(Color.WHITE);
 
-               int width = ScreenDimensions.width;
-               int height = ScreenDimensions.height;
+               int width = getDim().getWidth();
+               int height = getDim().getHeight();
 
                //Sliders
                upSlider.addListener(new ScreenYMouseListener(this));
@@ -387,7 +387,7 @@ public class ScreenSharerFrame extends JFrame {
                vscreenWidthLabel.setBounds(250, 20, 150, 24);
                panelScreen.add(vscreenWidthLabel);
 
-               spinnerWidth = new NumberSpinner(ScreenDimensions.spinnerWidth, 
0, ScreenDimensions.widthMax, 1);
+               spinnerWidth = new NumberSpinner(getDim().getSpinnerWidth(), 0, 
getDim().getWidthMax(), 1);
                spinnerWidth.setBounds(400, 20, 60, 24);
                spinnerWidth.addChangeListener( new ChangeListener(){
                        @Override
@@ -403,7 +403,7 @@ public class ScreenSharerFrame extends JFrame {
                labelHeight.setBounds(250, 50, 150, 24);
                panelScreen.add(labelHeight);
 
-               spinnerHeight = new 
NumberSpinner(ScreenDimensions.spinnerHeight, 0, ScreenDimensions.heightMax, 1);
+               spinnerHeight = new NumberSpinner(getDim().getSpinnerHeight(), 
0, getDim().getHeightMax(), 1);
                spinnerHeight.setBounds(400, 50, 60, 24);
                spinnerHeight.addChangeListener( new ChangeListener(){
                        @Override
@@ -419,9 +419,9 @@ public class ScreenSharerFrame extends JFrame {
                labelX.setBounds(250, 80, 150, 24);
                panelScreen.add(labelX);
 
-               spinnerX = new NumberSpinner(ScreenDimensions.spinnerX, 0, 
ScreenDimensions.widthMax, 1);
+               spinnerX = new NumberSpinner(getDim().getSpinnerX(), 0, 
getDim().getWidthMax(), 1);
                spinnerX.setBounds(400, 80, 60, 24);
-               spinnerX.addChangeListener( new ChangeListener(){
+               spinnerX.addChangeListener(new ChangeListener(){
                        @Override
                        public void stateChanged(ChangeEvent arg0) {
                                calcNewValueXSpin();
@@ -435,9 +435,9 @@ public class ScreenSharerFrame extends JFrame {
                labelY.setBounds(250, 110, 150, 24);
                panelScreen.add(labelY);
 
-               spinnerY = new NumberSpinner(ScreenDimensions.spinnerY, 0, 
ScreenDimensions.heightMax, 1);
+               spinnerY = new NumberSpinner(getDim().getSpinnerY(), 0, 
getDim().getHeightMax(), 1);
                spinnerY.setBounds(400, 110, 60, 24);
-               spinnerY.addChangeListener( new ChangeListener(){
+               spinnerY.addChangeListener(new ChangeListener(){
                        @Override
                        public void stateChanged(ChangeEvent arg0) {
                                calcNewValueYSpin();
@@ -461,7 +461,7 @@ public class ScreenSharerFrame extends JFrame {
                        @Override
                        @SuppressWarnings("unchecked")
                        public void actionPerformed(ActionEvent e) {
-                               ScreenDimensions.quality = 
((KeyValue<ScreenQuality>)comboQuality.getSelectedItem()).getValue();
+                               
getDim().setQuality(((KeyValue<ScreenQuality>)comboQuality.getSelectedItem()).getValue());
                                calcRescaleFactors();
                        }
                });
@@ -479,7 +479,7 @@ public class ScreenSharerFrame extends JFrame {
                        @Override
                        @SuppressWarnings("unchecked")
                        public void actionPerformed(ActionEvent e) {
-                               ScreenDimensions.FPS = 
((KeyValue<Integer>)comboFPS.getSelectedItem()).getValue();
+                               
getDim().setFPS(((KeyValue<Integer>)comboFPS.getSelectedItem()).getValue());
                                calcRescaleFactors();
                        }
                });
@@ -733,18 +733,19 @@ public class ScreenSharerFrame extends JFrame {
        void calcNewValueXSpin() {
                if (doUpdateBounds) {
                        int newX = spinnerX.getValue();
-                       if (ScreenDimensions.spinnerWidth + newX > 
ScreenDimensions.widthMax) {
-                               newX = ScreenDimensions.widthMax - 
ScreenDimensions.spinnerWidth;
+                       int val = getDim().getWidthMax() - 
getDim().getSpinnerWidth();
+                       if (newX > val) {
+                               newX = val;
                                spinnerX.setValue(newX);
                                if (showWarning) {
                                        setStatus(reduceWidthLabel);
                                }
                        } else {
-                               ScreenDimensions.spinnerX = newX;
+                               getDim().setSpinnerX(newX);
                                updateVScreenBounds();
                        }
                } else {
-                       ScreenDimensions.spinnerX = spinnerX.getValue();
+                       getDim().setSpinnerX(spinnerX.getValue());
                }
 
                calcRescaleFactors();
@@ -753,18 +754,19 @@ public class ScreenSharerFrame extends JFrame {
        void calcNewValueYSpin() {
                if (doUpdateBounds) {
                        int newY = spinnerY.getValue();
-                       if (ScreenDimensions.spinnerHeight + newY > 
ScreenDimensions.heightMax) {
-                               newY = ScreenDimensions.heightMax - 
ScreenDimensions.spinnerHeight;
+                       int val = getDim().getHeightMax() - 
getDim().getSpinnerHeight();
+                       if (newY > val) {
+                               newY = val;
                                spinnerY.setValue(newY);
                                if (showWarning) {
                                        setStatus(reduceHeightLabel);
                                }
                        } else {
-                               ScreenDimensions.spinnerY = newY;
+                               getDim().setSpinnerY(newY);
                                updateVScreenBounds();
                        }
                } else {
-                       ScreenDimensions.spinnerY = spinnerY.getValue();
+                       getDim().setSpinnerY(spinnerY.getValue());
                }
 
                calcRescaleFactors();
@@ -773,18 +775,19 @@ public class ScreenSharerFrame extends JFrame {
        void calcNewValueWidthSpin() {
                if (doUpdateBounds) {
                        int newWidth = spinnerWidth.getValue();
-                       if (ScreenDimensions.spinnerX + newWidth > 
ScreenDimensions.widthMax) {
-                               newWidth = ScreenDimensions.widthMax - 
ScreenDimensions.spinnerX;
+                       int val = getDim().getWidthMax() - 
getDim().getSpinnerX();
+                       if (newWidth > val) {
+                               newWidth = val;
                                spinnerWidth.setValue(newWidth);
                                if (showWarning) {
                                        setStatus(reduceXLabel);
                                }
                        } else {
-                               ScreenDimensions.spinnerWidth = newWidth;
+                               getDim().setSpinnerWidth(newWidth);
                                updateVScreenBounds();
                        }
                } else {
-                       ScreenDimensions.spinnerWidth = spinnerWidth.getValue();
+                       getDim().setSpinnerWidth(spinnerWidth.getValue());
                }
 
                calcRescaleFactors();
@@ -793,18 +796,19 @@ public class ScreenSharerFrame extends JFrame {
        void calcNewValueHeightSpin() {
                if (doUpdateBounds) {
                        int newHeight = spinnerHeight.getValue();
-                       if (ScreenDimensions.spinnerY + newHeight > 
ScreenDimensions.heightMax) {
-                               newHeight = ScreenDimensions.heightMax - 
ScreenDimensions.spinnerY;
+                       int val = getDim().getHeightMax() - 
getDim().getSpinnerY();
+                       if (newHeight > val) {
+                               newHeight = val;
                                spinnerHeight.setValue(newHeight);
                                if (showWarning) {
                                        setStatus(reduceYLabel);
                                }
                        } else {
-                               ScreenDimensions.spinnerHeight = newHeight;
+                               getDim().setSpinnerHeight(newHeight);
                                updateVScreenBounds();
                        }
                } else {
-                       ScreenDimensions.spinnerHeight = 
spinnerHeight.getValue();
+                       getDim().setSpinnerHeight(spinnerHeight.getValue());
                }
 
                calcRescaleFactors();
@@ -815,20 +819,20 @@ public class ScreenSharerFrame extends JFrame {
         */
        void calcRescaleFactors() {
                logger.trace("calcRescaleFactors -- ");
-               resizeX = spinnerWidth.getValue();
-               resizeY = spinnerHeight.getValue();
-               switch (ScreenDimensions.quality) {
+               int resizeX = spinnerWidth.getValue();
+               int resizeY = spinnerHeight.getValue();
+               switch (getDim().getQuality()) {
                        case Low:
-                               resizeX = (int)(2.0 * ScreenDimensions.resizeX 
/ 8);
-                               resizeY = (int)(2.0 * ScreenDimensions.resizeY 
/ 8);
+                               resizeX = (int)(2.0 * resizeX / 8);
+                               resizeY = (int)(2.0 * resizeY / 8);
                                break;
                        case Medium:
-                               resizeX = (int)(4.0 * ScreenDimensions.resizeX 
/ 8);
-                               resizeY = (int)(4.0 * ScreenDimensions.resizeY 
/ 8);
+                               resizeX = (int)(4.0 * resizeX / 8);
+                               resizeY = (int)(4.0 * resizeY / 8);
                                break;
                        case High:
-                               resizeX = (int)(6.0 * ScreenDimensions.resizeX 
/ 8);
-                               resizeY = (int)(6.0 * ScreenDimensions.resizeY 
/ 8);
+                               resizeX = (int)(6.0 * resizeX / 8);
+                               resizeY = (int)(6.0 * resizeY / 8);
                                break;
                        case VeryHigh:
                        default:
@@ -838,7 +842,9 @@ public class ScreenSharerFrame extends JFrame {
                int dY = resizeY % ROUND_VALUE;
                resizeX += dX == 0 ? 0 : ROUND_VALUE - dX;
                resizeY += dY == 0 ? 0 : ROUND_VALUE - dY;
-               logger.trace("resize: X:" + resizeX + " Y: " + resizeY);
+               logger.trace("resize: X: {} Y: {}", resizeX, resizeY);
+               getDim().setResizeX(resizeX);
+               getDim().setResizeY(resizeY);
                updateVScreenBounds();
        }
 
@@ -848,7 +854,7 @@ public class ScreenSharerFrame extends JFrame {
                upSlider.setBounds(x + vScreenX + (width / 2) - 8, y + vScreenY 
- 16, 16, 32);
                downSlider.setBounds(x + vScreenX + (width / 2) - 8, y + 
vScreenY - 16 + height, 16, 32);
 
-               virtualScreen.setText(ScreenDimensions.spinnerWidth + ":" + 
ScreenDimensions.spinnerHeight);
+               virtualScreen.setText(String.format("%s:%s", 
getDim().getSpinnerWidth(), getDim().getSpinnerHeight()));
                virtualScreen.setBounds(x + vScreenX, y + vScreenY, width, 
height);
        }
 
@@ -858,13 +864,17 @@ public class ScreenSharerFrame extends JFrame {
         *
         */
        void updateVScreenBounds() {
-               double ratio = ((double)ScreenDimensions.width) / 
ScreenDimensions.widthMax;
-               int newWidth = (int)(ScreenDimensions.spinnerWidth * ratio);
-               int newX = (int)(ScreenDimensions.spinnerX * ratio);
+               double ratio = ((double)getDim().getWidth()) / 
getDim().getWidthMax();
+               int newWidth = (int)(getDim().getSpinnerWidth() * ratio);
+               int newX = (int)(getDim().getSpinnerX() * ratio);
 
-               int newHeight = (int)(ScreenDimensions.spinnerHeight * ratio);
-               int newY = (int)(ScreenDimensions.spinnerY * ratio);
+               int newHeight = (int)(getDim().getSpinnerHeight() * ratio);
+               int newY = (int)(getDim().getSpinnerY() * ratio);
 
                setVScreenBounds(newX, newY, newWidth, newHeight);
        }
+
+       public ScreenDimensions getDim() {
+               return core.getDim();
+       }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenWidthMouseListener.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenWidthMouseListener.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenWidthMouseListener.java
index 27862fa..404887c 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenWidthMouseListener.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenWidthMouseListener.java
@@ -25,7 +25,7 @@ import java.awt.event.MouseEvent;
 import javax.swing.event.MouseInputAdapter;
 
 public class ScreenWidthMouseListener extends MouseInputAdapter {
-       private ScreenSharerFrame frame;
+       private final ScreenSharerFrame frame;
        private double x = 0;
 
        public ScreenWidthMouseListener(ScreenSharerFrame frame) {
@@ -60,10 +60,10 @@ public class ScreenWidthMouseListener extends 
MouseInputAdapter {
                }
                double newX = e.getX();
 
-               int newWidth = ScreenDimensions.spinnerWidth - (int)(x - newX);
-               int newSpinnerX = ScreenDimensions.spinnerX + newWidth;
+               int newWidth = frame.getDim().getSpinnerWidth() - (int)(x - 
newX);
+               int newSpinnerX = frame.getDim().getSpinnerX() + newWidth;
 
-               if (0 <= newSpinnerX && newSpinnerX <= 
ScreenDimensions.widthMax) {
+               if (0 <= newSpinnerX && newSpinnerX <= 
frame.getDim().getWidthMax()) {
                        frame.setDoUpdateBounds(false);
                        frame.setSpinnerWidth(newWidth);
                        frame.setDoUpdateBounds(true);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenXMouseListener.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenXMouseListener.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenXMouseListener.java
index 0e615f7..66106d2 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenXMouseListener.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenXMouseListener.java
@@ -25,7 +25,7 @@ import java.awt.event.MouseEvent;
 import javax.swing.event.MouseInputAdapter;
 
 public class ScreenXMouseListener extends MouseInputAdapter {
-       private ScreenSharerFrame frame;
+       private final ScreenSharerFrame frame;
        private double x = 0;
 
        public ScreenXMouseListener(ScreenSharerFrame frame) {
@@ -60,8 +60,8 @@ public class ScreenXMouseListener extends MouseInputAdapter {
                }
                double newX = e.getX();
                int delta = (int) (x - newX);
-               int newXPosition = ScreenDimensions.spinnerX - delta;
-               int newWidth = ScreenDimensions.spinnerWidth + delta;
+               int newXPosition = frame.getDim().getSpinnerX() - delta;
+               int newWidth = frame.getDim().getSpinnerWidth() + delta;
 
                if (newXPosition >= 0 && newWidth >= 0) {
                        frame.setDoUpdateBounds(false);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenYMouseListener.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenYMouseListener.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenYMouseListener.java
index 75ead4d..d1faf4b 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenYMouseListener.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/ScreenYMouseListener.java
@@ -25,7 +25,7 @@ import java.awt.event.MouseEvent;
 import javax.swing.event.MouseInputAdapter;
 
 public class ScreenYMouseListener extends MouseInputAdapter {
-       private ScreenSharerFrame frame;
+       private final ScreenSharerFrame frame;
        private double y = 0;
 
        public ScreenYMouseListener(ScreenSharerFrame frame) {
@@ -61,8 +61,8 @@ public class ScreenYMouseListener extends MouseInputAdapter {
                double newY = e.getY();
 
                int delta = (int) (y - newY);
-               int newYPosition = ScreenDimensions.spinnerY - delta;
-               int newHeight = ScreenDimensions.spinnerHeight + delta;
+               int newYPosition = frame.getDim().getSpinnerY() - delta;
+               int newHeight = frame.getDim().getSpinnerHeight() + delta;
 
                if (newYPosition >= 0 && newHeight >= 0) {
                        frame.setDoUpdateBounds(false);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/EncodeJob.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/EncodeJob.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/EncodeJob.java
index f211457..84c44ff 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/EncodeJob.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/EncodeJob.java
@@ -18,10 +18,6 @@
  */
 package org.apache.openmeetings.screenshare.job;
 
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerHeight;
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerWidth;
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerX;
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerY;
 import static org.slf4j.LoggerFactory.getLogger;
 
 import java.awt.AWTException;
@@ -30,6 +26,7 @@ import java.awt.Robot;
 
 import org.apache.openmeetings.screenshare.CaptureScreen;
 import org.apache.openmeetings.screenshare.ScreenV1Encoder;
+import org.apache.openmeetings.screenshare.gui.ScreenDimensions;
 import org.quartz.DisallowConcurrentExecution;
 import org.quartz.Job;
 import org.quartz.JobDataMap;
@@ -42,9 +39,10 @@ import org.slf4j.Logger;
 public class EncodeJob implements Job {
        private static final Logger log = getLogger(EncodeJob.class);
        public static final String CAPTURE_KEY = "capture";
-       Robot robot;
-       Rectangle screen = new Rectangle(spinnerX, spinnerY, spinnerWidth, 
spinnerHeight);
-       int[][] image = null;
+       private Robot robot;
+       private ScreenDimensions dim;
+       private Rectangle screen = null;
+       private int[][] image = null;
 
        public EncodeJob() {
                try {
@@ -58,12 +56,17 @@ public class EncodeJob implements Job {
        public void execute(JobExecutionContext context) throws 
JobExecutionException {
                JobDataMap data = context.getJobDetail().getJobDataMap();
                CaptureScreen capture = (CaptureScreen)data.get(CAPTURE_KEY);
+               if (screen == null) {
+                       dim = capture.getDim();
+                       screen = new Rectangle(dim.getSpinnerX(), 
dim.getSpinnerY()
+                                       , dim.getSpinnerWidth(), 
dim.getSpinnerHeight());
+               }
 
                long start = 0;
                if (log.isTraceEnabled()) {
                        start = System.currentTimeMillis();
                }
-               image = ScreenV1Encoder.getImage(screen, robot);
+               image = ScreenV1Encoder.getImage(dim, screen, robot);
                if (log.isTraceEnabled()) {
                        log.trace(String.format("encode: Image was captured in 
%s ms, size %sk", System.currentTimeMillis() - start, 4 * image.length * 
image[0].length / 1024));
                        start = System.currentTimeMillis();

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/RemoteJob.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/RemoteJob.java
 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/RemoteJob.java
index 39f1357..122fffd 100644
--- 
a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/RemoteJob.java
+++ 
b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/RemoteJob.java
@@ -20,13 +20,6 @@ package org.apache.openmeetings.screenshare.job;
 
 import static java.awt.Toolkit.getDefaultToolkit;
 import static java.awt.datatransfer.DataFlavor.stringFlavor;
-import static org.apache.openmeetings.screenshare.Core.Ampl_factor;
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeX;
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeY;
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerHeight;
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerWidth;
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerX;
-import static 
org.apache.openmeetings.screenshare.gui.ScreenDimensions.spinnerY;
 import static org.apache.openmeetings.screenshare.util.Util.getFloat;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -45,6 +38,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.lang3.SystemUtils;
 import org.apache.openmeetings.screenshare.Core;
+import org.apache.openmeetings.screenshare.gui.ScreenDimensions;
 import org.quartz.DisallowConcurrentExecution;
 import org.quartz.Job;
 import org.quartz.JobDataMap;
@@ -57,6 +51,7 @@ public class RemoteJob implements Job {
        private static final Logger log = getLogger(RemoteJob.class);
        public static final String CORE_KEY = "core";
        private Robot robot = null;
+       private ScreenDimensions dim = null;
 
        public RemoteJob() {
                try {
@@ -71,6 +66,9 @@ public class RemoteJob implements Job {
        public void execute(JobExecutionContext context) throws 
JobExecutionException {
                JobDataMap data = context.getJobDetail().getJobDataMap();
                Core core = (Core)data.get(CORE_KEY);
+               if (dim == null) {
+                       dim = core.getDim();
+               }
                try {
                        Map<String, Object> obj;
                        while ((obj = core.getRemoteEvents().poll(1, 
TimeUnit.MILLISECONDS)) != null) {
@@ -189,12 +187,12 @@ public class RemoteJob implements Job {
                }
        }
 
-       private static Point getCoordinates(Map<String, Object> obj) {
-               float scaleFactorX = spinnerWidth / (Ampl_factor * resizeX);
-               float scaleFactorY = spinnerHeight / (Ampl_factor * resizeY);
+       private Point getCoordinates(Map<String, Object> obj) {
+               float scaleFactorX = dim.getSpinnerWidth() / dim.getResizeX();
+               float scaleFactorY = dim.getSpinnerHeight() / dim.getResizeY();
 
-               int x = Math.round(scaleFactorX * getFloat(obj, "x") + 
spinnerX);
-               int y = Math.round(scaleFactorY * getFloat(obj, "y") + 
spinnerY);
+               int x = Math.round(scaleFactorX * getFloat(obj, "x") + 
dim.getSpinnerX());
+               int y = Math.round(scaleFactorY * getFloat(obj, "y") + 
dim.getSpinnerY());
                return new Point(x, y);
        }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
index dc0556f..4d18b34 100644
--- 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
+++ 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
@@ -105,9 +105,8 @@ public class OpenmeetingsVariables {
        public static final String FLASH_QUALITY = "quality";
        public static final String FLASH_ECHO_PATH = "echoPath";
        public static final String FLASH_MIC_RATE = "micRate";
-
-       public static int DEFAULT_MINUTES_REMINDER_SEND = 15;
-       public static String DEFAULT_BASE_URL = 
"http://localhost:5080/openmeetings/";;
+       public static final int DEFAULT_MINUTES_REMINDER_SEND = 15;
+       public static final String DEFAULT_BASE_URL = 
"http://localhost:5080/openmeetings/";;
 
        public static String webAppRootKey = null;
        public static String webAppRootPath = null;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/381838de/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index 472934c..42fb8ea 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@ -688,7 +688,8 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
                Set<String> clients = get().getRooms().get(roomId);
                if (clients != null) {
                        for (String uid : clients) {
-                               if 
(getOnlineClient(uid).getUserId().equals(userId)) {
+                               Client c = getOnlineClient(uid);
+                               if (c != null && c.getUserId().equals(userId)) {
                                        return true;
                                }
                        }

Reply via email to