70 Commits (9ba3dc1fc5609df72e990cb832e22c15a1a2a202)

Author SHA1 Message Date
Sean Barrett 9ba3dc1fc5 make resample tests work in VC6 ago%!(EXTRA string=11 years)
Jorge Rodriguez fc09a5d198 Don't saturate floats. ago%!(EXTRA string=11 years)
Jorge Rodriguez c9caec1123 Refactoring to reduce duplicated code. ago%!(EXTRA string=11 years)
Jorge Rodriguez 1353909477 Allow user to force the alpha channel to be handled as a linear value even if the color channels are sRGB. ago%!(EXTRA string=11 years)
Jorge Rodriguez bbc340d481 Support different edge behavior on vertical and horizontal axis. ago%!(EXTRA string=11 years)
Jorge Rodriguez 419a5ba10f Fix stbr__type_size for updated stbr_type ago%!(EXTRA string=11 years)
Sean Barrett 6ade66182c allow alpha channel to be channel #0 ago%!(EXTRA string=11 years)
Sean Barrett f502cae91a rename everything to do with premultiplied alpha since the whole ago%!(EXTRA string=11 years)
Sean Barrett 42556fec82 don't require manual synchronization of STBR_MAX_COLORSPACES/MAX_TYPES ago%!(EXTRA string=11 years)
Sean Barrett 392585130c Get rid of "advanced" API with explicit temp memory because the STBR_MALLOC interface is sufficient ago%!(EXTRA string=11 years)
Sean Barrett 259c92b550 replace "texel" with "pixel" in identifiers ago%!(EXTRA string=11 years)
Sean Barrett fc4ca11a52 Fix places in previous commits where tabs got replaced with spaces ago%!(EXTRA string=11 years)
Sean Barrett 25fae8c67c Avoid divides in encode_scanline if not doing unpremultiply. ago%!(EXTRA string=11 years)
Sean Barrett a0537bfd04 Allow compiling as C pre-C99 (don't rely on declare-anywhere) ago%!(EXTRA string=11 years)
Sean Barrett 3077bf5023 wrap long data lines ago%!(EXTRA string=11 years)
Jorge Rodriguez e05ebdbf1e My guess is people who care about premultiply also care about color space. ago%!(EXTRA string=11 years)
Jorge Rodriguez d75488b0e8 Do the multiply inline, it should be a tad faster and not corrupt our data. ago%!(EXTRA string=11 years)
Jorge Rodriguez 13acfca829 I had the whole premultiply thing backwards. ago%!(EXTRA string=11 years)
Jorge Rodriguez 21c7c8f5d9 Another stab at the api, offering classes of functions for different common tasks. ago%!(EXTRA string=11 years)
Jorge Rodriguez 8063ea0952 Specify a channel as having premultiplied alpha and use it to un-premultiply all other channels before resampling. ago%!(EXTRA string=11 years)
Jorge Rodriguez a32fa8b4df This to-do item done. ago%!(EXTRA string=11 years)
Jorge Rodriguez aae1c7ca41 ZOOM AND ENHANCE! ago%!(EXTRA string=11 years)
Jorge Rodriguez 1b2d104e00 Some error conditions. ago%!(EXTRA string=11 years)
Jorge Rodriguez 35cb95b803 Allow for specifying a sub-region of the source image to use. Downsampling only, currently. ago%!(EXTRA string=11 years)
Jorge Rodriguez 52ac93225a C<99 ports ago%!(EXTRA string=11 years)
Jorge Rodriguez 985ac75251 When doing a perfect po2 nearest neighbor downsample don't allow -0.5 and 0.5 to both contribute to a texel or you'll get a double tap. ago%!(EXTRA string=11 years)
Jorge Rodriguez 6625259959 Try to keep integer precision by briefly casting to double while decoding and encoding. ago%!(EXTRA string=11 years)
Jorge Rodriguez 11897fbf96 More fixing shorts. ago%!(EXTRA string=11 years)
Jorge Rodriguez 1fcbe0daaf Fix shorts. Add test cases for shorts. ago%!(EXTRA string=11 years)
Jorge Rodriguez 7ead9a748d Fix. Ring buffers are a height value. ago%!(EXTRA string=11 years)
Jorge Rodriguez 043fa28c11 Same deal with height. ago%!(EXTRA string=11 years)
Jorge Rodriguez ebe0473d8b Add a test suite to do a bunch of different resizes to find problems. One problem found was an incorrect calculation of texel support how many margin texels needed when downsampling. When downsampling we need to spread out the support of each contributing texel, so to compensate you need more margin texels. ago%!(EXTRA string=11 years)
Jorge Rodriguez 68f93b72d5 Update documentation and add helper functions. ago%!(EXTRA string=11 years)
Jorge Rodriguez d96c97298c This is still faster than the function pointer solution, and neater. ago%!(EXTRA string=11 years)
Jorge Rodriguez 3a3e06029e This is definitely faster than the function pointer solution. ago%!(EXTRA string=11 years)
Jorge Rodriguez 9bd5abb52d Both versions run within the margin of error on my machine so we'll go with the simpler one. ago%!(EXTRA string=11 years)
Jorge Rodriguez 5dff80ed31 Trying some different strategies for optimizing the decoder. The code in #ifdef 1 is slightly faster by my measurements, but a whole lot uglier. ago%!(EXTRA string=11 years)
Jorge Rodriguez 1fcf30ada0 Fix a math error. ago%!(EXTRA string=11 years)
Jorge Rodriguez ef3a460ec4 Some better looking horners save another multiplication. ago%!(EXTRA string=11 years)
Jorge Rodriguez 7d47582578 Support for 16 and 32 bit integer images, and float images. ago%!(EXTRA string=11 years)
Jorge Rodriguez 6c8cac0a66 Support for sRGB color space. ago%!(EXTRA string=11 years)
Jorge Rodriguez 41dc4c476c In some situations with certain filter kernels with negative values it's possible to generate valid results > 1.0, so saturate it before we write it to make sure it doesn't overflow. Also fix incorrect filter radius while downsampling. ago%!(EXTRA string=11 years)
Jorge Rodriguez af1ed58f51 Add wrap, fix reflect so it doesn't wrap. ago%!(EXTRA string=11 years)
Jorge Rodriguez 8723567439 Add edge reflect mode. ago%!(EXTRA string=11 years)
Jorge Rodriguez 6cd81d4dd5 Put the polynomials in horner form to save a multiplication. ago%!(EXTRA string=11 years)
Jorge Rodriguez fb2f8df5cc Add mitchell filter. ago%!(EXTRA string=11 years)
Jorge Rodriguez 69af963c42 Add catmull rom filter. Also, move the debug asserts for values <= 1 to the very end of the process. This will make these bugs a lot harder to find, but because some filter kernels have negative values it's possible for the buffers to have values > 1 up until the point where it's converted back to an int. ago%!(EXTRA string=11 years)
Jorge Rodriguez 12acf87eec When downsampling start the buffer loop at -filter_texel_margin to make sure that all contributors get their taps in at the ring buffer. ago%!(EXTRA string=11 years)
Jorge Rodriguez 155c71fb90 Reorder these loops because I think we get a cache win if we write the entire ring buffer entry at once. ago%!(EXTRA string=11 years)
Jorge Rodriguez 01fb58d6b4 Add a bicubic filter. ago%!(EXTRA string=11 years)