diff options
Diffstat (limited to 'image')
-rw-r--r-- | image/Makefile.am | 44 | ||||
-rw-r--r-- | image/test.xbm | 471 | ||||
-rw-r--r-- | image/test_bitmap.c | 169 | ||||
-rw-r--r-- | image/test_formats.c | 202 | ||||
-rw-r--r-- | image/test_swap.c | 239 | ||||
-rw-r--r-- | image/test_xcb_image.c | 226 | ||||
-rw-r--r-- | image/test_xcb_image_shm.c | 183 | ||||
-rw-r--r-- | image/xcb-image.pc.in | 11 | ||||
-rw-r--r-- | image/xcb_image.c | 1009 | ||||
-rw-r--r-- | image/xcb_image.h | 630 | ||||
-rw-r--r-- | image/xcb_pixel.h | 171 |
11 files changed, 0 insertions, 3355 deletions
diff --git a/image/Makefile.am b/image/Makefile.am deleted file mode 100644 index a18b228..0000000 --- a/image/Makefile.am +++ /dev/null @@ -1,44 +0,0 @@ -MAINTAINERCLEANFILES = Makefile.in - -lib_LTLIBRARIES = libxcb-image.la - -xcbinclude_HEADERS = xcb_image.h xcb_pixel.h - -AM_CFLAGS = $(CWARNFLAGS) - -XCB_IMAGE_LIBS = libxcb-image.la - -libxcb_image_la_SOURCES = xcb_image.c -libxcb_image_la_CPPFLAGS = $(XCB_CFLAGS) $(XCB_SHM_CFLAGS) $(XCB_AUX_CFLAGS) -libxcb_image_la_LIBADD = $(XCB_LIBS) $(XCB_SHM_LIBS) $(XCB_AUX_LIBS) - -pkgconfig_DATA = xcb-image.pc - -EXTRA_DIST=xcb-image.pc.in - -EXTRA_PROGRAMS = test_xcb_image test_xcb_image_shm test_formats test_bitmap - -check_PROGRAMS = test_swap - -TESTS=test_swap - -test_swap_SOURCES = test_swap.c -test_swap_CPPFLAGS = $(XCB_CFLAGS) $(XCB_SHM_CFLAGS) $(XCB_AUX_CFLAGS) -test_swap_LDADD = $(XCB_LIBS) $(XCB_AUX_LIBS) $(XCB_IMAGE_LIBS) - -test_xcb_image_SOURCES = test_xcb_image.c -test_xcb_image_CPPFLAGS = $(XCB_CFLAGS) $(XCB_SHM_CFLAGS) $(XCB_AUX_CFLAGS) -test_xcb_image_LDADD = $(XCB_LIBS) $(XCB_AUX_LIBS) $(XCB_IMAGE_LIBS) - -test_xcb_image_shm_SOURCES = test_xcb_image_shm.c -test_xcb_image_shm_CPPFLAGS = $(XCB_CFLAGS) $(XCB_SHM_CFLAGS) $(XCB_AUX_CFLAGS) -test_xcb_image_shm_LDADD = $(XCB_LIBS) $(XCB_SHM_LIBS) \ - $(XCB_AUX_LIBS) $(XCB_IMAGE_LIBS) - -test_formats_SOURCES = test_formats.c -test_formats_CPPFLAGS = $(XCB_CFLAGS) $(XCB_SHM_CFLAGS) $(XCB_AUX_CFLAGS) -test_formats_LDADD = $(XCB_LIBS) $(XCB_AUX_LIBS) $(XCB_IMAGE_LIBS) - -test_bitmap_SOURCES = test_bitmap.c -test_bitmap_CPPFLAGS = $(XCB_CFLAGS) $(XCB_SHM_CFLAGS) $(XCB_AUX_CFLAGS) -test_bitmap_LDADD = $(XCB_LIBS) $(XCB_AUX_LIBS) $(XCB_IMAGE_LIBS) diff --git a/image/test.xbm b/image/test.xbm deleted file mode 100644 index 804b996..0000000 --- a/image/test.xbm +++ /dev/null @@ -1,471 +0,0 @@ -#define test_width 216 -#define test_height 208 -static uint8_t test_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x5f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0x6f, 0xf6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc0, 0xff, 0x3a, 0x13, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0d, 0x02, 0x51, 0x71, 0x0e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2f, 0x20, 0xd9, 0x88, - 0x9b, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x82, - 0xac, 0x44, 0x4e, 0x1c, 0xf3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1e, 0x40, 0x02, 0x44, 0x60, 0xe2, 0xfc, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x25, 0x09, 0x90, 0x22, 0x13, 0xb7, 0x9a, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x40, 0x10, 0x89, - 0x18, 0xe3, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x04, 0x08, - 0x01, 0x10, 0xc8, 0xa8, 0xd5, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x83, 0x80, 0x20, 0x40, 0x82, 0x00, 0x66, 0x9c, 0xec, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x08, 0x08, 0x24, 0x12, 0x93, 0x5b, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x12, 0x80, 0x04, 0x01, 0x00, 0x80, - 0x19, 0x33, 0xfa, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x80, 0x80, 0x00, - 0x20, 0x08, 0x12, 0xc4, 0x68, 0x26, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x02, 0x04, 0x24, 0x00, 0x01, 0x40, 0x24, 0x8c, 0xcd, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, - 0x00, 0x80, 0x49, 0x10, 0x90, 0x00, 0x21, 0x20, 0x08, 0x11, 0x43, 0xd9, - 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, - 0xff, 0xff, 0x0b, 0x00, 0x60, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x30, 0xb9, 0xf2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc0, 0x97, 0x04, 0x08, 0xfe, 0x05, 0x30, 0x10, 0x12, 0x20, 0x20, - 0x04, 0x00, 0x80, 0x48, 0x0c, 0xa3, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3e, 0x92, 0x20, 0x49, 0x40, 0x3e, 0x0e, 0x82, - 0x00, 0x84, 0x25, 0x01, 0x80, 0x00, 0x80, 0xc8, 0x34, 0xed, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x25, 0x01, 0x04, 0x01, 0x08, - 0xd0, 0x17, 0x00, 0x80, 0x25, 0x01, 0xad, 0x04, 0x12, 0x20, 0x23, 0x4c, - 0x6a, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x02, 0x48, - 0x92, 0x20, 0x41, 0x92, 0x9e, 0x80, 0x24, 0x24, 0x29, 0x00, 0x04, 0x00, - 0x10, 0x98, 0xcc, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x4f, 0x10, 0x01, 0x90, 0x24, 0x40, 0x12, 0xf0, 0x00, 0x24, 0x41, 0x0b, - 0xa9, 0x10, 0x00, 0x00, 0x04, 0xd9, 0x96, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xe0, 0x00, 0x92, 0x48, 0x02, 0x04, 0x09, 0xc0, 0x84, 0x8f, - 0x29, 0x2d, 0xf8, 0xa9, 0x02, 0x00, 0x00, 0x20, 0x90, 0xf4, 0x1e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x24, 0x91, 0x04, 0x50, 0x22, 0x24, - 0x1b, 0x12, 0x7a, 0x48, 0xca, 0x03, 0x21, 0x10, 0x00, 0x00, 0x48, 0x93, - 0xff, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x24, 0x92, 0x20, - 0x81, 0xda, 0x24, 0xc8, 0x16, 0xd0, 0xe7, 0x50, 0xd2, 0xbf, 0x03, 0x00, - 0x80, 0x00, 0x30, 0x29, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, - 0x20, 0x80, 0x24, 0x41, 0x12, 0x2a, 0x41, 0xb2, 0x80, 0x33, 0x0e, 0x7e, - 0x88, 0x1c, 0x01, 0x00, 0xa0, 0x24, 0x69, 0x75, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe0, 0x82, 0x44, 0x11, 0x24, 0x09, 0x90, 0xa4, 0x4d, 0xd2, 0x92, - 0x9e, 0xd3, 0x83, 0x6b, 0x62, 0x00, 0x00, 0x10, 0x22, 0xff, 0x7f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x42, 0x04, 0x92, 0x24, 0x6b, 0x53, 0x32, - 0x59, 0x90, 0x16, 0xfa, 0xb4, 0xf4, 0xff, 0x0f, 0x01, 0x00, 0x90, 0x68, - 0x4a, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x90, 0x24, 0x11, 0x24, - 0x49, 0xda, 0x82, 0xc5, 0x92, 0xd2, 0xd0, 0x9e, 0x1e, 0x00, 0x78, 0x0a, - 0x00, 0x00, 0x05, 0xd2, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x02, - 0x44, 0xb2, 0x65, 0xea, 0x49, 0x9e, 0x2c, 0x4b, 0x1a, 0xd2, 0xeb, 0xe3, - 0xff, 0xc7, 0x09, 0x00, 0x20, 0x68, 0xff, 0xd6, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x0b, 0x90, 0x40, 0x92, 0x24, 0x09, 0x5f, 0xd2, 0x64, 0x59, 0x72, - 0x56, 0x7f, 0xfd, 0xdf, 0x1f, 0x12, 0x00, 0x20, 0x49, 0x92, 0xde, 0x01, - 0x00, 0x00, 0x00, 0x80, 0x41, 0x92, 0x4c, 0x92, 0x24, 0x25, 0xc9, 0x8b, - 0x2e, 0xcb, 0x92, 0x4b, 0x5a, 0x2f, 0x75, 0xf4, 0x04, 0x00, 0x00, 0x41, - 0xf6, 0x74, 0x01, 0x00, 0x00, 0x00, 0x40, 0x49, 0x02, 0x00, 0xba, 0xb6, - 0xfd, 0x49, 0xf8, 0x74, 0x6d, 0x4b, 0x72, 0xed, 0xdb, 0xff, 0xcf, 0x53, - 0x00, 0x00, 0x48, 0xb6, 0xd7, 0x03, 0x00, 0x00, 0x00, 0x60, 0x48, 0x10, - 0xc9, 0x93, 0x24, 0x00, 0x7b, 0xc3, 0xa6, 0x69, 0x58, 0x5a, 0xfb, 0xfa, - 0xa5, 0xbe, 0x16, 0x00, 0x00, 0x92, 0xa4, 0xfd, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x01, 0x20, 0x5d, 0xa2, 0xfe, 0x7f, 0x01, 0x4f, 0x1a, 0xcd, 0x6b, - 0x6a, 0xa9, 0x5f, 0xff, 0xf3, 0x24, 0x01, 0x40, 0xc0, 0xb4, 0xf4, 0x03, - 0x00, 0x00, 0x00, 0x2c, 0x88, 0x84, 0x89, 0xb6, 0x00, 0x24, 0x7d, 0x69, - 0xf2, 0x34, 0xad, 0x99, 0x2d, 0xf7, 0xff, 0x9f, 0x4b, 0x00, 0x00, 0x92, - 0xa6, 0xad, 0x07, 0x00, 0x00, 0x00, 0x06, 0x91, 0x24, 0xe9, 0xa4, 0xfd, - 0xa5, 0xa9, 0x4b, 0x93, 0xe7, 0x34, 0x63, 0xf9, 0xfc, 0xd5, 0xef, 0x16, - 0x00, 0x40, 0x90, 0xb4, 0xbd, 0x07, 0x00, 0x00, 0x00, 0x6a, 0x80, 0x4c, - 0x96, 0xbe, 0x2d, 0xfd, 0x2f, 0x7c, 0x5e, 0x9c, 0x67, 0xad, 0xa5, 0xfd, - 0xff, 0xbf, 0x29, 0x00, 0x00, 0x92, 0x76, 0xed, 0x06, 0x00, 0x00, 0x00, - 0x05, 0x12, 0x48, 0x53, 0x25, 0x65, 0x25, 0xf4, 0xe5, 0xd3, 0x72, 0x9c, - 0x35, 0xdf, 0xf6, 0x7f, 0xf5, 0x56, 0x00, 0x00, 0x92, 0xa4, 0xed, 0x0f, - 0x00, 0x00, 0x80, 0x49, 0x20, 0x59, 0x38, 0xec, 0xff, 0xff, 0xad, 0x2f, - 0x5d, 0xd3, 0x33, 0xe6, 0x24, 0xed, 0xff, 0xdf, 0x2d, 0x01, 0x40, 0x80, - 0x24, 0xbd, 0x07, 0x00, 0x00, 0xc0, 0x48, 0x24, 0x49, 0x87, 0x37, 0x21, - 0xa0, 0xbd, 0xf4, 0x79, 0x4f, 0xc7, 0x9c, 0xde, 0xf6, 0xff, 0xff, 0x5b, - 0x08, 0x00, 0x92, 0xfc, 0xe9, 0x0e, 0x00, 0x00, 0x20, 0x89, 0x40, 0xd3, - 0xf4, 0x49, 0xff, 0xff, 0xe7, 0x2f, 0xcf, 0x79, 0x9c, 0x53, 0xb2, 0x35, - 0xff, 0xff, 0x37, 0x00, 0x40, 0x90, 0x24, 0xef, 0x0e, 0x00, 0x00, 0x30, - 0x91, 0x49, 0x32, 0x2d, 0xff, 0x6b, 0xb7, 0xbd, 0xbc, 0x3c, 0xef, 0x79, - 0xce, 0xde, 0xd6, 0xfd, 0xff, 0x9f, 0x00, 0x00, 0x92, 0xa6, 0xad, 0x0b, - 0x00, 0x00, 0x30, 0x11, 0x89, 0x8c, 0xcb, 0x5b, 0xba, 0xaf, 0xf6, 0xd7, - 0xe7, 0x35, 0xe7, 0x59, 0xb3, 0xfb, 0xff, 0xff, 0x7f, 0x04, 0x40, 0x80, - 0xe4, 0xb9, 0x1f, 0x00, 0x00, 0x48, 0x22, 0x91, 0x66, 0x79, 0xeb, 0xff, - 0xff, 0xdf, 0xbe, 0xbe, 0xe7, 0x8c, 0x75, 0x6b, 0x4a, 0xfa, 0xbf, 0x7f, - 0x00, 0x00, 0x82, 0x24, 0xef, 0x0e, 0x00, 0x00, 0x4c, 0x22, 0xb2, 0x79, - 0x5e, 0xfa, 0x5b, 0xa9, 0xfd, 0xeb, 0xf5, 0x9c, 0x3d, 0xc6, 0xcc, 0xee, - 0xed, 0x01, 0xf8, 0x00, 0x40, 0x82, 0xb6, 0xa9, 0x1b, 0x00, 0x00, 0x94, - 0x64, 0x66, 0x8e, 0xd3, 0x97, 0xfe, 0xff, 0xd7, 0xdf, 0x9f, 0x7b, 0xf3, - 0x3c, 0x35, 0x59, 0x6b, 0x00, 0x70, 0x00, 0x00, 0x40, 0xe4, 0xed, 0x1e, - 0x00, 0x00, 0x92, 0xc4, 0x34, 0xf3, 0xfc, 0xfd, 0x5f, 0xad, 0x7d, 0xfa, - 0x7a, 0xce, 0x8e, 0xb3, 0x76, 0x2f, 0xfd, 0x00, 0xe0, 0x04, 0x00, 0x9a, - 0x26, 0xaf, 0x1e, 0x00, 0x00, 0x13, 0x88, 0xcc, 0xb5, 0x3f, 0xbf, 0xff, - 0xff, 0xd7, 0xef, 0xef, 0xbd, 0x79, 0x6a, 0xde, 0xec, 0xab, 0x01, 0xc0, - 0x00, 0x00, 0x40, 0xb6, 0xbd, 0x1b, 0x00, 0x00, 0x05, 0x91, 0xeb, 0x5c, - 0xeb, 0xeb, 0xff, 0xff, 0xff, 0x7e, 0xef, 0x6b, 0xef, 0xcd, 0x99, 0xb3, - 0xe4, 0x07, 0x80, 0x00, 0x40, 0x49, 0xb2, 0xe5, 0x1a, 0x00, 0x80, 0x20, - 0x32, 0xb1, 0xe7, 0x79, 0x7f, 0xf7, 0xff, 0xfd, 0xeb, 0xbd, 0xfe, 0x2c, - 0x3d, 0x6b, 0xb6, 0xaf, 0x06, 0x80, 0x00, 0x00, 0x41, 0x96, 0xfe, 0x1e, - 0x00, 0x80, 0x44, 0xb2, 0x9b, 0xf9, 0xde, 0xff, 0xff, 0xff, 0x7f, 0xbf, - 0xf7, 0xbb, 0xb3, 0x77, 0xce, 0xce, 0xb6, 0x0d, 0x80, 0x01, 0x00, 0x49, - 0xf2, 0x94, 0x1f, 0x00, 0x40, 0x49, 0x44, 0xe6, 0x9e, 0x77, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xbf, 0xf7, 0x7e, 0xd6, 0xbc, 0xd9, 0xba, 0x3b, 0x80, - 0x00, 0x00, 0x64, 0x93, 0xf7, 0x1b, 0x00, 0x40, 0x89, 0xec, 0x7e, 0x67, - 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xce, 0xdb, 0x99, 0x33, 0x37, - 0xd3, 0x36, 0x80, 0x01, 0x80, 0x24, 0xda, 0xd6, 0x1e, 0x00, 0x20, 0x90, - 0x99, 0x99, 0x7b, 0xef, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xbd, 0x37, - 0x63, 0xf3, 0x66, 0xdb, 0x7a, 0x80, 0x00, 0x00, 0x24, 0x59, 0xde, 0x1f, - 0x00, 0x60, 0x12, 0xb3, 0xf7, 0xdd, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff, - 0xbf, 0xf7, 0xfe, 0x6e, 0xce, 0xdd, 0x6d, 0xd7, 0x80, 0x00, 0x80, 0x20, - 0xcb, 0xfb, 0x1f, 0x00, 0x10, 0x20, 0x6e, 0x66, 0x76, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xef, 0xde, 0xdb, 0x9b, 0x99, 0xb3, 0x5d, 0x6b, 0x81, - 0x00, 0x40, 0x96, 0x59, 0x6a, 0x1f, 0x00, 0x98, 0xc4, 0xe4, 0xdf, 0xff, - 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0x6f, 0x7b, 0x37, 0x7f, - 0xb3, 0xdd, 0x83, 0x00, 0x00, 0xb0, 0xed, 0xef, 0x1d, 0x00, 0x10, 0x88, - 0x9e, 0xdd, 0xcd, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xed, - 0x6c, 0xe6, 0xcc, 0x76, 0x6d, 0xc1, 0x00, 0x40, 0x91, 0x24, 0x7b, 0x1f, - 0x00, 0x08, 0xd1, 0xf1, 0x66, 0x76, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xdf, 0xbd, 0xbf, 0xd9, 0xdd, 0xdd, 0xb6, 0x47, 0x00, 0x00, 0xd8, - 0xb4, 0xad, 0x1f, 0x00, 0x24, 0x24, 0x6f, 0xf6, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xb7, 0x9d, 0x33, 0xd9, 0x96, 0x4e, - 0x00, 0x20, 0x49, 0xf7, 0xfd, 0x1e, 0x00, 0x48, 0xe4, 0xac, 0xb9, 0xdd, - 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xdd, 0x76, 0xb6, - 0xb7, 0xfd, 0x7a, 0x00, 0x00, 0x44, 0x96, 0xb7, 0x1f, 0x00, 0x02, 0x9a, - 0xbe, 0x6f, 0x77, 0xff, 0xff, 0x7f, 0x61, 0xd9, 0xff, 0xff, 0xff, 0xfd, - 0xdd, 0x66, 0xed, 0x66, 0x5b, 0x37, 0x00, 0x90, 0x64, 0xb9, 0xf6, 0x1f, - 0x00, 0x02, 0xc9, 0xf3, 0xee, 0xfd, 0xff, 0xff, 0x2f, 0x24, 0x4f, 0xfe, - 0xff, 0xff, 0x7f, 0x37, 0xdb, 0xcd, 0x7c, 0xff, 0x3a, 0x00, 0x88, 0x24, - 0xdb, 0xde, 0x1a, 0x00, 0x13, 0x31, 0x6f, 0xbb, 0xdf, 0xff, 0xff, 0x21, - 0xa0, 0x64, 0xf3, 0xff, 0xff, 0xe7, 0xff, 0x96, 0xbb, 0x9b, 0xa5, 0x1d, - 0x00, 0x60, 0x32, 0xe9, 0xdb, 0x0f, 0x00, 0x65, 0xe6, 0x3c, 0xfb, 0xf6, - 0xff, 0x7f, 0x10, 0xa4, 0xb5, 0x9d, 0xfe, 0xdf, 0xdf, 0xdd, 0x6d, 0x32, - 0xb3, 0x7d, 0x0d, 0x00, 0x0b, 0x93, 0x7c, 0x7b, 0x0f, 0x00, 0x89, 0xdc, - 0xb3, 0xed, 0xfb, 0xff, 0x1f, 0x10, 0x90, 0x92, 0xd9, 0xfe, 0x7f, 0xff, - 0x77, 0xdb, 0xee, 0x6e, 0xdb, 0x0e, 0x00, 0x20, 0xdd, 0x66, 0x6f, 0x0f, - 0x80, 0x91, 0x5a, 0xfb, 0xbe, 0xef, 0xff, 0x0f, 0x10, 0xda, 0x92, 0xee, - 0xff, 0xff, 0xff, 0xf7, 0xb7, 0xcd, 0xee, 0xde, 0x07, 0x00, 0x24, 0x49, - 0xb6, 0xed, 0x0f, 0x00, 0x12, 0x6b, 0xcd, 0xf3, 0xbe, 0xff, 0x07, 0x08, - 0x48, 0xda, 0x76, 0xb7, 0xff, 0xff, 0xdd, 0x6e, 0xba, 0x99, 0x65, 0x03, - 0x40, 0x92, 0xe4, 0xba, 0xbd, 0x0e, 0x80, 0x62, 0xed, 0x7d, 0x5f, 0xf7, - 0xff, 0x01, 0x08, 0x28, 0xc9, 0x26, 0xbb, 0xff, 0xff, 0xff, 0x99, 0xb7, - 0xbb, 0x7d, 0x03, 0x00, 0x89, 0x64, 0xdb, 0xf6, 0x07, 0x40, 0x0c, 0x35, - 0xe7, 0x79, 0xdd, 0xff, 0x01, 0x84, 0xa5, 0x7d, 0xba, 0xdd, 0xfe, 0x7f, - 0xbf, 0xbf, 0x6d, 0x76, 0xdb, 0x01, 0x00, 0x48, 0x36, 0xdb, 0xd6, 0x07, - 0xc0, 0x88, 0xb4, 0xb6, 0xbf, 0xff, 0x7f, 0x00, 0x0c, 0x24, 0x44, 0xdb, - 0xed, 0xff, 0xdf, 0xef, 0x6e, 0xdb, 0x6e, 0xb7, 0x00, 0x80, 0x44, 0x93, - 0xed, 0x5b, 0x07, 0x40, 0x91, 0xd2, 0xfa, 0xfc, 0xf6, 0x7f, 0x00, 0x02, - 0xb4, 0x35, 0xd9, 0xef, 0xff, 0xff, 0xfb, 0xef, 0xb6, 0xc9, 0xe4, 0x00, - 0x10, 0x24, 0xd9, 0x6d, 0xfb, 0x03, 0x00, 0x27, 0xfe, 0xd3, 0xd6, 0xdb, - 0x3f, 0x00, 0xa2, 0x94, 0xb4, 0xdb, 0x7c, 0xff, 0xff, 0xbf, 0xd9, 0xad, - 0xdb, 0x7d, 0x00, 0x40, 0x32, 0xd9, 0xb6, 0xef, 0x03, 0x60, 0xe4, 0x5a, - 0x5f, 0x5f, 0xff, 0x1f, 0x00, 0x02, 0x52, 0x92, 0xec, 0xb6, 0xff, 0xff, - 0xef, 0xff, 0x6d, 0xb6, 0x3b, 0x00, 0x28, 0x90, 0xcc, 0xbe, 0xfd, 0x03, - 0xa0, 0x88, 0xeb, 0xf9, 0xfd, 0xf5, 0x1f, 0x00, 0x82, 0x53, 0xbb, 0x6d, - 0xf7, 0xff, 0xf9, 0xff, 0x6f, 0xdb, 0x6d, 0x1b, 0x00, 0x04, 0xc9, 0x66, - 0xdb, 0x57, 0x03, 0xa0, 0x52, 0xaf, 0xa7, 0x97, 0xff, 0x0f, 0x00, 0x51, - 0x48, 0xda, 0x66, 0xdb, 0xff, 0xf8, 0xdf, 0xed, 0xbe, 0xed, 0x0e, 0x00, - 0x92, 0x64, 0x32, 0xeb, 0xf6, 0x01, 0x20, 0x63, 0xbd, 0xbc, 0xfc, 0xfa, - 0x0f, 0x00, 0x09, 0x20, 0x89, 0x3e, 0xff, 0xff, 0xe0, 0x7f, 0xdf, 0x6f, - 0xdb, 0x07, 0x00, 0x01, 0x24, 0xbb, 0xed, 0xfe, 0x01, 0xa0, 0xce, 0xf5, - 0xf6, 0xdb, 0xdf, 0x07, 0x00, 0x41, 0xad, 0x5f, 0xf2, 0xed, 0xff, 0xc0, - 0xff, 0xbf, 0xdd, 0x92, 0x03, 0x00, 0x44, 0xb2, 0xd9, 0x7d, 0xfb, 0x01, - 0xe0, 0xaa, 0xdf, 0x9b, 0x7f, 0xfb, 0x07, 0x80, 0x28, 0x21, 0x64, 0xbb, - 0x7f, 0x7f, 0x80, 0xff, 0xf6, 0xbb, 0xee, 0x03, 0x80, 0x22, 0x99, 0xed, - 0xb6, 0xff, 0x00, 0x90, 0xb8, 0x5e, 0x5b, 0x6b, 0xed, 0x03, 0x00, 0x01, - 0xa6, 0x6d, 0xdb, 0xf6, 0x7f, 0x00, 0xff, 0xff, 0xf6, 0xcd, 0x00, 0x40, - 0x10, 0xc9, 0x6c, 0xff, 0xf7, 0x00, 0xa0, 0xe3, 0x72, 0xeb, 0xef, 0xff, - 0x03, 0x80, 0xe0, 0x90, 0x24, 0xdb, 0xbd, 0x3f, 0x00, 0xfe, 0xdb, 0x6f, - 0xfb, 0x00, 0x00, 0x89, 0x4c, 0xb6, 0xd9, 0x7e, 0x00, 0x70, 0xaf, 0xaf, - 0x6f, 0xb5, 0xde, 0x03, 0x80, 0x94, 0x92, 0xb6, 0xf9, 0xf6, 0x3f, 0x00, - 0xfc, 0xbf, 0xdd, 0x7b, 0x00, 0x10, 0x48, 0x26, 0xb3, 0xdf, 0x7f, 0x00, - 0x70, 0xd8, 0xae, 0xfd, 0xff, 0xf7, 0x03, 0x80, 0x00, 0xd2, 0x36, 0xcf, - 0xdf, 0x3f, 0x00, 0xb8, 0x6d, 0xdf, 0x16, 0x00, 0x48, 0x44, 0xb2, 0xfb, - 0x6c, 0x3f, 0x00, 0x50, 0x75, 0xfd, 0xa5, 0xd5, 0xfe, 0x01, 0x40, 0xd1, - 0x12, 0xa2, 0x7d, 0xfb, 0x1f, 0x00, 0xf0, 0xff, 0xbf, 0x0d, 0x00, 0x20, - 0x12, 0x9b, 0xcd, 0xf6, 0x3f, 0x00, 0x90, 0xd5, 0xa7, 0xfd, 0x77, 0xab, - 0x03, 0x40, 0x1c, 0xc8, 0xbe, 0x6d, 0xfb, 0x1f, 0x00, 0xe0, 0xff, 0xee, - 0x07, 0x00, 0x04, 0x91, 0xc9, 0x7e, 0xbf, 0x1f, 0x00, 0x30, 0x57, 0xbf, - 0xa6, 0xde, 0xfd, 0x01, 0x40, 0x40, 0x6b, 0xd3, 0x6e, 0xef, 0x0f, 0x00, - 0xc0, 0xeb, 0x7d, 0x03, 0x00, 0x90, 0xc8, 0x6c, 0x76, 0xfb, 0x0f, 0x00, - 0x70, 0x5c, 0xe5, 0xf7, 0xfa, 0xeb, 0x01, 0x40, 0x50, 0x49, 0x92, 0xf4, - 0xfd, 0x0f, 0x00, 0xc0, 0xff, 0xdb, 0x01, 0x80, 0x44, 0x44, 0x66, 0xbb, - 0x6f, 0x0f, 0x00, 0xd0, 0xf1, 0x95, 0xf6, 0x6f, 0xad, 0x01, 0x40, 0x08, - 0x78, 0xdb, 0xb6, 0xef, 0x0f, 0x00, 0x00, 0xdf, 0xd6, 0x00, 0x00, 0x20, - 0x32, 0xb3, 0xdb, 0xfd, 0x0f, 0x00, 0x10, 0xd7, 0xf7, 0xb6, 0xd8, 0xeb, - 0x03, 0x20, 0x43, 0x27, 0xd9, 0xb6, 0xfd, 0x0f, 0x00, 0x00, 0xff, 0x7e, - 0x00, 0x40, 0x12, 0x93, 0xd9, 0xec, 0xb6, 0x07, 0x00, 0x70, 0x55, 0xdd, - 0xf6, 0x6f, 0xbb, 0x01, 0x40, 0x28, 0xa1, 0x6f, 0xb6, 0xb7, 0x0f, 0x00, - 0x00, 0xde, 0x1f, 0x00, 0x80, 0x88, 0xd8, 0xcc, 0x66, 0xff, 0x03, 0x00, - 0x70, 0xf4, 0xf5, 0xdb, 0xaa, 0xee, 0x01, 0x60, 0x28, 0x2d, 0x49, 0xf7, - 0xf6, 0x07, 0x00, 0x00, 0x7c, 0x0f, 0x00, 0x08, 0x48, 0x66, 0x6e, 0xfb, - 0xef, 0x03, 0x00, 0xd0, 0xd5, 0xdf, 0x52, 0xff, 0xda, 0x03, 0x20, 0xa3, - 0xa5, 0xd9, 0xb2, 0xff, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x20, 0x22, - 0x33, 0x37, 0xbf, 0xfd, 0x01, 0x00, 0x70, 0x5f, 0xf7, 0xfe, 0xab, 0x6b, - 0x02, 0xa0, 0xa8, 0xb4, 0x6d, 0xdf, 0xf6, 0x07, 0x00, 0x00, 0xf8, 0x01, - 0x00, 0x12, 0x33, 0x11, 0xd9, 0xdd, 0xff, 0x01, 0x00, 0x70, 0x75, 0xd5, - 0x52, 0xea, 0x8a, 0x03, 0x20, 0x84, 0x36, 0x69, 0xba, 0xdb, 0x07, 0x00, - 0x00, 0xf0, 0x01, 0x00, 0x81, 0xc8, 0xcc, 0xdd, 0xed, 0xff, 0x00, 0x00, - 0x60, 0xd5, 0xdf, 0xf6, 0xae, 0x6b, 0x03, 0x00, 0xa1, 0xa4, 0x6d, 0xdf, - 0xfe, 0x07, 0x00, 0x00, 0x60, 0x00, 0x40, 0x44, 0xc6, 0xcc, 0x64, 0xb7, - 0xfd, 0x00, 0x00, 0xe0, 0x55, 0xf7, 0xd6, 0xea, 0xba, 0x07, 0x20, 0x94, - 0x94, 0x6d, 0xfb, 0xdb, 0x07, 0x00, 0x00, 0x20, 0x00, 0x20, 0x20, 0x32, - 0x76, 0x77, 0xff, 0x7f, 0x00, 0x00, 0x60, 0x7d, 0xd5, 0xb6, 0x3f, 0xaf, - 0x06, 0xa0, 0xa4, 0x95, 0x6c, 0x9b, 0xee, 0x07, 0x00, 0x00, 0x18, 0x00, - 0x10, 0x92, 0x15, 0x73, 0xbb, 0xd9, 0x3f, 0x00, 0x00, 0xe0, 0xf5, 0xff, - 0xf7, 0x6a, 0xa9, 0x06, 0x80, 0xa2, 0xb4, 0x6d, 0xfb, 0xfb, 0x07, 0x00, - 0x00, 0x04, 0x00, 0x84, 0x88, 0xc8, 0x99, 0xdd, 0xff, 0x3f, 0x00, 0x00, - 0xe0, 0x8b, 0xff, 0x96, 0x6a, 0xb6, 0x0a, 0xa0, 0x94, 0x96, 0x64, 0xdb, - 0xee, 0x07, 0x00, 0x00, 0x03, 0x08, 0x20, 0x60, 0x66, 0xec, 0xee, 0xb6, - 0x1d, 0x00, 0x00, 0xc0, 0x7e, 0xa5, 0xf4, 0xab, 0x55, 0x0d, 0x20, 0xe7, - 0xd4, 0x6d, 0xdb, 0xfb, 0x07, 0x00, 0x80, 0x00, 0x00, 0x09, 0x12, 0x33, - 0x67, 0x77, 0xff, 0x0f, 0x00, 0x00, 0xc0, 0xfa, 0xff, 0xb7, 0x7a, 0x55, - 0x19, 0x90, 0x91, 0xd4, 0x64, 0xdb, 0xee, 0x07, 0x00, 0x40, 0x00, 0x81, - 0x04, 0x88, 0x91, 0x3b, 0xbb, 0xfd, 0x0f, 0x00, 0x00, 0xc0, 0xab, 0xbf, - 0xed, 0x4e, 0xbb, 0x32, 0x20, 0x94, 0x96, 0x6c, 0xff, 0xfa, 0x03, 0x00, - 0x30, 0x40, 0x20, 0x20, 0x64, 0xcc, 0xdc, 0xdd, 0xff, 0x07, 0x00, 0x00, - 0xc0, 0xeb, 0xea, 0xfd, 0xd5, 0xaa, 0x2a, 0x20, 0xd7, 0xb0, 0x6d, 0x93, - 0xef, 0x07, 0x00, 0x08, 0x00, 0x08, 0x01, 0x23, 0xee, 0xee, 0xee, 0xfb, - 0x03, 0x00, 0x00, 0xc0, 0xfe, 0xff, 0x2d, 0xdd, 0x6a, 0x49, 0xd0, 0x90, - 0x9a, 0x64, 0xdf, 0xea, 0x07, 0x00, 0x03, 0x80, 0x40, 0x8c, 0x98, 0x33, - 0xb3, 0xbb, 0xff, 0x01, 0x00, 0x00, 0xc0, 0xa5, 0x7b, 0x6d, 0xa7, 0x56, - 0xc5, 0xa0, 0x94, 0x94, 0x6f, 0xd3, 0xbb, 0x07, 0x80, 0x10, 0x0c, 0x12, - 0x40, 0xc6, 0xb9, 0xdb, 0xfb, 0xfd, 0x01, 0x00, 0x00, 0x80, 0x97, 0xee, - 0xdf, 0xba, 0x54, 0x1a, 0xa1, 0xe5, 0xd2, 0x64, 0x7e, 0xee, 0x07, 0x60, - 0x02, 0x80, 0x00, 0x31, 0x62, 0xcc, 0xdc, 0xee, 0x7f, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0xdb, 0xaa, 0xb5, 0x8a, 0x86, 0x98, 0x96, 0x6d, 0x9b, - 0xea, 0x07, 0x98, 0x00, 0x22, 0x44, 0x88, 0x39, 0x77, 0x77, 0xff, 0x7f, - 0x00, 0x00, 0x00, 0x80, 0x7d, 0x77, 0xba, 0x7b, 0x2d, 0x55, 0x3c, 0xa6, - 0xb4, 0x6c, 0xf6, 0xaf, 0x07, 0x07, 0x90, 0x88, 0x20, 0x42, 0x9c, 0xbb, - 0xbb, 0xbb, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x4b, 0xbd, 0xbf, 0x55, 0x53, - 0xa5, 0xb2, 0xa1, 0xb4, 0xc9, 0x9f, 0xda, 0xcf, 0x28, 0x24, 0x42, 0x08, - 0x31, 0xe6, 0xcc, 0xdd, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xef, - 0xb7, 0xbd, 0xde, 0x12, 0xd1, 0xac, 0x95, 0x4d, 0xf2, 0x56, 0x9f, 0x88, - 0x80, 0x10, 0xc2, 0x9c, 0x73, 0x77, 0xef, 0xfe, 0x7f, 0x00, 0x00, 0x00, - 0x00, 0xbf, 0xfb, 0xed, 0xeb, 0x35, 0x95, 0x72, 0xa2, 0x35, 0xcd, 0xb6, - 0xd6, 0x2f, 0x21, 0x24, 0x04, 0x31, 0xc6, 0x98, 0x33, 0xf7, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0xd6, 0x6a, 0x7f, 0x5b, 0xab, 0x2d, 0x28, 0x23, - 0x65, 0xd9, 0xb6, 0x55, 0x5f, 0x88, 0x08, 0x43, 0x0c, 0x61, 0xde, 0xdd, - 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x76, 0xff, 0x4d, 0xd7, 0x4d, - 0x4a, 0xa5, 0x29, 0x2d, 0xdb, 0xbe, 0x55, 0x1f, 0x22, 0x42, 0x28, 0xc2, - 0x39, 0xe7, 0xee, 0xee, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x7f, - 0xfb, 0xb6, 0xb6, 0x95, 0x70, 0x2e, 0xa5, 0xd9, 0x24, 0x5d, 0x5f, 0x8a, - 0x28, 0x88, 0x31, 0x9e, 0x39, 0x73, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x00, 0xec, 0xb7, 0xdf, 0x6c, 0xb5, 0x65, 0x26, 0xa3, 0x39, 0x9b, 0xfc, - 0x85, 0x5d, 0x21, 0x04, 0x63, 0x1c, 0xe6, 0xdd, 0xbd, 0xfb, 0xff, 0xff, - 0x01, 0x00, 0x00, 0x00, 0xb8, 0xfa, 0xb6, 0x6f, 0x4d, 0x9a, 0x28, 0x59, - 0x4d, 0xd3, 0x2f, 0xf5, 0x3f, 0x8c, 0xd1, 0x18, 0xc6, 0x31, 0xf6, 0xdd, - 0xfe, 0xff, 0xfe, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xef, 0xb9, 0xb6, - 0x25, 0xe1, 0x4d, 0x69, 0xba, 0x6c, 0xad, 0x3c, 0x41, 0x14, 0x84, 0xe9, - 0x9e, 0x37, 0xf7, 0xff, 0xff, 0xfb, 0x03, 0x00, 0x00, 0x00, 0x70, 0x5d, - 0x3d, 0x9f, 0x3d, 0x6d, 0x26, 0x52, 0x59, 0xb6, 0x6d, 0xab, 0x7f, 0x14, - 0x82, 0xe1, 0x39, 0xe6, 0xdd, 0xfb, 0xff, 0xbf, 0xff, 0x01, 0x00, 0x00, - 0x00, 0xf0, 0xf6, 0x6f, 0x77, 0xcd, 0x92, 0xd0, 0x52, 0x4b, 0xb3, 0x49, - 0x0b, 0x3a, 0x41, 0x61, 0x38, 0x9e, 0x73, 0xee, 0xdc, 0xff, 0xff, 0xfd, - 0x03, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xd7, 0x65, 0xda, 0x66, 0x63, 0x9d, - 0xf2, 0x36, 0x7b, 0x6a, 0x7f, 0x14, 0x18, 0x8e, 0xe7, 0xd9, 0x7b, 0xff, - 0xff, 0xef, 0xff, 0x03, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xdd, 0xb6, - 0xc9, 0x4c, 0x46, 0x9a, 0x64, 0xcb, 0x5b, 0xed, 0x06, 0xc6, 0xe3, 0x71, - 0xde, 0xbd, 0xff, 0xff, 0x7f, 0xff, 0x07, 0x00, 0x00, 0x00, 0xc0, 0x7f, - 0x7f, 0xff, 0x59, 0x37, 0x75, 0xbb, 0x96, 0x66, 0xdb, 0x56, 0xf7, 0xe0, - 0xf2, 0x74, 0x9e, 0x77, 0xef, 0xfd, 0xff, 0xeb, 0xed, 0x03, 0x00, 0x00, - 0x00, 0xc0, 0xea, 0xdf, 0xb3, 0xdb, 0xde, 0xc6, 0x81, 0xb0, 0x6c, 0xba, - 0xb4, 0xf6, 0x38, 0x18, 0x3c, 0xe7, 0x9c, 0xfb, 0xff, 0x7f, 0xff, 0xff, - 0x07, 0x00, 0x00, 0x00, 0x80, 0xff, 0xf7, 0x6e, 0x66, 0xd9, 0x99, 0xac, - 0xa4, 0xcd, 0x96, 0xa5, 0xea, 0x03, 0xa7, 0xcf, 0x79, 0xef, 0xfd, 0xff, - 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfd, 0xef, 0xdf, - 0x6f, 0xef, 0x72, 0x65, 0xd9, 0xb6, 0xad, 0xe8, 0xc1, 0xe1, 0xf1, 0xbe, - 0x7b, 0xef, 0xff, 0xdf, 0x7a, 0xfb, 0x07, 0x00, 0x00, 0x00, 0x00, 0xfe, - 0x5f, 0xdd, 0x9d, 0xac, 0x99, 0x84, 0x29, 0xcd, 0x3c, 0x4f, 0x9d, 0x7d, - 0x3c, 0x9e, 0xe7, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xef, 0x0f, 0x00, 0x00, - 0x00, 0x00, 0xfe, 0xff, 0x77, 0x7b, 0x33, 0xe7, 0x5a, 0x49, 0x9b, 0x65, - 0x59, 0x75, 0x07, 0x97, 0xf7, 0xbb, 0xef, 0xff, 0xff, 0xdb, 0xfe, 0xff, - 0x07, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xf7, 0x3f, 0xe7, 0xcf, 0x9c, 0x51, - 0x4d, 0xb0, 0x6d, 0x4b, 0xc9, 0xd3, 0xf5, 0x79, 0xfe, 0xfb, 0xff, 0xff, - 0xdb, 0xda, 0xfe, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xef, 0xde, - 0xdd, 0xf3, 0x4d, 0x52, 0x36, 0xcb, 0xd2, 0x3a, 0x7e, 0x3c, 0xde, 0xe7, - 0xbe, 0xff, 0x7f, 0xda, 0xff, 0xdf, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, - 0xff, 0xfb, 0xdd, 0x73, 0x8f, 0xa5, 0x9a, 0xe6, 0xd9, 0xb6, 0xe2, 0x4e, - 0xc7, 0xf7, 0xfd, 0xff, 0xff, 0xff, 0xf7, 0xf6, 0xff, 0x0f, 0x00, 0x00, - 0x00, 0x00, 0xe0, 0xff, 0xff, 0x7f, 0xee, 0x79, 0xb2, 0xb2, 0x2c, 0x9f, - 0xb6, 0x54, 0xfe, 0xfb, 0x79, 0xbf, 0xff, 0xff, 0x5f, 0xda, 0xff, 0xfa, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xf7, 0xbf, 0xe7, 0x4b, - 0xb4, 0x69, 0xd3, 0x2c, 0x25, 0xbd, 0xbc, 0xcf, 0xf7, 0xfd, 0xff, 0xd7, - 0xf6, 0xfe, 0xdf, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xbf, 0x9d, - 0xf1, 0x3e, 0x57, 0x25, 0xcb, 0xb6, 0x6d, 0xa9, 0xb5, 0xef, 0xfb, 0xff, - 0xff, 0xff, 0xd5, 0xda, 0xd6, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xfb, 0xcf, 0xf5, 0x25, 0x65, 0xd9, 0x66, 0x5b, 0x4a, 0xfa, - 0xf9, 0x7e, 0xff, 0xff, 0xff, 0xf6, 0xd6, 0xdf, 0xfa, 0x0f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xfe, 0xff, 0xef, 0x3e, 0xf7, 0x9f, 0x5b, 0x92, 0x6c, - 0xdb, 0x52, 0xe5, 0xbe, 0xdf, 0xff, 0xff, 0xbf, 0x51, 0xda, 0xfa, 0x7f, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7b, 0x9f, 0xe7, - 0x4c, 0xb3, 0x4d, 0xd3, 0x54, 0xd9, 0xe7, 0xfb, 0xff, 0xff, 0x5f, 0xdc, - 0xfa, 0xdf, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f, - 0xe7, 0xf9, 0x3a, 0xd3, 0xa6, 0xe9, 0xb6, 0xa5, 0xca, 0xf9, 0xfd, 0xff, - 0xff, 0x83, 0x42, 0xd2, 0xff, 0xfb, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0xff, 0xfd, 0xbf, 0xef, 0x4f, 0xd5, 0x64, 0xdb, 0x26, 0x4d, 0x30, - 0x7f, 0xff, 0xff, 0xff, 0x91, 0xda, 0xdb, 0xda, 0xdf, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xe0, 0xff, 0xbf, 0xff, 0x7d, 0xbe, 0xb5, 0x6d, 0x97, - 0x6d, 0x93, 0x56, 0xdf, 0xff, 0xff, 0x7f, 0x81, 0x4a, 0xda, 0x7f, 0xff, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xef, 0xeb, 0xbb, - 0xa6, 0x4d, 0x73, 0xcd, 0x92, 0xaa, 0xfe, 0xff, 0xff, 0x1f, 0x01, 0x6a, - 0x5b, 0xfb, 0xfb, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xfd, 0xbf, 0x5f, 0x3b, 0xdb, 0x36, 0xbb, 0x26, 0x4c, 0xf9, 0xff, 0xff, - 0x0f, 0xa3, 0x2a, 0xe9, 0x7f, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xee, 0xff, 0xff, 0xfe, 0xfe, 0xcc, 0x91, 0xec, 0x93, 0x6d, 0x93, - 0xf2, 0xff, 0xff, 0x03, 0x00, 0x6a, 0x6d, 0x6f, 0xff, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xf7, 0x6f, 0x76, 0xb6, 0xcd, - 0x76, 0xc9, 0x2a, 0xe9, 0xff, 0xff, 0x00, 0x02, 0x24, 0xed, 0xf9, 0xed, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xdf, 0xff, - 0xd9, 0x66, 0x9b, 0x6c, 0x93, 0x54, 0xc5, 0xff, 0x3f, 0x00, 0x01, 0x95, - 0xb5, 0xaf, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, - 0xff, 0xff, 0xfd, 0xae, 0x7d, 0xde, 0x6d, 0xf6, 0xa1, 0x8a, 0xff, 0x0f, - 0x00, 0x81, 0x90, 0xb4, 0xfd, 0xfd, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xcd, 0xb2, 0xdb, 0x2c, 0xcb, - 0x54, 0xfe, 0x01, 0x00, 0x01, 0xd2, 0xb6, 0xb7, 0xff, 0x0f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x39, 0xdb, 0x76, - 0xb3, 0x4b, 0xb6, 0x0a, 0xfe, 0x00, 0x00, 0x01, 0x48, 0xda, 0xfe, 0xff, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, - 0xcf, 0xb9, 0x6d, 0xb6, 0xd9, 0xa5, 0x75, 0x1c, 0x00, 0x80, 0x80, 0x20, - 0xdb, 0xda, 0xbe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, - 0xff, 0xff, 0xff, 0x77, 0x96, 0xd9, 0x26, 0xb3, 0x4d, 0x82, 0x11, 0x00, - 0x80, 0x80, 0x24, 0x6d, 0xff, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xbb, 0x67, 0xdb, 0xdd, 0x36, 0xd9, - 0x54, 0x60, 0x00, 0xc0, 0x00, 0x92, 0x65, 0x6b, 0xff, 0x0f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x4f, 0x7d, 0x96, - 0xd9, 0x6c, 0x36, 0xad, 0xc2, 0x00, 0x60, 0x00, 0xc8, 0xb6, 0x6d, 0xff, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, - 0xff, 0xc8, 0x76, 0xbb, 0xcb, 0x64, 0x52, 0x02, 0x03, 0x10, 0x00, 0x64, - 0xda, 0xff, 0xfb, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0x5f, 0xd7, 0x4d, 0x33, 0x99, 0xdd, 0x96, 0x04, 0x2c, - 0x1c, 0x40, 0x22, 0xdb, 0xb6, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xdf, 0xb5, 0xed, 0xe6, 0x36, 0x9b, - 0x6c, 0x29, 0xf0, 0x03, 0x00, 0x99, 0x6c, 0xfb, 0xfd, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x35, 0xbb, - 0xec, 0x76, 0x33, 0x91, 0x02, 0x00, 0x00, 0x00, 0x64, 0x67, 0xdf, 0xff, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, - 0xbf, 0x6f, 0x9b, 0x9d, 0xc9, 0xce, 0x36, 0x49, 0x00, 0x00, 0x00, 0x93, - 0xb1, 0xdd, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x40, 0xff, 0x6a, 0x76, 0xbb, 0xdd, 0xd9, 0x64, 0x12, 0x01, - 0x00, 0x40, 0x98, 0xdd, 0x6d, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xdf, 0x66, 0x73, 0x33, 0xbb, - 0x9d, 0x4d, 0x00, 0x00, 0x00, 0x63, 0xe6, 0xf6, 0xff, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xed, 0xfd, - 0xee, 0xee, 0x36, 0x73, 0x2b, 0x04, 0x00, 0xa0, 0x38, 0x75, 0xbf, 0xff, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7f, 0xd9, 0xec, 0xce, 0x66, 0x66, 0x66, 0x22, 0x04, 0x00, 0xc6, - 0x99, 0xbb, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5e, 0xb3, 0xdb, 0xb9, 0xcd, 0xc9, 0x88, 0x89, - 0x00, 0x68, 0x31, 0xee, 0xdd, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xbe, 0xbb, 0x9b, 0x3f, - 0xbb, 0x33, 0x23, 0x04, 0x00, 0x8c, 0xf3, 0xee, 0xff, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x67, - 0x76, 0x77, 0xb2, 0x66, 0xce, 0x0c, 0xd1, 0xd6, 0xe3, 0x79, 0xf7, 0xff, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xf8, 0xfd, 0xef, 0xe6, 0xee, 0xce, 0x9c, 0x31, 0x16, 0x00, 0x3c, - 0x9e, 0xfb, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x9f, 0xdb, 0xdc, 0x9d, 0x99, 0x33, 0xc6, - 0xc1, 0xff, 0x8f, 0xe7, 0xbb, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf7, 0xbd, 0xbb, 0x33, - 0x7b, 0xee, 0x18, 0x1e, 0x50, 0xf0, 0xf9, 0xfe, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7b, - 0xf7, 0x77, 0xf7, 0xe6, 0x9c, 0xe3, 0xf0, 0x4d, 0xff, 0x7c, 0xef, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc0, 0xdf, 0x76, 0x7f, 0xcf, 0x9e, 0x73, 0x8f, 0x07, 0xff, 0x0b, - 0xdf, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xee, 0xcd, 0xdd, 0x9d, 0x7b, 0xf7, 0x7c, - 0x7a, 0x00, 0xf0, 0xe7, 0xfd, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0xbf, 0xdd, 0x7b, - 0x6b, 0x9e, 0xf3, 0xe1, 0xff, 0xff, 0x7d, 0xff, 0x7f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, - 0xb7, 0xbb, 0x7b, 0xee, 0x79, 0x8f, 0x0f, 0xfa, 0x2f, 0xff, 0xf7, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7e, 0xff, 0x77, 0xef, 0xdd, 0x77, 0x7c, 0xfe, 0x02, 0xe8, - 0xcf, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xef, 0xee, 0xdd, 0xb3, 0xcf, 0xf3, - 0xf1, 0xff, 0xff, 0xf9, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfb, 0xff, 0xbf, - 0xef, 0xbe, 0xcf, 0x8f, 0xfe, 0x5f, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, - 0xbf, 0xbb, 0xf7, 0xde, 0x79, 0x3e, 0xff, 0x52, 0xd2, 0xdf, 0xff, 0x0f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xe0, 0xef, 0xef, 0xef, 0x3c, 0xef, 0xf9, 0xf8, 0xff, 0xff, - 0xf7, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xee, 0xdc, 0xf7, 0xfe, 0xe7, - 0x97, 0xfe, 0xff, 0xfe, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, - 0xef, 0xbf, 0x3e, 0xff, 0xda, 0xf6, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfe, 0xbf, 0xf7, 0xfe, 0xf7, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xfe, 0xff, 0xde, 0xbd, 0xef, 0xfb, 0xd7, 0xff, 0xbf, - 0xfd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xf7, 0x7d, 0xbf, - 0xff, 0xd2, 0xf6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xbf, - 0xef, 0xfb, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0xff, 0xef, 0xbe, 0xf7, 0xef, 0xef, 0xff, 0xff, 0xff, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xdf, 0xbf, 0xff, 0xff, 0xff, - 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, - 0xfe, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xf0, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfd, 0xff, 0xff, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/image/test_bitmap.c b/image/test_bitmap.c deleted file mode 100644 index 3464743..0000000 --- a/image/test_bitmap.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright © 2008 Bart Massey <bart@cs.pdx.edu> - * Copyright © 2008 Julien Danjou <julien@danjou.info> - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, - * modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Except as contained in this notice, the names of the authors or - * their institutions shall not be used in advertising or otherwise to - * promote the sale, use or other dealings in this Software without - * prior written authorization from the authors. - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <assert.h> -#include <xcb/xcb.h> -#include "../aux/xcb_aux.h" -#include "../event/xcb_event.h" -#include "xcb_image.h" - -#include "test.xbm" - -static xcb_window_t make_window(xcb_connection_t *c, - xcb_screen_t *s, - uint32_t bg, - uint32_t fg, - uint32_t width, - uint32_t height) { - uint32_t mask = 0; - xcb_params_cw_t cwa; - xcb_window_t w; - xcb_void_cookie_t check_cookie; - xcb_generic_error_t *error; - xcb_visualtype_t *v = xcb_aux_find_visual_by_id(s, s->root_visual); - assert(v); - XCB_AUX_ADD_PARAM(&mask, &cwa, back_pixel, bg); - XCB_AUX_ADD_PARAM(&mask, &cwa, border_pixel, fg); - XCB_AUX_ADD_PARAM(&mask, &cwa, override_redirect, 1); - XCB_AUX_ADD_PARAM(&mask, &cwa, event_mask, - XCB_EVENT_MASK_BUTTON_PRESS | - XCB_EVENT_MASK_EXPOSURE); - w = xcb_generate_id(c); - check_cookie = xcb_aux_create_window_checked(c, - s->root_depth, w, s->root, 0, 0, width, height, 1, - XCB_WINDOW_CLASS_INPUT_OUTPUT, v->visual_id, mask, &cwa); - error = xcb_request_check(c, check_cookie); - assert(!error); - check_cookie = xcb_map_window_checked(c, w); - error = xcb_request_check(c, check_cookie); - assert(!error); - return w; -} - -void process_events(xcb_connection_t *c, - xcb_gcontext_t g, - xcb_window_t w, - xcb_pixmap_t p, - uint32_t width, - uint32_t height) { - xcb_generic_event_t *e; - xcb_void_cookie_t cookie; - - while ((e = xcb_wait_for_event(c))) { - uint32_t r = XCB_EVENT_RESPONSE_TYPE(e); - xcb_generic_error_t *err; - - fprintf(stderr, "event %d\n", r); - switch (r) { - case XCB_EXPOSE: - case XCB_MAP_NOTIFY: - cookie = xcb_copy_area_checked(c, p, w, g, - 0, 0, 0, 0, - width, height); - assert(!xcb_request_check(c, cookie)); - break; - case XCB_BUTTON_PRESS: - exit(0); - break; - case 0: - err = (xcb_generic_error_t *) e; - printf("error: %d (sequence %d)\n", - err->error_code, (unsigned int) err->full_sequence); - exit(1); - default: - break; - } - free(e); - } -} - -#define INSET_X 31 -#define INSET_Y 32 - -int main(int argc, char **argv) { - uint32_t width = test_width - 2 * INSET_X; - uint32_t height = test_height - 2 * INSET_Y; - int snum; - xcb_void_cookie_t check_cookie; - xcb_window_t w; - xcb_gcontext_t gc; - xcb_pixmap_t pix; - xcb_connection_t *c = xcb_connect(0, &snum); - xcb_screen_t *s = xcb_aux_get_screen(c, snum); - xcb_alloc_named_color_cookie_t bg_cookie = - xcb_alloc_named_color(c, s->default_colormap, - strlen("white"), "white"); - xcb_alloc_named_color_cookie_t fg_cookie = - xcb_alloc_named_color(c, s->default_colormap, - strlen("black"), "black"); - xcb_alloc_named_color_reply_t *bg_reply = - xcb_alloc_named_color_reply(c, bg_cookie, 0); - xcb_alloc_named_color_reply_t *fg_reply = - xcb_alloc_named_color_reply(c, fg_cookie, 0); - uint32_t fg, bg; - xcb_image_t *image, *native_image, *subimage; - uint32_t mask = 0; - xcb_params_gc_t gcv; - - assert(bg_reply && fg_reply); - bg = bg_reply->pixel; - fg = fg_reply->pixel; - free(bg_reply); - free(fg_reply); - w = make_window(c, s, bg, fg, width, height); - gc = xcb_generate_id(c); - check_cookie = xcb_create_gc_checked(c, gc, w, 0, 0); - assert(!xcb_request_check(c, check_cookie)); - image = xcb_image_create_from_bitmap_data((uint8_t *)test_bits, - test_width, test_height); - native_image = xcb_image_native(c, image, 1); - assert(native_image); - if (native_image != image) - xcb_image_destroy(image); - subimage = xcb_image_subimage(native_image, INSET_X, INSET_Y, - width, height, - 0, 0, 0); - assert(subimage); - xcb_image_destroy(native_image); - subimage->format = XCB_IMAGE_FORMAT_XY_BITMAP; - pix = xcb_generate_id(c); - xcb_create_pixmap(c, s->root_depth, pix, w, - subimage->width, subimage->height); - gc = xcb_generate_id(c); - XCB_AUX_ADD_PARAM(&mask, &gcv, foreground, fg); - XCB_AUX_ADD_PARAM(&mask, &gcv, background, bg); - xcb_aux_create_gc(c, gc, pix, mask, &gcv); - xcb_image_put(c, pix, gc, subimage, 0, 0, 0); - process_events(c, gc, w, pix, width, height); - xcb_disconnect(c); - return 1; -} diff --git a/image/test_formats.c b/image/test_formats.c deleted file mode 100644 index be3b217..0000000 --- a/image/test_formats.c +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright © 2008 Bart Massey <bart@cs.pdx.edu> - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, - * modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Except as contained in this notice, the names of the authors or - * their institutions shall not be used in advertising or otherwise to - * promote the sale, use or other dealings in this Software without - * prior written authorization from the authors. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <xcb/xcb.h> -#include "../aux/xcb_aux.h" -#include "../aux/xcb_bitops.h" -#include "xcb_image.h" - -#define WIDTH 50 -#define HEIGHT 50 - -static uint32_t -color (uint32_t depth, uint32_t x, uint32_t y) -{ - uint32_t p; - - if (depth == 1) { - extern long random(); - int frac = random() % (WIDTH * HEIGHT); - p = x * y >= frac; - return p; - } - depth /= 3; - p = ((1 << depth) - 1) * x * y / WIDTH / HEIGHT; - return (p << depth) | (p << (2 * depth)); -} - -static xcb_image_t *create_image(xcb_connection_t *c, int depth, int format) -{ - xcb_image_t *im; - int x, y; - printf("Image depth %d, format %d\n", depth, format); - im = xcb_image_create_native(c, WIDTH, HEIGHT, - format, depth, 0, 0, 0); - for(x = 0; x < WIDTH; ++x) - for(y = 0; y < HEIGHT; ++y) - xcb_image_put_pixel(im, x, y, color(depth, x, y)); - return im; -} - -static xcb_window_t create_window(xcb_connection_t *c, xcb_screen_t *root) -{ - static const uint32_t mask = XCB_CW_EVENT_MASK; - static const uint32_t values[] = { XCB_EVENT_MASK_EXPOSURE }; - unsigned int seq; - xcb_window_t w = xcb_generate_id(c); - seq = xcb_create_window(c, root->root_depth, w, root->root, 30, 30, WIDTH, HEIGHT, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, root->root_visual, mask, values).sequence; - printf("CreateWindow sequence %d, depth %d\n", seq, root->root_depth); - seq = xcb_map_window(c, w).sequence; - printf("MapWindow sequence %d\n", seq); - return w; -} - -static xcb_pixmap_t create_pixmap(xcb_connection_t *c, xcb_drawable_t d, uint8_t depth) -{ - xcb_pixmap_t p = xcb_generate_id(c); - unsigned int seq; - seq = xcb_create_pixmap(c, depth, p, d, WIDTH, HEIGHT).sequence; - printf("CreatePixmap sequence %d, depth %d\n", seq, depth); - return p; -} - -static xcb_gcontext_t create_gcontext(xcb_connection_t *c, - xcb_drawable_t d, - xcb_screen_t *root) -{ - static const uint32_t mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND; - const uint32_t values[] = { root->black_pixel, 0xffff }; - unsigned int seq; - xcb_gcontext_t gc = xcb_generate_id(c); - seq = xcb_create_gc(c, gc, d, mask, values).sequence; - printf("CreateGC sequence %d\n", seq); - return gc; -} - - -typedef struct { - char *name; - xcb_image_format_t format; - uint8_t depth; -} format_t; - -static format_t formats[] = { - {"z-pixmap", XCB_IMAGE_FORMAT_Z_PIXMAP, 24}, - {"xy-bitmap", XCB_IMAGE_FORMAT_XY_BITMAP, 1}, - {"xy-pixmap-1", XCB_IMAGE_FORMAT_XY_PIXMAP, 1}, - {"xy-pixmap-24", XCB_IMAGE_FORMAT_XY_PIXMAP, 24}, - {0, 0, 0} -}; - -static format_t * -parse_format (char *name) { - format_t *f; - for (f = formats; f->name; f++) - if (!strcmp(name, f->name)) - return f; - fprintf(stderr, "%s: bad format: known formats are:\n", name); - for (f = formats; f->name; f++) - fprintf(stderr, "\t%s\n", f->name); - exit(1); -} - -int main(int argc, char **argv) -{ - int screen, depth; - format_t *format = &formats[0]; - xcb_screen_t *root; - xcb_visualtype_t *visual; - xcb_image_t *im; - xcb_drawable_t d, w = XCB_NONE; - xcb_gcontext_t dgc, wgc = 0; - xcb_generic_event_t *ev; - xcb_connection_t *c = xcb_connect(0, &screen); - if(!c) - { - printf("Connection failed.\n"); - exit(1); - } - root = xcb_aux_get_screen(c, screen); - assert(root); - visual = xcb_aux_find_visual_by_id(root, root->root_visual); - assert(visual); - if(argc > 1) - format = parse_format(argv[1]); - if (root->root_depth != 24 || - visual->_class != XCB_VISUAL_CLASS_TRUE_COLOR) - { - printf("Only 24 bit TrueColor visuals for now\n"); - exit(1); - } - depth = format->depth; - - im = create_image(c, depth, format->format); - d = create_window(c, root); - if(format->format == XCB_IMAGE_FORMAT_XY_PIXMAP && depth == 1) - { - w = d; - d = create_pixmap(c, w, depth); - } - dgc = create_gcontext(c, d, root); - if (w) - wgc = create_gcontext(c, w, root); - xcb_flush(c); - - if(im) - { - while((ev = xcb_wait_for_event(c))) - { - if(ev->response_type == XCB_EXPOSE && ((xcb_expose_event_t *) ev)->count == 0) - { - printf("ImagePut sequence %d\n", xcb_image_put(c, d, dgc, im, 0, 0, 0).sequence); - if(w) - { - unsigned int seq; - seq = xcb_copy_plane(c, d, w, wgc, - 0, 0, 0, 0, - WIDTH, HEIGHT, 1).sequence; - printf("CopyPlane sequence %d\n", seq); - } - xcb_flush(c); - } - else if(ev->response_type == 0) - { - xcb_generic_error_t *err = (xcb_generic_error_t *) ev; - printf("Error: %d after sequence %d\n", err->error_code, (unsigned int) err->full_sequence); - } - free(ev); - } - xcb_image_destroy(im); - } - - xcb_disconnect(c); - exit(0); -} diff --git a/image/test_swap.c b/image/test_swap.c deleted file mode 100644 index becf26b..0000000 --- a/image/test_swap.c +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright © 2008 Keith Packard <keithp@keithp.com> - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, - * modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Except as contained in this notice, the names of the authors or - * their institutions shall not be used in advertising or otherwise to - * promote the sale, use or other dealings in this Software without - * prior written authorization from the authors. - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <assert.h> -#include <xcb/xcb.h> -#include "../aux/xcb_aux.h" -#include "xcb_image.h" - -xcb_image_format_t formats[] = { - XCB_IMAGE_FORMAT_Z_PIXMAP, - XCB_IMAGE_FORMAT_XY_PIXMAP, - XCB_IMAGE_FORMAT_XY_BITMAP, -}; -#define SIZE(a) (sizeof (a) / sizeof (a[0])) -#define NFORMAT SIZE(formats) - -int bpps[] = { - 1, 4, 8, 16, 32 -}; -#define NBPP SIZE(bpps) - -int units[] = { - 8, 16, 32 -}; -#define NUNIT SIZE(units) - -xcb_image_order_t byte_orders[] = { - XCB_IMAGE_ORDER_LSB_FIRST, - XCB_IMAGE_ORDER_MSB_FIRST -}; -#define NBYTE_ORDER SIZE(byte_orders) - -static -uint32_t pixel_mask (int bpp) -{ - if (bpp == 32) - return 0xffffffff; - return (1 << bpp) - 1; -} - -int -compare_image(xcb_image_t *a, xcb_image_t *b) -{ - int x, y; - uint32_t a_pixel, b_pixel; - uint32_t mask = pixel_mask (a->bpp) & pixel_mask (b->bpp); - - for (y = 0; y < a->height; y++) - for (x = 0; x < a->width; x++) { - a_pixel = xcb_image_get_pixel (a, x, y) & mask; - b_pixel = xcb_image_get_pixel (b, x, y) & mask; - if (a_pixel != b_pixel) { - fprintf (stderr, "fail at %d,%d: 0x%x != 0x%x\n", - x, y, a_pixel, b_pixel); - return 0; - } - } - return 1; -} - -#define test_width 63 -#define test_height 2 - -static xcb_image_t * -create_test_image (void) -{ - xcb_image_t *test_image; - int x, y; - uint32_t pixel; - test_image = xcb_image_create(test_width, test_height, - XCB_IMAGE_FORMAT_Z_PIXMAP, - 32, - 32, - 32, - 32, - XCB_IMAGE_ORDER_LSB_FIRST, - XCB_IMAGE_ORDER_LSB_FIRST, - NULL, 0, NULL); - - pixel = 0; - for (y = 0; y < test_height; y++) - for (x = 0; x < test_width; x++) { - xcb_image_put_pixel (test_image, x, y, pixel); - pixel++; - } - return test_image; -} - -static void -convert_test (xcb_image_t *test, xcb_image_t *a) -{ - int x, y; - - for (y = 0; y < test->height; y++) - for (x = 0; x < test->width; x++) - xcb_image_put_pixel (a, x, y, xcb_image_get_pixel (test, x, y)); -} - -static char * -order_name (xcb_image_order_t order) { - if (order == XCB_IMAGE_ORDER_MSB_FIRST) - return "MSB"; - else - return "LSB"; -} - -static void -print_format (xcb_image_t *image) -{ - switch (image->format) { - case XCB_IMAGE_FORMAT_Z_PIXMAP: fprintf (stderr, "Z pixmap"); break; - case XCB_IMAGE_FORMAT_XY_PIXMAP: fprintf (stderr, "XY pixmap"); break; - case XCB_IMAGE_FORMAT_XY_BITMAP: fprintf (stderr, "XY bitmap"); break; - } - fprintf (stderr, " pad: %d bpp: %d depth: %d unit: %d planemask: 0x%08x", - image->scanline_pad, image->bpp, image->depth, image->unit, - image->plane_mask); - fprintf (stderr, " byte order: %s bit order: %s stride: %d\n", - order_name (image->byte_order), order_name (image->bit_order), - image->stride); -} - -int main (int argc, char **argv) { - xcb_image_t *test_image; - xcb_image_t *src_image; - xcb_image_t *dst_image; - int dst_format_i, dst_bpp_i, dst_unit_i, dst_byte_order_i, dst_bit_order_i; - int src_format_i, src_bpp_i, src_unit_i, src_byte_order_i, src_bit_order_i; - xcb_image_format_t dst_format, src_format; - int dst_bpp, src_bpp; - int dst_unit, src_unit; - int dst_byte_order, src_byte_order; - int dst_bit_order, src_bit_order; - - test_image = create_test_image (); - - for (dst_format_i = 0; dst_format_i < NFORMAT; dst_format_i++) { - dst_format = formats[dst_format_i]; - for (src_format_i = 0; src_format_i < NFORMAT; src_format_i++) { - src_format = formats[src_format_i]; - for (dst_bpp_i = 0; dst_bpp_i < NBPP; dst_bpp_i++) { - dst_bpp = bpps[dst_bpp_i]; - for (src_bpp_i = 0; src_bpp_i < NBPP; src_bpp_i++) { - src_bpp = bpps[src_bpp_i]; - for (dst_unit_i = 0; dst_unit_i < NUNIT; dst_unit_i++) { - dst_unit = units[dst_unit_i]; - if (dst_format == XCB_IMAGE_FORMAT_Z_PIXMAP) { - if (dst_bpp == 4 && dst_unit != 8) - continue; - if (dst_bpp > 4 && dst_unit != dst_bpp) - continue; - } - if (dst_format == XCB_IMAGE_FORMAT_XY_BITMAP && dst_bpp != 1) - continue; - for (src_unit_i = 0; src_unit_i < NUNIT; src_unit_i++) { - src_unit = units[src_unit_i]; - if (src_format == XCB_IMAGE_FORMAT_Z_PIXMAP) { - if (src_bpp == 4 && src_unit != 8) - continue; - if (src_bpp > 4 && src_unit != src_bpp) - continue; - } - if (src_format == XCB_IMAGE_FORMAT_XY_BITMAP && src_bpp != 1) - continue; - for (dst_byte_order_i = 0; dst_byte_order_i < NBYTE_ORDER; dst_byte_order_i++) { - dst_byte_order = byte_orders[dst_byte_order_i]; - for (src_byte_order_i = 0; src_byte_order_i < NBYTE_ORDER; src_byte_order_i++) { - src_byte_order = byte_orders[src_byte_order_i]; - for (dst_bit_order_i = 0; dst_bit_order_i < NBYTE_ORDER; dst_bit_order_i++) { - dst_bit_order = byte_orders[dst_bit_order_i]; - if (dst_format == XCB_IMAGE_FORMAT_Z_PIXMAP && dst_bit_order != dst_byte_order) - continue; - for (src_bit_order_i = 0; src_bit_order_i < NBYTE_ORDER; src_bit_order_i++) { - src_bit_order = byte_orders[src_bit_order_i]; - if (src_format == XCB_IMAGE_FORMAT_Z_PIXMAP && src_bit_order != src_byte_order) - continue; - src_image = xcb_image_create (test_width, test_height, src_format, 32, src_bpp, src_bpp, src_unit, - src_byte_order, src_bit_order, NULL, 0, NULL); - dst_image = xcb_image_create (test_width, test_height, dst_format, 32, dst_bpp, dst_bpp, dst_unit, - dst_byte_order, dst_bit_order, NULL, 0, NULL); - convert_test (test_image, src_image); - if (!compare_image (test_image, src_image)) { - fprintf (stderr, "Initialization failure:\n"); - fprintf (stderr, "src format: "); print_format(src_image); - exit (1); - } - xcb_image_convert (src_image, dst_image); - if (!compare_image (src_image, dst_image)) { - /* - * Call the conversion function again so that debugging - * is easier - */ - fprintf (stderr, "Conversion failure:\n"); - fprintf (stderr, "src format: "); print_format(src_image); - fprintf (stderr, "dst format: "); print_format(dst_image); - exit (1); - } - xcb_image_destroy (src_image); - xcb_image_destroy (dst_image); - } - } - } - } - } - } - } - } - } - } - return 0; -} diff --git a/image/test_xcb_image.c b/image/test_xcb_image.c deleted file mode 100644 index ec1c924..0000000 --- a/image/test_xcb_image.c +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright © 2008 Bart Massey <bart@cs.pdx.edu> - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, - * modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Except as contained in this notice, the names of the authors or - * their institutions shall not be used in advertising or otherwise to - * promote the sale, use or other dealings in this Software without - * prior written authorization from the authors. - */ - -/* gcc -g -O2 -Wall `pkg-config --cflags --libs xcb` -o test xcb_image.o test_xcb_image.c */ - -#include <stdlib.h> -#include <stdio.h> - -#include <xcb/xcb.h> - -#include "../aux/xcb_aux.h" -#include "xcb_image.h" - -#define W_W 64 -#define W_H 64 - -void -reflect_window (xcb_connection_t *c, - xcb_drawable_t win, - xcb_drawable_t new_win, - xcb_gcontext_t gc, - uint16_t width, - uint16_t height) -{ - xcb_image_t *image; - uint32_t pixel1; - uint32_t pixel2; - int32_t left_x; - int32_t right_x; - int32_t y; - int format; - - format = XCB_IMAGE_FORMAT_Z_PIXMAP; - - printf ("get_image %d %d\n", width, height); - image = xcb_image_get (c, win, - 0, 0, width, height, - ~0, - format); - - printf ("Create image summary:\n"); - printf (" * format................: %d\n", image->format); - printf (" * byte order............: %d\n", image->byte_order); - printf (" * bitmap order..........: %d\n", image->bit_order); - printf (" * bitmap pad............: %d\n", image->scanline_pad); - printf (" * depth.................: %d\n", image->depth); - printf (" * bytes/line............: %d\n", image->stride); - printf (" * bits/pixel (or unit)..: %d\n", image->bpp); - - printf ("bpl %d %d\n", image->stride, image->height); - - printf("calculating reflection -- this may take awhile...\n"); - - for (left_x = 0 ; left_x < width/2 ; left_x++) - { - for (y = 0 ; y < height ; y++) - { - pixel1 = xcb_image_get_pixel (image, left_x, y); - right_x = width - left_x-1; - if (left_x != right_x) - { - pixel2 = xcb_image_get_pixel (image, right_x, y); - xcb_image_put_pixel (image, left_x, y, pixel2); - } - xcb_image_put_pixel (image, right_x, y, pixel1); - } - } - - printf("putting image\n"); - - xcb_image_put (c, new_win, gc, image, 0, 0, 0); - image = xcb_image_get (c, new_win, - 0, 0, width, height, - ~0, - format); - - printf ("done\n"); -} - -int -main (int argc, char *argv[]) -{ - xcb_connection_t *c; - xcb_screen_t *screen; - xcb_drawable_t win; - xcb_drawable_t new_win; - xcb_drawable_t rect; - xcb_rectangle_t rect_coord = { 0, 0, W_W, W_H}; - xcb_gcontext_t bgcolor, fgcolor; - xcb_point_t points[2]; - uint32_t mask; - uint32_t valgc[2]; - uint32_t valwin[3]; - int depth; - int screen_nbr; - xcb_generic_event_t *e; - - /* Open the connexion to the X server and get the first screen */ - c = xcb_connect (NULL, &screen_nbr); - screen = xcb_aux_get_screen (c, screen_nbr); - depth = xcb_aux_get_depth (c, screen); - - /* Create a black graphic context for drawing in the foreground */ - win = screen->root; - - fgcolor = xcb_generate_id(c); - mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES; - valgc[0] = screen->black_pixel; - valgc[1] = 0; /* no graphics exposures */ - xcb_create_gc(c, fgcolor, win, mask, valgc); - - bgcolor = xcb_generate_id(c); - mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES; - valgc[0] = screen->white_pixel; - valgc[1] = 0; /* no graphics exposures */ - xcb_create_gc(c, bgcolor, win, mask, valgc); - - /* Ask for our window's Id */ - win = xcb_generate_id(c); - - /* Create the window */ - mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK | XCB_CW_DONT_PROPAGATE; - valwin[0] = screen->white_pixel; - valwin[1] = XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_EXPOSURE; - valwin[2] = XCB_EVENT_MASK_BUTTON_PRESS; - xcb_create_window (c, /* Connection */ - 0, /* depth */ - win, /* window Id */ - screen->root, /* parent window */ - 0, 0, /* x, y */ - W_W, W_H, /* width, height */ - 10, /* border_width */ - XCB_WINDOW_CLASS_INPUT_OUTPUT,/* class */ - screen->root_visual, /* visual */ - mask, valwin); /* masks, not used yet */ - - /* Map the window on the screen */ - xcb_map_window (c, win); - - /* Create a Pixmap that will fill the window */ - rect = xcb_generate_id (c); - xcb_create_pixmap(c, depth, rect, win, W_W, W_H); - xcb_poly_fill_rectangle(c, rect, bgcolor, 1, &rect_coord); - points[0].x = 0; - points[0].y = 0; - points[1].x = W_W; - points[1].y = W_H; - xcb_poly_line(c, XCB_COORD_MODE_ORIGIN, rect, fgcolor, 2, points); - points[0].x = W_W / 4; - points[0].y = 0; - points[1].x = W_W / 2; - points[1].y = W_H / 2; - xcb_poly_line(c, XCB_COORD_MODE_ORIGIN, rect, fgcolor, 2, points); - - /* Ask for our window's Id */ - new_win = xcb_generate_id(c); - - /* Create the window */ - mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK | XCB_CW_DONT_PROPAGATE; - valwin[0] = screen->white_pixel; - valwin[1] = XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_EXPOSURE; - valwin[2] = XCB_EVENT_MASK_BUTTON_PRESS; - xcb_create_window (c, /* Connection */ - 0, /* depth */ - new_win, /* window Id */ - screen->root, /* parent window */ - 0, 0, /* x, y */ - W_W, W_H, /* width, height */ - 10, /* border_width */ - XCB_WINDOW_CLASS_INPUT_OUTPUT,/* class */ - screen->root_visual, /* visual */ - mask, valwin); /* masks, not used yet */ - - - - /* Map the window on the screen */ - xcb_map_window (c, new_win); - - - xcb_flush (c); - - while ((e = xcb_wait_for_event(c))) - { - switch (e->response_type) - { - case XCB_EXPOSE: - { - xcb_copy_area(c, rect, win, bgcolor, - 0, 0, 0, 0, W_W, W_H); - reflect_window (c, win, new_win, - fgcolor, - W_W, W_H); - xcb_flush (c); - break; - } - } - free (e); - } - - return 1; -} diff --git a/image/test_xcb_image_shm.c b/image/test_xcb_image_shm.c deleted file mode 100644 index b68d637..0000000 --- a/image/test_xcb_image_shm.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright © 2007 Bart Massey <bart@cs.pdx.edu> - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Except as contained in this notice, the names of the authors or their - * institutions shall not be used in advertising or otherwise to promote the - * sale, use or other dealings in this Software without prior written - * authorization from the authors. - */ - -#include <stdlib.h> -#include <stdio.h> - -#include <sys/ipc.h> -#include <sys/shm.h> - -#include <xcb/xcb.h> -#include <xcb/shm.h> - -#include "../aux/xcb_aux.h" -#include "xcb_image.h" - -#define W_W 40 -#define W_H 40 - - - -int -main (int argc, char *argv[]) -{ - xcb_connection_t *c; - xcb_screen_t *screen; - xcb_drawable_t win; - xcb_drawable_t rect; - xcb_rectangle_t rect_coord = { 0, 0, W_W, W_H}; - xcb_gcontext_t bgcolor, fgcolor; - xcb_point_t points[2]; - uint32_t mask; - uint32_t valgc[2]; - uint32_t valwin[3]; - int depth; - int screen_nbr; - xcb_generic_event_t *e; - uint8_t format; - - /* Open the connexion to the X server and get the first screen */ - c = xcb_connect (NULL, &screen_nbr); - screen = xcb_aux_get_screen (c, screen_nbr); - depth = xcb_aux_get_depth (c, screen); - - /* Create a black graphic context for drawing in the foreground */ - win = screen->root; - - fgcolor = xcb_generate_id(c); - mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES; - valgc[0] = screen->black_pixel; - valgc[1] = 0; /* no graphics exposures */ - xcb_create_gc(c, fgcolor, win, mask, valgc); - - bgcolor = xcb_generate_id(c); - mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES; - valgc[0] = screen->white_pixel; - valgc[1] = 0; /* no graphics exposures */ - xcb_create_gc(c, bgcolor, win, mask, valgc); - - /* Shm test */ - printf ("shm test begin\n"); - xcb_image_t *img = 0; - xcb_shm_query_version_reply_t *rep; - xcb_shm_segment_info_t shminfo; - - rep = xcb_shm_query_version_reply (c, - xcb_shm_query_version (c), - NULL); - if (!rep || !rep->shared_pixmaps || - rep->major_version < 1 || - (rep->major_version == 1 && rep->minor_version == 0)) - { - printf ("No or insufficient shm support...\n"); - exit (0); - } - format = rep->pixmap_format; - img = xcb_image_create_native (c, W_W, W_H, format, depth, - 0, ~0, 0); - - if (!img) - { - printf ("Can't create image...\n"); - exit (0); - } - - printf ("Create image summary:\n"); - printf (" * format..........: %d\n", img->format); - printf (" * byte order......: %d\n", img->byte_order); - printf (" * bitmap unit.....: %d\n", img->bpp); - printf (" * bitmap order....: %d\n", img->bit_order); - printf (" * bitmap pad......: %d\n", img->scanline_pad); - - shminfo.shmid = shmget (IPC_PRIVATE, img->size, IPC_CREAT|0777); - shminfo.shmaddr = shmat(shminfo.shmid, 0, 0); - img->data = shminfo.shmaddr; - - shminfo.shmseg = xcb_generate_id (c); - xcb_shm_attach(c, shminfo.shmseg, shminfo.shmid, 0); - shmctl(shminfo.shmid, IPC_RMID, 0); - - /* Draw in the image */ - printf ("put the pixel\n"); - xcb_image_put_pixel (img, 20, 20, 65535); - printf ("fin put pixel\n"); - - /* Ask for our window's Id */ - win = xcb_generate_id(c); - - /* Create the window */ - mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK | XCB_CW_DONT_PROPAGATE; - valwin[0] = screen->white_pixel; - valwin[1] = XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_EXPOSURE; - valwin[2] = XCB_EVENT_MASK_BUTTON_PRESS; - xcb_create_window (c, /* Connection */ - 0, /* depth */ - win, /* window Id */ - screen->root, /* parent window */ - 0, 0, /* x, y */ - W_W, W_H, /* width, height */ - 10, /* border_width */ - XCB_WINDOW_CLASS_INPUT_OUTPUT,/* class */ - screen->root_visual, /* visual */ - mask, valwin); /* masks, not used yet */ - - /* Map the window on the screen */ - xcb_map_window (c, win); - - /* Create a Pixmap that will fill the window */ - rect = xcb_generate_id (c); - xcb_create_pixmap(c, depth, rect, win, W_W, W_H); - xcb_poly_fill_rectangle(c, rect, bgcolor, 1, &rect_coord); - points[0].x = 0; - points[0].y = 0; - points[1].x = 1; - points[1].y = 1; - xcb_poly_line(c, XCB_COORD_MODE_ORIGIN, rect, fgcolor, 2, points); - - xcb_flush (c); - - while ((e = xcb_wait_for_event(c))) - { - switch (e->response_type) - { - case XCB_EXPOSE: - { - xcb_copy_area(c, rect, win, bgcolor, - 0, 0, 0, 0, W_W, W_H); - printf ("put image\n"); - xcb_image_shm_put (c, win, fgcolor, - img, shminfo, - 0, 0, 0, 0, W_W,W_H, - 0); - xcb_flush (c); - break; - } - } - free (e); - } - - return 1; -} diff --git a/image/xcb-image.pc.in b/image/xcb-image.pc.in deleted file mode 100644 index 403fdd0..0000000 --- a/image/xcb-image.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: XCB Image library -Description: XCB image convenience library -Version: @PACKAGE_VERSION@ -Requires: xcb xcb-shm -Libs: -L${libdir} -lxcb-image @LIBS@ -Cflags: -I${includedir} diff --git a/image/xcb_image.c b/image/xcb_image.c deleted file mode 100644 index 413bdc5..0000000 --- a/image/xcb_image.c +++ /dev/null @@ -1,1009 +0,0 @@ -/* Copyright © 2007 Bart Massey - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Except as contained in this notice, the names of the authors or their - * institutions shall not be used in advertising or otherwise to promote the - * sale, use or other dealings in this Software without prior written - * authorization from the authors. - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include <xcb/xcb.h> -#include <xcb/shm.h> -#include "../aux/xcb_aux.h" -#include "../aux/xcb_bitops.h" -#include "xcb_image.h" -#define BUILD -#include "xcb_pixel.h" - - -static xcb_format_t * -find_format_by_depth (const xcb_setup_t *setup, uint8_t depth) -{ - xcb_format_t *fmt = xcb_setup_pixmap_formats(setup); - xcb_format_t *fmtend = fmt + xcb_setup_pixmap_formats_length(setup); - for(; fmt != fmtend; ++fmt) - if(fmt->depth == depth) - return fmt; - return 0; -} - - -static xcb_image_format_t -effective_format(xcb_image_format_t format, uint8_t bpp) -{ - if (format == XCB_IMAGE_FORMAT_Z_PIXMAP && bpp != 1) - return format; - return XCB_IMAGE_FORMAT_XY_PIXMAP; -} - - -static int -format_valid (uint8_t depth, uint8_t bpp, uint8_t unit, - xcb_image_format_t format, uint8_t xpad) -{ - xcb_image_format_t ef = effective_format(format, bpp); - if (depth > bpp) - return 0; - switch(ef) { - case XCB_IMAGE_FORMAT_XY_PIXMAP: - switch(unit) { - case 8: - case 16: - case 32: - break; - default: - return 0; - } - if (xpad < bpp) - return 0; - switch (xpad) { - case 8: - case 16: - case 32: - break; - default: - return 0; - } - break; - case XCB_IMAGE_FORMAT_Z_PIXMAP: - switch (bpp) { - case 4: - if (unit != 8) - return 0; - break; - case 8: - case 16: - case 24: - case 32: - if (unit != bpp) - return 0; - break; - default: - return 0; - } - break; - default: - return 0; - } - return 1; -} - - -static int -image_format_valid (xcb_image_t *image) { - return format_valid(image->depth, - image->bpp, - image->unit, - image->format, - image->scanline_pad); -} - - -void -xcb_image_annotate (xcb_image_t *image) -{ - xcb_image_format_t ef = effective_format(image->format, image->bpp); - switch (ef) { - case XCB_IMAGE_FORMAT_XY_PIXMAP: - image->stride = xcb_roundup(image->width, image->scanline_pad) >> 3; - image->size = image->height * image->stride * image->depth; - break; - case XCB_IMAGE_FORMAT_Z_PIXMAP: - image->stride = xcb_roundup((uint32_t)image->width * - (uint32_t)image->bpp, - image->scanline_pad) >> 3; - image->size = image->height * image->stride; - break; - default: - assert(0); - } -} - - -xcb_image_t * -xcb_image_create_native (xcb_connection_t * c, - uint16_t width, - uint16_t height, - xcb_image_format_t format, - uint8_t depth, - void * base, - uint32_t bytes, - uint8_t * data) -{ - const xcb_setup_t * setup = xcb_get_setup(c); - xcb_format_t * fmt; - xcb_image_format_t ef = format; - - if (ef == XCB_IMAGE_FORMAT_Z_PIXMAP && depth == 1) - ef = XCB_IMAGE_FORMAT_XY_PIXMAP; - switch (ef) { - case XCB_IMAGE_FORMAT_XY_BITMAP: - if (depth != 1) - return 0; - /* fall through */ - case XCB_IMAGE_FORMAT_XY_PIXMAP: - if (depth > 1) { - fmt = find_format_by_depth(setup, depth); - if (!fmt) - return 0; - } - return xcb_image_create(width, height, format, - setup->bitmap_format_scanline_pad, - depth, depth, setup->bitmap_format_scanline_unit, - setup->image_byte_order, - setup->bitmap_format_bit_order, - base, bytes, data); - case XCB_IMAGE_FORMAT_Z_PIXMAP: - fmt = find_format_by_depth(setup, depth); - if (!fmt) - return 0; - return xcb_image_create(width, height, format, - fmt->scanline_pad, - fmt->depth, fmt->bits_per_pixel, 0, - setup->image_byte_order, - XCB_IMAGE_ORDER_MSB_FIRST, - base, bytes, data); - default: - assert(0); - } - assert(0); -} - - -xcb_image_t * -xcb_image_create (uint16_t width, - uint16_t height, - xcb_image_format_t format, - uint8_t xpad, - uint8_t depth, - uint8_t bpp, - uint8_t unit, - xcb_image_order_t byte_order, - xcb_image_order_t bit_order, - void * base, - uint32_t bytes, - uint8_t * data) -{ - xcb_image_t * image; - - if (unit == 0) { - switch (format) { - case XCB_IMAGE_FORMAT_XY_BITMAP: - case XCB_IMAGE_FORMAT_XY_PIXMAP: - unit = 32; - break; - case XCB_IMAGE_FORMAT_Z_PIXMAP: - if (bpp == 1) { - unit = 32; - break; - } - if (bpp < 8) { - unit = 8; - break; - } - unit = bpp; - break; - } - } - if (!format_valid(depth, bpp, unit, format, xpad)) - return 0; - image = malloc(sizeof(*image)); - if (image == 0) - return 0; - image->width = width; - image->height = height; - image->format = format; - image->scanline_pad = xpad; - image->depth = depth; - image->bpp = bpp; - image->unit = unit; - image->plane_mask = xcb_mask(depth); - image->byte_order = byte_order; - image->bit_order = bit_order; - xcb_image_annotate(image); - - /* - * Ways this function can be called: - * * with data: we fail if bytes isn't - * large enough, else leave well enough alone. - * * with base and !data: if bytes is zero, we - * default; otherwise we fail if bytes isn't - * large enough, else fill in data - * * with !base and !data: we malloc storage - * for the data, save that address as the base, - * and fail if malloc does. - * - * When successful, we establish the invariant that data - * points at sufficient storage that may have been - * supplied, and base is set iff it should be - * auto-freed when the image is destroyed. - * - * Except as a special case when base = 0 && data == 0 && - * bytes == ~0 we just return the image structure and let - * the caller deal with getting the allocation right. - */ - if (!base && !data && bytes == ~0) { - image->base = 0; - image->data = 0; - return image; - } - if (!base && data && bytes == 0) - bytes = image->size; - image->base = base; - image->data = data; - if (!image->data) { - if (image->base) { - image->data = image->base; - } else { - bytes = image->size; - image->base = malloc(bytes); - image->data = image->base; - } - } - if (!image->data || bytes < image->size) { - free(image); - return 0; - } - return image; -} - - -void -xcb_image_destroy (xcb_image_t *image) -{ - if (image->base) - free (image->base); - free (image); -} - - -xcb_image_t * -xcb_image_get (xcb_connection_t * conn, - xcb_drawable_t draw, - int16_t x, - int16_t y, - uint16_t width, - uint16_t height, - uint32_t plane_mask, - xcb_image_format_t format) -{ - xcb_get_image_cookie_t image_cookie; - xcb_get_image_reply_t * imrep; - xcb_image_t * image = 0; - uint32_t bytes; - uint8_t * data; - - image_cookie = xcb_get_image(conn, format, draw, x, y, - width, height, plane_mask); - imrep = xcb_get_image_reply(conn, image_cookie, 0); - if (!imrep) - return 0; - bytes = xcb_get_image_data_length(imrep); - data = xcb_get_image_data(imrep); - switch (format) { - case XCB_IMAGE_FORMAT_XY_PIXMAP: - plane_mask &= xcb_mask(imrep->depth); - if (plane_mask != xcb_mask(imrep->depth)) { - xcb_image_t * tmp_image = - xcb_image_create_native(conn, width, height, format, - imrep->depth, 0, 0, 0); - int i; - uint32_t rpm = plane_mask; - uint8_t * src_plane = image->data; - uint8_t * dst_plane = tmp_image->data; - uint32_t size = image->height * image->stride; - - if (!tmp_image) { - free(imrep); - return 0; - } - if (tmp_image->bit_order == XCB_IMAGE_ORDER_MSB_FIRST) - rpm = xcb_bit_reverse(plane_mask, imrep->depth); - for (i = 0; i < imrep->depth; i++) { - if (rpm & 1) { - memcpy(dst_plane, src_plane, size); - src_plane += size; - } else { - memset(dst_plane, 0, size); - } - dst_plane += size; - } - tmp_image->plane_mask = plane_mask; - image = tmp_image; - free(imrep); - break; - } - /* fall through */ - case XCB_IMAGE_FORMAT_Z_PIXMAP: - image = xcb_image_create_native(conn, width, height, format, - imrep->depth, imrep, bytes, data); - if (!image) { - free(imrep); - return 0; - } - break; - default: - assert(0); - } - assert(bytes == image->size); - return image; -} - - -xcb_image_t * -xcb_image_native (xcb_connection_t * c, - xcb_image_t * image, - int convert) -{ - xcb_image_t * tmp_image = 0; - const xcb_setup_t * setup = xcb_get_setup(c); - xcb_format_t * fmt = 0; - xcb_image_format_t ef = effective_format(image->format, image->bpp); - uint8_t bpp = 1; - - if (image->depth > 1 || ef == XCB_IMAGE_FORMAT_Z_PIXMAP) { - fmt = find_format_by_depth(setup, image->depth); - /* XXX For now, we don't do depth conversions, even - for xy-pixmaps */ - if (!fmt) - return 0; - bpp = fmt->bits_per_pixel; - } - switch (ef) { - case XCB_IMAGE_FORMAT_XY_PIXMAP: - if (setup->bitmap_format_scanline_unit != image->unit || - setup->bitmap_format_scanline_pad != image->scanline_pad || - setup->image_byte_order != image->byte_order || - setup->bitmap_format_bit_order != image->bit_order || - bpp != image->bpp) { - if (!convert) - return 0; - tmp_image = - xcb_image_create(image->width, image->height, image->format, - setup->bitmap_format_scanline_pad, - image->depth, bpp, - setup->bitmap_format_scanline_unit, - setup->image_byte_order, - setup->bitmap_format_bit_order, - 0, 0, 0); - if (!tmp_image) - return 0; - } - break; - case XCB_IMAGE_FORMAT_Z_PIXMAP: - if (fmt->scanline_pad != image->scanline_pad || - setup->image_byte_order != image->byte_order || - bpp != image->bpp) { - if (!convert) - return 0; - tmp_image = - xcb_image_create(image->width, image->height, image->format, - fmt->scanline_pad, - image->depth, bpp, 0, - setup->image_byte_order, - XCB_IMAGE_ORDER_MSB_FIRST, - 0, 0, 0); - if (!tmp_image) - return 0; - } - break; - default: - assert(0); - } - if (tmp_image) { - if (!xcb_image_convert(image, tmp_image)) { - xcb_image_destroy(tmp_image); - return 0; - } - image = tmp_image; - } - return image; -} - - -xcb_void_cookie_t -xcb_image_put (xcb_connection_t * conn, - xcb_drawable_t draw, - xcb_gcontext_t gc, - xcb_image_t * image, - int16_t x, - int16_t y, - uint8_t left_pad) -{ - return xcb_put_image(conn, image->format, draw, gc, - image->width, image->height, - x, y, left_pad, - image->depth, - image->size, - image->data); -} - - - -/* - * Shm stuff - */ - -xcb_image_t * -xcb_image_shm_put (xcb_connection_t * conn, - xcb_drawable_t draw, - xcb_gcontext_t gc, - xcb_image_t * image, - xcb_shm_segment_info_t shminfo, - int16_t src_x, - int16_t src_y, - int16_t dest_x, - int16_t dest_y, - uint16_t src_width, - uint16_t src_height, - uint8_t send_event) -{ - if (!xcb_image_native(conn, image, 0)) - return 0; - if (!shminfo.shmaddr) - return 0; - xcb_shm_put_image(conn, draw, gc, - image->width, image->height, - src_x, src_y, src_width, src_height, - dest_x, dest_y, - image->depth, image->format, - send_event, - shminfo.shmseg, - image->data - shminfo.shmaddr); - return image; -} - - -int -xcb_image_shm_get (xcb_connection_t * conn, - xcb_drawable_t draw, - xcb_image_t * image, - xcb_shm_segment_info_t shminfo, - int16_t x, - int16_t y, - uint32_t plane_mask) -{ - xcb_shm_get_image_reply_t * setup; - xcb_shm_get_image_cookie_t cookie; - xcb_generic_error_t * err = 0; - - if (!shminfo.shmaddr) - return 0; - cookie = xcb_shm_get_image(conn, draw, - x, y, - image->width, image->height, - plane_mask, - image->format, - shminfo.shmseg, - image->data - shminfo.shmaddr); - setup = xcb_shm_get_image_reply(conn, cookie, &err); - if (err) { - fprintf(stderr, "ShmGetImageReply error %d\n", (int)err->error_code); - free(err); - return 0; - } else { - free (setup); - return 1; - } -} - - -static uint32_t -xy_image_byte (xcb_image_t *image, uint32_t x) -{ - x >>= 3; - if (image->byte_order == image->bit_order) - return x; - switch (image->unit) { - default: - case 8: - return x; - case 16: - return x ^ 1; - case 32: - return x ^ 3; - } -} - -static uint32_t -xy_image_bit (xcb_image_t *image, uint32_t x) -{ - x &= 7; - if (image->bit_order == XCB_IMAGE_ORDER_MSB_FIRST) - x = 7 - x; - return x; -} - -/* GetPixel/PutPixel */ - -/* XXX this is the most hideously done cut-and-paste - to below. Any bugs fixed there should be fixed here - and vice versa. */ -void -xcb_image_put_pixel (xcb_image_t *image, - uint32_t x, - uint32_t y, - uint32_t pixel) -{ - uint8_t *row; - - if (x > image->width || y > image->height) - return; - row = image->data + (y * image->stride); - switch (effective_format(image->format, image->bpp)) { - case XCB_IMAGE_FORMAT_XY_BITMAP: - case XCB_IMAGE_FORMAT_XY_PIXMAP: - /* block */ { - int p; - uint32_t plane_mask = image->plane_mask; - uint8_t * plane = row; - uint32_t byte = xy_image_byte(image, x); - uint32_t bit = xy_image_bit(image,x); - uint8_t mask = 1 << bit; - - for (p = image->bpp - 1; p >= 0; p--) { - if ((plane_mask >> p) & 1) { - uint8_t * bp = plane + byte; - uint8_t this_bit = ((pixel >> p) & 1) << bit; - *bp = (*bp & ~mask) | this_bit; - } - plane += image->stride * image->height; - } - } - break; - case XCB_IMAGE_FORMAT_Z_PIXMAP: - switch (image->bpp) { - uint32_t mask; - case 4: - mask = 0xf; - pixel &= 0xf; - if ((x & 1) == - (image->byte_order == XCB_IMAGE_ORDER_MSB_FIRST)) { - pixel <<= 4; - mask <<= 4; - } - row[x >> 1] = (row[x >> 1] & ~mask) | pixel; - break; - case 8: - row[x] = pixel; - break; - case 16: - switch (image->byte_order) { - case XCB_IMAGE_ORDER_LSB_FIRST: - row[x << 1] = pixel; - row[(x << 1) + 1] = pixel >> 8; - break; - case XCB_IMAGE_ORDER_MSB_FIRST: - row[x << 1] = pixel >> 8; - row[(x << 1) + 1] = pixel; - break; - } - break; - case 24: - switch (image->byte_order) { - case XCB_IMAGE_ORDER_LSB_FIRST: - row[x * 3] = pixel; - row[x * 3 + 1] = pixel >> 8; - row[x * 3 + 2] = pixel >> 16; - break; - case XCB_IMAGE_ORDER_MSB_FIRST: - row[x * 3] = pixel >> 16; - row[x * 3 + 1] = pixel >> 8; - row[x * 3 + 2] = pixel; - break; - } - break; - case 32: - switch (image->byte_order) { - case XCB_IMAGE_ORDER_LSB_FIRST: - row[x << 2] = pixel; - row[(x << 2) + 1] = pixel >> 8; - row[(x << 2) + 2] = pixel >> 16; - row[(x << 2) + 3] = pixel >> 24; - break; - case XCB_IMAGE_ORDER_MSB_FIRST: - row[x << 2] = pixel >> 24; - row[(x << 2) + 1] = pixel >> 16; - row[(x << 2) + 2] = pixel >> 8; - row[(x << 2) + 3] = pixel; - break; - } - break; - default: - assert(0); - } - break; - default: - assert(0); - } -} - - -/* XXX this is the most hideously done cut-and-paste - from above. Any bugs fixed there should be fixed here - and vice versa. */ -uint32_t -xcb_image_get_pixel (xcb_image_t *image, - uint32_t x, - uint32_t y) -{ - uint32_t pixel = 0; - uint8_t *row; - - assert(x < image->width && y < image->height); - row = image->data + (y * image->stride); - switch (effective_format(image->format, image->bpp)) { - case XCB_IMAGE_FORMAT_XY_BITMAP: - case XCB_IMAGE_FORMAT_XY_PIXMAP: - /* block */ { - int p; - uint32_t plane_mask = image->plane_mask; - uint8_t * plane = row; - uint32_t byte = xy_image_byte(image, x); - uint32_t bit = xy_image_bit(image,x); - - for (p = image->bpp - 1; p >= 0; p--) { - pixel <<= 1; - if ((plane_mask >> p) & 1) { - uint8_t * bp = plane + byte; - pixel |= (*bp >> bit) & 1; - } - plane += image->stride * image->height; - } - } - return pixel; - case XCB_IMAGE_FORMAT_Z_PIXMAP: - switch (image->bpp) { - case 4: - if ((x & 1) == (image->byte_order == XCB_IMAGE_ORDER_MSB_FIRST)) - return row[x >> 1] >> 4; - return row[x >> 1] & 0xf; - case 8: - return row[x]; - case 16: - switch (image->byte_order) { - case XCB_IMAGE_ORDER_LSB_FIRST: - pixel = row[x << 1]; - pixel |= row[(x << 1) + 1] << 8; - break; - case XCB_IMAGE_ORDER_MSB_FIRST: - pixel = row[x << 1] << 8; - pixel |= row[(x << 1) + 1]; - break; - } - break; - case 24: - switch (image->byte_order) { - case XCB_IMAGE_ORDER_LSB_FIRST: - pixel = row[x * 3]; - pixel |= row[x * 3 + 1] << 8; - pixel |= row[x * 3 + 2] << 16; - break; - case XCB_IMAGE_ORDER_MSB_FIRST: - pixel = row[x * 3] << 16; - pixel |= row[x * 3 + 1] << 8; - pixel |= row[x * 3 + 2]; - break; - } - break; - case 32: - switch (image->byte_order) { - case XCB_IMAGE_ORDER_LSB_FIRST: - pixel = row[x << 2]; - pixel |= row[(x << 2) + 1] << 8; - pixel |= row[(x << 2) + 2] << 16; - pixel |= row[(x << 2) + 3] << 24; - break; - case XCB_IMAGE_ORDER_MSB_FIRST: - pixel = row[x << 2] << 24; - pixel |= row[(x << 2) + 1] << 16; - pixel |= row[(x << 2) + 2] << 8; - pixel |= row[(x << 2) + 3]; - break; - } - break; - default: - assert(0); - } - return pixel; - default: - assert(0); - } -} - - -xcb_image_t * -xcb_image_create_from_bitmap_data (uint8_t * data, - uint32_t width, - uint32_t height) -{ - return xcb_image_create(width, height, XCB_IMAGE_FORMAT_XY_PIXMAP, - 8, 1, 1, 8, - XCB_IMAGE_ORDER_LSB_FIRST, - XCB_IMAGE_ORDER_LSB_FIRST, - 0, 0, data); -} - - -/* - * (Adapted from libX11.) - * - * xcb_create_pixmap_from_bitmap_data: Routine to make a pixmap of - * given depth from user supplied bitmap data. - * D is any drawable on the same screen that the pixmap will be used in. - * Data is a pointer to the bit data, and - * width & height give the size in bits of the pixmap. - * - * The following format is assumed for data: - * - * format=XY (will use XYPixmap for depth 1 and XYBitmap for larger) - * bit_order=LSBFirst - * padding=8 - * bitmap_unit=8 - */ -xcb_pixmap_t -xcb_create_pixmap_from_bitmap_data (xcb_connection_t * display, - xcb_drawable_t d, - uint8_t * data, - uint32_t width, - uint32_t height, - uint32_t depth, - uint32_t fg, - uint32_t bg, - xcb_gcontext_t * gcp) -{ - xcb_pixmap_t pix; - xcb_image_t * image; - xcb_image_t * final_image; - xcb_gcontext_t gc; - uint32_t mask = 0; - xcb_params_gc_t gcv; - - image = xcb_image_create_from_bitmap_data(data, width, height); - if (!image) - return 0; - if (depth > 1) - image->format = XCB_IMAGE_FORMAT_XY_BITMAP; - final_image = xcb_image_native(display, image, 1); - if (!final_image) { - xcb_image_destroy(image); - return 0; - } - pix = xcb_generate_id(display); - xcb_create_pixmap(display, depth, pix, d, width, height); - gc = xcb_generate_id(display); - XCB_AUX_ADD_PARAM(&mask, &gcv, foreground, fg); - XCB_AUX_ADD_PARAM(&mask, &gcv, background, bg); - xcb_aux_create_gc(display, gc, pix, mask, &gcv); - xcb_image_put(display, pix, gc, final_image, 0, 0, 0); - if (final_image != image) - xcb_image_destroy(final_image); - xcb_image_destroy(image); - if (gcp) - *gcp = gc; - else - xcb_free_gc(display, gc); - return pix; -} - - -/* Thanks to Keith Packard <keithp@keithp.com> for this code */ -static void -swap_image(uint8_t * src, - uint32_t src_stride, - uint8_t * dst, - uint32_t dst_stride, - uint32_t height, - uint32_t byteswap, - int bitswap, - int nibbleswap) -{ - while (height--) { - uint32_t s; - - for (s = 0; s < src_stride; s++) { - uint8_t b; - uint32_t d = s ^ byteswap; - - if (d > dst_stride) - continue; - - b = src[s]; - if (bitswap) - b = xcb_bit_reverse(b, 8); - if (nibbleswap) - b = (b << 4) | (b >> 4); - dst[d] = b; - } - src += src_stride; - dst += dst_stride; - } -} - -/* Which order are bytes in (low two bits), given - * code which accesses an image one byte at a time - */ -static uint32_t -byte_order(xcb_image_t *i) -{ - uint32_t flip = i->byte_order == XCB_IMAGE_ORDER_MSB_FIRST; - - switch (i->bpp) { - default: - case 8: - return 0; - case 16: - return flip; - case 32: - return flip | (flip << 1); - } -} - -static uint32_t -bit_order(xcb_image_t *i) -{ - uint32_t flip = i->byte_order != i->bit_order; - - switch (i->unit) { - default: - case 8: - return 0; - case 16: - return flip; - case 32: - return flip | (flip << 1); - } -} - -/* Convert from one byte order to another by flipping the - * low two bits of the byte index along a scanline - */ -static uint32_t -conversion_byte_swap(xcb_image_t *src, xcb_image_t *dst) -{ - xcb_image_format_t ef = effective_format(src->format, src->bpp); - - /* src_ef == dst_ef in all callers of this function */ - if (ef == XCB_IMAGE_FORMAT_XY_PIXMAP) { - return bit_order(src) ^ bit_order(dst); - } else { - /* src_bpp == dst_bpp in all callers of this function */ - return byte_order(src) ^ byte_order(dst); - } -} - -xcb_image_t * -xcb_image_convert (xcb_image_t * src, - xcb_image_t * dst) -{ - xcb_image_format_t ef = effective_format(src->format, src->bpp); - - /* Things will go horribly wrong here if a bad - image is passed in, so we check some things - up front just to be nice. */ - assert(image_format_valid(src)); - assert(image_format_valid(dst)); - - /* images must be the same size - * (yes, we could copy a sub-set) - */ - if (src->width != dst->width || - src->height != dst->height) - return 0; - - if (ef == effective_format(dst->format, dst->bpp) && - src->bpp == dst->bpp) - { - if (src->unit == dst->unit && - src->scanline_pad == dst->scanline_pad && - src->byte_order == dst->byte_order && - (ef == XCB_IMAGE_FORMAT_Z_PIXMAP || - src->bit_order == dst->bit_order)) { - memcpy(dst->data, src->data, src->size); - } else { - int bitswap = 0; - int nibbleswap = 0; - uint32_t byteswap = conversion_byte_swap(src, dst); - uint32_t height = src->height;; - - if (ef == XCB_IMAGE_FORMAT_Z_PIXMAP) { - if (src->bpp == 4 && src->byte_order != dst->byte_order) - nibbleswap = 1; - } else { - if (src->bit_order != dst->bit_order) - bitswap = 1; - height *= src->depth; - } - swap_image (src->data, src->stride, dst->data, dst->stride, - height, byteswap, bitswap, nibbleswap); - } - } - else - { - uint32_t x; - uint32_t y; - /* General case: Slow pixel copy. Should we optimize - Z24<->Z32 copies of either endianness? */ - for (y = 0; y < src->height; y++) { - for (x = 0; x < src->width; x++) { - uint32_t pixel = xcb_image_get_pixel(src, x, y); - xcb_image_put_pixel(dst, x, y, pixel); - } - } - } - return dst; -} - -xcb_image_t * -xcb_image_subimage(xcb_image_t * image, - uint32_t x, - uint32_t y, - uint32_t width, - uint32_t height, - void * base, - uint32_t bytes, - uint8_t * data) -{ - int i, j; - xcb_image_t * result; - - if (x + width > image->width) - return 0; - if (y + height > image->height) - return 0; - result = xcb_image_create(width, height, image->format, - image->scanline_pad, image->depth, - image->bpp, image->unit, image->byte_order, - image->bit_order, - base, bytes, data); - if (!result) - return 0; - /* XXX FIXME For now, lose on performance. Sorry. */ - for (j = 0; j < height; j++) { - for (i = 0; i < width; i++) { - uint32_t pixel = xcb_image_get_pixel(image, x + i, y + j); - xcb_image_put_pixel(result, i, j, pixel); - } - } - return result; -} diff --git a/image/xcb_image.h b/image/xcb_image.h deleted file mode 100644 index 3b54da3..0000000 --- a/image/xcb_image.h +++ /dev/null @@ -1,630 +0,0 @@ -#ifndef __XCB_IMAGE_H__ -#define __XCB_IMAGE_H__ - -/* Copyright (C) 2007 Bart Massey - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Except as contained in this notice, the names of the authors or their - * institutions shall not be used in advertising or otherwise to promote the - * sale, use or other dealings in this Software without prior written - * authorization from the authors. - */ - -#include <xcb/xcb.h> -#include <xcb/shm.h> - - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * @defgroup xcb__image_t XCB Image Functions - * - * These are functions used to create and manipulate X images. - * - * The X image format we use is specific to this software, - * which is probably a bug; it represents an intermediate - * position between the wire format used by the X GetImage - * and PutImage requests and standard formats like PBM. An - * image consists of a header of type @ref xcb_image_t - * describing the properties of the image, together with a - * pointer to the image data itself. - * - * X wire images come in three formats. An xy-bitmap is a - * bit-packed format that will be expanded to a two-color - * pixmap using a GC when sent over the wire by PutImage. - * An xy-pixmap is one or more bit-planes, each in the same - * format as xy-bitmap. A z-pixmap is a more conventional - * pixmap representation, with each pixel packed into a - * word. Pixmaps are sent and received over the wire only - * to/from drawables of their depth. - * - * Each X server defines, for each depth and format, - * properties of images in that format that are sent and - * received on the wire. We refer to this as a "native" - * image for a given X server. It is not uncommon to want - * to work with non-native images on the client side, or to - * convert between the native images of different servers. - * - * This library provides several things. Facilities for - * creating and destroying images are, of course, provided. - * Wrappers for xcb_get_image() and xcb_put_image() are - * provided; these utilize the image header to simplify the - * interface. Routines for getting and putting image pixels - * are provided: both a generic form that works with - * arbitrary images, and fastpath forms for some common - * cases. Conversion routines are provided for X images; - * these routines have been fairly well optimized for the - * common cases, and should run fast even on older hardware. - * A routine analogous to Xlib's XCreate*FromBitmapData() is - * provided for creating X images from xbm-format data; this - * routine is in this library only because it is a trivial - * use case for the library. - * - * @{ - */ - - -typedef struct xcb_image_t xcb_image_t; - -/** - * @struct xcb_image_t - * A structure that describes an xcb_image_t. - */ -struct xcb_image_t -{ - uint16_t width; /**< Width in pixels, excluding pads etc. */ - uint16_t height; /**< Height in pixels. */ - xcb_image_format_t format; /**< Format. */ - uint8_t scanline_pad; /**< Right pad in bits. Valid pads - * are 8, 16, 32. - */ - uint8_t depth; /**< Depth in bits. Valid depths - * are 1, 4, 8, 16, 24 for z format, - * 1 for xy-bitmap-format, anything - * for xy-pixmap-format. - */ - uint8_t bpp; /**< Storage per pixel in bits. - * Must be >= depth. Valid bpp - * are 1, 4, 8, 16, 24, 32 for z - * format, 1 for xy-bitmap format, - * anything for xy-pixmap-format. - */ - uint8_t unit; /**< Scanline unit in bits for - * xy formats and for bpp == 1, - * in which case valid scanline - * units are 8, 16, 32. Otherwise, - * will be max(8, bpp). Must be >= bpp. - */ - uint32_t plane_mask; /**< When format is - * xy-pixmap and depth > - * 1, this says which - * planes are "valid" in - * some vague sense. - * Currently used only - * by xcb_image_get/put_pixel(), - * and set only by - * xcb_image_get(). - */ - xcb_image_order_t byte_order; /**< Component byte order - * for z-pixmap, byte - * order of scanline unit - * for xy-bitmap and - * xy-pixmap. Nybble - * order for z-pixmap - * when bpp == 4. - */ - xcb_image_order_t bit_order; /**< Bit order of - * scanline unit for - * xy-bitmap and - * xy-pixmap. - */ - uint32_t stride; /**< Bytes per image row. - * Computable from other - * data, but cached for - * convenience/performance. - */ - uint32_t size; /**< Size of image data in bytes. - * Computable from other - * data, but cached for - * convenience/performance. - */ - void * base; /**< Malloced block of storage that - * will be freed by - * @ref xcb_image_destroy() if non-null. - */ - uint8_t * data; /**< The actual image. */ -}; - -typedef struct xcb_shm_segment_info_t xcb_shm_segment_info_t; - -/** - * @struct xcb_shm_segment_info_t - * A structure that stores the informations needed by the MIT Shm - * Extension. - */ -struct xcb_shm_segment_info_t -{ - xcb_shm_seg_t shmseg; - uint32_t shmid; - uint8_t *shmaddr; -}; - - -/** - * Update the cached data of an image. - * @param image The image. - * - * An image's size and stride, among other things, are - * cached in its structure. This function recomputes those - * cached values for the given image. - * @ingroup xcb__image_t - */ -void -xcb_image_annotate (xcb_image_t *image); - -/** - * Create a new image. - * @param width The width of the image, in pixels. - * @param height The height of the image, in pixels. - * @param format The format of the image. - * @param xpad The scanline pad of the image. - * @param depth The depth of the image. - * @param bpp The depth of the image storage. - * @param unit The unit of image representation, in bits. - * @param byte_order The byte order of the image. - * @param bit_order The bit order of the image. - * @param base The base address of malloced image data. - * @param bytes The size in bytes of the storage pointed to by base. - * If base == 0 and bytes == ~0 and data == 0 on - * entry, no storage will be auto-allocated. - * @param data The image data. If data is null and bytes != ~0, then - * an attempt will be made to fill in data; from - * base if it is non-null (and bytes is large enough), else - * by mallocing sufficient storage and filling in base. - * @return The new image. - * - * This function allocates the memory needed for an @ref xcb_image_t structure - * with the given properties. See the description of xcb_image_t for details. - * This function initializes and returns a pointer to the - * xcb_image_t structure. It may try to allocate or reserve data for the - * structure, depending on how @p base, @p bytes and @p data are set. - * - * The image must be destroyed with xcb_image_destroy(). - * @ingroup xcb__image_t - */ -xcb_image_t * -xcb_image_create (uint16_t width, - uint16_t height, - xcb_image_format_t format, - uint8_t xpad, - uint8_t depth, - uint8_t bpp, - uint8_t unit, - xcb_image_order_t byte_order, - xcb_image_order_t bit_order, - void * base, - uint32_t bytes, - uint8_t * data); - - -/** - * Create a new image in connection-native format. - * @param c The connection. - * @param width The width of the image, in pixels. - * @param height The height of the image, in pixels. - * @param format The format of the image. - * @param depth The depth of the image. - * @param base The base address of malloced image data. - * @param bytes The size in bytes of the storage pointed to by base. - * If base == 0 and bytes == ~0 and data == 0 on - * entry, no storage will be auto-allocated. - * @param data The image data. If data is null and bytes != ~0, then - * an attempt will be made to fill in data; from - * base if it is non-null (and bytes is large enough), else - * by mallocing sufficient storage and filling in base. - * @return The new image. - * - * This function calls @ref xcb_image_create() with the given - * properties, and with the remaining properties chosen - * according to the "native format" with the given - * properties on the current connection. - * - * It is usual to use this rather - * than calling xcb_image_create() directly. - * @ingroup xcb__image_t - */ -xcb_image_t * -xcb_image_create_native (xcb_connection_t * c, - uint16_t width, - uint16_t height, - xcb_image_format_t format, - uint8_t depth, - void * base, - uint32_t bytes, - uint8_t * data); - - -/** - * Destroy an image. - * @param image The image to be destroyed. - * - * This function frees the memory associated with the @p image - * parameter. If its base pointer is non-null, it frees - * that also. - * @ingroup xcb__image_t - */ -void -xcb_image_destroy (xcb_image_t *image); - - -/** - * Get an image from the X server. - * @param conn The connection to the X server. - * @param draw The drawable to get the image from. - * @param x The x coordinate in pixels, relative to the origin of the - * drawable and defining the upper-left corner of the rectangle. - * @param y The y coordinate in pixels, relative to the origin of the - * drawable and defining the upper-left corner of the rectangle. - * @param width The width of the subimage in pixels. - * @param height The height of the subimage in pixels. - * @param plane_mask The plane mask. See the protocol document for details. - * @param format The format of the image. - * @return The subimage of @p draw defined by @p x, @p y, @p w, @p h. - * - - * This function returns a new image taken from the - * given drawable @p draw. - * The image will be in connection native format. If the @p format - * is xy-bitmap and the @p plane_mask masks bit planes out, those - * bit planes will be made part of the returned image anyway, - * by zero-filling them; this will require a fresh memory allocation - * and some copying. Otherwise, the resulting image will use the - * xcb_get_image_reply() record as its backing store. - * - * If a problem occurs, the function returns null. - * @ingroup xcb__image_t - */ -xcb_image_t * -xcb_image_get (xcb_connection_t * conn, - xcb_drawable_t draw, - int16_t x, - int16_t y, - uint16_t width, - uint16_t height, - uint32_t plane_mask, - xcb_image_format_t format); - - -/** - * Put an image onto the X server. - * @param conn The connection to the X server. - * @param draw The draw you get the image from. - * @param gc The graphic context. - * @param image The image you want to combine with the rectangle. - * @param x The x coordinate, which is relative to the origin of the - * drawable and defines the x coordinate of the upper-left corner of the - * rectangle. - * @param y The y coordinate, which is relative to the origin of the - * drawable and defines the x coordinate of the upper-left corner of - * the rectangle. - * @param left_pad Notionally shift an xy-bitmap or xy-pixmap image - * to the right some small amount, for some reason. XXX Not clear - * this is currently supported correctly. - * @return The cookie returned by xcb_put_image(). - * - * This function combines an image with a rectangle of the - * specified drawable @p draw. The image must be in native - * format for the connection. The image is drawn at the - * specified location in the drawable. For the xy-bitmap - * format, the foreground pixel in @p gc defines the source - * for the one bits in the image, and the background pixel - * defines the source for the zero bits. For xy-pixmap and - * z-pixmap formats, the depth of the image must match the - * depth of the drawable; the gc is ignored. - * - * @ingroup xcb__image_t - */ -xcb_void_cookie_t -xcb_image_put (xcb_connection_t * conn, - xcb_drawable_t draw, - xcb_gcontext_t gc, - xcb_image_t * image, - int16_t x, - int16_t y, - uint8_t left_pad); - - -/** - * Check image for or convert image to native format. - * @param c The connection to the X server. - * @param image The image. - * @param convert If 0, just check the image for native format. - * Otherwise, actually convert it. - * @return Null if the image is not in native format and can or will not - * be converted. Otherwise, the native format image. - * - * Each X display has its own "native format" for images of a given - * format and depth. This function either checks whether the given - * @p image is in native format for the given connection @p c, or - * actually tries to convert the image to native format, depending - * on whether @p convert is true or false. - * - * When @p convert is true, and the image is not in native format - * but can be converted, it will be, and a pointer to the new image - * will be returned. The image passed in will be unharmed in this - * case; it is the caller's responsibility to check that the returned - * pointer is different and to dispose of the old image if desired. - * @ingroup xcb__image_t - */ -xcb_image_t * -xcb_image_native (xcb_connection_t * c, - xcb_image_t * image, - int convert); - - -/** - * Put a pixel to an image. - * @param image The image. - * @param x The x coordinate of the pixel. - * @param y The y coordinate of the pixel. - * @param pixel The new pixel value. - * - * This function overwrites the pixel in the given @p image with the - * specified @p pixel value (in client format). The image must contain the @p x - * and @p y coordinates, as no clipping is done. This function honors - * the plane-mask for xy-pixmap images. - * @ingroup xcb__image_t - */ -void -xcb_image_put_pixel (xcb_image_t *image, - uint32_t x, - uint32_t y, - uint32_t pixel); - -/** - * Get a pixel from an image. - * @param image The image. - * @param x The x coordinate of the pixel. - * @param y The y coordinate of the pixel. - * @return The pixel value. - * - * This function retrieves a pixel from the given @p image. - * The image must contain the @p x - * and @p y coordinates, as no clipping is done. This function honors - * the plane-mask for xy-pixmap images. - * @ingroup xcb__image_t - */ -uint32_t -xcb_image_get_pixel (xcb_image_t *image, - uint32_t x, - uint32_t y); - - -/** - * Convert an image to a new format. - * @param src Source image. - * @param dst Destination image. - * @return The @p dst image, or null on error. - * - * This function tries to convert the image data of the @p - * src image to the format implied by the @p dst image, - * overwriting the current destination image data. - * The source and destination must have the same - * width, height, and depth. When the source and destination - * are already the same format, a simple copy is done. Otherwise, - * when the destination has the same bits-per-pixel/scanline-unit - * as the source, an optimized copy routine (thanks to Keith Packard) - * is used for the conversion. Otherwise, the copy is done the - * slow, slow way with @ref xcb_image_get_pixel() and - * @ref xcb_image_put_pixel() calls. - * @ingroup xcb__image_t - */ -xcb_image_t * -xcb_image_convert (xcb_image_t * src, - xcb_image_t * dst); - - -/** - * Extract a subimage of an image. - * @param image Source image. - * @param x X coordinate of subimage. - * @param y Y coordinate of subimage. - * @param width Width of subimage. - * @param height Height of subimage. - * @param base Base of memory allocation. - * @param bytes Size of base allocation. - * @param data Memory allocation. - * @return The subimage, or null on error. - * - * Given an image, this function extracts the subimage at the - * given coordinates. The requested subimage must be entirely - * contained in the source @p image. The resulting image will have the same - * general image parameters as the source image. The @p base, @p bytes, - * and @p data arguments are passed to @ref xcb_create_image() unaltered - * to create the destination image---see its documentation for details. - * - * @ingroup xcb__image_t - */ -xcb_image_t * -xcb_image_subimage(xcb_image_t * image, - uint32_t x, - uint32_t y, - uint32_t width, - uint32_t height, - void * base, - uint32_t bytes, - uint8_t * data); - - -/* - * Shm stuff - */ - -/** - * Put the data of an xcb_image_t onto a drawable using the MIT Shm - * Extension. - * @param conn The connection to the X server. - * @param draw The draw you get the image from. - * @param gc The graphic context. - * @param image The image you want to combine with the rectangle. - * @param shminfo A @ref xcb_shm_segment_info_t structure. - * @param src_x The offset in x from the left edge of the image - * defined by the xcb_image_t structure. - * @param src_y The offset in y from the left edge of the image - * defined by the xcb_image_t structure. - * @param dest_x The x coordinate, which is relative to the origin of the - * drawable and defines the x coordinate of the upper-left corner of the - * rectangle. - * @param dest_y The y coordinate, which is relative to the origin of the - * drawable and defines the x coordinate of the upper-left corner of - * the rectangle. - * @param src_width The width of the subimage, in pixels. - * @param src_height The height of the subimage, in pixels. - * @param send_event Indicates whether or not a completion event - * should occur when the image write is complete. - * @return 1 is no problems occurs. - * - * This function combines an image in memory with a shape of the - * specified drawable. The section of the image defined by the @p x, @p y, - * @p width, and @p height arguments is drawn on the specified part of - * the drawable. If XYBitmap format is used, the depth must be - * one, or a``BadMatch'' error results. The foreground pixel in the - * Graphic Context @p gc defines the source for the one bits in the - * image, and the background pixel defines the source for the zero - * bits. For XYPixmap and ZPixmap, the depth must match the depth of - * the drawable, or a ``BadMatch'' error results. - * - * If a problem occurs, the functons returns @c 0. Otherwise, it - * returns @c 1. - * @ingroup xcb__image_t - */ -xcb_image_t * -xcb_image_shm_put (xcb_connection_t * conn, - xcb_drawable_t draw, - xcb_gcontext_t gc, - xcb_image_t * image, - xcb_shm_segment_info_t shminfo, - int16_t src_x, - int16_t src_y, - int16_t dest_x, - int16_t dest_y, - uint16_t src_width, - uint16_t src_height, - uint8_t send_event); - - -/** - * Read image data into a shared memory xcb_image_t. - * @param conn The connection to the X server. - * @param draw The draw you get the image from. - * @param image The image you want to combine with the rectangle. - * @param shminfo A @ref xcb_shm_segment_info_t structure. - * @param x The x coordinate, which are relative to the origin of the - * drawable and define the upper-left corner of the rectangle. - * @param y The y coordinate, which are relative to the origin of the - * drawable and define the upper-left corner of the rectangle. - * @param plane_mask The plane mask. - * @return The subimage of @p draw defined by @p x, @p y, @p w, @p h. - * - * This function reads image data into a shared memory xcb_image_t where - * @p conn is the connection to the X server, @p draw is the source - * drawable, @p image is the destination xcb_image_t, @p x and @p y are offsets - * within the drawable, and @p plane_mask defines which planes are to be - * read. - * - * If a problem occurs, the functons returns @c 0. It returns 1 - * otherwise. - * @ingroup xcb__image_t - */ -int xcb_image_shm_get (xcb_connection_t * conn, - xcb_drawable_t draw, - xcb_image_t * image, - xcb_shm_segment_info_t shminfo, - int16_t x, - int16_t y, - uint32_t plane_mask); - - -/** - * Create an image from user-supplied bitmap data. - * @param data Image data in packed bitmap format. - * @param width Width in bits of image data. - * @param height Height in bits of image data. - * @return The image constructed from the image data, or 0 on error. - * - * This function creates an image from the user-supplied - * bitmap @p data. The bitmap data is assumed to be in - * xbm format (i.e., 8-bit scanline unit, LSB-first, 8-bit pad). - * @ingroup xcb__image_t - */ -xcb_image_t * -xcb_image_create_from_bitmap_data (uint8_t * data, - uint32_t width, - uint32_t height); - -/** - * Create a pixmap from user-supplied bitmap data. - * @param display The connection to the X server. - * @param d The parent drawable for the pixmap. - * @param data Image data in packed bitmap format. - * @param width Width in bits of image data. - * @param height Height in bits of image data. - * @param depth Depth of the desired pixmap. - * @param fg Pixel for one-bits of pixmaps with depth larger than one. - * @param bg Pixel for zero-bits of pixmaps with depth larger than one. - * @param gcp If this pointer is non-null, the GC created to - * fill in the pixmap is stored here; it will have its foreground - * and background set to the supplied value. Otherwise, the GC - * will be freed. - * @return The pixmap constructed from the image data, or 0 on error. - * - * This function creates a pixmap from the user-supplied - * bitmap @p data. The bitmap data is assumed to be in - * xbm format (i.e., 8-bit scanline unit, LSB-first, 8-bit pad). - * If @p depth is greater than 1, the - * bitmap will be expanded to a pixmap using the given - * foreground and background pixels @p fg and @p bg. - * @ingroup xcb__image_t - */ -xcb_pixmap_t -xcb_create_pixmap_from_bitmap_data (xcb_connection_t * display, - xcb_drawable_t d, - uint8_t * data, - uint32_t width, - uint32_t height, - uint32_t depth, - uint32_t fg, - uint32_t bg, - xcb_gcontext_t * gcp); - - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - - -#endif /* __XCB_IMAGE_H__ */ diff --git a/image/xcb_pixel.h b/image/xcb_pixel.h deleted file mode 100644 index fcb22b4..0000000 --- a/image/xcb_pixel.h +++ /dev/null @@ -1,171 +0,0 @@ -#ifndef __XCB_PIXEL_H__ -#define __XCB_PIXEL_H__ - -/* Copyright (C) 2007 Bart Massey - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Except as contained in this notice, the names of the authors or their - * institutions shall not be used in advertising or otherwise to promote the - * sale, use or other dealings in this Software without prior written - * authorization from the authors. - */ - -#include <inttypes.h> -#include <X11/Xfuncproto.h> -#ifndef BUILD -#include <xcb/xcb_bitops.h> -#include <xcb/xcb_image.h> -#endif - -/** - * XCB Image fast pixel ops. - * - * Fast inline versions of xcb_image_get_pixel() and - * xcb_image_put_pixel() for various common cases. - * The naming convention is xcb_image_put_pixel_FUB() - * where F is the format and is either XY for bitmaps - * or Z for pixmaps, U is the bitmap unit size or pixmap - * bits-per-pixel, and B is the endianness (if needed) - * and is either M for most-significant-first or L for - * least-significant-first. Note that no checking - * is done on the arguments to these routines---caller beware. - * Also note that the pixel type is chosen to be appropriate - * to the unit; bitmaps use int and pixmaps use the appropriate - * size of unsigned. - * @ingroup xcb__image_t - */ - -_X_INLINE static void -xcb_image_put_pixel_XY32M (xcb_image_t *image, - uint32_t x, - uint32_t y, - int pixel) -{ - uint32_t unit = (x >> 3) & ~xcb_mask(2); - uint32_t byte = xcb_mask(2) - ((x >> 3) & xcb_mask(2)); - uint32_t bit = xcb_mask(3) - (x & xcb_mask(3)); - uint8_t m = 1 << bit; - uint8_t p = pixel << bit; - uint8_t * bp = image->data + (y * image->stride) + (unit | byte); - *bp = (*bp & ~m) | p; -} - -_X_INLINE static void -xcb_image_put_pixel_XY32L (xcb_image_t *image, - uint32_t x, - uint32_t y, - int pixel) -{ - uint32_t bit = x & xcb_mask(3); - uint8_t m = 1 << bit; - uint8_t p = pixel << bit; - uint8_t * bp = image->data + (y * image->stride) + (x >> 3); - *bp = (*bp & ~m) | p; -} - -_X_INLINE static int -xcb_image_get_pixel_XY32M (xcb_image_t *image, - uint32_t x, - uint32_t y) -{ - uint32_t unit = (x >> 3) & ~xcb_mask(2); - uint32_t byte = xcb_mask(2) - ((x >> 3) & xcb_mask(2)); - uint32_t bit = xcb_mask(3) - (x & xcb_mask(3)); - uint8_t * bp = image->data + (y * image->stride) + (unit | byte); - return (*bp >> bit) & 1; -} - -_X_INLINE static int -xcb_image_get_pixel_XY32L (xcb_image_t *image, - uint32_t x, - uint32_t y) -{ - uint32_t bit = x & xcb_mask(3); - uint8_t * bp = image->data + (y * image->stride) + (x >> 3); - return (*bp >> bit) & 1; -} - -_X_INLINE static void -xcb_image_put_pixel_Z8 (xcb_image_t *image, - uint32_t x, - uint32_t y, - uint8_t pixel) -{ - image->data[x + y * image->stride] = pixel; -} - -_X_INLINE static uint8_t -xcb_image_get_pixel_Z8 (xcb_image_t *image, - uint32_t x, - uint32_t y) -{ - return image->data[x + y * image->stride]; -} - -_X_INLINE static void -xcb_image_put_pixel_Z32M (xcb_image_t *image, - uint32_t x, - uint32_t y, - uint32_t pixel) -{ - uint8_t * row = image->data + (y * image->stride); - row[x << 2] = pixel >> 24; - row[(x << 2) + 1] = pixel >> 16; - row[(x << 2) + 2] = pixel >> 8; - row[(x << 2) + 3] = pixel; -} - -_X_INLINE static void -xcb_image_put_pixel_Z32L (xcb_image_t *image, - uint32_t x, - uint32_t y, - uint32_t pixel) -{ - uint8_t * row = image->data + (y * image->stride); - row[x << 2] = pixel; - row[(x << 2) + 1] = pixel >> 8; - row[(x << 2) + 2] = pixel >> 16; - row[(x << 2) + 3] = pixel >> 24; -} - -_X_INLINE static uint32_t -xcb_image_get_pixel_Z32M (xcb_image_t *image, - uint32_t x, - uint32_t y) -{ - uint8_t * row = image->data + (y * image->stride); - uint32_t pixel = row[x << 2] << 24; - pixel |= row[(x << 2) + 1] << 16; - pixel |= row[(x << 2) + 2] << 8; - return pixel | row[(x << 2) + 3]; -} - -_X_INLINE static uint32_t -xcb_image_get_pixel_Z32L (xcb_image_t *image, - uint32_t x, - uint32_t y) -{ - uint8_t * row = image->data + (y * image->stride); - uint32_t pixel = row[x << 2]; - pixel |= row[(x << 2) + 1] << 8; - pixel |= row[(x << 2) + 2] << 16; - return pixel | row[(x << 2) + 3] << 24; -} - -#endif /* __XCB_PIXEL_H__ */ |