Commit f65fddcb4ab0533d1a4e9f6a15cf5ecd631c752f
1 parent
85a310d3f5
Exists in
master
add release option on Makefile. vnc screen content transfer checked
Showing
3 changed files
with
95 additions
and
99 deletions
Show diff stats
Makefile
1 | -TOOLCHAIN_DIR = /opt/fsl-imx-wayland/5.10-hardknott | |
2 | -SDKTARGETSYSROOT = $(TOOLCHAIN_DIR)/sysroots/cortexa53-crypto-poky-linux | |
3 | - | |
4 | -CC_PATH = /opt/fsl-imx-wayland/5.10-hardknott/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux | |
5 | -CROSS_FREFIX = $(CC_PATH)/aarch64-poky-linux- | |
6 | -GCC = $(CROSS_FREFIX)gcc | |
7 | - | |
8 | -CFLAGS=-mcpu=cortex-a53 -march=armv8-a+crc+crypto -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security | |
9 | -LDFLAGS=-lpthread -lm -L. -lvncserver | |
10 | -INC=-I./protocol -I./shared -I./ | |
11 | - | |
12 | -CFLAGS+=`pkg-config --cflags pixman-1` | |
13 | -LDFLAGS+=`pkg-config --libs pixman-1` | |
14 | - | |
15 | -CFLAGS+=`pkg-config --cflags libweston-9` | |
16 | -LDFLAGS+=`pkg-config --libs libweston-9` | |
17 | - | |
18 | -CFLAGS+=`pkg-config --cflags gtk+-wayland-3.0` | |
19 | -LDFLAGS+=`pkg-config --libs gtk+-wayland-3.0` | |
20 | - | |
21 | -CFLAGS+=`pkg-config --cflags glib-2.0` | |
22 | -LDFLAGS+=`pkg-config --libs glib-2.0` | |
23 | - | |
24 | -CFLAGS+=`pkg-config --cflags pango` | |
25 | -LDFLAGS+=`pkg-config --libs pango` | |
26 | - | |
27 | -CFLAGS+=`pkg-config --cflags harfbuzz` | |
28 | -LDFLAGS+=`pkg-config --libs harfbuzz` | |
29 | - | |
30 | -CFLAGS+=`pkg-config --cflags wayland-server` | |
31 | -LDFLAGS+=`pkg-config --libs wayland-server` | |
32 | - | |
33 | -CFLAGS+=`pkg-config --cflags wayland-client` | |
34 | -LDFLAGS+=`pkg-config --libs wayland-client` | |
35 | - | |
36 | -CFLAGS+=`pkg-config --cflags xkbcommon` | |
37 | -LDFLAGS+=`pkg-config --libs xkbcommon` | |
38 | - | |
39 | -CFLAGS+=`pkg-config --cflags wayland-cursor` | |
40 | -LDFLAGS+=`pkg-config --libs wayland-cursor` | |
41 | - | |
42 | -CFLAGS+=`pkg-config --cflags weston` | |
43 | -LDFLAGS+=`pkg-config --libs weston` | |
44 | - | |
45 | -CFLAGS+=`pkg-config --cflags cairo-png` | |
46 | -LDFLAGS+=`pkg-config --libs cairo-png` | |
47 | - | |
48 | -CFLAGS+=`pkg-config --cflags libjpeg` | |
49 | -LDFLAGS+=`pkg-config --libs libjpeg` | |
50 | - | |
51 | -#CFLAGS+=`pkg-config --cflags ` | |
52 | -#LDFLAGS+=`pkg-config --libs ` | |
53 | - | |
54 | -#CFLAGS+=`pkg-config --cflags ` | |
55 | -#LDFLAGS+=`pkg-config --libs ` | |
56 | - | |
57 | -#CFLAGS+=`pkg-config --cflags ` | |
58 | -#LDFLAGS+=`pkg-config --libs ` | |
59 | - | |
60 | - | |
61 | -all: | |
62 | - $(GCC) $(CFLAGS) --sysroot $(SDKTARGETSYSROOT) $(LDFLAGS) $(INC) -o weston-vncserver \ | |
63 | - vncserver.c \ | |
64 | - protocol/pointer-constraints-unstable-v1-protocol.c \ | |
65 | - protocol/relative-pointer-unstable-v1-protocol.c \ | |
66 | - protocol/text-cursor-position-protocol.c \ | |
67 | - protocol/viewporter-protocol.c \ | |
68 | - protocol/weston-screenshooter-protocol.c \ | |
69 | - protocol/xdg-shell-protocol.c \ | |
70 | - shared/os-compatibility.c \ | |
71 | - shared/xalloc.c \ | |
72 | - shared/file-util.c \ | |
73 | - shared/cairo-util.c \ | |
74 | - shared/frame.c \ | |
75 | - shared/image-loader.c \ | |
76 | - window.c | |
77 | - | |
78 | -clean: | |
79 | - rm weston-vncserver | |
1 | +TOOLCHAIN_DIR = /opt/fsl-imx-wayland/5.10-hardknott | |
2 | +SDKTARGETSYSROOT = $(TOOLCHAIN_DIR)/sysroots/cortexa53-crypto-poky-linux | |
3 | + | |
4 | +CC_PATH = /opt/fsl-imx-wayland/5.10-hardknott/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux | |
5 | +CROSS_PREFIX = $(CC_PATH)/aarch64-poky-linux- | |
6 | +GCC = $(CROSS_PREFIX)gcc | |
7 | +STRIP = $(CROSS_PREFIX)strip | |
8 | + | |
9 | +CFLAGS=-mcpu=cortex-a53 -march=armv8-a+crc+crypto -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security | |
10 | +LDFLAGS=-lpthread -lm -L. -lvncserver | |
11 | +INC=-I./protocol -I./shared -I./ | |
12 | + | |
13 | +CFLAGS+=`pkg-config --cflags pixman-1 libweston-9 gtk+-wayland-3.0 glib-2.0 pango harfbuzz wayland-server wayland-client xkbcommon wayland-cursor weston cairo-png libjpeg` | |
14 | +LDFLAGS+=`pkg-config --libs pixman-1 libweston-9 gtk+-wayland-3.0 glib-2.0 pango harfbuzz wayland-server wayland-client xkbcommon wayland-cursor weston cairo-png libjpeg` | |
15 | + | |
16 | +#CFLAGS+=`pkg-config --cflags ` | |
17 | +#LDFLAGS+=`pkg-config --libs ` | |
18 | + | |
19 | +debug: | |
20 | + $(GCC) $(CFLAGS) --sysroot $(SDKTARGETSYSROOT) $(LDFLAGS) $(INC) -o weston-vncserver \ | |
21 | + vncserver.c \ | |
22 | + protocol/pointer-constraints-unstable-v1-protocol.c \ | |
23 | + protocol/relative-pointer-unstable-v1-protocol.c \ | |
24 | + protocol/text-cursor-position-protocol.c \ | |
25 | + protocol/viewporter-protocol.c \ | |
26 | + protocol/weston-screenshooter-protocol.c \ | |
27 | + protocol/xdg-shell-protocol.c \ | |
28 | + shared/os-compatibility.c \ | |
29 | + shared/xalloc.c \ | |
30 | + shared/file-util.c \ | |
31 | + shared/cairo-util.c \ | |
32 | + shared/frame.c \ | |
33 | + shared/image-loader.c \ | |
34 | + window.c | |
35 | + | |
36 | +release: debug | |
37 | + @echo "#### STRIP ####" | |
38 | + $(STRIP) weston-vncserver | |
39 | + | |
40 | + | |
41 | +clean: | |
42 | + rm weston-vncserver | ... | ... |
vncserver.c
... | ... | @@ -21,6 +21,8 @@ |
21 | 21 | * DEALINGS IN THE SOFTWARE. |
22 | 22 | */ |
23 | 23 | |
24 | +// #define DBG_FPS | |
25 | + | |
24 | 26 | #define LCD_WIDTH 1024 |
25 | 27 | #define LCD_HEIGHT 768 |
26 | 28 | |
... | ... | @@ -714,40 +716,57 @@ get_screenshot(const struct buffer_size *buff_size, |
714 | 716 | { |
715 | 717 | int output_stride, buffer_stride, i; |
716 | 718 | cairo_surface_t *surface; |
717 | - char *data, *d, *s; | |
719 | + char *data, *d, *s, *vnc; | |
718 | 720 | struct screenshooter_output *output, *next; |
719 | 721 | FILE *fp; |
720 | 722 | char filepath[PATH_MAX]; |
721 | 723 | |
722 | 724 | buffer_stride = buff_size->width * 4; |
725 | + // printf("buff_size->width[%d] buff_size->height[%d] \n",buff_size->width, buff_size->height); | |
726 | + // printf("buffer_stride[%d] * buff_size->height[%d] = %d\n",buffer_stride, buff_size->height, buffer_stride * buff_size->height); | |
727 | + data = xmalloc(LCD_WIDTH * 4 * LCD_HEIGHT); | |
728 | + vnc = xmalloc(LCD_WIDTH * 4 * LCD_HEIGHT); | |
723 | 729 | |
730 | + // printf("data[%p] vnc[%p]\n",data,vnc); | |
724 | 731 | // printf("buffer_stride[%d] * buff_size->height[%d] = %d\n",buffer_stride, buff_size->height, buffer_stride * buff_size->height); |
725 | 732 | data = xmalloc(1024 * 4 * 768); |
726 | - if (!data) | |
733 | + if (!data || !vnc) | |
727 | 734 | { |
728 | - return; | |
735 | + return -1; | |
729 | 736 | } |
730 | 737 | |
731 | 738 | wl_list_for_each_safe(output, next, output_list, link) |
732 | 739 | { |
740 | + // printf("output->offset_x[%d] output->width[%d] output->height[%d]\n",output->offset_x,output->width,output->height); | |
733 | 741 | if (output->offset_x == 0) |
734 | 742 | { |
735 | 743 | output_stride = 4; |
736 | - d = data + 1024 * 4 * 767 + 1023 * 4; | |
744 | + d = data + (LCD_WIDTH * LCD_HEIGHT - 1) * output_stride; | |
737 | 745 | s = output->data; |
738 | 746 | |
739 | - for (i = 0; i < 1024*768; i++) | |
747 | + for (i = 0; i < LCD_WIDTH * LCD_HEIGHT; i++) | |
740 | 748 | { |
741 | 749 | memcpy(d, s, output_stride); |
742 | 750 | d -= output_stride; |
743 | 751 | s += output_stride; |
744 | 752 | } |
745 | 753 | |
754 | + d = vnc; | |
755 | + s = data; | |
756 | + // printf("d[%p] s[%p]\n",d,s); | |
757 | + for(i = 0; i < LCD_WIDTH * LCD_HEIGHT; i++) | |
758 | + { | |
759 | + d[0] = s[2]; | |
760 | + d[1] = s[1]; | |
761 | + d[2] = s[0]; | |
762 | + d[3] = s[3]; | |
763 | + d += output_stride; | |
764 | + s += output_stride; | |
765 | + // printf("i[%10d] [%p] s[%p]\n",i,d,s); | |
766 | + } | |
767 | + | |
746 | 768 | wl_buffer_destroy(output->buffer); |
747 | - int ret = munmap(output->data, 1024*4*768); | |
748 | - // printf("munmap error[%d]\n",ret); | |
749 | - // printf("%s\n",strerror(errno)); | |
750 | - // free(output->buffer); | |
769 | + int ret = munmap(output->data, LCD_WIDTH * 4 * LCD_HEIGHT); | |
751 | 770 | } |
752 | 771 | |
753 | 772 | wl_registry_destroy(output->output); |
... | ... | @@ -760,6 +779,9 @@ get_screenshot(const struct buffer_size *buff_size, |
760 | 779 | // fwrite(data, 1, 1024 * 4 * 768, fp); |
761 | 780 | // fclose (fp); |
762 | 781 | // } |
782 | + memcpy(fb, vnc, LCD_WIDTH * LCD_HEIGHT * 4); | |
783 | + rfbMarkRectAsModified(server, 0, 0, LCD_WIDTH, LCD_HEIGHT); | |
784 | + free(vnc); | |
763 | 785 | |
764 | 786 | return data; |
765 | 787 | } |
... | ... | @@ -780,7 +802,7 @@ image_create(struct display *display, const char *filename, |
780 | 802 | sprintf(title,"weston_clone_app"); |
781 | 803 | image->filename = strdup(title); |
782 | 804 | |
783 | - image->image = cairo_image_surface_create_for_data(cap_img, CAIRO_FORMAT_ARGB32, 1024, 768, 1024*4); | |
805 | + image->image = cairo_image_surface_create_for_data(cap_img, CAIRO_FORMAT_ARGB32, LCD_WIDTH, LCD_HEIGHT, LCD_WIDTH*4); | |
784 | 806 | double width = cairo_image_surface_get_width(image->image); |
785 | 807 | double height = cairo_image_surface_get_height(image->image); |
786 | 808 | printf("1 width[%f] height[%f]\n",width,height); |
... | ... | @@ -944,7 +966,7 @@ char *get_weston_screen_image() |
944 | 966 | wl_list_for_each(output, &sh_data.output_list, link) |
945 | 967 | { |
946 | 968 | if ((output->offset_x == 0) && |
947 | - ((output->width == 1024) && (output->height == 768))) | |
969 | + ((output->width == LCD_WIDTH) && (output->height == LCD_HEIGHT))) | |
948 | 970 | { |
949 | 971 | // printf("output->offset_x[%d]\n",output->offset_x); |
950 | 972 | output->buffer = |
... | ... | @@ -973,8 +995,8 @@ char *get_weston_screen_image() |
973 | 995 | } |
974 | 996 | } |
975 | 997 | // end of screenshoot |
976 | - | |
977 | - if (buff_size.height == 768) | |
998 | + // printf("buff_size.width[%d] buff_size.height[%d]\n",buff_size.width,buff_size.height); | |
999 | + if (buff_size.height == LCD_HEIGHT) | |
978 | 1000 | { |
979 | 1001 | cap_img = get_screenshot(&buff_size, &sh_data.output_list); |
980 | 1002 | } |
... | ... | @@ -983,13 +1005,18 @@ char *get_weston_screen_image() |
983 | 1005 | struct screenshooter_output *output, *next; |
984 | 1006 | wl_list_for_each_safe(output, next, &sh_data.output_list, link) |
985 | 1007 | { |
986 | - int ret = munmap(output->data, 1024*4*768); | |
1008 | + // printf("output->width[%d] output->height[%d]\n",output->width,output->height); | |
1009 | + int ret = munmap(output->data, output->width*4*output->height); | |
1010 | + | |
987 | 1011 | // printf("munmap error[%d]\n",ret); |
988 | 1012 | // printf("%s\n",strerror(errno)); |
989 | 1013 | |
990 | - wl_registry_destroy(output->output); | |
1014 | + if(output->output) | |
1015 | + wl_registry_destroy(output->output); | |
991 | 1016 | wl_list_remove(&output->link); |
992 | - wl_buffer_destroy(output->buffer); | |
1017 | + | |
1018 | + if(output->buffer) | |
1019 | + wl_buffer_destroy(output->buffer); | |
993 | 1020 | // free(output->buffer); |
994 | 1021 | free(output); |
995 | 1022 | } |
... | ... | @@ -1078,11 +1105,15 @@ int main(int argc, char *argv[]) |
1078 | 1105 | int i; |
1079 | 1106 | int image_counter = 0; |
1080 | 1107 | char *cap_img = NULL; |
1108 | +#ifdef DBG_FPS | |
1081 | 1109 | struct timespec start_time, end_time; |
1110 | +#endif | |
1082 | 1111 | init_vnc(argc, argv); |
1083 | 1112 | |
1084 | 1113 | d = display_create(&argc, argv); |
1085 | 1114 | cap_img = get_weston_screen_image(); |
1115 | + if(cap_img == NULL || cap_img == -1) | |
1116 | + return -1; | |
1086 | 1117 | pimage = image_create(d, argv[i], &image_counter,cap_img); |
1087 | 1118 | |
1088 | 1119 | // full screen with 1x zoom scale |
... | ... | @@ -1100,10 +1131,10 @@ int main(int argc, char *argv[]) |
1100 | 1131 | sigemptyset(&sigint.sa_mask); |
1101 | 1132 | sigint.sa_flags = SA_RESETHAND; |
1102 | 1133 | sigaction(SIGINT, &sigint, NULL); |
1103 | - | |
1134 | +#ifdef DBG_FPS | |
1104 | 1135 | clock_gettime(CLOCK_MONOTONIC, &end_time); |
1105 | 1136 | memcpy(&start_time, &end_time, sizeof(struct timespec)); |
1106 | - | |
1137 | +#endif | |
1107 | 1138 | int loop = 0; |
1108 | 1139 | long long usec; |
1109 | 1140 | while (isloop) |
... | ... | @@ -1115,16 +1146,18 @@ int main(int argc, char *argv[]) |
1115 | 1146 | free(cap_img); |
1116 | 1147 | cap_img = get_weston_screen_image(); // 80 msec |
1117 | 1148 | cairo_surface_destroy(pimage->image); // 70 usec |
1118 | - pimage->image = cairo_image_surface_create_for_data(cap_img, CAIRO_FORMAT_ARGB32,1024, 768, 1024*4); | |
1149 | + pimage->image = cairo_image_surface_create_for_data(cap_img, CAIRO_FORMAT_ARGB32,LCD_WIDTH, LCD_HEIGHT, LCD_WIDTH*4); | |
1119 | 1150 | |
1120 | 1151 | // ui redraw request |
1121 | 1152 | window_schedule_redraw(pimage->window); |
1122 | 1153 | |
1123 | 1154 | // fps calc. |
1155 | +#ifdef DBG_FPS | |
1124 | 1156 | clock_gettime(CLOCK_MONOTONIC, &end_time); |
1125 | 1157 | usec = (end_time.tv_sec - start_time.tv_sec) * 1000000 + (end_time.tv_nsec - start_time.tv_nsec) / 1000; |
1126 | - // printf("%d : %lld usec / %lld fps\n", loop++, usec, 1000000UL / usec); | |
1158 | + printf("%d : %lld usec / %lld fps\n", loop++, usec, 1000000UL / usec); | |
1127 | 1159 | memcpy(&start_time, &end_time, sizeof(struct timespec)); |
1160 | +#endif | |
1128 | 1161 | } |
1129 | 1162 | |
1130 | 1163 | free(cap_img); | ... | ... |
weston-vncserver
No preview for this file type