1#!/usr/bin/perl
2#
3# This script has been (or is hereby) released into the public domain by
4# its author, Karl J. Runge <runge@karlrunge.com>. This applies worldwide.
5#
6# In case this is not legally possible: Karl J. Runge grants anyone the
7# right to use this work for any purpose, without any conditions, unless
8# such conditions are required by law.
9
10$saw_mark = 0;
11$done = 0;
12
13while (<>) {
14	if (! $saw_mark && /case rfbEncodingServerIdentity:/) 		{
15		$saw_mark = 1;
16	}
17	if ($saw_mark && !$done && /default:/) {
18		print;
19
20		print <<END;
21                /* for turbovnc */
22#define rfbJpegQualityLevel1       0xFFFFFE01
23#define rfbJpegQualityLevel100     0xFFFFFE64
24#define rfbJpegSubsamp1X           0xFFFFFD00
25#define rfbJpegSubsamp4X           0xFFFFFD01
26#define rfbJpegSubsamp2X           0xFFFFFD02
27#define rfbJpegSubsampGray         0xFFFFFD03
28
29                if ( enc >= (uint32_t)rfbJpegSubsamp1X &&
30                         enc <= (uint32_t)rfbJpegSubsampGray ) {
31                    /* XXX member really should be tightSubsample not correMaxWidth */
32                    cl->correMaxWidth = enc & 0xFF;
33                    rfbLog("Using JPEG subsampling %d for client %s\\n",
34                           cl->correMaxWidth, cl->host);
35                } else if ( enc >= (uint32_t)rfbEncodingQualityLevel0 &&
36                            enc <= (uint32_t)rfbEncodingQualityLevel9 ) {
37                    static int JPEG_QUAL[10] = {
38                       5, 10, 15, 25, 37, 50, 60, 70, 75, 80
39                    };
40                    cl->tightQualityLevel = JPEG_QUAL[enc & 0x0F];
41                    /* XXX member really should be tightSubsample not correMaxWidth */
42                    cl->correMaxWidth = 2;
43                    rfbLog("Using image level Subsample %d  Quality %d for client %s\\n",
44                           cl->correMaxWidth, cl->tightQualityLevel, cl->host);
45                } else if ( enc >= (uint32_t)rfbJpegQualityLevel1 &&
46                            enc <= (uint32_t)rfbJpegQualityLevel100 ) {
47                    cl->tightQualityLevel = enc & 0xFF;
48                    rfbLog("Using image quality level %d for client %s\\n",
49                           cl->tightQualityLevel, cl->host);
50                } else
51END
52		$done = 1;
53		next;
54	}
55	print;
56}
57