Remote Camera Control Client
============================
This client can be used in conjunction with the devserv program
to control pan/tilt cameras and a video switcher.  The client has been
built in java 1.1 so you will need a java virtual machine
to run it.  The client communicates with the device server (devserv)
using ASCII text messages.  The messaging format is available
from our WWW site at http://www-itg.lbl.gov/mbone/devserv/.
The client sends its messages to the server using UDP messages
and the server sends all return communication using multicast
messages.  

Currently the devserv program can control the Canon VC-C3 and the
Sony EVI-D30 cameras and the Panasonic WJ-MX50 video switcher.  We
will be adding additional cameras and video switchers for the next 
release.

Compiling and Running
---------------------
We have packaged and archived the camera client to make it
easier to run.  We have included some files in the
distribution package to help with compiling and running the 
camera client.  

If you want to run the camera client from a shell script
	1. edit the camclnt file to contain the correct paths for
           java and CamClnt.
	2. run camclnt <# of cameras>

To compile a new version of the remote camera client a Makefile
is provided.  To compile the client use the target camclnt
	make camclnt
Before compiling you might want to first use 
	make clean

The camera client default values for # of cameras and for remote
server (where devserv is running) can be changed by editting the file
CamClnt/camInterface.java.  The only values that you should need to
change are near the top of the file and are the following.

  // THE FOLLOWING VARIABLES PROVIDE DEFAULT VALUES FOR SOME THINGS
  // THAT YOU MIGHT WANT TO CUSTOMIZE TO YOUR SITE
  String curaddr = "localhost";  // default address for devserv
  private static final int defaultnumcams = 3; //the number of cameras to assume
  // END SITE CUSTOMIZATION SECTION


The Interface 
------------- 
The client interface can be broken into different areas by function so
I will describe each one individually.  At the top of the interface is
a menu bar.  Selecting "File" will allow you to "Quit" the camera
client.  Selecting "Help" gives you two options "About" and "Info"
which both give you helpful information about running the camclnt
program.

If you specify that there is more than one camera when you start up
camclnt then a section directly below the menu bar will be displayed
to allow you to select the camera to view, to move and to show in the
picture-in-picture.

The next section provides the means of requesting camera moves and of
requesting a picture-in-picture.  The white rectangle to the right represents
the camera's entire pan-and-tilt range.  Selecting with the left mouse
button in this rectangle causes a message to be sent to devserv requesting
that the camera move to the absolute position requested.  The square
on the right is a representation of the image that you see in the camera.
As of this release we have not yet implemented the interface to the actual
camera image so you have to imagine that the camera image is shown in this
square.  Selecting with the left mouse button in the square will cause the
camera to center the location picked.  If instead the user holds down the
left mouse button while drawing out a square the camera will zoom in on
the area drawn out.  The right mouse button in this square allows the user
to request picture-in-picture.  If the user holds down the right mouse button
while drawing out a square on the image then the picture-in-picture will be
shown in the square drawn out.  To turn off picture-in-picture simply
press the right mouse button in the square and release without moving the
mouse.  To translate the picture-in-picture (while you are displaying
the picture-in-picture) hold down the right mouse button on the image and
move the mouse the direction and distance you would like the picture translated.

Directly below this area is the zoom control.  The slider in the center
can be used to request absolute zoom positions and the buttons to
either side are for requesting incremental 1x zoom changes.

The field at the bottom of the interface is for specifying which machine
is running the devserv.  All remote camera control requests will be sent
to the IP address of the machine specified in this field.

Communication
-------------
Each remote camera movement request sent from the client is sent as a UDP
message to the server.  This means that some requests may be lost before
they reach the server so the user may need to re-request the movement.  The
server sends back status messages using IP Multicast but currently the client
ignores these messages.