Commit f65fddcb4ab0533d1a4e9f6a15cf5ecd631c752f

Authored by 신재종
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