seems to work

added some more consts as well
This commit is contained in:
John Cupitt 2019-01-03 13:34:13 +00:00
parent 105760be0a
commit b8a158b69b
17 changed files with 227 additions and 104 deletions

View File

@ -13,7 +13,8 @@
- add vips_rect_overlapsrect()
- composite is much faster at positioning subimages
- dzsave has a new skip_blanks option
- add CMYK as a supported colourspace
- add vips_CMYK2XYZ() and vips_XYZ2CMYK(), plus associated routes
- include cmyk and srgb fallback profiles
21/11/18 started 8.7.3
- fix infinite loop for autofit with non-scaleable font

View File

@ -407,7 +407,7 @@ public:
const void *
get_blob( const char *field, size_t *length ) const
{
void *value;
const void *value;
if( vips_image_get_blob( this->get_image(), field,
&value, length ) )

View File

@ -87,7 +87,7 @@ vips__fallback_profile_get_init( void )
fallback->name = vips__coded_profiles[i].name;
fallback->data = data;
fallback->data_length = data_length;
vips_fallback_profile_list = g_slist_append(
vips_fallback_profile_list = g_slist_prepend(
vips_fallback_profile_list, fallback );
}

View File

@ -44,7 +44,7 @@ libcolour_la_SOURCES = \
scRGB2sRGB.c
profiles.c:
./wrap_profiles.sh profiles profiles.c
./wrap-profiles.sh profiles profiles.c
EXTRA_DIST = \
profiles \

View File

@ -620,7 +620,7 @@ vips_icc_get_profile_file( const char *filename )
static VipsBlob *
vips_icc_get_profile_image( VipsImage *image )
{
void *data;
const void *data;
size_t size;
if( !vips_image_get_typeof( image, VIPS_META_ICC_NAME ) )
@ -728,7 +728,7 @@ vips_icc_import_build( VipsObject *object )
*/
if( import->used_fallback &&
icc->in_blob ) {
void *data;
const void *data;
size_t size;
data = vips_blob_get( icc->in_blob, &size );
@ -1269,7 +1269,7 @@ vips_icc_ac2rc( VipsImage *in, VipsImage **out, const char *profile_filename )
*/
gboolean
vips_icc_is_compatible_profile( VipsImage *image,
void *data, size_t data_length )
const void *data, size_t data_length )
{
cmsHPROFILE profile;

View File

@ -2,8 +2,8 @@
#include "profiles.h"
VipsCodedProfile vips__coded_profiles[] = {
{ "cmyk",
VipsCodedProfile vips__coded_profiles[] = {
{ "cmyk",
"AA6sbGFyZ2wCIAAAcHJ0ckNNWUtMYWIgB94ACAAZAAwAKAA1YWNzcE1TRlQAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAEAAPbWAAEAAAAA0y1hcmdsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAPZGVzYwAAATgAAABpY3BydAAAAaQAAABnd3RwdAAAAgwAAAAUYmtw"
@ -16875,6 +16875,130 @@ VipsCodedProfile vips__coded_profiles[] = {
"LjI5IDMuOTIgMy41NyAzLjIzIDMuMDUgMy40IDQuMjUgNC43NCAzLjc1IDIuNDggMS45NCAxLjcz"
"IDEuNDYgMS40IDEuODMgMi41OCAyLjk0IDIuOTUgMi45NCAyLjk1IDIuOTggMy4zMiAzLjk5IDQu"
"NDIgNC4yOCAzLjk0IDMuNDcgMy4xMyAzLjM1IDQuMjENCkVORF9EQVRBDQoNCg0KDQoNCgAA"
},
{ 0, 0 }
},
{ "sRGB",
"AAAbCmxjbXMCMAAAbW50clJHQiBYWVogB9QACAANAAwAEgAGYWNzcE1TRlQAAAAAbGNtcwAAAAAA"
"AAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1sY21zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAMZG1uZAAAARQAAABqZGVzYwAAAYAAAABoZG1kZAAAAegAAABod3Rw"
"dAAAAlAAAAAUclhZWgAAAmQAAAAUYlhZWgAAAngAAAAUZ1hZWgAAAowAAAAUclRSQwAAAqAAAAgM"
"Z1RSQwAACqwAAAgMYlRSQwAAErgAAAgMY2hybQAAGsQAAAAkY3BydAAAGugAAAAhZGVzYwAAAAAA"
"AAAQbGNtcyBnZW5lcmF0ZWQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAFc1JH"
"QgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAAVzUkdCAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzPQABAAAAARaYWFlaIAAAAAAAAG+UAAA4"
"7gAAA5BYWVogAAAAAAAAJJ0AAA+DAAC2vlhZWiAAAAAAAABipQAAt5AAABjeY3VydgAAAAAAAAQA"
"AAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYA"
"iwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEf"
"ASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB"
"8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMA"
"AwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUE"
"YwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYG"
"BhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gI"
"CwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpU"
"CmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMN"
"DQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJ"
"ECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MT"
"gxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdB"
"F2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2Mb"
"ihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAV"
"IEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQkl"
"OCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqb"
"Ks8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGww"
"pDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbp"
"NyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE9"
"4D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUS"
"RVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpN"
"Ak1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21Uo"
"VXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114Xcle"
"Gl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9"
"Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBx"
"OnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtj"
"e8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6G"
"cobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5Go"
"khGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd"
"0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaoc"
"qo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3"
"aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTO"
"xUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHT"
"RNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM"
"4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXx"
"cvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t//9jdXJ2"
"AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIA"
"dwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEH"
"AQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB"
"0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLV"
"AuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAE"
"LQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXF"
"BdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wH"
"vwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7"
"ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4M"
"pwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+W"
"D7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMT"
"AxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxay"
"FtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa"
"7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9p"
"H5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0k"
"fCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQ"
"KgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Ev"
"xy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9"
"Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ8"
"4z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQD"
"REdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL"
"4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2"
"VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc"
"1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXn"
"Zj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv"
"0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnn"
"ekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE"
"44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAG"
"kG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+c"
"HJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhS"
"qMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1"
"irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lb"
"w1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrR"
"PNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v"
"4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTv"
"QO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c"
"/23//2N1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4A"
"YwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDw"
"APYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakB"
"sQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKs"
"ArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD"
"+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATTBOEE8AT+BQ0FHAUrBToFSQVYBWcFdwWG"
"BZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EH"
"dAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmk"
"CboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwSDCoM"
"QwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8l"
"D0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQS"
"hBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYm"
"FkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoEGioa"
"URp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6+"
"HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5Qj"
"wiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkG"
"KTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu"
"7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUT"
"NU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o7"
"6DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/iQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3"
"QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1K"
"xEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLH"
"UxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0Vb"
"lVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSU"
"ZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2una/9sV2yvbQhtYG25bhJu"
"a27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY+dpt2+HdWd7N4EXhu"
"eMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSD"
"V4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45m"
"js6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfya"
"aJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaL"
"pv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCsziz"
"rrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS+/796v/XAcMDs"
"wWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbP"
"N8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W"
"3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77Ibt"
"Ee2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY"
"/Sn9uv5L/tz/bf//Y2hybQAAAAAAAwAAAACj1wAAVHsAAEzNAACZmgAAJmYAAA9cdGV4dAAAAABu"
"byBjb3B5cmlnaHQsIHVzZSBmcmVlbHkACg=="
},
{ 0, 0 }
};

View File

@ -158,7 +158,7 @@ show_values( ExifData *data )
* their default value and we won't know about it.
*/
static ExifData *
vips_exif_load_data_without_fix( void *data, int length )
vips_exif_load_data_without_fix( const void *data, int length )
{
ExifData *ed;
@ -458,17 +458,17 @@ vips_exif_resolution_from_image( ExifData *ed, VipsImage *image );
int
vips__exif_parse( VipsImage *image )
{
void *data;
size_t length;
const void *data;
size_t size;
ExifData *ed;
VipsExifParams params;
const char *str;
if( !vips_image_get_typeof( image, VIPS_META_EXIF_NAME ) )
return( 0 );
if( vips_image_get_blob( image, VIPS_META_EXIF_NAME, &data, &length ) )
if( vips_image_get_blob( image, VIPS_META_EXIF_NAME, &data, &size ) )
return( -1 );
if( !(ed = vips_exif_load_data_without_fix( data, length )) )
if( !(ed = vips_exif_load_data_without_fix( data, size )) )
return( -1 );
#ifdef DEBUG_VERBOSE
@ -1055,21 +1055,21 @@ vips_exif_set_thumbnail( ExifData *ed, VipsImage *im )
/* Update EXIF thumbnail from metadata, if any.
*/
if( vips_image_get_typeof( im, "jpeg-thumbnail-data" ) ) {
void *data;
size_t length;
const void *data;
size_t size;
if( vips_image_get_blob( im, "jpeg-thumbnail-data",
&data, &length ) )
&data, &size ) )
return( -1 );
/* Again, we should use the exif allocator attached to this
* entry, but it is not exposed!
*/
if( length > 0 &&
if( size > 0 &&
data ) {
ed->data = malloc( length );
memcpy( ed->data, data, length );
ed->size = length;
ed->data = malloc( size );
memcpy( ed->data, data, size );
ed->size = size;
}
}

View File

@ -1518,12 +1518,12 @@ vips__foreign_convert_saveable( VipsImage *in, VipsImage **ready,
* want to silently drop the profile in this case.
*/
if( vips_image_get_typeof( in, VIPS_META_ICC_NAME ) ) {
void *data;
size_t length;
const void *data;
size_t size;
if( !vips_image_get_blob( in, VIPS_META_ICC_NAME,
&data, &length ) &&
!vips_icc_is_compatible_profile( in, data, length ) )
&data, &size ) &&
!vips_icc_is_compatible_profile( in, data, size ) )
vips_image_remove( in, VIPS_META_ICC_NAME );
}

View File

@ -375,18 +375,16 @@ write_profile_file( Write *write, const char *profile )
static int
write_profile_meta( Write *write )
{
void *data;
size_t data_length;
const void *data;
size_t size;
if( vips_image_get_blob( write->in, VIPS_META_ICC_NAME,
&data, &data_length ) )
if( vips_image_get_blob( write->in, VIPS_META_ICC_NAME, &data, &size ) )
return( -1 );
write_profile_data( &write->cinfo, data, data_length );
write_profile_data( &write->cinfo, data, size );
#ifdef DEBUG
printf( "write_profile_meta: attached %zd byte profile from header\n",
data_length );
size );
#endif /*DEBUG*/
return( 0 );

View File

@ -351,12 +351,12 @@ embed_profile_file( TIFF *tif, const char *profile )
static int
embed_profile_meta( TIFF *tif, VipsImage *im )
{
void *data;
size_t data_length;
const void *data;
size_t size;
if( vips_image_get_blob( im, VIPS_META_ICC_NAME, &data, &data_length ) )
if( vips_image_get_blob( im, VIPS_META_ICC_NAME, &data, &size ) )
return( -1 );
TIFFSetField( tif, TIFFTAG_ICCPROFILE, data_length, data );
TIFFSetField( tif, TIFFTAG_ICCPROFILE, size, data );
#ifdef DEBUG
printf( "vips2tiff: attached profile from meta\n" );
@ -442,15 +442,14 @@ wtiff_embed_profile( Wtiff *wtiff, TIFF *tif )
static int
wtiff_embed_xmp( Wtiff *wtiff, TIFF *tif )
{
void *data;
size_t data_length;
const void *data;
size_t size;
if( !vips_image_get_typeof( wtiff->im, VIPS_META_XMP_NAME ) )
return( 0 );
if( vips_image_get_blob( wtiff->im, VIPS_META_XMP_NAME,
&data, &data_length ) )
if( vips_image_get_blob( wtiff->im, VIPS_META_XMP_NAME, &data, &size ) )
return( -1 );
TIFFSetField( tif, TIFFTAG_XMLPACKET, data_length, data );
TIFFSetField( tif, TIFFTAG_XMLPACKET, size, data );
#ifdef DEBUG
printf( "vips2tiff: attached XMP from meta\n" );
@ -462,27 +461,27 @@ wtiff_embed_xmp( Wtiff *wtiff, TIFF *tif )
static int
wtiff_embed_iptc( Wtiff *wtiff, TIFF *tif )
{
void *data;
size_t data_length;
const void *data;
size_t size;
if( !vips_image_get_typeof( wtiff->im, VIPS_META_IPTC_NAME ) )
return( 0 );
if( vips_image_get_blob( wtiff->im, VIPS_META_IPTC_NAME,
&data, &data_length ) )
&data, &size ) )
return( -1 );
/* For no very good reason, libtiff stores IPTC as an array of
* long, not byte.
*/
if( data_length & 3 ) {
if( size & 3 ) {
g_warning( "%s", _( "rounding up IPTC data length" ) );
data_length /= 4;
data_length += 1;
size /= 4;
size += 1;
}
else
data_length /= 4;
size /= 4;
TIFFSetField( tif, TIFFTAG_RICHTIFFIPTC, data_length, data );
TIFFSetField( tif, TIFFTAG_RICHTIFFIPTC, size, data );
#ifdef DEBUG
printf( "vips2tiff: attached IPTC from meta\n" );
@ -494,15 +493,15 @@ wtiff_embed_iptc( Wtiff *wtiff, TIFF *tif )
static int
wtiff_embed_photoshop( Wtiff *wtiff, TIFF *tif )
{
void *data;
size_t data_length;
const void *data;
size_t size;
if( !vips_image_get_typeof( wtiff->im, VIPS_META_PHOTOSHOP_NAME ) )
return( 0 );
if( vips_image_get_blob( wtiff->im,
VIPS_META_PHOTOSHOP_NAME, &data, &data_length ) )
VIPS_META_PHOTOSHOP_NAME, &data, &size ) )
return( -1 );
TIFFSetField( tif, TIFFTAG_PHOTOSHOP, data_length, data );
TIFFSetField( tif, TIFFTAG_PHOTOSHOP, size, data );
#ifdef DEBUG
printf( "vips2tiff: attached photoshop data from meta\n" );

View File

@ -410,7 +410,7 @@ vips_webp_set_count( VipsWebPWrite *write, int loop_count )
static int
vips_webp_set_chunk( VipsWebPWrite *write,
const char *webp_name, void *data, size_t length )
const char *webp_name, const void *data, size_t length )
{
WebPData chunk;
@ -440,7 +440,7 @@ vips_webp_add_chunks( VipsWebPWrite *write, VipsImage *image )
const char *webp_name = vips__webp_names[i].webp;
if( vips_image_get_typeof( image, vips_name ) ) {
void *data;
const void *data;
size_t length;
if( vips_image_get_blob( image,

View File

@ -1091,36 +1091,36 @@ write_vips( Write *write,
}
else if( vips_image_get_typeof( in, VIPS_META_ICC_NAME ) &&
!strip ) {
void *data;
size_t length;
const void *data;
size_t size;
if( vips_image_get_blob( in, VIPS_META_ICC_NAME,
&data, &length ) )
&data, &size ) )
return( -1 );
#ifdef DEBUG
printf( "write_vips: attaching %zd bytes of ICC profile\n",
length );
size );
#endif /*DEBUG*/
png_set_iCCP( write->pPng, write->pInfo, "icc",
PNG_COMPRESSION_TYPE_BASE, data, length );
PNG_COMPRESSION_TYPE_BASE, data, size );
}
if( vips_image_get_typeof( in, VIPS_META_XMP_NAME ) ) {
void *data;
size_t length;
const void *data;
size_t size;
char *str;
/* XMP is attached as a BLOB with no null-termination. We
* must re-add this.
*/
if( vips_image_get_blob( in,
VIPS_META_XMP_NAME, &data, &length ) )
VIPS_META_XMP_NAME, &data, &size ) )
return( -1 );
str = g_malloc( length + 1 );
vips_strncpy( str, data, length + 1 );
str = g_malloc( size + 1 );
vips_strncpy( str, data, size + 1 );
vips__png_set_text( write->pPng, write->pInfo,
"XML:com.adobe.xmp", str );
g_free( str );

View File

@ -183,7 +183,7 @@ int vips_icc_export( VipsImage *in, VipsImage **out, ... )
int vips_icc_ac2rc( VipsImage *in, VipsImage **out,
const char *profile_filename );
gboolean vips_icc_is_compatible_profile( VipsImage *image,
void *data, size_t data_length );
const void *data, size_t data_length );
int vips_dE76( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));

View File

@ -194,11 +194,12 @@ void vips_image_set_area( VipsImage *image,
int vips_image_get_area( const VipsImage *image,
const char *name, void **data );
void vips_image_set_blob( VipsImage *image,
const char *name, VipsCallbackFn free_fn, void *data, size_t length );
const char *name,
VipsCallbackFn free_fn, const void *data, size_t length );
void vips_image_set_blob_copy( VipsImage *image,
const char *name, const void *data, size_t length );
int vips_image_get_blob( const VipsImage *image, const char *name,
void **data, size_t *length );
int vips_image_get_blob( const VipsImage *image,
const char *name, const void **data, size_t *length );
int vips_image_get_int( const VipsImage *image, const char *name, int *out );
void vips_image_set_int( VipsImage *image, const char *name, int i );

View File

@ -158,9 +158,9 @@ typedef struct _VipsBlob {
} VipsBlob;
VipsBlob *vips_blob_new( VipsCallbackFn free_fn,
const void *data, size_t size );
VipsBlob *vips_blob_copy( const void *data, size_t size );
const void *vips_blob_get( VipsBlob *blob, size_t *size );
const void *data, size_t length );
VipsBlob *vips_blob_copy( const void *data, size_t length );
const void *vips_blob_get( VipsBlob *blob, size_t *length );
GType vips_blob_get_type(void);
/**
@ -224,7 +224,7 @@ void vips_value_set_ref_string( GValue *value, const char *str );
void *vips_value_get_blob( const GValue *value, size_t *length );
void vips_value_set_blob( GValue *value,
VipsCallbackFn free_fn, void *data, size_t length );
VipsCallbackFn free_fn, const void *data, size_t length );
void vips_value_set_blob_free( GValue *value, void *data, size_t length );
void vips_value_set_array( GValue *value,

View File

@ -1365,13 +1365,13 @@ vips_image_get_area( const VipsImage *image, const char *name, void **data )
* See also: vips_image_get_blob(), vips_image_set().
*/
void
vips_image_set_blob( VipsImage *image,
const char *name, VipsCallbackFn free_fn, void *data, size_t length )
vips_image_set_blob( VipsImage *image, const char *name,
VipsCallbackFn free_fn, const void *data, size_t size )
{
GValue value = { 0 };
g_value_init( &value, VIPS_TYPE_BLOB );
vips_value_set_blob( &value, free_fn, data, length );
vips_value_set_blob( &value, free_fn, data, size );
vips_image_set( image, name, &value );
g_value_unset( &value );
}
@ -1431,7 +1431,7 @@ vips_image_set_blob_copy( VipsImage *image,
*/
int
vips_image_get_blob( const VipsImage *image, const char *name,
void **data, size_t *length )
const void **data, size_t *length )
{
GValue value_copy = { 0 };

View File

@ -599,8 +599,8 @@ vips_ref_string_get_type( void )
/**
* vips_blob_new:
* @free_fn: (scope async) (allow-none): @data will be freed with this function
* @data: (array length=size) (element-type guint8) (transfer full): data to store
* @size: number of bytes in @data
* @data: (array length=length) (element-type guint8) (transfer full): data to store
* @length: number of bytes in @data
*
* Like vips_area_new(), but track a length as well. The returned #VipsBlob
* takes ownership of @data and will free it with @free_fn. Pass NULL for
@ -614,20 +614,20 @@ vips_ref_string_get_type( void )
* Returns: (transfer full): the new #VipsBlob.
*/
VipsBlob *
vips_blob_new( VipsCallbackFn free_fn, const void *data, size_t size )
vips_blob_new( VipsCallbackFn free_fn, const void *data, size_t length )
{
VipsArea *area;
area = vips_area_new( free_fn, (void *) data );
area->length = size;
area->length = length;
return( (VipsBlob *) area );
}
/**
* vips_blob_copy:
* @data: (array length=size) (element-type guint8) (transfer none): data to store
* @size: number of bytes in @data
* @data: (array length=length) (element-type guint8) (transfer none): data to store
* @length: number of bytes in @data
*
* Like vips_blob_new(), but take a copy of the data. Useful for bindings
* which strugle with callbacks.
@ -637,15 +637,15 @@ vips_blob_new( VipsCallbackFn free_fn, const void *data, size_t size )
* Returns: (transfer full): the new #VipsBlob.
*/
VipsBlob *
vips_blob_copy( const void *data, size_t size )
vips_blob_copy( const void *data, size_t length )
{
void *data_copy;
VipsArea *area;
data_copy = vips_malloc( NULL, size );
memcpy( data_copy, data, size );
data_copy = vips_malloc( NULL, length );
memcpy( data_copy, data, length );
area = vips_area_new( (VipsCallbackFn) g_free, data_copy );
area->length = size;
area->length = length;
return( (VipsBlob *) area );
}
@ -653,19 +653,19 @@ vips_blob_copy( const void *data, size_t size )
/**
* vips_blob_get:
* @blob: #VipsBlob to fetch from
* @size: return number of bytes of data
* @length: return number of bytes of data
*
* Get the data from a #VipsBlob.
*
* See also: vips_blob_new().
*
* Returns: (array length=size) (element-type guint8) (transfer none): the data
* Returns: (array length=length) (element-type guint8) (transfer none): the data
*/
const void *
vips_blob_get( VipsBlob *blob, size_t *size )
vips_blob_get( VipsBlob *blob, size_t *length )
{
return( vips_area_get_data( VIPS_AREA( blob ),
size, NULL, NULL, NULL ) );
length, NULL, NULL, NULL ) );
}
/* Transform a blob to a G_TYPE_STRING.
@ -674,12 +674,12 @@ static void
transform_blob_g_string( const GValue *src_value, GValue *dest_value )
{
void *blob;
size_t blob_length;
size_t length;
char buf[256];
blob = vips_value_get_blob( src_value, &blob_length );
blob = vips_value_get_blob( src_value, &length );
vips_snprintf( buf, 256, "VIPS_TYPE_BLOB, data = %p, length = %zd",
blob, blob_length );
blob, length );
g_value_set_string( dest_value, buf );
}
@ -689,11 +689,11 @@ static void
transform_blob_save_string( const GValue *src_value, GValue *dest_value )
{
void *blob;
size_t blob_length;
size_t length;
char *b64;
blob = vips_value_get_blob( src_value, &blob_length );
if( (b64 = vips__b64_encode( blob, blob_length )) ) {
blob = vips_value_get_blob( src_value, &length );
if( (b64 = vips__b64_encode( blob, length )) ) {
vips_value_set_save_string( dest_value, b64 );
vips_free( b64 );
}
@ -709,12 +709,12 @@ transform_save_string_blob( const GValue *src_value, GValue *dest_value )
{
const char *b64;
void *blob;
size_t blob_length;
size_t length;
b64 = vips_value_get_save_string( src_value );
if( (blob = vips__b64_decode( b64, &blob_length )) )
if( (blob = vips__b64_decode( b64, &length )) )
vips_value_set_blob( dest_value,
(VipsCallbackFn) vips_free, blob, blob_length );
(VipsCallbackFn) vips_free, blob, length );
else
/* No error return from transform, but we should set it to
* something.
@ -1556,7 +1556,7 @@ vips_value_set_ref_string( GValue *value, const char *str )
* @length: length of memory area
*
* Sets @value to hold a @data. When @value is freed, @data will be
* freed with @free_fn. @value also holds a note of the length of the memory
* freed with @free_fn. @value also holds a note of the size of the memory
* area.
*
* blobs are things like ICC profiles or EXIF data. They are relocatable, and
@ -1567,7 +1567,7 @@ vips_value_set_ref_string( GValue *value, const char *str )
*/
void
vips_value_set_blob( GValue *value,
VipsCallbackFn free_fn, void *data, size_t length )
VipsCallbackFn free_fn, const void *data, size_t length )
{
VipsBlob *blob;