Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
L
libvncserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
rasky
libvncserver
Commits
17e6b6a2
Commit
17e6b6a2
authored
19 years ago
by
runge
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x11vnc: -8to24 now works on default depth 8 displays.
parent
e38c3c22
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1240 additions
and
873 deletions
+1240
-873
8to24.c
x11vnc/8to24.c
+547
-323
8to24.h
x11vnc/8to24.h
+1
-0
ChangeLog
x11vnc/ChangeLog
+3
-0
README
x11vnc/README
+471
-459
cursor.c
x11vnc/cursor.c
+6
-0
help.c
x11vnc/help.c
+19
-12
remote.c
x11vnc/remote.c
+8
-0
scan.c
x11vnc/scan.c
+6
-2
screen.c
x11vnc/screen.c
+91
-32
userinput.c
x11vnc/userinput.c
+58
-30
x11vnc.1
x11vnc/x11vnc.1
+20
-13
x11vnc.c
x11vnc/x11vnc.c
+9
-1
x11vnc_defs.c
x11vnc/x11vnc_defs.c
+1
-1
No files found.
x11vnc/8to24.c
View file @
17e6b6a2
This diff is collapsed.
Click to expand it.
x11vnc/8to24.h
View file @
17e6b6a2
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
/* -- 8to24.h -- */
/* -- 8to24.h -- */
extern
int
multivis_count
;
extern
int
multivis_count
;
extern
int
multivis_24count
;
extern
void
check_for_multivis
(
void
);
extern
void
check_for_multivis
(
void
);
extern
void
bpp8to24
(
int
,
int
,
int
,
int
);
extern
void
bpp8to24
(
int
,
int
,
int
,
int
);
...
...
This diff is collapsed.
Click to expand it.
x11vnc/ChangeLog
View file @
17e6b6a2
2006-01-18 Karl Runge <runge@karlrunge.com>
* x11vnc: -8to24 now works on default depth 8 screens.
2006-01-16 Karl Runge <runge@karlrunge.com>
2006-01-16 Karl Runge <runge@karlrunge.com>
* x11vnc: more tweaks to -8to24, add XGETIMAGE_8TO24 mode to call
* x11vnc: more tweaks to -8to24, add XGETIMAGE_8TO24 mode to call
XGetImage() on the 8bpp regions.
XGetImage() on the 8bpp regions.
...
...
This diff is collapsed.
Click to expand it.
x11vnc/README
View file @
17e6b6a2
This source diff could not be displayed because it is too large. You can
view the blob
instead.
This diff is collapsed.
Click to expand it.
x11vnc/cursor.c
View file @
17e6b6a2
...
@@ -943,6 +943,12 @@ static rfbCursorPtr pixels2curs(unsigned long *pixels, int w, int h,
...
@@ -943,6 +943,12 @@ static rfbCursorPtr pixels2curs(unsigned long *pixels, int w, int h,
first
=
0
;
first
=
0
;
}
}
if
(
cmap8to24
&&
cmap8to24_fb
&&
depth
==
8
)
{
if
(
Bpp
==
1
)
{
Bpp
=
4
;
}
}
if
(
scaling_cursor
&&
scale_cursor_fac
!=
1
.
0
)
{
if
(
scaling_cursor
&&
scale_cursor_fac
!=
1
.
0
)
{
int
W
,
H
;
int
W
,
H
;
char
*
pixels_use
=
(
char
*
)
pixels
;
char
*
pixels_use
=
(
char
*
)
pixels
;
...
...
This diff is collapsed.
Click to expand it.
x11vnc/help.c
View file @
17e6b6a2
...
@@ -98,6 +98,7 @@ void print_help(int mode) {
...
@@ -98,6 +98,7 @@ void print_help(int mode) {
"
\n
"
"
\n
"
"-flashcmap In 8bpp indexed color, let the installed colormap flash
\n
"
"-flashcmap In 8bpp indexed color, let the installed colormap flash
\n
"
" as the pointer moves from window to window (slow).
\n
"
" as the pointer moves from window to window (slow).
\n
"
" Also try the -8to24 option to avoid flash altogether.
\n
"
"-shiftcmap n Rare problem, but some 8bpp displays use less than 256
\n
"
"-shiftcmap n Rare problem, but some 8bpp displays use less than 256
\n
"
" colorcells (e.g. 16-color grayscale, perhaps the other
\n
"
" colorcells (e.g. 16-color grayscale, perhaps the other
\n
"
" bits are used for double buffering) *and* also need to
\n
"
" bits are used for double buffering) *and* also need to
\n
"
...
@@ -150,8 +151,10 @@ void print_help(int mode) {
...
@@ -150,8 +151,10 @@ void print_help(int mode) {
"-8to24 If -overlay is not supported on your OS, and you have a
\n
"
"-8to24 If -overlay is not supported on your OS, and you have a
\n
"
" legacy 8bpp app that you want to view on a multi-depth
\n
"
" legacy 8bpp app that you want to view on a multi-depth
\n
"
" display with default depth 24 (and is 32 bpp), try
\n
"
" display with default depth 24 (and is 32 bpp), try
\n
"
" this option. This option may not work on all X servers
\n
"
" this option. It will also work for a default depth 8
\n
"
" and hardware (tested on XFree86/Xorg mga driver).
\n
"
" display with depth 24 overlay windows. This option
\n
"
" may not work on all X servers and hardware (tested on
\n
"
" XFree86/Xorg mga driver).
\n
"
"
\n
"
"
\n
"
" It enables a hack where x11vnc monitors windows within 3
\n
"
" It enables a hack where x11vnc monitors windows within 3
\n
"
" levels from the root window. If it finds any that are
\n
"
" levels from the root window. If it finds any that are
\n
"
...
@@ -159,14 +162,22 @@ void print_help(int mode) {
...
@@ -159,14 +162,22 @@ void print_help(int mode) {
" these regions where it extracts the 8bpp index color
\n
"
" these regions where it extracts the 8bpp index color
\n
"
" value from bits 25-32 and maps them on to TrueColor
\n
"
" value from bits 25-32 and maps them on to TrueColor
\n
"
" values and inserts them into bits 1-24 (i.e. overwrites
\n
"
" values and inserts them into bits 1-24 (i.e. overwrites
\n
"
" bits 1-24). This method appears to work, but may still
\n
"
" bits 1-24).
\n
"
" have bugs and note that it does hog resources. If there
\n
"
"
\n
"
" For default depth 8 displays, everything is tranformed
\n
"
" to 32bpp (and is potentially a improvement over
\n
"
" -flashcmap). Also for default depth 8 displays, setting
\n
"
" the env. var. HIGHBITS_8TO24 may give a speedup for
\n
"
" transforming 8bpp pixel data.
\n
"
"
\n
"
" These schemes appear to work, but may still have
\n
"
" bugs and note that they do hog resources. If there
\n
"
" are multiple 8bpp windows using different colormaps,
\n
"
" are multiple 8bpp windows using different colormaps,
\n
"
" one may have to iconify all but one for the colors to
\n
"
" one may have to iconify all but one for the colors to
\n
"
" be correct.
\n
"
" be correct.
\n
"
"
\n
"
"
\n
"
" There may also be painting errors for clipping
\n
"
" There may also be painting errors for clipping
and
\n
"
"
and
switching between windows of depths 8 and 24.
\n
"
" switching between windows of depths 8 and 24.
\n
"
" Heuristics are applied to try to minimize the painting
\n
"
" Heuristics are applied to try to minimize the painting
\n
"
" errors. One can also press 3 Alt_L's in a row to
\n
"
" errors. One can also press 3 Alt_L's in a row to
\n
"
" refresh the screen if the error does not repair itself.
\n
"
" refresh the screen if the error does not repair itself.
\n
"
...
@@ -183,12 +194,8 @@ void print_help(int mode) {
...
@@ -183,12 +194,8 @@ void print_help(int mode) {
" a scheme were XGetImage() is used to retrieve the 8bpp
\n
"
" a scheme were XGetImage() is used to retrieve the 8bpp
\n
"
" data instead of assuming that data is in bits 25-32.
\n
"
" data instead of assuming that data is in bits 25-32.
\n
"
" This mode is significantly slower than the above mode.
\n
"
" This mode is significantly slower than the above mode.
\n
"
"
\n
"
" For the default depth 8 case, XGetImage() is always
\n
"
" Note that -8to24 does not work on displays with 8bpp
\n
"
" used to access depth 24 pixel data.
\n
"
" default visual with depth 24 applications. The Xserver
\n
"
" -cc option can be used to switch the default depth
\n
"
" on multidepth setups. It may be possible to handle
\n
"
" this case.
\n
"
"
\n
"
"
\n
"
"-scale fraction Scale the framebuffer by factor
\"
fraction
\"
. Values
\n
"
"-scale fraction Scale the framebuffer by factor
\"
fraction
\"
. Values
\n
"
" less than 1 shrink the fb, larger ones expand it. Note:
\n
"
" less than 1 shrink the fb, larger ones expand it. Note:
\n
"
...
...
This diff is collapsed.
Click to expand it.
x11vnc/remote.c
View file @
17e6b6a2
...
@@ -984,8 +984,16 @@ char *process_remote_cmd(char *cmd, int stringonly) {
...
@@ -984,8 +984,16 @@ char *process_remote_cmd(char *cmd, int stringonly) {
snprintf
(
buf
,
bufn
,
"ans=%s:%d"
,
p
,
cmap8to24
);
snprintf
(
buf
,
bufn
,
"ans=%s:%d"
,
p
,
cmap8to24
);
goto
qry
;
goto
qry
;
}
}
if
(
overlay
)
{
rfbLog
(
"disabling -overlay in -8to24 mode.
\n
"
);
overlay
=
0
;
}
rfbLog
(
"remote_cmd: turning on -8to24 mode.
\n
"
);
rfbLog
(
"remote_cmd: turning on -8to24 mode.
\n
"
);
cmap8to24
=
1
;
cmap8to24
=
1
;
if
(
overlay
)
{
rfbLog
(
"disabling -overlay in -8to24 mode.
\n
"
);
overlay
=
0
;
}
do_new_fb
(
0
);
do_new_fb
(
0
);
}
else
if
(
!
strcmp
(
p
,
"no8to24"
))
{
}
else
if
(
!
strcmp
(
p
,
"no8to24"
))
{
...
...
This diff is collapsed.
Click to expand it.
x11vnc/scan.c
View file @
17e6b6a2
...
@@ -1160,6 +1160,7 @@ void scale_rect(double factor, int blend, int interpolate, int Bpp,
...
@@ -1160,6 +1160,7 @@ void scale_rect(double factor, int blend, int interpolate, int Bpp,
void
scale_and_mark_rect
(
int
X1
,
int
Y1
,
int
X2
,
int
Y2
)
{
void
scale_and_mark_rect
(
int
X1
,
int
Y1
,
int
X2
,
int
Y2
)
{
char
*
src_fb
=
main_fb
;
char
*
src_fb
=
main_fb
;
int
Bpp
=
bpp
/
8
,
fac
=
1
;
if
(
!
screen
||
!
rfb_fb
||
!
main_fb
)
{
if
(
!
screen
||
!
rfb_fb
||
!
main_fb
)
{
return
;
return
;
...
@@ -1185,10 +1186,13 @@ void scale_and_mark_rect(int X1, int Y1, int X2, int Y2) {
...
@@ -1185,10 +1186,13 @@ void scale_and_mark_rect(int X1, int Y1, int X2, int Y2) {
if
(
cmap8to24
&&
cmap8to24_fb
)
{
if
(
cmap8to24
&&
cmap8to24_fb
)
{
src_fb
=
cmap8to24_fb
;
src_fb
=
cmap8to24_fb
;
if
(
scaling
&&
depth
==
8
)
{
fac
=
4
;
}
}
}
scale_rect
(
scale_fac
,
scaling_blend
,
scaling_interpolate
,
bpp
/
8
,
scale_rect
(
scale_fac
,
scaling_blend
,
scaling_interpolate
,
fac
*
Bpp
,
src_fb
,
main_bytes_per_line
,
rfb_fb
,
rfb_bytes_per_line
,
src_fb
,
fac
*
main_bytes_per_line
,
rfb_fb
,
rfb_bytes_per_line
,
dpy_x
,
dpy_y
,
scaled_x
,
scaled_y
,
X1
,
Y1
,
X2
,
Y2
,
1
);
dpy_x
,
dpy_y
,
scaled_x
,
scaled_y
,
X1
,
Y1
,
X2
,
Y2
,
1
);
}
}
...
...
This diff is collapsed.
Click to expand it.
x11vnc/screen.c
View file @
17e6b6a2
...
@@ -1502,11 +1502,39 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
...
@@ -1502,11 +1502,39 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
int
height
=
fb
->
height
;
int
height
=
fb
->
height
;
int
create_screen
=
screen
?
0
:
1
;
int
create_screen
=
screen
?
0
:
1
;
int
bits_per_color
;
int
bits_per_color
;
int
fb_bpp
,
fb_Bpl
,
fb_depth
;
bpp
=
fb
->
bits_per_pixel
;
fb_bpp
=
(
int
)
fb
->
bits_per_pixel
;
fb_Bpl
=
(
int
)
fb
->
bytes_per_line
;
fb_depth
=
(
int
)
fb
->
depth
;
main_bytes_per_line
=
fb
->
bytes_per_line
;
main_bytes_per_line
=
fb
->
bytes_per_line
;
if
(
cmap8to24
)
{
if
(
raw_fb
)
{
if
(
!
quiet
)
rfbLog
(
"disabling -8to24 mode"
" in raw_fb mode.
\n
"
);
cmap8to24
=
0
;
}
else
if
(
depth
==
24
)
{
if
(
fb_bpp
!=
32
)
{
if
(
!
quiet
)
rfbLog
(
"disabling -8to24 mode:"
" bpp != 32 with depth == 24
\n
"
);
cmap8to24
=
0
;
}
}
else
if
(
depth
==
8
)
{
/* need to cook up the screen fb to be depth 24 */
fb_bpp
=
32
;
fb_depth
=
24
;
}
else
{
if
(
!
quiet
)
rfbLog
(
"disabling -8to24 mode:"
" default depth not 24 or 8
\n
"
);
cmap8to24
=
0
;
}
}
setup_scaling
(
&
width
,
&
height
);
setup_scaling
(
&
width
,
&
height
);
if
(
scaling
)
{
if
(
scaling
)
{
rfbLog
(
"scaling screen: %dx%d -> %dx%d scale_fac=%.5f
\n
"
,
rfbLog
(
"scaling screen: %dx%d -> %dx%d scale_fac=%.5f
\n
"
,
...
@@ -1517,32 +1545,35 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
...
@@ -1517,32 +1545,35 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
rfb_bytes_per_line
=
main_bytes_per_line
;
rfb_bytes_per_line
=
main_bytes_per_line
;
}
}
if
(
cmap8to24
&&
depth
==
8
)
{
rfb_bytes_per_line
*=
4
;
}
/*
/*
* These are just hints wrt pixel format just to let
* These are just hints wrt pixel format just to let
* rfbGetScreen/rfbNewFramebuffer proceed with reasonable
* rfbGetScreen/rfbNewFramebuffer proceed with reasonable
* defaults. We manually set them in painful detail below.
* defaults. We manually set them in painful detail below.
*/
*/
bits_per_color
=
guess_bits_per_color
(
fb
->
bits_per_pixel
);
bits_per_color
=
guess_bits_per_color
(
fb
_bpp
);
/* n.b. samplesPerPixel (set = 1 here) seems to be unused. */
/* n.b. samplesPerPixel (set = 1 here) seems to be unused. */
if
(
create_screen
)
{
if
(
create_screen
)
{
screen
=
rfbGetScreen
(
argc
,
argv
,
width
,
height
,
screen
=
rfbGetScreen
(
argc
,
argv
,
width
,
height
,
bits_per_color
,
1
,
(
int
)
fb
->
bits_per_pixel
/
8
);
bits_per_color
,
1
,
fb_bpp
/
8
);
if
(
screen
&&
http_dir
)
{
if
(
screen
&&
http_dir
)
{
http_connections
(
1
);
http_connections
(
1
);
}
}
}
else
{
}
else
{
/* set set frameBuffer member below. */
/* set set frameBuffer member below. */
rfbLog
(
"rfbNewFramebuffer(0x%x, 0x%x, %d, %d, %d, %d, %d)
\n
"
,
rfbLog
(
"rfbNewFramebuffer(0x%x, 0x%x, %d, %d, %d, %d, %d)
\n
"
,
screen
,
NULL
,
width
,
height
,
screen
,
NULL
,
width
,
height
,
bits_per_color
,
1
,
fb_bpp
/
8
);
bits_per_color
,
1
,
fb
->
bits_per_pixel
/
8
);
/* these are probably overwritten, but just to be safe: */
/* these are probably overwritten, but just to be safe: */
screen
->
bitsPerPixel
=
fb
->
bits_per_pixel
;
screen
->
bitsPerPixel
=
fb
_bpp
;
screen
->
depth
=
fb
->
depth
;
screen
->
depth
=
fb
_
depth
;
rfbNewFramebuffer
(
screen
,
NULL
,
width
,
height
,
rfbNewFramebuffer
(
screen
,
NULL
,
width
,
height
,
bits_per_color
,
1
,
(
int
)
fb
->
bits_per_pixel
/
8
);
bits_per_color
,
1
,
(
int
)
fb
_bpp
/
8
);
}
}
if
(
!
screen
)
{
if
(
!
screen
)
{
int
i
;
int
i
;
...
@@ -1583,8 +1614,8 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
...
@@ -1583,8 +1614,8 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
/* set up format from scratch: */
/* set up format from scratch: */
screen
->
paddedWidthInBytes
=
rfb_bytes_per_line
;
screen
->
paddedWidthInBytes
=
rfb_bytes_per_line
;
screen
->
serverFormat
.
bitsPerPixel
=
fb
->
bits_per_pixel
;
screen
->
serverFormat
.
bitsPerPixel
=
fb
_bpp
;
screen
->
serverFormat
.
depth
=
fb
->
depth
;
screen
->
serverFormat
.
depth
=
fb
_
depth
;
screen
->
serverFormat
.
trueColour
=
TRUE
;
screen
->
serverFormat
.
trueColour
=
TRUE
;
screen
->
serverFormat
.
redShift
=
0
;
screen
->
serverFormat
.
redShift
=
0
;
...
@@ -1605,12 +1636,33 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
...
@@ -1605,12 +1636,33 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
main_green_mask
=
fb
->
green_mask
;
main_green_mask
=
fb
->
green_mask
;
main_blue_mask
=
fb
->
blue_mask
;
main_blue_mask
=
fb
->
blue_mask
;
have_masks
=
((
fb
->
red_mask
|
fb
->
green_mask
|
fb
->
blue_mask
)
!=
0
);
have_masks
=
((
fb
->
red_mask
|
fb
->
green_mask
|
fb
->
blue_mask
)
!=
0
);
if
(
force_indexed_color
)
{
if
(
force_indexed_color
)
{
have_masks
=
0
;
have_masks
=
0
;
}
}
if
(
cmap8to24
&&
depth
==
8
)
{
XVisualInfo
vinfo
;
/* more cooking up... */
have_masks
=
2
;
/* need to fetch TrueColor visual */
X_LOCK
;
if
(
XMatchVisualInfo
(
dpy
,
scr
,
24
,
TrueColor
,
&
vinfo
))
{
main_red_mask
=
vinfo
.
red_mask
;
main_green_mask
=
vinfo
.
green_mask
;
main_blue_mask
=
vinfo
.
blue_mask
;
}
else
if
(
fb
->
byte_order
==
LSBFirst
)
{
main_red_mask
=
0x00ff0000
;
main_green_mask
=
0x0000ff00
;
main_blue_mask
=
0x000000ff
;
}
else
{
main_red_mask
=
0x000000ff
;
main_green_mask
=
0x0000ff00
;
main_blue_mask
=
0x00ff0000
;
}
X_UNLOCK
;
}
if
(
!
have_masks
&&
screen
->
serverFormat
.
bitsPerPixel
==
8
if
(
!
have_masks
&&
screen
->
serverFormat
.
bitsPerPixel
==
8
&&
dpy
&&
CellsOfScreen
(
ScreenOfDisplay
(
dpy
,
scr
)))
{
&&
dpy
&&
CellsOfScreen
(
ScreenOfDisplay
(
dpy
,
scr
)))
{
/* indexed color */
/* indexed color */
...
@@ -1641,41 +1693,45 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
...
@@ -1641,41 +1693,45 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
if
(
raw_fb
)
{
if
(
raw_fb
)
{
rfbLog
(
"Raw fb at addr %p is %dbpp depth=%d "
rfbLog
(
"Raw fb at addr %p is %dbpp depth=%d "
"true color
\n
"
,
raw_fb_addr
,
"true color
\n
"
,
raw_fb_addr
,
fb_bpp
,
fb_depth
);
}
else
if
(
have_masks
==
2
)
{
rfbLog
(
"X display %s is %dbpp depth=%d indexed "
"color (-8to24 mode)
\n
"
,
DisplayString
(
dpy
),
fb
->
bits_per_pixel
,
fb
->
depth
);
fb
->
bits_per_pixel
,
fb
->
depth
);
}
else
{
}
else
{
rfbLog
(
"X display %s is %dbpp depth=%d true "
rfbLog
(
"X display %s is %dbpp depth=%d true "
"color
\n
"
,
DisplayString
(
dpy
),
"color
\n
"
,
DisplayString
(
dpy
),
fb
->
bits_per_pixel
,
fb
->
depth
);
fb
_bpp
,
fb_
depth
);
}
}
}
}
indexed_color
=
0
;
indexed_color
=
0
;
/* convert masks to bit shifts and max # colors */
/* convert masks to bit shifts and max # colors */
if
(
fb
->
red_mask
)
{
if
(
main_
red_mask
)
{
while
(
!
(
fb
->
red_mask
while
(
!
(
main_
red_mask
&
(
1
<<
screen
->
serverFormat
.
redShift
)))
{
&
(
1
<<
screen
->
serverFormat
.
redShift
)))
{
screen
->
serverFormat
.
redShift
++
;
screen
->
serverFormat
.
redShift
++
;
}
}
}
}
if
(
fb
->
green_mask
)
{
if
(
main_
green_mask
)
{
while
(
!
(
fb
->
green_mask
while
(
!
(
main_
green_mask
&
(
1
<<
screen
->
serverFormat
.
greenShift
)))
{
&
(
1
<<
screen
->
serverFormat
.
greenShift
)))
{
screen
->
serverFormat
.
greenShift
++
;
screen
->
serverFormat
.
greenShift
++
;
}
}
}
}
if
(
fb
->
blue_mask
)
{
if
(
main_
blue_mask
)
{
while
(
!
(
fb
->
blue_mask
while
(
!
(
main_
blue_mask
&
(
1
<<
screen
->
serverFormat
.
blueShift
)))
{
&
(
1
<<
screen
->
serverFormat
.
blueShift
)))
{
screen
->
serverFormat
.
blueShift
++
;
screen
->
serverFormat
.
blueShift
++
;
}
}
}
}
screen
->
serverFormat
.
redMax
screen
->
serverFormat
.
redMax
=
fb
->
red_mask
>>
screen
->
serverFormat
.
redShift
;
=
main_
red_mask
>>
screen
->
serverFormat
.
redShift
;
screen
->
serverFormat
.
greenMax
screen
->
serverFormat
.
greenMax
=
fb
->
green_mask
>>
screen
->
serverFormat
.
greenShift
;
=
main_
green_mask
>>
screen
->
serverFormat
.
greenShift
;
screen
->
serverFormat
.
blueMax
screen
->
serverFormat
.
blueMax
=
fb
->
blue_mask
>>
screen
->
serverFormat
.
blueShift
;
=
main_
blue_mask
>>
screen
->
serverFormat
.
blueShift
;
main_red_max
=
screen
->
serverFormat
.
redMax
;
main_red_max
=
screen
->
serverFormat
.
redMax
;
main_green_max
=
screen
->
serverFormat
.
greenMax
;
main_green_max
=
screen
->
serverFormat
.
greenMax
;
...
@@ -1703,6 +1759,17 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
...
@@ -1703,6 +1759,17 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
bitprint
(
fb
->
green_mask
,
32
));
bitprint
(
fb
->
green_mask
,
32
));
fprintf
(
stderr
,
" blue_mask: 0x%08lx %s
\n
"
,
fb
->
blue_mask
,
fprintf
(
stderr
,
" blue_mask: 0x%08lx %s
\n
"
,
fb
->
blue_mask
,
bitprint
(
fb
->
blue_mask
,
32
));
bitprint
(
fb
->
blue_mask
,
32
));
if
(
cmap8to24
)
{
fprintf
(
stderr
,
" 8to24 info:
\n
"
);
fprintf
(
stderr
,
" fb_bpp: %d
\n
"
,
fb_bpp
);
fprintf
(
stderr
,
" fb_depth: %d
\n
"
,
fb_depth
);
fprintf
(
stderr
,
" red_mask: 0x%08lx %s
\n
"
,
main_red_mask
,
bitprint
(
main_red_mask
,
32
));
fprintf
(
stderr
,
" green_mask: 0x%08lx %s
\n
"
,
main_green_mask
,
bitprint
(
main_green_mask
,
32
));
fprintf
(
stderr
,
" blue_mask: 0x%08lx %s
\n
"
,
main_blue_mask
,
bitprint
(
main_blue_mask
,
32
));
}
fprintf
(
stderr
,
" red: max: %3d shift: %2d
\n
"
,
fprintf
(
stderr
,
" red: max: %3d shift: %2d
\n
"
,
main_red_max
,
main_red_shift
);
main_red_max
,
main_red_shift
);
fprintf
(
stderr
,
" green: max: %3d shift: %2d
\n
"
,
fprintf
(
stderr
,
" green: max: %3d shift: %2d
\n
"
,
...
@@ -1765,16 +1832,11 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
...
@@ -1765,16 +1832,11 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
rfb_fb
=
NULL
;
rfb_fb
=
NULL
;
cmap8to24_fb
=
NULL
;
cmap8to24_fb
=
NULL
;
if
(
cmap8to24
)
{
if
(
screen
->
serverFormat
.
bitsPerPixel
!=
32
||
screen
->
serverFormat
.
depth
!=
24
)
{
if
(
!
quiet
)
rfbLog
(
"disabling -8to24 mode:"
" bpp != 32 or depth != 24
\n
"
);
cmap8to24
=
0
;
}
}
if
(
cmap8to24
)
{
if
(
cmap8to24
)
{
int
n
=
main_bytes_per_line
*
fb
->
height
;
int
n
=
main_bytes_per_line
*
fb
->
height
;
if
(
depth
==
8
)
{
n
*=
4
;
}
cmap8to24_fb
=
(
char
*
)
malloc
(
n
);
cmap8to24_fb
=
(
char
*
)
malloc
(
n
);
memset
(
cmap8to24_fb
,
0
,
n
);
memset
(
cmap8to24_fb
,
0
,
n
);
}
}
...
@@ -1795,9 +1857,6 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
...
@@ -1795,9 +1857,6 @@ void initialize_screen(int *argc, char **argv, XImage *fb) {
fprintf
(
stderr
,
"
\n
"
);
fprintf
(
stderr
,
"
\n
"
);
}
}
bpp
=
screen
->
serverFormat
.
bitsPerPixel
;
depth
=
screen
->
serverFormat
.
depth
;
/* may need, bpp, main_red_max, etc. */
/* may need, bpp, main_red_max, etc. */
parse_wireframe
();
parse_wireframe
();
parse_scroll_copyrect
();
parse_scroll_copyrect
();
...
...
This diff is collapsed.
Click to expand it.
x11vnc/userinput.c
View file @
17e6b6a2
...
@@ -1729,16 +1729,16 @@ static void get_client_regions(int *req, int *mod, int *cpy, int *num) {
...
@@ -1729,16 +1729,16 @@ static void get_client_regions(int *req, int *mod, int *cpy, int *num) {
static
void
do_copyregion
(
sraRegionPtr
region
,
int
dx
,
int
dy
)
{
static
void
do_copyregion
(
sraRegionPtr
region
,
int
dx
,
int
dy
)
{
sraRectangleIterator
*
iter
;
sraRectangleIterator
*
iter
;
sraRect
rect
;
sraRect
rect
;
int
Bpp
=
bpp
/
8
;
int
Bpp
0
=
bpp
/
8
,
Bpp
;
int
x1
,
y1
,
x2
,
y2
,
w
,
stride
;
int
x1
,
y1
,
x2
,
y2
,
w
,
stride
,
stride0
;
int
sx1
,
sy1
,
sx2
,
sy2
,
sdx
,
sdy
;
int
sx1
,
sy1
,
sx2
,
sy2
,
sdx
,
sdy
;
int
req
,
mod
,
cpy
,
ncli
;
int
req
,
mod
,
cpy
,
ncli
;
char
*
dst
,
*
src
;
char
*
dst
=
NULL
,
*
src
=
NULL
;
last_copyrect
=
dnow
();
last_copyrect
=
dnow
();
if
(
!
scaling
||
rfb_fb
==
main_fb
)
{
if
(
rfb_fb
==
main_fb
)
{
/* normal case */
/* normal case
, no -scale or -8to24
*/
get_client_regions
(
&
req
,
&
mod
,
&
cpy
,
&
ncli
);
get_client_regions
(
&
req
,
&
mod
,
&
cpy
,
&
ncli
);
if
(
debug_scroll
>
1
)
fprintf
(
stderr
,
"<<<-rfbDoCopyRect req: %d mod: %d cpy: %d
\n
"
,
req
,
mod
,
cpy
);
if
(
debug_scroll
>
1
)
fprintf
(
stderr
,
"<<<-rfbDoCopyRect req: %d mod: %d cpy: %d
\n
"
,
req
,
mod
,
cpy
);
rfbDoCopyRegion
(
screen
,
region
,
dx
,
dy
);
rfbDoCopyRegion
(
screen
,
region
,
dx
,
dy
);
...
@@ -1750,43 +1750,73 @@ if (debug_scroll > 1) fprintf(stderr, ">>>-rfbDoCopyRect req: %d mod: %d cpy: %d
...
@@ -1750,43 +1750,73 @@ if (debug_scroll > 1) fprintf(stderr, ">>>-rfbDoCopyRect req: %d mod: %d cpy: %d
}
}
/* rarer case, we need to call rfbDoCopyRect with scaled xy */
/* rarer case, we need to call rfbDoCopyRect with scaled xy */
stride
=
dpy_x
*
Bpp
;
stride
0
=
dpy_x
*
Bpp0
;
iter
=
sraRgnGetReverseIterator
(
region
,
dx
<
0
,
dy
<
0
);
iter
=
sraRgnGetReverseIterator
(
region
,
dx
<
0
,
dy
<
0
);
while
(
sraRgnIteratorNext
(
iter
,
&
rect
))
{
while
(
sraRgnIteratorNext
(
iter
,
&
rect
))
{
int
j
;
int
j
,
c
;
x1
=
rect
.
x1
;
x1
=
rect
.
x1
;
y1
=
rect
.
y1
;
y1
=
rect
.
y1
;
x2
=
rect
.
x2
;
x2
=
rect
.
x2
;
y2
=
rect
.
y2
;
y2
=
rect
.
y2
;
w
=
(
x2
-
x1
)
*
Bpp
;
dst
=
main_fb
+
y1
*
stride
+
x1
*
Bpp
;
src
=
main_fb
+
(
y1
-
dy
)
*
stride
+
(
x1
-
dx
)
*
Bpp
;
if
(
dy
<
0
)
{
for
(
c
=
0
;
c
<
2
;
c
++
)
{
for
(
j
=
y1
;
j
<
y2
;
j
++
)
{
memmove
(
dst
,
src
,
w
);
Bpp
=
Bpp0
;
dst
+=
stride
;
stride
=
stride0
;
src
+=
stride
;
if
(
c
==
0
)
{
dst
=
main_fb
+
y1
*
stride
+
x1
*
Bpp
;
src
=
main_fb
+
(
y1
-
dy
)
*
stride
+
(
x1
-
dx
)
*
Bpp
;
}
else
if
(
c
==
1
)
{
if
(
!
cmap8to24_fb
||
cmap8to24_fb
==
rfb_fb
)
{
continue
;
}
if
(
cmap8to24
&&
depth
==
8
)
{
Bpp
=
4
*
Bpp0
;
stride
=
4
*
stride0
;
}
dst
=
cmap8to24_fb
+
y1
*
stride
+
x1
*
Bpp
;
src
=
cmap8to24_fb
+
(
y1
-
dy
)
*
stride
+
(
x1
-
dx
)
*
Bpp
;
}
}
}
else
{
dst
+=
(
y2
-
y1
-
1
)
*
stride
;
w
=
(
x2
-
x1
)
*
Bpp
;
src
+=
(
y2
-
y1
-
1
)
*
stride
;
for
(
j
=
y2
-
1
;
j
>=
y1
;
j
--
)
{
if
(
dy
<
0
)
{
memmove
(
dst
,
src
,
w
);
for
(
j
=
y1
;
j
<
y2
;
j
++
)
{
dst
-=
stride
;
memmove
(
dst
,
src
,
w
);
src
-=
stride
;
dst
+=
stride
;
src
+=
stride
;
}
}
else
{
dst
+=
(
y2
-
y1
-
1
)
*
stride
;
src
+=
(
y2
-
y1
-
1
)
*
stride
;
for
(
j
=
y2
-
1
;
j
>=
y1
;
j
--
)
{
memmove
(
dst
,
src
,
w
);
dst
-=
stride
;
src
-=
stride
;
}
}
}
}
}
sx1
=
((
double
)
x1
/
dpy_x
)
*
scaled_x
;
if
(
scaling
)
{
sy1
=
((
double
)
y1
/
dpy_y
)
*
scaled_y
;
sx1
=
((
double
)
x1
/
dpy_x
)
*
scaled_x
;
sx2
=
((
double
)
x2
/
dpy_x
)
*
scaled_x
;
sy1
=
((
double
)
y1
/
dpy_y
)
*
scaled_y
;
sy2
=
((
double
)
y2
/
dpy_y
)
*
scaled_y
;
sx2
=
((
double
)
x2
/
dpy_x
)
*
scaled_x
;
sdx
=
((
double
)
dx
/
dpy_x
)
*
scaled_x
;
sy2
=
((
double
)
y2
/
dpy_y
)
*
scaled_y
;
sdy
=
((
double
)
dy
/
dpy_y
)
*
scaled_y
;
sdx
=
((
double
)
dx
/
dpy_x
)
*
scaled_x
;
sdy
=
((
double
)
dy
/
dpy_y
)
*
scaled_y
;
}
else
{
sx1
=
x1
;
sy1
=
y1
;
sx2
=
x2
;
sy2
=
y2
;
sdx
=
dx
;
sdy
=
dy
;
}
rfbDoCopyRect
(
screen
,
sx1
,
sy1
,
sx2
,
sy2
,
sdx
,
sdy
);
rfbDoCopyRect
(
screen
,
sx1
,
sy1
,
sx2
,
sy2
,
sdx
,
sdy
);
}
}
...
@@ -3710,8 +3740,6 @@ if (db) fprintf(stderr, "send_copyrect: %d\n", sent_copyrect);
...
@@ -3710,8 +3740,6 @@ if (db) fprintf(stderr, "send_copyrect: %d\n", sent_copyrect);
if
(
0
)
fprintf
(
stderr
,
"wireframe_in_progress over: %d %d %d %d
\n
"
,
x1
,
y1
,
x2
,
y2
);
if
(
0
)
fprintf
(
stderr
,
"wireframe_in_progress over: %d %d %d %d
\n
"
,
x1
,
y1
,
x2
,
y2
);
check_for_multivis
();
check_for_multivis
();
if
(
1
)
mark_rect_as_modified
(
x1
,
y1
,
x2
,
y2
,
0
);
if
(
1
)
mark_rect_as_modified
(
x1
,
y1
,
x2
,
y2
,
0
);
if
(
0
)
mark_rect_as_modified
(
0
,
0
,
dpy_x
,
dpy_y
,
0
);
if
(
0
)
rfbPE
(
-
1
);
}
}
urgent_update
=
1
;
urgent_update
=
1
;
...
...
This diff is collapsed.
Click to expand it.
x11vnc/x11vnc.1
View file @
17e6b6a2
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
.TH X11VNC "1" "January 2006" "x11vnc " "User Commands"
.TH X11VNC "1" "January 2006" "x11vnc " "User Commands"
.SH NAME
.SH NAME
x11vnc - allow VNC connections to real X11 displays
x11vnc - allow VNC connections to real X11 displays
version: 0.8, lastmod: 2006-01-1
6
version: 0.8, lastmod: 2006-01-1
8
.SH SYNOPSIS
.SH SYNOPSIS
.B x11vnc
.B x11vnc
[OPTION]...
[OPTION]...
...
@@ -110,6 +110,7 @@ of the selected window.
...
@@ -110,6 +110,7 @@ of the selected window.
.IP
.IP
In 8bpp indexed color, let the installed colormap flash
In 8bpp indexed color, let the installed colormap flash
as the pointer moves from window to window (slow).
as the pointer moves from window to window (slow).
Also try the \fB-8to24\fR option to avoid flash altogether.
.PP
.PP
\fB-shiftcmap\fR \fIn\fR
\fB-shiftcmap\fR \fIn\fR
.IP
.IP
...
@@ -182,8 +183,10 @@ cursor shape using the overlay mechanism.
...
@@ -182,8 +183,10 @@ cursor shape using the overlay mechanism.
If \fB-overlay\fR is not supported on your OS, and you have a
If \fB-overlay\fR is not supported on your OS, and you have a
legacy 8bpp app that you want to view on a multi-depth
legacy 8bpp app that you want to view on a multi-depth
display with default depth 24 (and is 32 bpp), try
display with default depth 24 (and is 32 bpp), try
this option. This option may not work on all X servers
this option. It will also work for a default depth 8
and hardware (tested on XFree86/Xorg mga driver).
display with depth 24 overlay windows. This option
may not work on all X servers and hardware (tested on
XFree86/Xorg mga driver).
.IP
.IP
It enables a hack where x11vnc monitors windows within 3
It enables a hack where x11vnc monitors windows within 3
levels from the root window. If it finds any that are
levels from the root window. If it finds any that are
...
@@ -191,14 +194,22 @@ levels from the root window. If it finds any that are
...
@@ -191,14 +194,22 @@ levels from the root window. If it finds any that are
these regions where it extracts the 8bpp index color
these regions where it extracts the 8bpp index color
value from bits 25-32 and maps them on to TrueColor
value from bits 25-32 and maps them on to TrueColor
values and inserts them into bits 1-24 (i.e. overwrites
values and inserts them into bits 1-24 (i.e. overwrites
bits 1-24). This method appears to work, but may still
bits 1-24).
have bugs and note that it does hog resources. If there
.IP
For default depth 8 displays, everything is tranformed
to 32bpp (and is potentially a improvement over
\fB-flashcmap).\fR Also for default depth 8 displays, setting
the env. var. HIGHBITS_8TO24 may give a speedup for
transforming 8bpp pixel data.
.IP
These schemes appear to work, but may still have
bugs and note that they do hog resources. If there
are multiple 8bpp windows using different colormaps,
are multiple 8bpp windows using different colormaps,
one may have to iconify all but one for the colors to
one may have to iconify all but one for the colors to
be correct.
be correct.
.IP
.IP
There may also be painting errors for clipping
There may also be painting errors for clipping
and
and
switching between windows of depths 8 and 24.
switching between windows of depths 8 and 24.
Heuristics are applied to try to minimize the painting
Heuristics are applied to try to minimize the painting
errors. One can also press 3 Alt_L's in a row to
errors. One can also press 3 Alt_L's in a row to
refresh the screen if the error does not repair itself.
refresh the screen if the error does not repair itself.
...
@@ -215,12 +226,8 @@ XGETIMAGE_8TO24=1 before starting x11vnc. This enables
...
@@ -215,12 +226,8 @@ XGETIMAGE_8TO24=1 before starting x11vnc. This enables
a scheme were XGetImage() is used to retrieve the 8bpp
a scheme were XGetImage() is used to retrieve the 8bpp
data instead of assuming that data is in bits 25-32.
data instead of assuming that data is in bits 25-32.
This mode is significantly slower than the above mode.
This mode is significantly slower than the above mode.
.IP
For the default depth 8 case, XGetImage() is always
Note that \fB-8to24\fR does not work on displays with 8bpp
used to access depth 24 pixel data.
default visual with depth 24 applications. The Xserver
\fB-cc\fR option can be used to switch the default depth
on multidepth setups. It may be possible to handle
this case.
.PP
.PP
\fB-scale\fR \fIfraction\fR
\fB-scale\fR \fIfraction\fR
.IP
.IP
...
...
This diff is collapsed.
Click to expand it.
x11vnc/x11vnc.c
View file @
17e6b6a2
...
@@ -1560,7 +1560,7 @@ int main(int argc, char* argv[]) {
...
@@ -1560,7 +1560,7 @@ int main(int argc, char* argv[]) {
set_wirecopyrect_mode
(
argv
[
++
i
]);
set_wirecopyrect_mode
(
argv
[
++
i
]);
got_wirecopyrect
=
1
;
got_wirecopyrect
=
1
;
}
else
if
(
!
strcmp
(
arg
,
"-nowirecopyrect"
)
}
else
if
(
!
strcmp
(
arg
,
"-nowirecopyrect"
)
||
!
strcmp
(
arg
,
"-now
f
"
))
{
||
!
strcmp
(
arg
,
"-now
cr
"
))
{
set_wirecopyrect_mode
(
"never"
);
set_wirecopyrect_mode
(
"never"
);
}
else
if
(
!
strcmp
(
arg
,
"-debug_wireframe"
)
}
else
if
(
!
strcmp
(
arg
,
"-debug_wireframe"
)
||
!
strcmp
(
arg
,
"-dwf"
))
{
||
!
strcmp
(
arg
,
"-dwf"
))
{
...
@@ -2054,10 +2054,18 @@ int main(int argc, char* argv[]) {
...
@@ -2054,10 +2054,18 @@ int main(int argc, char* argv[]) {
alpha_remove
=
0
;
alpha_remove
=
0
;
}
}
if
(
cmap8to24
&&
overlay
)
{
if
(
!
quiet
)
{
rfbLog
(
"disabling -overlay in -8to24 mode.
\n
"
);
}
overlay
=
0
;
}
if
(
filexfer
&&
view_only
)
{
if
(
filexfer
&&
view_only
)
{
if
(
!
quiet
)
{
if
(
!
quiet
)
{
rfbLog
(
"setting -nofilexfer in -viewonly mode.
\n
"
);
rfbLog
(
"setting -nofilexfer in -viewonly mode.
\n
"
);
}
}
/* how to undo via -R? */
filexfer
=
0
;
filexfer
=
0
;
}
}
...
...
This diff is collapsed.
Click to expand it.
x11vnc/x11vnc_defs.c
View file @
17e6b6a2
...
@@ -15,7 +15,7 @@ int xtrap_base_event_type = 0;
...
@@ -15,7 +15,7 @@ int xtrap_base_event_type = 0;
int
xdamage_base_event_type
=
0
;
int
xdamage_base_event_type
=
0
;
/* date +'lastmod: %Y-%m-%d' */
/* date +'lastmod: %Y-%m-%d' */
char
lastmod
[]
=
"0.8 lastmod: 2006-01-1
6
"
;
char
lastmod
[]
=
"0.8 lastmod: 2006-01-1
8
"
;
/* X display info */
/* X display info */
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment