{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":535111101,"defaultBranch":"main","name":"openslide","ownerLogin":"venklab","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2022-09-10T20:26:08.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/98983517?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1710514813.0","currentOid":""},"activityList":{"items":[{"before":"33cba1997276cb1da19a1553f2146da7d03e0050","after":"45dd214a835706e56c4c2f693620c25c46413365","ref":"refs/heads/main","pushedAt":"2024-05-14T15:41:16.000Z","pushType":"push","commitsCount":64,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"Add Zeiss CZI format (#396)\n\nAdd support for the CZI format generated by Zeiss microscopes.\r\n\r\nCZI stores a whole slide in many smaller tiles, or subblocks in CZI's\r\nterm. The size of these tiles can exceed 2000x2000 pixels. Each tile has\r\na associated directory entry, which describes its location, level 0 size,\r\nreal tile size, color channel etc. A CZI file can be pyramidal or\r\nnon-pyramidal, and OpenSlide can read both.\r\n\r\nA CZI file can embed other files, such as a CZI file or JPEG. CZI calls\r\nthese attachments. This driver reads three of them as associated images:\r\nSlidePreview as the macro image, Label as the label, and Thumbnail as the\r\nthumbnail.\r\n\r\nCZI stores image tiles in JPEG XR, Zstandard, or uncompressed. This PR\r\nonly supports uncompressed, which is simply a stream of pixel samples.\r\nThe resulting size is more than ten times larger than its JPEG XR encoded\r\ncounterpart. CZI may also use JPEG or LZW, but none of the files I saw\r\nuse those. Image pixels can be:\r\n\r\n- BGR24 (8 bits per RGB color): used by brightfield\r\n- BGR48 (16 bits per RGB color): SlidePreview is BGR48 uncompressed\r\n- GRAY16: 16 bits gray image, used by fluorescence and TIE\r\n- GRAY8: Zeiss may have an option to generate 8 bits gray image but I\r\n haven't tested it.\r\n\r\nThis driver supports BGR24 and BGR48, converting BGR48 into 8 bits per\r\ncolor by keeping the most significant 8 bits.\r\n\r\nAfter detecting samples on a slide, Zeiss captures each sample as a\r\nseparated scene. Because each image tile has a start x and y, OpenSlide\r\ncan show these multi-scene slides even without knowing to which scene a\r\ntile belongs. Nevertheless, this driver records the scene ID when reading\r\nthe subblock directory entry. Scenes may have different numbers of\r\npyramid levels, so this driver only exposes levels where image data is\r\navailable in all scenes.\r\n\r\nBecause decoded tiles can be around 20 MiB, the default cache size is only\r\nlarge enough for one tile at a time, which isn't enough to prevent\r\nthrashing. This driver resizes the default cache to hold at least two tiles.\r\n\r\nSigned-off-by: Wei Chen \r\nSigned-off-by: Benjamin Gilbert \r\nCo-authored-by: Benjamin Gilbert ","shortMessageHtmlLink":"Add Zeiss CZI format (openslide#396)"}},{"before":"a1eb371b1e2475ca676f86d5cb871caaedaa7075","after":"8469352e1ed4ce7e184fc36fbf9a1f082d067c9f","ref":"refs/heads/zeiss-czi","pushedAt":"2024-05-14T15:40:40.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"Merge branch 'openslide:main' into zeiss-czi","shortMessageHtmlLink":"Merge branch 'openslide:main' into zeiss-czi"}},{"before":"c991913ceaead4fbe30dfbeb70accbb01e5b4c3f","after":"a1eb371b1e2475ca676f86d5cb871caaedaa7075","ref":"refs/heads/zeiss-czi","pushedAt":"2024-05-13T04:41:13.000Z","pushType":"push","commitsCount":17,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"tests: update frozen archive\n\nSigned-off-by: Benjamin Gilbert ","shortMessageHtmlLink":"tests: update frozen archive"}},{"before":"716d49cdca6cbb2fe09375d296d84c2cdc574595","after":"c991913ceaead4fbe30dfbeb70accbb01e5b4c3f","ref":"refs/heads/zeiss-czi","pushedAt":"2024-05-12T19:58:19.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"zeiss: parse metadata XML values from vendor properties\n\nRead standard properties and metadata values from vendor properties. This\nis documented to be the preferred approach, since it ensures the\nunderlying raw data is available from properties.\n\nDon't assume that the first objective in the Objectives list is the\nrelevant one; dereference Information.Image.ObjectiveSettings.ObjectiveRef\ninstead.\n\nDrop the XML XPath helpers we added. We don't use them anymore, and\nthey're probably only useful for parsing values directly out of XML\nmetadata, which we want to discourage.\n\nSigned-off-by: Benjamin Gilbert ","shortMessageHtmlLink":"zeiss: parse metadata XML values from vendor properties"}},{"before":"68e0ea10cc8a65dc438b3589fdea9d5d3495a5d4","after":"716d49cdca6cbb2fe09375d296d84c2cdc574595","ref":"refs/heads/zeiss-czi","pushedAt":"2024-05-12T18:39:45.000Z","pushType":"push","commitsCount":9,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"zeiss: consistently g_strndup() fixed-length strings\n\nAlways g_strndup() fixed-length strings from on-disk structures to avoid\npotential read overruns when including those strings in error messages.\nIn particular, do this for att.name even though we currently don't\nreference it from a format string.\n\nExclude magic checks from this rule. check_magic() already does safe\nin-place string comparison and it's called from many places.\n\nSigned-off-by: Benjamin Gilbert ","shortMessageHtmlLink":"zeiss: consistently g_strndup() fixed-length strings"}},{"before":"fda210efcbbdb133fee29669fb246034bcef9262","after":"68e0ea10cc8a65dc438b3589fdea9d5d3495a5d4","ref":"refs/heads/zeiss-czi","pushedAt":"2024-05-10T15:52:57.000Z","pushType":"push","commitsCount":66,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"Merge branch 'main' into zeiss-czi","shortMessageHtmlLink":"Merge branch 'main' into zeiss-czi"}},{"before":"34d63cb3d7aa25aef4e8d58f8e4e4e8b8d2397e2","after":"fda210efcbbdb133fee29669fb246034bcef9262","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-26T17:20:44.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"zeiss: merge add_one_associated_image() into caller\n\nDon't prezero struct czi_subblk when allocating it, since we're about to\nmemcpy over it. Rename zeiss_add_associated_images().\n\nSigned-off-by: Benjamin Gilbert ","shortMessageHtmlLink":"zeiss: merge add_one_associated_image() into caller"}},{"before":"1085149480704bcd46b7cae2c1c6aebdf1180c8b","after":"34d63cb3d7aa25aef4e8d58f8e4e4e8b8d2397e2","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-26T14:22:01.000Z","pushType":"push","commitsCount":9,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"zeiss: process all XPath results via XML decoder helpers\n\natol() doesn't notice empty values or stray trailing characters. Add new\nXML decoder helpers to parse XPath results to int64_t or double, similar\nto the existing helpers for element attributes. Use those, failing on\nparse failures for required attributes.\n\nParse and format the objective power to ensure we don't write garbage into\nthe OpenSlide property. Parse the value as a double in case fractional\nobjective powers are possible.\n\nSigned-off-by: Benjamin Gilbert ","shortMessageHtmlLink":"zeiss: process all XPath results via XML decoder helpers"}},{"before":"e72aa391bae10389535b4ea424753b3d2f881ba1","after":"1085149480704bcd46b7cae2c1c6aebdf1180c8b","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-25T17:22:01.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"zeiss: drop czi_decbuf\n\nIt's an in-out structure, which adds complexity, and the struct as a whole\ndoesn't really add value. It also requires an extra memcpy when reading\nassociated images.\n\nWithout czi_decbuf, czi_bgrn_to_argb32() doesn't need to be a separate\nfunction, so consolidate it into czi_read_uncompressed().\n\nClean up data types and cache key calculation in read_tile().\n\nSigned-off-by: Benjamin Gilbert ","shortMessageHtmlLink":"zeiss: drop czi_decbuf"}},{"before":"a8d1083617af8be187a7e428aeb16da4e81f1c81","after":"e72aa391bae10389535b4ea424753b3d2f881ba1","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-25T16:28:37.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"zeiss: lifecycle level array independently of openslide_t\n\nFor consistency with other drivers, assign to osr->levels only once we're\nfully initialized. Until then, clean up the level array ourselves on\nerror.\n\nSigned-off-by: Benjamin Gilbert ","shortMessageHtmlLink":"zeiss: lifecycle level array independently of openslide_t"}},{"before":"fa14d22e10bf466348b201421e5d8025fcc50f28","after":"a8d1083617af8be187a7e428aeb16da4e81f1c81","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-25T16:23:37.000Z","pushType":"push","commitsCount":10,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"zeiss: lifecycle level array independently of openslide_t\n\nFor consistency with other drivers, assign to osr->levels only once we're\nfully initialized. Until then, clean up the level array ourselves on\nerror.\n\nSigned-off-by: Benjamin Gilbert ","shortMessageHtmlLink":"zeiss: lifecycle level array independently of openslide_t"}},{"before":"a8f42cf8c0538b315f0342cfb4b0ad74e1c56286","after":"fa14d22e10bf466348b201421e5d8025fcc50f28","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-25T14:44:24.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"zeiss: remove some unused struct fields\n\nSigned-off-by: Benjamin Gilbert ","shortMessageHtmlLink":"zeiss: remove some unused struct fields"}},{"before":"a13639ab692eb047256a1317315ffbe2da01275a","after":"a8f42cf8c0538b315f0342cfb4b0ad74e1c56286","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-25T05:22:06.000Z","pushType":"push","commitsCount":11,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"zeiss: consistently check segment IDs and schema IDs\n\nDefine constants for magic strings and a function to check them.\n\nDuring format detection, read the entire segment header, instead of using\nspecial-case code to read only the magic string.\n\nSigned-off-by: Benjamin Gilbert ","shortMessageHtmlLink":"zeiss: consistently check segment IDs and schema IDs"}},{"before":"3f00e2cfadb0a52a905430cb8264bd629ca7386c","after":"a13639ab692eb047256a1317315ffbe2da01275a","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-20T06:54:39.000Z","pushType":"push","commitsCount":20,"pusher":{"login":"bgilbert","name":"Benjamin Gilbert","path":"/bgilbert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/361374?s=80&v=4"},"commit":{"message":"zeiss: drop unnecessary casts of osr->data\n\nSigned-off-by: Benjamin Gilbert ","shortMessageHtmlLink":"zeiss: drop unnecessary casts of osr->data"}},{"before":null,"after":"1f4fdddb554a6c490b5268e1de1e6042ed80586b","ref":"refs/heads/set-cache-size","pushedAt":"2024-03-15T15:00:13.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"set cache size from environment variable\n\nSigned-off-by: Wei Chen ","shortMessageHtmlLink":"set cache size from environment variable"}},{"before":"e969a86dc5021dfe350bbf5dd1a94ab31fb42542","after":"3f00e2cfadb0a52a905430cb8264bd629ca7386c","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-15T03:02:17.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"verify requested CZI data block buffer size before invoke g_malloc()\n\nBad CZI file can terminate OpenSlide if a data block size field is\ncorrupted, causing CZI driver request excessively large buffer.\n\nSigned-off-by: Wei Chen ","shortMessageHtmlLink":"verify requested CZI data block buffer size before invoke g_malloc()"}},{"before":"e63fbfe8aaf31adb212bf249e2105a9bba7a8066","after":null,"ref":"refs/heads/zeissczinosimd","pushedAt":"2024-03-15T03:00:20.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"}},{"before":"56be1b8a6301320b320be2a028d58ca14570aa22","after":null,"ref":"refs/heads/zeissczisharefp","pushedAt":"2024-03-15T03:00:08.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"}},{"before":null,"after":"56be1b8a6301320b320be2a028d58ca14570aa22","ref":"refs/heads/zeissczisharefp","pushedAt":"2024-03-15T01:57:03.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"verify requested CZI data block buffer size before invoke g_malloc()\n\nBad CZI file can terminate OpenSlide if a data block size field is\ncorrupted, causing CZI driver request excessively large buffer.\n\nSigned-off-by: Wei Chen ","shortMessageHtmlLink":"verify requested CZI data block buffer size before invoke g_malloc()"}},{"before":"acae421a25fd8fbe7972e263cdc9fce00fcc8fe3","after":"e969a86dc5021dfe350bbf5dd1a94ab31fb42542","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-12T01:37:37.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"remove SIMD\n\nSigned-off-by: Wei Chen ","shortMessageHtmlLink":"remove SIMD"}},{"before":"7b05e739d7ceaad2bbf4d10ef8d1dcad56e646c4","after":"acae421a25fd8fbe7972e263cdc9fce00fcc8fe3","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-12T01:33:46.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"remove SIMD\n\nSigned-off-by: Wei Chen ","shortMessageHtmlLink":"remove SIMD"}},{"before":null,"after":"e63fbfe8aaf31adb212bf249e2105a9bba7a8066","ref":"refs/heads/zeissczinosimd","pushedAt":"2024-03-12T00:25:04.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"remove SIMD\n\nSigned-off-by: Wei Chen ","shortMessageHtmlLink":"remove SIMD"}},{"before":"7cb4aaf4cde72a89d8bb3eeb13d531512d7ee530","after":null,"ref":"refs/heads/zeissczisimd3","pushedAt":"2024-03-10T19:16:38.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"}},{"before":"1b155e33a48003a8963f6ff6093452707708535b","after":"7b05e739d7ceaad2bbf4d10ef8d1dcad56e646c4","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-10T19:15:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"rename functions to avoid Badly-named exported symbol error in CI\n\nchange commit message to trigger failed github workflow.\n\nSigned-off-by: Wei Chen ","shortMessageHtmlLink":"rename functions to avoid Badly-named exported symbol error in CI"}},{"before":"57e6d2689d2affca00d54656f99449673d37066e","after":"1b155e33a48003a8963f6ff6093452707708535b","ref":"refs/heads/zeiss-czi","pushedAt":"2024-03-10T19:01:38.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"rename functions to avoid Badly-named exported symbol error in CI\n\nSigned-off-by: Wei Chen ","shortMessageHtmlLink":"rename functions to avoid Badly-named exported symbol error in CI"}},{"before":"ef10560344a0e90ccd5fbefa1273ac6aaa58ad30","after":"7cb4aaf4cde72a89d8bb3eeb13d531512d7ee530","ref":"refs/heads/zeissczisimd3","pushedAt":"2024-03-10T18:33:32.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"rename functions to avoid Badly-named exported symbol error in CI\n\nSigned-off-by: Wei Chen ","shortMessageHtmlLink":"rename functions to avoid Badly-named exported symbol error in CI"}},{"before":"e3eee1cedeb1d84d3c9196d8f56d38c580f1c22f","after":null,"ref":"refs/heads/zeissczisimd2","pushedAt":"2024-03-10T16:52:50.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"}},{"before":null,"after":"ef10560344a0e90ccd5fbefa1273ac6aaa58ad30","ref":"refs/heads/zeissczisimd3","pushedAt":"2024-03-10T16:51:57.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"do not share CZI file pointer\n\nczi driver can read at wrong location when the file pointer is shared.\n\nSigned-off-by: Wei Chen ","shortMessageHtmlLink":"do not share CZI file pointer"}},{"before":"0fe297c1433f5a14a9920cf76893be4c40b955ef","after":"e3eee1cedeb1d84d3c9196d8f56d38c580f1c22f","ref":"refs/heads/zeissczisimd2","pushedAt":"2024-03-10T14:52:18.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"},"commit":{"message":"do not share CZI file pointer\n\nczi driver can read at wrong location when the file pointer is shared.\n\nSigned-off-by: Wei Chen ","shortMessageHtmlLink":"do not share CZI file pointer"}},{"before":"a2e5149df54752254e06e525fbe704d8844aac82","after":null,"ref":"refs/heads/zeissczisimd","pushedAt":"2024-03-10T14:51:38.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"iewchen","name":"Wei Chen","path":"/iewchen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/49696876?s=80&v=4"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAESaYU0wA","startCursor":null,"endCursor":null}},"title":"Activity ยท venklab/openslide"}