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