File: vic.1

package info (click to toggle)
vic 2.8ucl4-2
  • links: PTS
  • area: main
  • in suites: potato
  • size: 5,864 kB
  • ctags: 9,033
  • sloc: ansic: 56,989; cpp: 44,560; tcl: 5,550; sh: 1,382; perl: 1,329; makefile: 357
file content (1020 lines) | stat: -rw-r--r-- 35,944 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
.\" @(#) $Header: /cs/research/mice/starship/src/local/CVS_repository/vic/vic.1,v 1.1.1.1 1998/02/18 18:03:51 ucacsva Exp $ (LBL)
.\"
.\" Copyright (c) 1994-1995
.\" The Regents of the University of California.  
.\" All rights reserved.  
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that: (1) source code distributions
.\" retain the above copyright notice and this paragraph in its entirety, (2)
.\" distributions including binary code include the above copyright notice and
.\" this paragraph in its entirety in the documentation or other materials
.\" provided with the distribution, and (3) all advertising materials mentioning
.\" features or use of this software display the following acknowledgment:
.\" ``This product includes software developed by the University of California,
.\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
.\" the University nor the names of its contributors may be used to endorse
.\" or promote products derived from this software without specific prior
.\" written permission.  
.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  
.\"
.TH VIC 1 "18 Sep 1995"
.de HD
.sp 1.5
.B
..
.SH NAME
vic \- video conference
.SH SYNOPSIS
.na
.B vic
[
.B \-A
.I proto
]
[
.B \-B
.I kbps
]
[
.B \-C
.I conference
]
[
.B \-c
.I dither
]
[
.B \-D
.I device
]
[
.B \-d
.I display
]
[
.B \-f
.I format
]
[
.B \-F
.I fps
]
[
.B \-H
]
[
.B \-I
.I channel
]
[
.B \-K
.I key
]
[
.B \-M
.I colorfile
]
[
.B \-m
.I mtu
]
[
.B \-N
.I sessionname
]
[
.B \-n
.I network
]
[
.B \-o
.I clipfile
]
[
.B \-P
]
[
.B \-s
]
[
.B \-t
.I ttl
]
[
.B \-U
.I interval
]
[
.B \-u
.I script
]
[
.B \-V
.I visual
]
[
.B \-X
.I resource=value
]
.I dest/port[/format/ttl]
.br
.ad
.SH DESCRIPTION
.LP
.I Vic
is an experimental video conferencing tool
that allows groups of users to transmit video
to each other over an IP Multicast network
(``vic'' is a contraction of VIdeo Conference).
A host must be equipped with a camera and
frame digitizer to send video, but no special
hardware is required to receive and display it.
Audio is handled by a separate application.

The conference is carried out on the address specified by
.I dest.
Point-to-point conferences are initiated by supplying a
standard IP address, while multiparty conferences
use a Class D group address.
.I Port
specifies the UDP ports to use,
and
.I ttl
specifies the IP time-to-live (see below).
For RTPv2,
.I port
specifies two consecutive ports, one for data and
one for control.  The data port is set to the greatest even
integer less than or equal to
.I port.
The control port is one greater than the data port.

Video is coded in a variety of formats.  The default format
depends on the host video capture hardware, but can be overridden.
.I Vic
will take advantage of certain hardware compression and
decompression units, if present, but since decompression
hardware is not always available, all supported coding formats
can be decoded in software.

.SH OPTIONS
.\"(Note that all the parameters set by
.\"the following flags can also be controlled by X resources
.\"(which all have `reasonable' defaults)
.\"so one should not need to give
.\".I vic
.\"any flags in the usual case.  The flags only exist to temporarily
.\"override some resource.)
.TP
.B \-A
Use the transport protocol specified by
.I proto,
which may be
.I rtp,
for RTPv2 (version 2 of the real-time transport protocol),
.I nv
for the variant of RTPv1 used by Xerox PARC's network video tool, or
.I ivs
for the variant of RTPv1 used by the INRIA Videoconference System.
.TP
.B \-B
Set the maximum value of the bandwidth slider to
.I kbps
kilobits per second.
If the conference address is a multicast address and
\-B is not specified,
the maximum bandwidth is based on the session scope,
using the well-known, agreed-upon MBone design parameters
(i.e., that define permissible bit-rates for a given
transmission scope).
.TP
.B \-C
Use 
.I conference,
as the title of this
.I vic
window.  If the \-C flag is ommitted, the
destination address and port are used as the window title.  
.TP
.B \-c
On a color-mapped display, use the algorithm indicated by
.I dither
to convert video (typically represented in 24-bit YUV color space)
to the available color palette.  For monochrome and truecolor
displays, this argument is ignored.
.I dither
may be one of the following:
.nf
	ed		a simple, error-diffusion dither 
			(i.e., Floyd-Steinberg dither)
	gray		32-levels of gray
	od		a simple 4x4 ordered dither
	quantize	straight quantization
.fi
The ``od'' algorithms uses the standard 5x5x5 color cube.
Since this color palette is used by several other applications
(wb, nv, and gs), colors can be shared which avoids the use of
a private color map.
.TP
.B \-D
Use
.I device
as the default choice for video capture.  On systems with multiple
capture devices, this option may be used to specify the selected
device at start-up.
The argument may be one of the following:
.nf
	cosmo		SGI Cosmo (JPEG) adaptor
	galileo		SGI Galileo Video
	indigo		SGI Indigo Video
	j300		DEC J300
	parallax	Parallax Xvideo card (jpeg board for sparcs)
	rtvc		Sun /dev/rtvc*
	tx		DEC tx/pip frame grabber
	videopix	Sun VideoPix card
	vigrapix	Vigra card (for sparcs)
	vino		SGI VINO (Indy Video)
	xil		Sun XIL library
.fi
The -D command option overrides the
.I Vic.device
resource.
.TP
.B \-d
Connect to the X server indicated by the
.I display
argument.
.TP
.B \-f
Use the video coding indicated by the
.I format
argument for transmission. 
.I Format
may be one of
.nf
	jpeg		Motion JPEG
	mpeg		MPEG
	h261		CCITT H.261
	nv		Xerox PARC Network Video
	cellb		Sun CellB
	bvc		Berkeley Video Codec
.fi
Not all encodings are compatible with all frame grabbers.
For instance, you need JPEG compression hardware in order
to source a JPEG stream (e.g., a DEC J300, SunVideo, etc.).
.TP
.B \-F
Set the maximum value of the frame rate slider to
.I fps
frames per second.
.TP
.B \-H
Set the initial disposition of the Use-Hardware-Decode button to ``on''.
Vic uses software decoding by default.
.TP
.B \-I
Use the ``LBL Conference Bus'' to interact with other multimedia
conferencing tools.
The small integer
.I channel,
which must be non-zero,
is used as the channel identifier for group interprocess communication on
the local host.  This value should be consistent across each group
of applications that belong to a single conference, and should
be unique across conferences.  The session directory tool (sd)
will allocate appropriate values.
.I (Vic
and
.I vat
currently use this mechanism to coordinate
voice-activated video switching.  Vat version 2.17, or later,
is required.)
.TP
.B \-K
Use 
.I key
as the encryption key for this vic session.  (This only works if you
have a binary with encryption support.  Because of U.S. export controls,
the standard distribution from LBL does include this support.)
.TP
.B \-M
Use
.I colorfile
as the base lookup table for the error-diffusion
or quantizing color rendering algorithms.  
This file is generated from a colormap using
.I ppmtolut(1).
The input to 
.I ppmtolut
is a
.I ppm(5)
file, which contains a single pixel of each color in the colormap
(the geometry of the pixmap is irrelevant).

The error-diffusion code can utilize any colormap in which
the chrominance level of each color falls on the lattice 0, 16, 32, ... 240.
.I mkcube(1)
is a simple utility for generating such colormaps with
varying color densities.

Note that this option can also be used in conjunction with the ordered dither,
but doing so is not advisable.
The reason is that an ordered dither relies on colors uniformly spaced
throughout the (5x5x5) RGB color cube, so overriding this default
colormap probably will not produce improved results.
.TP
.B \-m
Set the packet transmission size to
.I mtu
bytes, but limited to 1024 bytes (per the application protocol).
The default is 1024.
.TP
.B \-N
Use 
.I session,
in lieu of your user name and local host,
to identify you to other sites.  
If \-N is ommitted, the X resource
.I Vic.sessionName 
is used.  
.TP
.B \-n
Use
.I network
as the communications protocol underlying the RTP transport,
which may be
.I ip,
for IP or IP Multicast,
.I atm
for the Fore SPANS ATM API,
or 
.I rtip
for the U.C. Berkeley Tenet group's Real-time Internet Protocol
(see http://tenet.berkeley.edu for more information.)
In the case of ATM and RTIP, only
point-to-point communication is allowed.
.IP
RTIP is a simplex protocol requiring connection establishment
in both directions.  The vic with the lower valued RTIP address 
will block, waiting for a connection from the other vic.
Once the first connection is set up, the two vic's exchange
roles to setup the second connection.
.TP
.B \-o
Dump the RTP video stream sourced from the local host to
a file.
.TP
.B \-P
Use a private X colormap.
.TP
.B \-s
Don't use shared buffers with the X server.
.TP
.B \-t
Set the multicast ttl (time-to-live) to
.I ttl.  
(The ttl is ignored if the destination address is not an IP multicast
address.)  If no \-t flag is given, the value of the X resource
.I Vic.defaultTTL
is used.  A ttl of 1 restricts traffic to the local net; a ttl of 0
restricts the traffic to the local host (e.g., only loopback works,
which is useful for testing).
.TP
.B \-U
Use
.I interval
as the update period, in seconds, for the thumbnail sized images
of each video source.
.sp .5
.TP
.B \-u
Source
.I script,
in addition to the compiled-in script, to build the user interface.
This is only useful during development.
.TP
.B \-X
Override the X resource 
Vic.\fIresource\fR
with
.I value.

.SH OPERATION
The main vic window provides an abbreviated summary of all sources
that are actively transmitting video to the conference address.
If no sources are active, the text ``Waiting for video...''
is displayed in the window.
Otherwise,
each source has a panel composed of a thumbnail image,
identification text, some bit and frame rate statistics,
a ``mute'' button, a ``color'' button, and an ``info'' button.
.LP
The first line of the identification text contains the RTP NAME
attribute of the corresponding source, which for
.I vic,
is set using -N,
.I Vic.sessionName,
or manually entered in
the control menu (see below).
The second line of text contains the RTP CNAME attribute
and format of transmitted video.
If the NAME and CNAME are identical (or very similar),
or if the CNAME does not contain a numeric IP address,
the second line will instead list the source's IP address
(along with the video format).
The third line contains filtered frame and bit rate statistics,
and a loss indicator.
These rates may differ from the actual
sender's rate because of network packet drops or loss due to local
socket buffer overflows because of CPU saturation.
The gain of the low-pass filter used
to smooth the statistics is controlled by the
.I Vic.filterGain
resource.
Note that smoothing can be effectively
disabled by setting
.I Vic.filterGain
to 1.
.HD
Loss Computation
.LP
The number of missing packets is computed as the
difference between the total number of packets received and
the total number of packets sent (which is inferred from sequence numbers).
At each sampling interval, a loss percentage is computed by
dividing the number of packets missing into the number of
packets received during that interval.  This percentage
is then low-passed filtered (again using the
.I Vic.filterGain
constant),
which is what finally appears as the parenthesized loss indicator.
.HD
Mute & Color
.LP
The ``mute'' button, when selected, causes
.I vic
to ignore video from the corresponding host.  In general,
you want to disable any site your not interested in to
shed load.  Also, it is a good idea to mute your own looped-back
transmission to make the encoding process run faster.
.LP
The toggle button labeled ``color'' controls the color disposition
of the output.  When enabled (by default), video is displayed in
color; otherwise, it is displayed in grayscale.  Using grayscale
reduces the CPU load (for machines without TrueColor displays)
because color dithering is costly.  The ``color'' button does
not affect your transmitted video.
.HD
XXX
Statistics
.LP
Clicking on the ``stats'' button brings up a top level window
containing network and video coding statistics for the corresponding
source.  These statistics are updated in real-time once per second.
.LP
The window consists of three panels.  The top panel lists the
RTP NAME attribute, coding format and geometry, and times of
reception of the most recent control and data packets.
.LP
The middle panel lists the actual statistics,
which depend on the underlying coding format.
(For example, only H.261 streams have a Bad-GOB stat.)
The statistics are displayed in three columns.
The first column is the change since the last sampling
period (i.e., change over the last second); the middle column
is a smoothed version of the first column (smoothing controlled
by
.I Vic.statsFilter);
and the last column is the accumulated value since startup.
.LP
The bottom panel contains a stripchart that displays the statistic
from the middle panel that is selected with the radio button.
The stripchart plots one point per sampling interval.
.HD
Viewing Windows
.LP
The thumbnail image is not updated in real-time, but rather every
few seconds (the default update
interval can be overridden with the X resource
.I Vic.stampInterval
or \-U).
Left-clicking on the image will open a larger viewing
window of the corresponding source.  
Along the bottom of the window
are some additional controls and the corresponding site name.
The ``Dismiss'' button will close the window, as will typing
a 'q' into the window.
The popup menu labeled ``Size'' is used to set the
window size, while the menu labeled ``Mode'' changes the
switching mode of the window.  By default, the switching
mode is ``locked'', which means that the window is locked
onto the indicated video source.  In ``browse'' mode,
.I vic
cycles through the set of active video sources,
switching participants every
.I Vic.switchInterval
seconds.
Additionally, when in ``browse mode'', you can cycle
through the participants by hand using the '>' and '<'
keys.  The last mode is ``voice-activated''.
When running in tandem with
.I vat(1),
voice-activated switching causes the video window to
switch to whoever is talking (see \-I).  You can run
multiple voice-activated windows simultaneously, which
will cause the remote participants who have spoken recently
to be displayed.
.HD
The Control Menu
.LP
Clicking on the ``Menu'' button in the lower righthand corner
of the main vic window will bring up a control panel, which
is composed of three subpanels: transmission controls,
encoder controls, and session controls.
The transmission controls include a toggle button label ``Transmit'',
which opens the video capture device and begins transmission.
The ``Lock'' toggle button prevents any external agents from
automatically initiating or terminating transmission.
(For example, a ``video silence suppression'' algorithm might
remotely turn off transmission if there are no interested
receivers.)  The ``Release'' button
terminates the transmission if active, and explicitly closes the
capture device (so it may be opened by another application if the
device is exclusive access).
If the device cannot be opened (e.g., because no capture device
is present or the device server isn't running), then a
dialog box containing an error message will appear in response
to invoking the Transmit button.

Adjacent to the transmission buttons are rate control sliders.
The bit rate is limited with the top slider while the frame rate
is limited with the bottom slider.
.I Vic
uses the more
constraining control to limit the output transmission rate.
The frame rate slider ranges from 1 to 30 frames/sec, while
the bit-rate slider ranges from 10 to
.I Vic.maxbw
kilobits/sec.
The actual capture (and encode) rates are displayed above the
two sliders.

The ``Encoder'' panel contains controls for selecting the coding format,
video image size, coding quality level, device ports, signal type,
and device.  Not all options are supported by all devices.
The upper lefthand panel contains a list of supported coding
formats, which may be changed at any time.
Formats that are not supported by the underlying device (or by
software compression) are grayed out and disabled.

The video image size is controlled by selecting generic ``small'',
``normal'', and ``large'' formats.  The actual size depends on
the coding format and underlying signal type.  In general,
NTSC images are 640x480 (lg), 320x240 (norm), or 160x120 (sm);
PAL images are 768x576 (lg), 384x288 (norm), or 192x144 (sm);
and H.261 images are converted from their native signal size
to CIF size 352x288 (norm) or QCIF size 176x144 (sm).
If a size is not supported by the underlying hardware,
the corresponding button will be disabled.

To the right of the size selector is the device selector.
Typically, a single binary contains support for only one device type,
but eventually there will be support for multiple types
(for example, VideoPix, SunVideo, and Parallax on a Sparcstation).

If the selected coding format supports a quality adjustment, then the
quality slider will be enabled and the corresponding quality ``value''
displayed next to the slider.  
The semantics of the quality setting depend on the particular coding
format, but in general, higher quality settings are obtained
by moving the slider to the right.
For nv format, the setting controls the size of the dead-zone region
of the Haar transform coefficient quantizer.  For motion JPEG, the
setting corresponds to the Independent JPEG group's 1-100 compression
value.  Finally, for H.261, the value corresponding to the GQUANT and
MQUANT quantizers from the CCITT standard (this is the nominal
quantizer -- if the quantizer is too small to adequately represent
the dynamic range of a block, then a larger quantizer is used for
that block).

Adjacent to the quality slider are two pull-down menu buttons.
The ``Port'' button selects among the analog input jacks to
the capture device (for example, a VideoPix has two composite
inputs and an S-Video input).  The ``Type'' button selects
the analog video types, which is one of auto, NTSC, PAL, or SECAM.
The ``auto'' setting attempts to determine the signal type from
the actual input (provided the hardware supports this).

The ``Session'' panel controls conference address information,
some type-in boxes, and other session controls.
The first line of the panel lists the numeric IP address 
UDP port of the conference, the RTP source identifier of
the local instance, and the multicast TTL.
There are two
.I "type-in boxes"
labeled
.B ``Name''
and
.B ``Key''.
The ``Name'' box
can be used to change the RTP session name announced to other sites.
The ``Key'' box contains a session key for encryption described below.
Below the type in boxes are toggle switches for controlling session
behavior.  The ``Mute New Sources'' button, when selected, causes
sources that transmit video to come up ``muted''.
.HD
Encryption
.LP
\fI(N.B.: Because of U.S. export controls,
the standard distribution of vic from LBL does not support encryption.
In this case, the ``Key'' type-in box will be disabled.)\fP
.LP
Since vic conversations are typically conducted over open IP networks,
there is no way to prevent eavesdropping, particularly for multicast
conferences.  To add some measure of privacy, vic allows the video
streams to be DES encrypted.  Presumably only sites sharing
the same key will be able to decrypt and
listen to the encrypted video.
.LP
Encryption is enabled by entering an arbitrary string in the
.B key
box (this string is the previously agreed upon encryption key
for the conference \- note that key distribution should be
done by mechanisms totally separate from vic).  Encryption
can be turned off by entering a null string (just a carriage
return or any string starting with a blank) in the
.B key
box.
.HD
Tiling
.LP
Along the bottom of the control menu are several buttons.
The button labeled ``Tile'' is a pull-down menu which allows
you to specify the number of columns to use for displaying
the thumbnail summaries of each active source.  The default
is single column.
The number of columns can also be specified by
typing a single digit into the main window.
.HD
Session Member Listing
.LP
Clicking on the ``Members'' button brings up a top level window
with a scrollable list of all the participants in the session.
This list includes participants that are not actively sending
video.
.HD
Colormap Optimization
.LP
The ``Colors'' button invokes a dynamic optimization of the color map
used by the error diffusion or ordered dither algorithms.
The distribution of colors for all ``unmuted'' sources is collected
and handed off to a separate process to compute an improved colormap.
Vic forks off
.I histtolut(1),
which must be in your execution path, to perform the computation.
Because this optimization is computationally intensive, it may
take a non-negligible time to complete.  During this time, the ``Colors''
button is disabled and grayed out.
.SH "CODING FORMATS"
Vic supports a variety of video coding formats and it's a good idea
to be familiar with the tradeoffs among formats before deciding
which to use for a transmission.
All of the formats (except Motion JPEG) utilize a block-based
conditional replenishment algorithm, where the video image is
divided up into 8x8 blocks and only those blocks that change
are transmitted.  By coding each block independently of the
past, the decoding process is made robust to packet loss.
Because block updates are driven by scene activity, receivers
might accumulate many stale blocks from packet loss or from joining
an in-progress session.  This is circumvented by running
a background refresh process which cycles through all the blocks
continuously transmitting them at some low rate.
The efficacy of this approach has been nicely demonstrated
by Ron Frederick in nv.
.LP
Once the conditional replenishment step determines that a block
is to be transmitted, the block must be coded.  How it is coded
depends upon the selected format.
For the nv format, the block is transformed to a frequency
domain representation via the 8x8 Haar transform.
The Haar coefficients are quantized with a simple dead-zone only
quantizer (i.e., coefficients that fall below some threshold
are truncated to zero; otherwise, they are unchanged).
The coefficients are then run-length encoded.
Unlike traditional transform coders, there is no Huffman or arithmetic
coding step (which typically yields a factor of two in compression
gain -- but because of the dead-zone only quantizer, entropy coding would
be less effective here).
.LP
For H.261, the blocks are coded as intra-mode macroblock updates
using an H.261 compliant syntax.  Note that vic never uses
motion-compensated macroblock types since this type of coding
is very susceptible to packet loss.  H.261 codecs typically
do not have provisions for producing this type of bit stream,
which we call ``Intra-H.261'', but decoders have no problem
decoding it since the syntax is fully compliant.
(Most H.261 codecs have an ``intra'' operating mode, but this is
typically very inefficient because every block of every frame is coded.)
The Intra-H.261 and nv encoders are both transform coders and
are in fact quite similar.
The differences are: (1) H.261 uses a discrete
cosine transform (DCT) instead of a Haar transform; (2) H.261 uses
a linear quantizer instead of dead-zone only quantizer;
and (3) H.261 applies Huffman coding to the run-length encoded symbols.
.LP
For the ``simple conditional replenishment'' (scr) format,
the block update is sent uncompressed.  This approach has
very high image quality but works very poorly over low bandwidth
networks.  Even on high bandwidth networks, slower end-systems
have a hard time keeping up with the data rates associated
with processing uncompressed video.
.LP
For the CellB format, blocks are encoded according to
Sun Microsystems CellB syntax.  CellB is a block truncation
coding technique that gives a 16:1 compression gain
with relatively low image quality.  The simplicity
of the CellB codec results in a fast software implementation.
.LP
Finally, for Motion JPEG format, entire frames are coded
via the JPEG still image standard.  Motion JPEG is suitable
only in high bandwidth environments and is supported
only with capture devices that support hardware JPEG compression.
Vic can, however, decode Motion JPEG in software.
.HD
Coding Format Tradeoffs
.LP
As in nv, vic limits its transmission bandwidth by using a
variable frame rate.
When scene activity is high, the video becomes harder to code
and the frame rate slows.  Under this scheme, higher compression
gain turns into higher frame rates.
.LP
Because overall perceived quality depends very much on scene content,
it's not always clear which coding scheme is best.
For example, it's better to view slides at a low frame
rate and high image quality, whereas most people prefer
viewing a human speaker at a higher frame rate at the expense
of lower image quality.
The Haar transform in the nv algorithm tends to code edges,
and hence text, better than the DCT in H.261.
On the other hand, for typical scenes, the Intra-H.261 encoder tends to
outperform the nv encoder by a factor of two to four (Frederick
has reported a similar factor of two by replacing the Haar transform
by the DCT in the nv coding algorithm).
.SH "MONITOR GAMMA"
Because computer monitors are not designed to display generic
composite video and because analog video standards
bias source signals with a display gamma correction,
most computer monitors are not properly calibrated for
displaying digital video signals.  In other words, cameras
adjust for a gamma response that is not typically present
in computer monitors.  For color mapped rendering (i.e., error
diffusion or ordered dither), vic allows you to specify
a gamma correction factor that is tailored to your monitor.
You can choose a proper gamma using the test image,
.I gamma.gif,
included in the vic distribution.  View the image from several
feet away and choose the bar which appears to have a uniform
gray level.  The number printed below this bar is the gamma
of your display.  Take this number, divide it by 2.2 (the gamma
correction built into an analog video signal),
and use this result for vic's gamma correction (i.e.,
.I Vic.gamma).

This gamma calibration procedure is due to Robert Berger
(rwb@J.GP.CS.CMU.EDU),
who provides an excellent discussion of monitor gamma in
.br
http://www.cs.cmu.edu:8001/afs/cs/user/rwb/www/gamma.html.
The gamma.gif calibration image is redistributed with the permission
of Robert Berger.
.SH "X RESOURCES"
The following are the names and default values of X resources used by
.I vic.
Any of these resources can be overridden by the -X command switch,
which may be used multiple times on the command line.
For example, "-Xmtu=800" overrides
.I Vic.mtu
with 800.
.IP "\fBVic.mtu\fI (1024)\fP"
the maximum transmission unit for vic, with respect to the RTP layer
.IP "\fBVic.framerate\fI (2)\fP"
the default initial setting of the frame rate slider
.IP "\fBVic.defaultTTL\fI (16)\fP"
the default IP multicast time-to-live
.IP "\fBVic.maxbw\fI (-1)\fP"
the maximum allowable transmission rate; -1 causes vic to automatically
choose the maximum based on the MBONE heuristics that relate ttl scopes
to maximum transmission rate
.IP "\fBVic.bandwidth\fI (128)\fP"
the default initial setting of the bandwidth slider in kb/s
.IP "\fBVic.iconPrefix\fI (vic:)\fP"
a string that is prefixed to the vic icon names
.IP "\fBVic.priority\fI (10)\fP"
a scheduling priority that is set using the
.I nice(3)
system call; typically, video is run at a lower priority to prevent
computationally expensive decoding from interfering with
.I vat(1)
to avoid audio breakups
.IP "\fBVic.format\fI (none)\fP"
the default coding format, which may be \fBnv, cellb, bvc, jpeg,\fR
or \fBh261\fR.
.IP "\fBVic.stampInterval\fI (1000)\fP"
the time interval (in milliseconds) between updates of the thumbnail
image; the thumbnail is not rendered in real-time to avoid decoding
overhead when the stream is not being actively viewed
.IP "\fBVic.switchInterval\fI (5)\fP"
the time interval (in seconds) to wait before switching to the next
video source in timer-switched mode
.IP "\fBVic.dither\fI (od)\fP"
the default mode for dithering for 8-bit displays;
see the -c command line option for more information.
.IP "\fBVic.tile\fI (1)\fP"
the default number of columns used for displaying thumbnails
in the main vic window
.IP "\fBVic.filterGain\fI (0.25)\fP"
the low pass filter constant used for smoothing the frame rate
and bit rate statistics
.IP "\fBVic.statsFilter\fI (0.0625)\fP"
the low pass filter constant used for smoothing the decoder
and network statistics (in the ``stats'' popup window)
.IP "\fBVic.medianCutColors\fI (150)\fP"
the number of colors to use in the dynamic colormap optimization,
run when the ``Colors'' button is invoked
.IP "\fBVic.gamma\fI (0.7)\fP"
the default gamma correction factor to use in the color mapped
rendering algorithms
.IP "\fBVic.rtipXmin\fI (655)\fP"
the RTIP ``xmin'' traffic spec parameter
.IP "\fBVic.rtipXave\fI (655)\fP"
the RTIP ``xave'' traffic spec parameter
.IP "\fBVic.rtipI\fI (6553)\fP"
the RTIP ``I'' traffic spec parameter
.IP "\fBVic.rtipSmax\fI (1200)\fP"
the RTIP ``Smax'' traffic spec parameter
.IP "\fBVic.rtipD\fI (1200)\fP"
the RTIP ``D'' QOS spec parameter
.IP "\fBVic.rtipJ\fI (3279)\fP"
the RTIP ``J'' QOS spec parameter
.IP "\fBVic.rtipZ\fI (10000)\fP"
the RTIP ``Z'' QOS spec parameter
.IP "\fBVic.rtipW\fI (1000)\fP"
the RTIP ``W'' QOS spec parameter
.IP "\fBVic.rtipU\fI (1000)\fP"
the RTIP ``U'' QOS spec parameter
.IP "\fBVic.rtipType\fI (1)\fP"
the RTIP type parameter
.SH "SEE ALSO"
vat(1),
ivs(1),
nv(1),
ppmtolut(1),
mkcube(1),
histtolut(1)
.LP
Schulzrinne, Casner, Frederick, Jacobson,
``RTP: A Transport Protocol for Real-Time Applications'',
Internet Draft, available via anonymous ftp to
ftp.isi.edu in internet-drafts/draft-ietf-avt-rtp-*.
.LP
McCanne, Steven and Jacobson, Van.
``vic: A Flexible Framework for Packet Video''.
In proceedings of ACM Multimedia '95.
November, 1995.
.LP
.I vat
is available via anonymous ftp to ftp.ee.lbl.gov in conferencing/vat.
.I nv
is available via anonymous ftp to ftp.parc.xerox.com in pub/net-research.
.I ivs
is available via anonymous ftp to avahi.inria.fr in pub/videoconference.
.br
.SH ACKNOWLEDGMENTS
.LP
.I Vic
was inspired by
.I nv,
the pioneering Internet video tool developed
by Ron Frederick at Xerox PARC (frederick@parc.xerox.com).
Portions of vic (the ordered dither, the nv-format codec, and
some of the video capture code) were derived from the
.I nv
source code.
.LP
Lance Berc (berc@src.dec.com) provided the j300/jvideo video server;
his model for video capture and decompression shaped vic's hardware
codec support architecture.
Lance has been tremendously helpful in the development
process.  He has helped to diagnose and fix several particularly
nasty bugs and provided many excellent suggestions for the user
interface and overall functionality.
.LP
The CellB codec is based on an implementation from
Michael Speer (speer@eng.sun.com).
.LP
Amit Gupta (amit@cs.berkeley.edu) originally suggested the abstraction
that evolved into the voice-activated switching mechanism.
.LP
Elan Amir (elan@cs.berkeley.edu) implemented the error diffusion
dithering code and dynamic color allocation (median cut) algorithms.
Chris Goodman (goodman@sgi.com) provided valuable advice on the
error diffusion algorithm and helped debug the implementation.
.LP
Martin Vetterli (martin@diva.eecs.berkeley.edu) provided input on fast
DCT implementations.  He pointed out that Arai, Agui, and Nakajmia's
8pt 1D DCT can be used to compute scaled row and column DCTs leading to
a 80 multiply 8x8 2D DCT.
.LP
Thanks to Robert Berger (rwb@J.GP.CS.CMU.EDU) for his excellent
web page on monitor gamma and for his permission to redistribute the
gamma calibration test image (gamma.gif).
.LP
Many thanks to the early alpha testers who invested tremendous
effort fielding version after version of bug ridden binaries.
Their feedback, patience, and willingness to cope with our
source code distribution policies are very much appreciated.
The cast includes
Lance Berc (berc@pa.dec.com),
Toerless Eckert <Toerless.Eckert@Informatik.Uni-Erlangen.de>
Atanu Ghosh (A.Ghosh@cs.ucl.ac.uk),
Mark Handley (M.Handley@cs.ucl.ac.uk),
Don Hoffman (hoffman@eng.sun.com),
George Michaelson (G.Michaelson@cc.uq.oz.au),
Bob Olson (olson@mcs.anl.gov),
Joe Pallas (Pallas@Apple.COM),
Hoofar Razavi (hoofar@sgi.com),
Michael Speer (speer@eng.sun.com),
Craig Votava (Craig.M.Votava@att.com).
and
Ian Wakeman (I.Wakeman@cs.ucl.ac.uk),
.LP
The extension for compositing graphical overlays in the capture path
was suggested by Lance Berc (berc@pa.dec.com).
.LP
Thanks to the Xunet research community for using an early version
of vic to conduct research meetings over the Xunet backbone during
Fall 1993.  This experiment led to an important design change in
vic: the separation of viewing window from the underlying video source.
With this separation, a window could be ``switched'' among the
many active sources present in the relatively large Xunet conferences.
.LP
This software is based in part on the work of the Independent JPEG Group
and the Portable Video Research Group.
.LP
This work was co-sponsored by the the Lawrence Berkeley National Laboratory
and the Tenet Group of the University of California Berkeley and 
of the International Computer Science Institute.
Support was provided by
(1) an AT&T Graduate Fellowship;
(2) for Lawrence Berkeley National Laboratory: (i) the Director,
Office of Energy Research, Scientific Computing Staff, of the
U.S. Department of Energy, Contract No. DE-AC03-76SF00098,
(ii) Sun Microsystems, (iii) Digital Equipment Corporation,
and (iv) Silicon Graphics Inc.; and
(3) for the Tenet Research Group: (i) the National Science Foundation
and the Advanced Research Projects Agency (ARPA) under
Cooperative Agreement NCR-8919038 with the Corporation for
National Research Initiatives, (ii) Digital Equipment Corporation,
and (iii) Silicon Graphics Inc.
.LP
.SH AUTHOR
Steven McCanne (mccanne@ee.lbl.gov), University of California, Berkeley
and Lawrence Berkeley National Laboratory, Berkeley, CA, and
Van Jacobson (van@ee.lbl.gov),
Lawrence Berkeley National Laboratory, Berkeley, CA.
.SH BUGS
MPEG is not yet supported.  We plan to implement an ``Intra-MPEG'' encoder
using the same principle underlying vic's ``Intra-H.261'' encoder.

The (software) JPEG decoder makes no attempt to interpolate
unnatural aspect ratios and does not have deinterlace support
(i.e., it will display 640x240 fields as is).

There are no contrast or brightness controls.

The error-diffsuion dithering code needs more work.
At low luminosities, strange pastel colors appear.
Blue skies are often rendered green.

Monochrome displays are not supported.

Vic cannot operate on the loopback interface because it gets
confused by it's own stream.  Similarly, routing loops
due to application level gateways are not yet dealt with
gracefully.

The J300 only produces 8-bit dithered output, so you must run vic
with an 8-bit visual if you want to use the J300 to decode JPEG
to a window.

If you invoke the colormap optimization and then change the dithering
algorithm, the optimized colormap is lost.

Quarter-sized NTSC input video is truncated from 160x120 to 160x112
due to limitations in the way vic performs conditional replenishment
(i.e., it uses 16x16 blocks and 120 is not an integral multiple of 16).