-
Notifications
You must be signed in to change notification settings - Fork 517
vImage macOS xcode14.0 rc
Israel Soto edited this page Sep 7, 2022
·
1 revision
#vImage.framework
diff -ruN /Applications/Xcode_14.0.0-beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Alpha.h /Applications/Xcode_14.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Alpha.h
--- /Applications/Xcode_14.0.0-beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Alpha.h 2022-08-06 02:29:19.000000000 -0500
+++ /Applications/Xcode_14.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Alpha.h 2022-08-03 21:07:17.000000000 -0500
@@ -1151,46 +1151,6 @@
#define vImagePremultiplyData_BGRAFFFF( _src, _dest, _flags ) vImagePremultiplyData_RGBAFFFF((_src), (_dest), (_flags))
/*!
- * @function vImagePremultiplyData_RGBA16F
- * @abstract Multiply a RGBA16F color channel by its corresponding alpha
- * @discussion
- * This function multiplies color channels by the alpha channel.
- * <pre>@textblock
- * For each color channel:
- *
- * float destColor = src * alpha;
- * float destAlpha = alpha;
- *
- * This function can work in place provided the following are true:
- * If src overlaps with dest, src->data must be equal to dest->data
- * If src also has a different rowBytes from dest, kvImageDoNotTile must be also passed in the flags
- * (It is not necessary to pass kvImageDoNotTile if src and dest do not overlap.)
- * @/textblock </pre>
- *
- * This function will for all 4 channel 16F / channel image formats with alpha first in memory.
- * It does not have to be RGBA. Also available as vImagePremultiplyData_BGRA16F().
- *
- * @param src The color data to multiply with alpha
- * @param dest A preallocated vImage_Buffer where the results are written
- * @param flags The following flags are allowed:
- * <pre>@textblock
- * kvImageNoFlags Default operation
- *
- * kvImageDoNotTile Turn off internal multithreading. This might be useful if you are already multithreading
- * the work in your own tiling engine.
- * @/textblock </pre>
- * @result The following result codes may occur:
- * <pre>@textblock
- * kvImageNoError Success.
- *
- * kvImageRoiLargerThanInputBuffer dest->width and dest->height must be less than or equal to corresponding
- * dimensions in src and alpha
- * @/textblock</pre>
- */
-VIMAGE_PF vImage_Error vImagePremultiplyData_RGBA16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-#define vImagePremultiplyData_BGRA16F( _src, _dest, _flags ) vImagePremultiplyData_RGBA16F((_src), (_dest), (_flags))
-
-/*!
* @function vImagePremultiplyData_ARGB16U
* @abstract Multiply a unsigned 16-bit ARGB color channel by its corresponding alpha
* @discussion
@@ -1572,43 +1532,6 @@
/*!
- * @function vImageUnpremultiplyData_RGBA16F
- * @abstract Divide the alpha channel from the color channels in a RGBA16F image
- * @discussion
- * This function divides color channels by the alpha channel.
- * For each color channel:
- * <pre>@textblock
- * float destColor = destColor / alpha;
- * float destAlpha = alpha;
- * @/textblock </pre>
- *
- * The positioning of only the alpha channel is important for interleaved formats for these functions.
- * This function will work with other channel orders that have alpha last. It is also available as vImageUnpremultiplyData_BGRA16F().
- *
- * This function can work in place provided the following are true:
- * src->data must be equal to dest->data
- * src->rowBytes must be equal to dest->rowBytes
- *
- * @param src The input image
- * @param dest A preallocated 16F destination buffer into which the result will be written.
- * @param flags The following flags are allowed:
- * <pre>@textblock
- * kvImageNoFlags Default operation
- *
- * kvImageDoNotTile Disable internal multithreading.
- * @/textblock </pre>
- *
- * @result The following error codes may be returned:
- * <pre>@textblock
- * kvImageNoError Success
- *
- * kvImageRoiLargerThanInputBuffer dest->height or width is larger than the corresponding src or alpha dimension
- * @/textblock </pre>
- */
-VIMAGE_PF vImage_Error vImageUnpremultiplyData_RGBA16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-#define vImageUnpremultiplyData_BGRA16F( _src, _dest, _flags ) vImageUnpremultiplyData_RGBA16F((_src), (_dest), (_flags))
-
-/*!
* @function vImageUnpremultiplyData_ARGB16U
* @abstract Divide the alpha channel from the color channels in a ARGB16U image
* @discussion
diff -ruN /Applications/Xcode_14.0.0-beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Conversion.h /Applications/Xcode_14.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Conversion.h
--- /Applications/Xcode_14.0.0-beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Conversion.h 2022-08-06 02:29:19.000000000 -0500
+++ /Applications/Xcode_14.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Conversion.h 2022-08-03 21:07:17.000000000 -0500
@@ -1225,28 +1225,6 @@
const vImage_Buffer *dest, /* A planar buffer */
vImage_Flags flags ) VIMAGE_NON_NULL(2) API_AVAILABLE(macos(10.10), ios(8.0), watchos(1.0), tvos(8.0));
-/*!
- @function vImageOverwriteChannelsWithScalar_Planar16F
-
- @abstract Fill the dest buffer with the scalar value.
-
- @param scalar
- A scalar value to fill the destination buffer.
-
- @param dest
- A pointer to a valid and initialized vImage_Buffer struct, that points to a buffer containing destination pixels.
-
- @param flags
- \p kvImageNoFlags Default operation
- \p kvImageDoNotTile Disable internal multithreading.
-
- @return kvImageNoError Success
- @return kvImageRoiLargerThanInputBuffer The height and width of the destination must be less than or equal to the height and width of the src buffer, respectively.
- */
-VIMAGE_PF vImage_Error vImageOverwriteChannelsWithScalar_Planar16F( Pixel_16F scalar,
- const vImage_Buffer *dest, /* A planar buffer */
- vImage_Flags flags ) VIMAGE_NON_NULL(2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-
/*!
@function vImageExtractChannel_ARGB8888
@@ -1464,26 +1442,6 @@
VIMAGE_PF vImage_Error vImageBufferFill_ARGBFFFF( const vImage_Buffer *dest, const Pixel_FFFF color, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.4), ios(5.0), watchos(1.0), tvos(5.0));
/*!
- @function vImageBufferFill_ARGB16F
-
- @abstract Fill the dest buffer with the pixel value.
-
- @param color
- A pixel value to fill the destination buffer.
-
- @param dest
- A pointer to a valid and initialized vImage_Buffer struct, that points to a buffer containing destination pixels.
-
- @param flags
- \p kvImageNoFlags Default operation
- \p kvImageDoNotTile Disable internal multithreading.
-
- @return kvImageNoError Success
- @return kvImageRoiLargerThanInputBuffer The height and width of the destination must be less than or equal to the height and width of the src buffer, respectively.
- */
-VIMAGE_PF vImage_Error vImageBufferFill_ARGB16F( const vImage_Buffer *dest, const Pixel_ARGB_16F color, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-
-/*!
@function vImageBufferFill_CbCr8
@abstract Fill the dest buffer with the pixel value.
@@ -1821,53 +1779,7 @@
vImage_Flags flags ) VIMAGE_NON_NULL(1,2,3)
API_AVAILABLE(macos(10.4), ios(5.0), watchos(1.0), tvos(5.0));
-/*!
- @function vImagePermuteChannels_ARGB16F
-
- @abstract Reorder color channels within the buffer according to the permute map.
-
- @discussion For each pixel in src, do the following:
- @code
- Pixel_ARGB_16F srcPixel, result;
- for( int i = 0; i < 4; i++ )
- result[i] = srcPixel[ permuteMap[i] ];
- @endcode
-
- The src buffer must be at least as large as the dest buffer in each dimension. (src.height >= dest.height && src.width >= dest.width)
-
- This function can work in place provided the following are true:
- For each buffer "buf" that overlaps with dest, buf->data must be equal to dest->data and buf->rowBytes >= dest->rowBytes
- If an overlapping buffer has a different rowBytes from dest, kvImageDoNotTile must be also passed in the flags
-
- This function may be used with any 4 channel 16-bit/channel format, such as RGBA16F, BGRA16F or AYUV16F.
-
- @param src
- A pointer to a valid and initialized vImage_Buffer struct, that points to a buffer containing the source pixels.
-
- @param dest
- A pointer to a valid and initialized vImage_Buffer struct, that points to a buffer containing destination pixels.
-
- @param permuteMap
- The map describing the permutation of the 4 color channels.
- Each value in the map must be 0,1,2, or 3. A map of 0,1,2,3
- is a copy from src->dest while a map of 3,2,1,0 is permutes
- ARGB -> BGRA. Providing a map value greater than 3 will
- result in the return of error kvImageInvalidParameter.
-
- @param flags
- \p kvImageNoFlags Default operation
- \p kvImageDoNotTile Disable internal multithreading.
-
- @return kvImageNoError Success
- @return kvImageInvalidParameter When permuteMap > 3, which is invalid.
- @return kvImageRoiLargerThanInputBuffer The height and width of the destination must be less than or equal to the height and width of the src buffer, respectively.
- */
-VIMAGE_PF vImage_Error vImagePermuteChannels_ARGB16F(const vImage_Buffer *src,
- const vImage_Buffer *dest,
- const uint8_t permuteMap[4],
- vImage_Flags flags )
-VIMAGE_NON_NULL(1,2,3)
-API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
+
/*!
@function vImagePermuteChannelsWithMaskedInsert_ARGB8888
diff -ruN /Applications/Xcode_14.0.0-beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Convolution.h /Applications/Xcode_14.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Convolution.h
--- /Applications/Xcode_14.0.0-beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Convolution.h 2022-08-05 15:54:10.000000000 -0500
+++ /Applications/Xcode_14.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Convolution.h 2022-08-03 21:07:18.000000000 -0500
@@ -385,150 +385,6 @@
*/
VIMAGE_PF vImage_Error vImageConvolve_PlanarF( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const float *kernel, uint32_t kernel_height, uint32_t kernel_width, Pixel_F backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
-/*!
- * @function vImageConvolve_Planar16F
- * @abstract General convolution on a Planar16F image.
- * @discussion This filter applies a convolution filter of your choosing to a Planar16F image.
- * The kernel values are specified as 32-bit single-precision floats and the
- * weighted average is also computed in single precision by default. However, if
- * the flag kvImageUseFP16Accumulator is set all internal filtering operations will
- * use 16-bit half-precision floating-point arithmetic when the CPU architecture
- * supports it. This results in up to 2x performance improvements but at the
- * expense of a less precise result; typically 2-3 bits of precision is lost.
- *
- * For each pixel:
- * <pre>@textblock
- * for each pixel[y][x] in image{
- * // sum is declared as type _Float16 when the flag kvImageUseFP16Accumulator is set
- * float sum = 0;
- *
- * // Calculate weighted average over kernel area
- * for each kernel_element[i][j] in kernel{
- * sum += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2]
- * [x+j+srcOffsetToROI_X- kernel_width/2];
- * }
- *
- * // write out result
- * result[y][x] = (_Float16)sum;
- * }
- * @/textblock </pre>
- * (Above, we imagine the kernel to be a 2D array of size kernel_height by kernel_width.
- * However, in practice it is passed in as a contiguous 1D array of size kernel_height *
- * kernel_width.)
- *
- * This filter does not work in place.
- *
- * @param src The input image
- *
- * @param dest A pointer to a preallocated vImage_Buffer to receive the result image.
- * This may not alias the src image.
- *
- * @param tempBuffer An optional pointer to a region of memory to use as a working area during
- * computation. The size of the tempBuffer is given by calling the function
- * with the same parameters and the kvImageGetTempBufferSize flag, in which case
- * the size is returned instead of an error code from the left hand side.
- * You may pass NULL here, in which case a region of memory of similar size
- * will be allocated by the function and freed before it returns. Temp Buffers
- * are a way of avoiding lost time due to VM faults to initialize newly allocated
- * buffers. If you will be calling this function repeatedly with similar parameters
- * you should use a temp buffer. If the function is called from different threads
- * concurrently, a different temp buffer should be used for each.
- *
- * @param srcOffsetToROI_X An offset used in tiling to shift the position of the destination image
- * relative to the src image. Typically this is 0. Non-Zero values are needed
- * when the destination tile is not aligned with the left edge of the image.
- *
- * @param srcOffsetToROI_Y An offset used in tiling to shift the position of the destination image
- * relative to the src image. Typically this is 0. Non-Zero values are needed
- * when the destination tile is not aligned with the top edge of the image.
- *
- * @param kernel A pointer to a 1D array of weights of dimension kernel_height x kernel_width.
- * For example, for a simple 3x3 blur, it might be:
- * <pre>@textblock
- * const float kernel[9] = { 1./16, 2./16, 1./16,
- * 2./16, 4./16, 2./16,
- * 1./16, 2./16, 1./16 };
- * @/textblock </pre>
- *
- * @param kernel_height The height of the 2D table of weights passed in as kernel. It must be an odd number.
- *
- * @param kernel_width The width of the 2D table of weights passed in as kernel. It must be an odd number.
- *
- * @param backgroundColor When the kvImageBackgroundColorFill edging mode is active, the backgroundColor
- * parameter provides the background color to be used for missing pixels when the
- * kernel extends off the edge of the image.
- *
- * @param flags The following flags are allowed:
- * <pre>@textblock
- * kvImageCopyInPlace If any pixels covered by the kernel do no not exist, simply
- * copy the corresponding source pixel to the destination. This
- * will result in a ring off unconvolved content at the edges
- * and convolved content in the middle.
- *
- * kvImageBackgroundColorFill Substitute in the provided background color for missing pixels.
- * For a blur filter this will look like the edges of the image
- * have been blurred into a particular color. This is usually
- * appropriate when the color of the surface onto which the image
- * will be drawn is known. You can also use {Alpha = 0, color = 0}
- * as a background color, and let the downstream image compositor
- * blend in the background color. In this case, the result image
- * should be treated as a premultiplied image.
- *
- * kvImageEdgeExtend Substitute in the nearest defined pixel for missing pixels.
- * This is better when the image is drawn into a frame or other
- * context where the background is not expected to contribute to
- * the final content.
- *
- * kvImageTruncateKernel This is similar to kvImageEdgeExtend, except that edge pixels are
- * simply ignored, and the bias and divisor are adjusted accordingly.
- * Because of the complication at the edges, this edging mode can
- * be significantly slower than the others. It can be numerically
- * unstable if the sum over any rectangular subsection of the kernel
- * is zero, which can result in division by zero during the computation.
- * The results for this edging mode are usually quite visually similar
- * to kvImageEdgeExtend.
- *
- * kvImageGetTempBufferSize Instead of calculating the convolution of the image, return the
- * size of the temp buffer needed for this set of parameters. Does
- * not touch the src or dest image.
- *
- * kvImageDoNotTile Disable internal multithreading.
- *
- * kvImageUseFP16Accumulator Enable 16-bit half-precision floating-point arithmetic when computing the
- * kernel averages when the CPU architecture supports it.
- *
- * @/textblock </pre>
- * The first four flags listed are edging modes. One and only one edging mode must be
- * provided. If no edging mode is provided (e.g. kvImageNoFlags), then an error will
- * be returned.
- *
- * @return One of the following error codes may be returned:
- * <pre>@textblock
- * kvImageNoError Success.
- * >= 0 If kvImageGetTempBufferSize is passed, this is the size of
- * the temp buffer to use with this function and this set of
- * parameters.
- *
- * kvImageInvalidEdgeStyle One and only one of the following flags must be provided:
- * { kvImageCopyInPlace, kvImageBackgroundColorFill,
- * kvImageEdgeExtend, kvImageTruncateKernel }
- *
- * kvImageRoiLargerThanInputBuffer The dest->width and height must be less than or equal
- * to corresponding dimensions of the source buffer.
- *
- * kvImageInvalidOffset_X The destination width + srcOffsetToROI_X > src->width
- *
- * kvImageInvalidOffset_Y The destination height + srcOffsetToROI_Y > src->height
- *
- * kvImageNullPointerArgument kernel may not be NULL
- *
- * kvImageMemoryAllocationError Could not allocate memory to serve as a temp buffer.
- *
- * kvImageInvalidKernelSize The kernel height and width must be odd numbers.
- * @/textblock </pre>
- */
-VIMAGE_PF vImage_Error vImageConvolve_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const float *kernel, uint32_t kernel_height, uint32_t kernel_width, Pixel_16F backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
/*!
* @function vImageConvolve_ARGB8888
@@ -837,44 +693,27 @@
*/
VIMAGE_PF vImage_Error vImageConvolve_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const float *kernel, uint32_t kernel_height, uint32_t kernel_width, const Pixel_FFFF backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
+
/*!
- * @function vImageConvolve_ARGB16F
- * @abstract General convolution on a ARGB16F image of any channel order.
- * @discussion This filter applies a convolution filter of your choosing to a ARGB16F image.
- * This filter will work on any four-channel, half-float per component image format, not just ARGB.
- * The kernel values are specified as 32-bit single-precision floats and the
- * weighted average is also computed in single precision by default. However, if
- * the flag kvImageUseFP16Accumulator is set all internal filtering operations will
- * use 16-bit half-precision floating-point arithmetic when the CPU architecture
- * supports it. This results in up to 2x performance improvements but at the
- * expense of a less precise result; typically 2-3 bits of precision is lost.
- *
+ * @function vImageConvolveWithBias_Planar8
+ * @abstract General convolution on a Planar8 image with added bias.
+ * @discussion This filter applies a convolution filter of your choosing to a Planar8 image.
* For each pixel:
* <pre>@textblock
* for each pixel[y][x] in image{
- * // Sums are declared as type _Float16 when the flag kvImageUseFP16Accumulator is set
- * float sumA = 0;
- * float sumR = 0;
- * float sumG = 0;
- * float sumB = 0;
+ * int sum = 0;
*
* // Calculate weighted average over kernel area
* for each kernel_element[i][j] in kernel{
- * sumA += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2] [x+j+srcOffsetToROI_X- kernel_width/2][0];
- * sumR += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2] [x+j+srcOffsetToROI_X- kernel_width/2][1];
- * sumG += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2] [x+j+srcOffsetToROI_X- kernel_width/2][2];
- * sumB += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2] [x+j+srcOffsetToROI_X- kernel_width/2][3];
+ * sum += kernel_element[i][j] *
+ * pixel[y+i+srcOffsetToROI_Y-kernel_height/2]
+ * [x+j+srcOffsetToROI_X- kernel_width/2];
* }
+ * // Correct for the scaling introduced by multiplying by the weights table
+ * sum = (sum + bias) / divisor;
*
* // write out result
- * result[y][x][0] = (_Float16)sumA;
- * result[y][x][1] = (_Float16)sumR;
- * result[y][x][2] = (_Float16)sumG;
- * result[y][x][3] = (_Float16)sumB;
+ * result[y][x] = CLAMP(sum, 0, 255);
* }
* @/textblock </pre>
* (Above, we imagine the kernel to be a 2D array of size kernel_height by kernel_width.
@@ -910,15 +749,29 @@
* @param kernel A pointer to a 1D array of weights of dimension kernel_height x kernel_width.
* For example, for a simple 3x3 blur, it might be:
* <pre>@textblock
- * const float kernel[9] = { 1./16, 2./16, 1./16,
- * 2./16, 4./16, 2./16,
- * 1./16, 2./16, 1./16 };
+ * const int16_t kernel[9] = { 1, 2, 1,
+ * 2, 4, 2,
+ * 1, 2, 1 };
* @/textblock </pre>
*
+ * The kernel values may not sum in any combination to be outside the range
+ * [-2**23, 2**23), or modulo overflow in the accumulator may result.
+ *
* @param kernel_height The height of the 2D table of weights passed in as kernel. It must be an odd number.
*
* @param kernel_width The width of the 2D table of weights passed in as kernel. It must be an odd number.
*
+ * @param divisor The weighted sum of nearby pixels is typically a large number, which must be corrected
+ * to fit back into the image format of the destination image. The correction factor
+ * is passed in as divisor here, and is divided from the sum before the result is
+ * returned. Typically, the divisor is the sum over the area of the kernel. If the divisor
+ * is 0, 1 will be used instead.
+ *
+ * @param bias This value is added to the sum of weighted pixels before the divisor is applied.
+ * It can serve to both control rounding and adjust the brightness of the result.
+ * A large bias (e.g 128 * divisor) may be required for some kernels to return
+ * representable results, such as edge detection filters.
+ *
* @param backgroundColor When the kvImageBackgroundColorFill edging mode is active, the backgroundColor
* parameter provides the background color to be used for missing pixels when the
* kernel extends off the edge of the image.
@@ -957,10 +810,7 @@
* size of the temp buffer needed for this set of parameters. Does
* not touch the src or dest image.
*
- * kvImageDoNotTile Disable internal multithreading.
- *
- * kvImageUseFP16Accumulator Enable 16-bit half-precision floating-point arithmetic when computing the
- * kernel averages when the CPU architecture supports it.
+ * kvImageDoNotTile Disable internal multithreading.
*
* @/textblock </pre>
* The first four flags listed are edging modes. One and only one edging mode must be
@@ -992,476 +842,26 @@
* kvImageInvalidKernelSize The kernel height and width must be odd numbers.
* @/textblock </pre>
*/
-VIMAGE_PF vImage_Error vImageConvolve_ARGB16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const float *kernel, uint32_t kernel_height, uint32_t kernel_width, const Pixel_ARGB_16F backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-
-/*!
- * @function vImageConvolveWithBias_Planar8
- * @abstract General convolution on a Planar8 image with added bias.
- * @discussion This filter applies a convolution filter of your choosing to a Planar8 image.
- * For each pixel:
- * <pre>@textblock
- * for each pixel[y][x] in image{
- * int sum = 0;
- *
- * // Calculate weighted average over kernel area
- * for each kernel_element[i][j] in kernel{
- * sum += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2]
- * [x+j+srcOffsetToROI_X- kernel_width/2];
- * }
- * // Correct for the scaling introduced by multiplying by the weights table
- * sum = (sum + bias) / divisor;
- *
- * // write out result
- * result[y][x] = CLAMP(sum, 0, 255);
- * }
- * @/textblock </pre>
- * (Above, we imagine the kernel to be a 2D array of size kernel_height by kernel_width.
- * However, in practice it is passed in as a contiguous 1D array of size kernel_height *
- * kernel_width.)
- *
- * This filter does not work in place.
- *
- * @param src The input image
- *
- * @param dest A pointer to a preallocated vImage_Buffer to receive the result image.
- * This may not alias the src image.
- *
- * @param tempBuffer An optional pointer to a region of memory to use as a working area during
- * computation. The size of the tempBuffer is given by calling the function
- * with the same parameters and the kvImageGetTempBufferSize flag, in which case
- * the size is returned instead of an error code from the left hand side.
- * You may pass NULL here, in which case a region of memory of similar size
- * will be allocated by the function and freed before it returns. Temp Buffers
- * are a way of avoiding lost time due to VM faults to initialize newly allocated
- * buffers. If you will be calling this function repeatedly with similar parameters
- * you should use a temp buffer. If the function is called from different threads
- * concurrently, a different temp buffer should be used for each.
- *
- * @param srcOffsetToROI_X An offset used in tiling to shift the position of the destination image
- * relative to the src image. Typically this is 0. Non-Zero values are needed
- * when the destination tile is not aligned with the left edge of the image.
- *
- * @param srcOffsetToROI_Y An offset used in tiling to shift the position of the destination image
- * relative to the src image. Typically this is 0. Non-Zero values are needed
- * when the destination tile is not aligned with the top edge of the image.
- *
- * @param kernel A pointer to a 1D array of weights of dimension kernel_height x kernel_width.
- * For example, for a simple 3x3 blur, it might be:
- * <pre>@textblock
- * const int16_t kernel[9] = { 1, 2, 1,
- * 2, 4, 2,
- * 1, 2, 1 };
- * @/textblock </pre>
- *
- * The kernel values may not sum in any combination to be outside the range
- * [-2**23, 2**23), or modulo overflow in the accumulator may result.
- *
- * @param kernel_height The height of the 2D table of weights passed in as kernel. It must be an odd number.
- *
- * @param kernel_width The width of the 2D table of weights passed in as kernel. It must be an odd number.
- *
- * @param divisor The weighted sum of nearby pixels is typically a large number, which must be corrected
- * to fit back into the image format of the destination image. The correction factor
- * is passed in as divisor here, and is divided from the sum before the result is
- * returned. Typically, the divisor is the sum over the area of the kernel. If the divisor
- * is 0, 1 will be used instead.
- *
- * @param bias This value is added to the sum of weighted pixels before the divisor is applied.
- * It can serve to both control rounding and adjust the brightness of the result.
- * A large bias (e.g 128 * divisor) may be required for some kernels to return
- * representable results, such as edge detection filters.
- *
- * @param backgroundColor When the kvImageBackgroundColorFill edging mode is active, the backgroundColor
- * parameter provides the background color to be used for missing pixels when the
- * kernel extends off the edge of the image.
- *
- * @param flags The following flags are allowed:
- * <pre>@textblock
- * kvImageCopyInPlace If any pixels covered by the kernel do no not exist, simply
- * copy the corresponding source pixel to the destination. This
- * will result in a ring off unconvolved content at the edges
- * and convolved content in the middle.
- *
- * kvImageBackgroundColorFill Substitute in the provided background color for missing pixels.
- * For a blur filter this will look like the edges of the image
- * have been blurred into a particular color. This is usually
- * appropriate when the color of the surface onto which the image
- * will be drawn is known. You can also use {Alpha = 0, color = 0}
- * as a background color, and let the downstream image compositor
- * blend in the background color. In this case, the result image
- * should be treated as a premultiplied image.
- *
- * kvImageEdgeExtend Substitute in the nearest defined pixel for missing pixels.
- * This is better when the image is drawn into a frame or other
- * context where the background is not expected to contribute to
- * the final content.
- *
- * kvImageTruncateKernel This is similar to kvImageEdgeExtend, except that edge pixels are
- * simply ignored, and the bias and divisor are adjusted accordingly.
- * Because of the complication at the edges, this edging mode can
- * be significantly slower than the others. It can be numerically
- * unstable if the sum over any rectangular subsection of the kernel
- * is zero, which can result in division by zero during the computation.
- * The results for this edging mode are usually quite visually similar
- * to kvImageEdgeExtend.
- *
- * kvImageGetTempBufferSize Instead of calculating the convolution of the image, return the
- * size of the temp buffer needed for this set of parameters. Does
- * not touch the src or dest image.
- *
- * kvImageDoNotTile Disable internal multithreading.
- *
- * @/textblock </pre>
- * The first four flags listed are edging modes. One and only one edging mode must be
- * provided. If no edging mode is provided (e.g. kvImageNoFlags), then an error will
- * be returned.
- *
- * @return One of the following error codes may be returned:
- * <pre>@textblock
- * kvImageNoError Success.
- * >= 0 If kvImageGetTempBufferSize is passed, this is the size of
- * the temp buffer to use with this function and this set of
- * parameters.
- *
- * kvImageInvalidEdgeStyle One and only one of the following flags must be provided:
- * { kvImageCopyInPlace, kvImageBackgroundColorFill,
- * kvImageEdgeExtend, kvImageTruncateKernel }
- *
- * kvImageRoiLargerThanInputBuffer The dest->width and height must be less than or equal
- * to corresponding dimensions of the source buffer.
- *
- * kvImageInvalidOffset_X The destination width + srcOffsetToROI_X > src->width
- *
- * kvImageInvalidOffset_Y The destination height + srcOffsetToROI_Y > src->height
- *
- * kvImageNullPointerArgument kernel may not be NULL
- *
- * kvImageMemoryAllocationError Could not allocate memory to serve as a temp buffer.
- *
- * kvImageInvalidKernelSize The kernel height and width must be odd numbers.
- * @/textblock </pre>
- */
-VIMAGE_PF vImage_Error vImageConvolveWithBias_Planar8( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const int16_t *kernel, uint32_t kernel_height, uint32_t kernel_width, int32_t divisor, int32_t bias, Pixel_8 backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.4), ios(5.0), watchos(1.0), tvos(5.0));
+VIMAGE_PF vImage_Error vImageConvolveWithBias_Planar8( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const int16_t *kernel, uint32_t kernel_height, uint32_t kernel_width, int32_t divisor, int32_t bias, Pixel_8 backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.4), ios(5.0), watchos(1.0), tvos(5.0));
/*!
* @function vImageConvolveWithBias_PlanarF
* @abstract General convolution on a PlanarF image with added bias.
- * @discussion This filter applies a convolution filter of your choosing to a PlanarF image.
- * For each pixel:
- * <pre>@textblock
- * for each pixel[y][x] in image{
- * float sum = bias;
- *
- * // Calculate weighted average over kernel area
- * for each kernel_element[i][j] in kernel{
- * sum += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2]
- * [x+j+srcOffsetToROI_X- kernel_width/2];
- * }
- *
- * // write out result
- * result[y][x] = sum;
- * }
- * @/textblock </pre>
- * (Above, we imagine the kernel to be a 2D array of size kernel_height by kernel_width.
- * However, in practice it is passed in as a contiguous 1D array of size kernel_height *
- * kernel_width.)
- *
- * This filter does not work in place.
- *
- * @param src The input image
- *
- * @param dest A pointer to a preallocated vImage_Buffer to receive the result image.
- * This may not alias the src image.
- *
- * @param tempBuffer An optional pointer to a region of memory to use as a working area during
- * computation. The size of the tempBuffer is given by calling the function
- * with the same parameters and the kvImageGetTempBufferSize flag, in which case
- * the size is returned instead of an error code from the left hand side.
- * You may pass NULL here, in which case a region of memory of similar size
- * will be allocated by the function and freed before it returns. Temp Buffers
- * are a way of avoiding lost time due to VM faults to initialize newly allocated
- * buffers. If you will be calling this function repeatedly with similar parameters
- * you should use a temp buffer. If the function is called from different threads
- * concurrently, a different temp buffer should be used for each.
- *
- * @param srcOffsetToROI_X An offset used in tiling to shift the position of the destination image
- * relative to the src image. Typically this is 0. Non-Zero values are needed
- * when the destination tile is not aligned with the left edge of the image.
- *
- * @param srcOffsetToROI_Y An offset used in tiling to shift the position of the destination image
- * relative to the src image. Typically this is 0. Non-Zero values are needed
- * when the destination tile is not aligned with the top edge of the image.
- *
- * @param kernel A pointer to a 1D array of weights of dimension kernel_height x kernel_width.
- * For example, for a simple 3x3 blur, it might be:
- * <pre>@textblock
- * const float kernel[9] = { 1./16, 2./16, 1./16,
- * 2./16, 4./16, 2./16,
- * 1./16, 2./16, 1./16 };
- * @/textblock </pre>
- *
- * @param kernel_height The height of the 2D table of weights passed in as kernel. It must be an odd number.
- *
- * @param kernel_width The width of the 2D table of weights passed in as kernel. It must be an odd number.
- *
- * @param bias This value is added to the sum of weighted pixels.
- *
- * @param backgroundColor When the kvImageBackgroundColorFill edging mode is active, the backgroundColor
- * parameter provides the background color to be used for missing pixels when the
- * kernel extends off the edge of the image.
- *
- * @param flags The following flags are allowed:
- * <pre>@textblock
- * kvImageCopyInPlace If any pixels covered by the kernel do no not exist, simply
- * copy the corresponding source pixel to the destination. This
- * will result in a ring off unconvolved content at the edges
- * and convolved content in the middle.
- *
- * kvImageBackgroundColorFill Substitute in the provided background color for missing pixels.
- * For a blur filter this will look like the edges of the image
- * have been blurred into a particular color. This is usually
- * appropriate when the color of the surface onto which the image
- * will be drawn is known. You can also use {Alpha = 0, color = 0}
- * as a background color, and let the downstream image compositor
- * blend in the background color. In this case, the result image
- * should be treated as a premultiplied image.
- *
- * kvImageEdgeExtend Substitute in the nearest defined pixel for missing pixels.
- * This is better when the image is drawn into a frame or other
- * context where the background is not expected to contribute to
- * the final content.
- *
- * kvImageTruncateKernel This is similar to kvImageEdgeExtend, except that edge pixels are
- * simply ignored, and the bias and divisor are adjusted accordingly.
- * Because of the complication at the edges, this edging mode can
- * be significantly slower than the others. It can be numerically
- * unstable if the sum over any rectangular subsection of the kernel
- * is zero, which can result in division by zero during the computation.
- * The results for this edging mode are usually quite visually similar
- * to kvImageEdgeExtend.
- *
- * kvImageGetTempBufferSize Instead of calculating the convolution of the image, return the
- * size of the temp buffer needed for this set of parameters. Does
- * not touch the src or dest image.
- *
- * kvImageDoNotTile Disable internal multithreading.
- *
- * @/textblock </pre>
- * The first four flags listed are edging modes. One and only one edging mode must be
- * provided. If no edging mode is provided (e.g. kvImageNoFlags), then an error will
- * be returned.
- *
- * @return One of the following error codes may be returned:
- * <pre>@textblock
- * kvImageNoError Success.
- * >= 0 If kvImageGetTempBufferSize is passed, this is the size of
- * the temp buffer to use with this function and this set of
- * parameters.
- *
- * kvImageInvalidEdgeStyle One and only one of the following flags must be provided:
- * { kvImageCopyInPlace, kvImageBackgroundColorFill,
- * kvImageEdgeExtend, kvImageTruncateKernel }
- *
- * kvImageRoiLargerThanInputBuffer The dest->width and height must be less than or equal
- * to corresponding dimensions of the source buffer.
- *
- * kvImageInvalidOffset_X The destination width + srcOffsetToROI_X > src->width
- *
- * kvImageInvalidOffset_Y The destination height + srcOffsetToROI_Y > src->height
- *
- * kvImageNullPointerArgument kernel may not be NULL
- *
- * kvImageMemoryAllocationError Could not allocate memory to serve as a temp buffer.
- *
- * kvImageInvalidKernelSize The kernel height and width must be odd numbers.
- * @/textblock </pre>
- */
-VIMAGE_PF vImage_Error vImageConvolveWithBias_PlanarF( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const float *kernel, uint32_t kernel_height, uint32_t kernel_width, float bias, Pixel_F backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.4), ios(5.0), watchos(1.0), tvos(5.0));
-
-/*!
- * @function vImageConvolveWithBias_Planar16F
- * @abstract General convolution on a Planar16F image.
- * @discussion This filter applies a convolution filter of your choosing to a Planar16F image.
- * The kernel values are specified as 32-bit single-precision floats and the
- * weighted average is also computed in single precision by default. However, if
- * the flag kvImageUseFP16Accumulator is set all internal filtering operations will
- * use 16-bit half-precision floating-point arithmetic when the CPU architecture
- * supports it. This results in up to 2x performance improvements but at the
- * expense of a less precise result; typically 2-3 bits of precision is lost.
- *
- * For each pixel:
- * <pre>@textblock
- * for each pixel[y][x] in image{
- * // sum is declared as type _Float16 when the flag kvImageUseFP16Accumulator is set
- * float sum = bias;
- *
- * // Calculate weighted average over kernel area
- * for each kernel_element[i][j] in kernel{
- * sum += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2]
- * [x+j+srcOffsetToROI_X- kernel_width/2];
- * }
- *
- * // write out result
- * result[y][x] = (_Float16)sum;
- * }
- * @/textblock </pre>
- * (Above, we imagine the kernel to be a 2D array of size kernel_height by kernel_width.
- * However, in practice it is passed in as a contiguous 1D array of size kernel_height *
- * kernel_width.)
- *
- * This filter does not work in place.
- *
- * @param src The input image
- *
- * @param dest A pointer to a preallocated vImage_Buffer to receive the result image.
- * This may not alias the src image.
- *
- * @param tempBuffer An optional pointer to a region of memory to use as a working area during
- * computation. The size of the tempBuffer is given by calling the function
- * with the same parameters and the kvImageGetTempBufferSize flag, in which case
- * the size is returned instead of an error code from the left hand side.
- * You may pass NULL here, in which case a region of memory of similar size
- * will be allocated by the function and freed before it returns. Temp Buffers
- * are a way of avoiding lost time due to VM faults to initialize newly allocated
- * buffers. If you will be calling this function repeatedly with similar parameters
- * you should use a temp buffer. If the function is called from different threads
- * concurrently, a different temp buffer should be used for each.
- *
- * @param srcOffsetToROI_X An offset used in tiling to shift the position of the destination image
- * relative to the src image. Typically this is 0. Non-Zero values are needed
- * when the destination tile is not aligned with the left edge of the image.
- *
- * @param srcOffsetToROI_Y An offset used in tiling to shift the position of the destination image
- * relative to the src image. Typically this is 0. Non-Zero values are needed
- * when the destination tile is not aligned with the top edge of the image.
- *
- * @param kernel A pointer to a 1D array of weights of dimension kernel_height x kernel_width.
- * For example, for a simple 3x3 blur, it might be:
- * <pre>@textblock
- * const float kernel[9] = { 1./16, 2./16, 1./16,
- * 2./16, 4./16, 2./16,
- * 1./16, 2./16, 1./16 };
- * @/textblock </pre>
- *
- * @param kernel_height The height of the 2D table of weights passed in as kernel. It must be an odd number.
- *
- * @param kernel_width The width of the 2D table of weights passed in as kernel. It must be an odd number.
- *
- * @param bias This value is added to the sum of weighted pixels.
- *
- * @param backgroundColor When the kvImageBackgroundColorFill edging mode is active, the backgroundColor
- * parameter provides the background color to be used for missing pixels when the
- * kernel extends off the edge of the image.
- *
- * @param flags The following flags are allowed:
- * <pre>@textblock
- * kvImageCopyInPlace If any pixels covered by the kernel do no not exist, simply
- * copy the corresponding source pixel to the destination. This
- * will result in a ring off unconvolved content at the edges
- * and convolved content in the middle.
- *
- * kvImageBackgroundColorFill Substitute in the provided background color for missing pixels.
- * For a blur filter this will look like the edges of the image
- * have been blurred into a particular color. This is usually
- * appropriate when the color of the surface onto which the image
- * will be drawn is known. You can also use {Alpha = 0, color = 0}
- * as a background color, and let the downstream image compositor
- * blend in the background color. In this case, the result image
- * should be treated as a premultiplied image.
- *
- * kvImageEdgeExtend Substitute in the nearest defined pixel for missing pixels.
- * This is better when the image is drawn into a frame or other
- * context where the background is not expected to contribute to
- * the final content.
- *
- * kvImageTruncateKernel This is similar to kvImageEdgeExtend, except that edge pixels are
- * simply ignored, and the bias and divisor are adjusted accordingly.
- * Because of the complication at the edges, this edging mode can
- * be significantly slower than the others. It can be numerically
- * unstable if the sum over any rectangular subsection of the kernel
- * is zero, which can result in division by zero during the computation.
- * The results for this edging mode are usually quite visually similar
- * to kvImageEdgeExtend.
- *
- * kvImageGetTempBufferSize Instead of calculating the convolution of the image, return the
- * size of the temp buffer needed for this set of parameters. Does
- * not touch the src or dest image.
- *
- * kvImageDoNotTile Disable internal multithreading.
- *
- * kvImageUseFP16Accumulator Enable 16-bit half-precision floating-point arithmetic when computing the
- * kernel averages when the CPU architecture supports it.
- *
- * @/textblock </pre>
- * The first four flags listed are edging modes. One and only one edging mode must be
- * provided. If no edging mode is provided (e.g. kvImageNoFlags), then an error will
- * be returned.
- *
- * @return One of the following error codes may be returned:
- * <pre>@textblock
- * kvImageNoError Success.
- * >= 0 If kvImageGetTempBufferSize is passed, this is the size of
- * the temp buffer to use with this function and this set of
- * parameters.
- *
- * kvImageInvalidEdgeStyle One and only one of the following flags must be provided:
- * { kvImageCopyInPlace, kvImageBackgroundColorFill,
- * kvImageEdgeExtend, kvImageTruncateKernel }
- *
- * kvImageRoiLargerThanInputBuffer The dest->width and height must be less than or equal
- * to corresponding dimensions of the source buffer.
- *
- * kvImageInvalidOffset_X The destination width + srcOffsetToROI_X > src->width
- *
- * kvImageInvalidOffset_Y The destination height + srcOffsetToROI_Y > src->height
- *
- * kvImageNullPointerArgument kernel may not be NULL
- *
- * kvImageMemoryAllocationError Could not allocate memory to serve as a temp buffer.
- *
- * kvImageInvalidKernelSize The kernel height and width must be odd numbers.
- * @/textblock </pre>
- */
-VIMAGE_PF vImage_Error vImageConvolveWithBias_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const float *kernel, uint32_t kernel_height, uint32_t kernel_width, float bias, Pixel_16F backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-
-/*!
- * @function vImageConvolveWithBias_ARGB8888
- * @abstract General convolution on a ARGB888 image of any channel order with bias.
- * @discussion This filter applies a convolution filter of your choosing to a ARGB8888 image.
- * This filter will work on any four-channel, 8-bit per component image format, not just ARGB.
+ * @discussion This filter applies a convolution filter of your choosing to a PlanarF image.
* For each pixel:
* <pre>@textblock
* for each pixel[y][x] in image{
- * int sumA = 0;
- * int sumR = 0;
- * int sumG = 0;
- * int sumB = 0;
+ * float sum = bias;
*
* // Calculate weighted average over kernel area
* for each kernel_element[i][j] in kernel{
- * sumA += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2][x+j+srcOffsetToROI_X- kernel_width/2][0];
- * sumR += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2][x+j+srcOffsetToROI_X- kernel_width/2][1];
- * sumG += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2][x+j+srcOffsetToROI_X- kernel_width/2][2];
- * sumB += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2][x+j+srcOffsetToROI_X- kernel_width/2][3];
+ * sum += kernel_element[i][j] *
+ * pixel[y+i+srcOffsetToROI_Y-kernel_height/2]
+ * [x+j+srcOffsetToROI_X- kernel_width/2];
* }
- * // Correct for the scaling introduced by multiplying by the weights table
- * sumA = (sumA + bias[0]) / divisor;
- * sumR = (sumR + bias[1]) / divisor;
- * sumG = (sumG + bias[2]) / divisor;
- * sumB = (sumB + bias[3]) / divisor;
*
* // write out result
- * result[y][x][0] = CLAMP(sumA, 0, 255);
- * result[y][x][1] = CLAMP(sumR, 0, 255);
- * result[y][x][2] = CLAMP(sumG, 0, 255);
- * result[y][x][3] = CLAMP(sumB, 0, 255);
+ * result[y][x] = sum;
* }
* @/textblock </pre>
* (Above, we imagine the kernel to be a 2D array of size kernel_height by kernel_width.
@@ -1470,7 +870,6 @@
*
* This filter does not work in place.
*
- *
* @param src The input image
*
* @param dest A pointer to a preallocated vImage_Buffer to receive the result image.
@@ -1498,28 +897,16 @@
* @param kernel A pointer to a 1D array of weights of dimension kernel_height x kernel_width.
* For example, for a simple 3x3 blur, it might be:
* <pre>@textblock
- * const int16_t kernel[9] = { 1, 2, 1,
- * 2, 4, 2,
- * 1, 2, 1 };
+ * const float kernel[9] = { 1./16, 2./16, 1./16,
+ * 2./16, 4./16, 2./16,
+ * 1./16, 2./16, 1./16 };
* @/textblock </pre>
*
- * The kernel values may not sum in any combination to be outside the range
- * [-2**23, 2**23), or modulo overflow in the accumulator may result.
- *
* @param kernel_height The height of the 2D table of weights passed in as kernel. It must be an odd number.
*
* @param kernel_width The width of the 2D table of weights passed in as kernel. It must be an odd number.
*
- * @param divisor The weighted sum of nearby pixels is typically a large number, which must be corrected
- * to fit back into the image format of the destination image. The correction factor
- * is passed in as divisor here, and is divided from the sum before the result is
- * returned. Typically, the divisor is the sum over the area of the kernel. If the divisor
- * is 0, 1 will be used instead.
- *
- * @param bias This value is added to the sum of weighted pixels before the divisor is applied.
- * It can serve to both control rounding and adjust the brightness of the result.
- * A large bias (e.g 128 * divisor) may be required for some kernels, such as edge
- * detection filters, to return representable results.
+ * @param bias This value is added to the sum of weighted pixels.
*
* @param backgroundColor When the kvImageBackgroundColorFill edging mode is active, the backgroundColor
* parameter provides the background color to be used for missing pixels when the
@@ -1591,38 +978,44 @@
* kvImageInvalidKernelSize The kernel height and width must be odd numbers.
* @/textblock </pre>
*/
-VIMAGE_PF vImage_Error vImageConvolveWithBias_ARGB8888( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const int16_t *kernel, uint32_t kernel_height, uint32_t kernel_width, int32_t divisor, int32_t bias, const Pixel_8888 backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.4), ios(5.0), watchos(1.0), tvos(5.0));
+VIMAGE_PF vImage_Error vImageConvolveWithBias_PlanarF( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const float *kernel, uint32_t kernel_height, uint32_t kernel_width, float bias, Pixel_F backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.4), ios(5.0), watchos(1.0), tvos(5.0));
+
/*!
- * @function vImageConvolveWithBias_ARGBFFFF
- * @abstract General convolution on a ARGBFFFF image of any channel order with bias.
- * @discussion This filter applies a convolution filter of your choosing to a ARGBFFFF image.
- * This filter will work on any four-channel, float per component image format, not just ARGB.
+ * @function vImageConvolveWithBias_ARGB8888
+ * @abstract General convolution on a ARGB888 image of any channel order with bias.
+ * @discussion This filter applies a convolution filter of your choosing to a ARGB8888 image.
+ * This filter will work on any four-channel, 8-bit per component image format, not just ARGB.
* For each pixel:
* <pre>@textblock
* for each pixel[y][x] in image{
- * float sumA = bias[0];
- * float sumR = bias[1];
- * float sumG = bias[2];
- * float sumB = bias[3];
+ * int sumA = 0;
+ * int sumR = 0;
+ * int sumG = 0;
+ * int sumB = 0;
*
* // Calculate weighted average over kernel area
* for each kernel_element[i][j] in kernel{
* sumA += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2] [x+j+srcOffsetToROI_X- kernel_width/2][0];
+ * pixel[y+i+srcOffsetToROI_Y-kernel_height/2][x+j+srcOffsetToROI_X- kernel_width/2][0];
* sumR += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2] [x+j+srcOffsetToROI_X- kernel_width/2][1];
+ * pixel[y+i+srcOffsetToROI_Y-kernel_height/2][x+j+srcOffsetToROI_X- kernel_width/2][1];
* sumG += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2] [x+j+srcOffsetToROI_X- kernel_width/2][2];
+ * pixel[y+i+srcOffsetToROI_Y-kernel_height/2][x+j+srcOffsetToROI_X- kernel_width/2][2];
* sumB += kernel_element[i][j] *
- * pixel[y+i+srcOffsetToROI_Y-kernel_height/2] [x+j+srcOffsetToROI_X- kernel_width/2][3];
+ * pixel[y+i+srcOffsetToROI_Y-kernel_height/2][x+j+srcOffsetToROI_X- kernel_width/2][3];
* }
+ * // Correct for the scaling introduced by multiplying by the weights table
+ * sumA = (sumA + bias[0]) / divisor;
+ * sumR = (sumR + bias[1]) / divisor;
+ * sumG = (sumG + bias[2]) / divisor;
+ * sumB = (sumB + bias[3]) / divisor;
*
* // write out result
- * result[y][x][0] = sumA;
- * result[y][x][1] = sumR;
- * result[y][x][2] = sumG;
- * result[y][x][3] = sumB;
+ * result[y][x][0] = CLAMP(sumA, 0, 255);
+ * result[y][x][1] = CLAMP(sumR, 0, 255);
+ * result[y][x][2] = CLAMP(sumG, 0, 255);
+ * result[y][x][3] = CLAMP(sumB, 0, 255);
* }
* @/textblock </pre>
* (Above, we imagine the kernel to be a 2D array of size kernel_height by kernel_width.
@@ -1631,6 +1024,7 @@
*
* This filter does not work in place.
*
+ *
* @param src The input image
*
* @param dest A pointer to a preallocated vImage_Buffer to receive the result image.
@@ -1658,16 +1052,28 @@
* @param kernel A pointer to a 1D array of weights of dimension kernel_height x kernel_width.
* For example, for a simple 3x3 blur, it might be:
* <pre>@textblock
- * const float kernel[9] = { 1./16, 2./16, 1./16,
- * 2./16, 4./16, 2./16,
- * 1./16, 2./16, 1./16 };
+ * const int16_t kernel[9] = { 1, 2, 1,
+ * 2, 4, 2,
+ * 1, 2, 1 };
* @/textblock </pre>
*
+ * The kernel values may not sum in any combination to be outside the range
+ * [-2**23, 2**23), or modulo overflow in the accumulator may result.
+ *
* @param kernel_height The height of the 2D table of weights passed in as kernel. It must be an odd number.
*
* @param kernel_width The width of the 2D table of weights passed in as kernel. It must be an odd number.
*
- * @param bias This value is added to the sum of weighted pixels.
+ * @param divisor The weighted sum of nearby pixels is typically a large number, which must be corrected
+ * to fit back into the image format of the destination image. The correction factor
+ * is passed in as divisor here, and is divided from the sum before the result is
+ * returned. Typically, the divisor is the sum over the area of the kernel. If the divisor
+ * is 0, 1 will be used instead.
+ *
+ * @param bias This value is added to the sum of weighted pixels before the divisor is applied.
+ * It can serve to both control rounding and adjust the brightness of the result.
+ * A large bias (e.g 128 * divisor) may be required for some kernels, such as edge
+ * detection filters, to return representable results.
*
* @param backgroundColor When the kvImageBackgroundColorFill edging mode is active, the backgroundColor
* parameter provides the background color to be used for missing pixels when the
@@ -1739,28 +1145,20 @@
* kvImageInvalidKernelSize The kernel height and width must be odd numbers.
* @/textblock </pre>
*/
-VIMAGE_PF vImage_Error vImageConvolveWithBias_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const float *kernel, uint32_t kernel_height, uint32_t kernel_width, float bias, const Pixel_FFFF backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.4), ios(5.0), watchos(1.0), tvos(5.0));
+VIMAGE_PF vImage_Error vImageConvolveWithBias_ARGB8888( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const int16_t *kernel, uint32_t kernel_height, uint32_t kernel_width, int32_t divisor, int32_t bias, const Pixel_8888 backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.4), ios(5.0), watchos(1.0), tvos(5.0));
/*!
- * @function vImageConvolveWithBias_ARGB16F
- * @abstract General convolution on a ARGB16F image of any channel order.
- * @discussion This filter applies a convolution filter of your choosing to a ARGB16F image.
- * This filter will work on any four-channel, half-float per component image format, not just ARGB.
- * The kernel values are specified as 32-bit single-precision floats and the
- * weighted average is also computed in single precision by default. However, if
- * the flag kvImageUseFP16Accumulator is set all internal filtering operations will
- * use 16-bit half-precision floating-point arithmetic when the CPU architecture
- * supports it. This results in up to 2x performance improvements but at the
- * expense of a less precise result; typically 2-3 bits of precision is lost.
- *
+ * @function vImageConvolveWithBias_ARGBFFFF
+ * @abstract General convolution on a ARGBFFFF image of any channel order with bias.
+ * @discussion This filter applies a convolution filter of your choosing to a ARGBFFFF image.
+ * This filter will work on any four-channel, float per component image format, not just ARGB.
* For each pixel:
* <pre>@textblock
* for each pixel[y][x] in image{
- * // Sums are declared as type _Float16 when the flag kvImageUseFP16Accumulator is set
- * float sumA = bias;
- * float sumR = bias;
- * float sumG = bias;
- * float sumB = bias;
+ * float sumA = bias[0];
+ * float sumR = bias[1];
+ * float sumG = bias[2];
+ * float sumB = bias[3];
*
* // Calculate weighted average over kernel area
* for each kernel_element[i][j] in kernel{
@@ -1775,10 +1173,10 @@
* }
*
* // write out result
- * result[y][x][0] = (_Float16)sumA;
- * result[y][x][1] = (_Float16)sumR;
- * result[y][x][2] = (_Float16)sumG;
- * result[y][x][3] = (_Float16)sumB;
+ * result[y][x][0] = sumA;
+ * result[y][x][1] = sumR;
+ * result[y][x][2] = sumG;
+ * result[y][x][3] = sumB;
* }
* @/textblock </pre>
* (Above, we imagine the kernel to be a 2D array of size kernel_height by kernel_width.
@@ -1863,10 +1261,7 @@
* size of the temp buffer needed for this set of parameters. Does
* not touch the src or dest image.
*
- * kvImageDoNotTile Disable internal multithreading.
- *
- * kvImageUseFP16Accumulator Enable 16-bit half-precision floating-point arithmetic when computing the
- * kernel averages when the CPU architecture supports it.
+ * kvImageDoNotTile Disable internal multithreading.
*
* @/textblock </pre>
* The first four flags listed are edging modes. One and only one edging mode must be
@@ -1898,7 +1293,8 @@
* kvImageInvalidKernelSize The kernel height and width must be odd numbers.
* @/textblock </pre>
*/
-VIMAGE_PF vImage_Error vImageConvolveWithBias_ARGB16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const float *kernel, uint32_t kernel_height, uint32_t kernel_width, float bias, const Pixel_ARGB_16F backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
+VIMAGE_PF vImage_Error vImageConvolveWithBias_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, const float *kernel, uint32_t kernel_height, uint32_t kernel_width, float bias, const Pixel_FFFF backgroundColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.4), ios(5.0), watchos(1.0), tvos(5.0));
+
/*!
* @function vImageConvolveMultiKernel_ARGB8888
@@ -3785,150 +3181,6 @@
float bias, Pixel_F backgroundColor, vImage_Flags flags)
VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(11.0), ios(14.0), watchos(7.0), tvos(14.0));
-/*!
- * @function vImageSepConvolve_Planar16F
- * @abstract Separable convolution on a Planar16F image.
- * @discussion This filter applies two separate 1D filters along the rows and columns of a Planar16F image.
- * The weighted average is computed with single-precision floating-point kernel values. However, if
- * the flag kvImageUseFP16Accumulator is set all internal filtering operations will
- * use 16-bit half-precision floating-point arithmetic when the CPU architecture
- * supports it. This results in up to 2x performance improvements but at the
- * expense of a less precise result; typically 2-3 bits of precision is lost.
- *
- * For each pixel:
- * <pre>@textblock
- * for each pixel[y][x] in image {
- * float sum = bias;
- *
- * // Calculate weighted average over kernel area
- * for each kernelY_element[i] in kernelY {
- * for each kernelX_element[j] in kernelX {
- * sum += kernelY_element[i] * kernelX_element[j] *
- * (float)pixel[y+i+srcOffsetToROI_Y-kernel_height/2]
- * [x+j+srcOffsetToROI_X- kernel_width/2];
- * }
- * }
- *
- * // Convert to half precisio and write out result
- * result[y][x] = (_Float16)sum;
- * }
- * @/textblock </pre>
- *
- * This filter does not work in place.
- *
- * @param src The input image
- *
- * @param dest A pointer to a preallocated vImage_Buffer to receive the result image.
- * This may not alias the src image.
- *
- * @param tempBuffer An optional pointer to a region of memory to use as a working area during
- * computation. The size of the tempBuffer is given by calling the function
- * with the same parameters and the kvImageGetTempBufferSize flag, in which case
- * the size is returned instead of an error code from the left hand side.
- * You may pass NULL here, in which case a region of memory of similar size
- * will be allocated by the function and freed before it returns. Temp Buffers
- * are a way of avoiding lost time due to VM faults to initialize newly allocated
- * buffers. If you will be calling this function repeatedly with similar parameters
- * you should use a temp buffer. If the function is called from different threads
- * concurrently, a different temp buffer should be used for each.
- *
- * @param srcOffsetToROI_X An offset used in tiling to shift the position of the destination image
- * relative to the src image. Typically this is 0. Non-Zero values are needed
- * when the destination tile is not aligned with the left edge of the image.
- *
- * @param srcOffsetToROI_Y An offset used in tiling to shift the position of the destination image
- * relative to the src image. Typically this is 0. Non-Zero values are needed
- * when the destination tile is not aligned with the top edge of the image.
- *
- * @param kernelX A pointer to a 1D array of weights of dimension kernelX_width.
- *
- * @param kernelX_width The width of the 1D array of weights passed in as kernelX. It must be an odd number.
- *
- * @param kernelY A pointer to a 1D array of weights of dimension kernelY_width.
- *
- * @param kernelY_width The width of the 1D array of weights passed in as kernelY. It must be an odd number.
- *
- * @param bias This value is added to the sum of weighted pixels.
- *
- * @param backgroundColor When the kvImageBackgroundColorFill edging mode is active, the backgroundColor
- * parameter provides the background color to be used for missing pixels when the
- * kernel extends off the edge of the image.
- *
- * @param flags The following flags are allowed:
- * <pre>@textblock
- * kvImageCopyInPlace If any pixels covered by the kernel do no not exist, simply
- * copy the corresponding source pixel to the destination. This
- * will result in a ring off unconvolved content at the edges
- * and convolved content in the middle.
- *
- * kvImageBackgroundColorFill Substitute in the provided background color for missing pixels.
- * For a blur filter this will look like the edges of the image
- * have been blurred into a particular color. This is usually
- * appropriate when the color of the surface onto which the image
- * will be drawn is known. You can also use {Alpha = 0, color = 0}
- * as a background color, and let the downstream image compositor
- * blend in the background color. In this case, the result image
- * should be treated as a premultiplied image.
- *
- * kvImageEdgeExtend Substitute in the nearest defined pixel for missing pixels.
- * This is better when the image is drawn into a frame or other
- * context where the background is not expected to contribute to
- * the final content.
- *
- * kvImageTruncateKernel This is similar to kvImageEdgeExtend, except that edge pixels are
- * simply ignored, and the bias and divisor are adjusted accordingly.
- * Because of the complication at the edges, this edging mode can
- * be significantly slower than the others. It can be numerically
- * unstable if the sum over any rectangular subsection of the kernel
- * is zero, which can result in division by zero during the computation.
- * The results for this edging mode are usually quite visually similar
- * to kvImageEdgeExtend.
- *
- * kvImageGetTempBufferSize Instead of calculating the convolution of the image, return the
- * size of the temp buffer needed for this set of parameters. Does
- * not touch the src or dest image.
- *
- * kvImageDoNotTile Disable internal multithreading.
- *
- * kvImageUseFP16Accumulator Enable 16-bit half-precision floating-point arithmetic when computing the
- * kernel averages when the CPU architecture supports it.
- *
- * @/textblock </pre>
- * The first four flags listed are edging modes. One and only one edging mode must be
- * provided. If no edging mode is provided (e.g. kvImageNoFlags), then an error will
- * be returned.
- *
- * @return One of the following error codes may be returned:
- * <pre>@textblock
- * kvImageNoError Success.
- * >= 0 If kvImageGetTempBufferSize is passed, this is the size of
- * the temp buffer to use with this function and this set of
- * parameters.
- *
- * kvImageInvalidEdgeStyle One and only one of the following flags must be provided:
- * { kvImageCopyInPlace, kvImageBackgroundColorFill,
- * kvImageEdgeExtend, kvImageTruncateKernel }
- *
- * kvImageRoiLargerThanInputBuffer The dest->width and height must be less than or equal
- * to corresponding dimensions of the source buffer.
- *
- * kvImageInvalidOffset_X The destination width + srcOffsetToROI_X > src->width
- *
- * kvImageInvalidOffset_Y The destination height + srcOffsetToROI_Y > src->height
- *
- * kvImageNullPointerArgument kernel may not be NULL
- *
- * kvImageMemoryAllocationError Could not allocate memory to serve as a temp buffer.
- *
- * kvImageInvalidKernelSize The kernel sizes must be odd numbers.
- * @/textblock </pre>
-*/
-VIMAGE_PF vImage_Error
-vImageSepConvolve_Planar16F(const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer,
- vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y,
- const float *kernelX, uint32_t kernelX_width, const float *kernelY, uint32_t kernelY_width,
- float bias, Pixel_16F backgroundColor, vImage_Flags flags)
- VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
/*!
* @function vImageSepConvolve_Planar16U
diff -ruN /Applications/Xcode_14.0.0-beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Geometry.h /Applications/Xcode_14.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Geometry.h
--- /Applications/Xcode_14.0.0-beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Geometry.h 2022-08-05 12:47:43.000000000 -0500
+++ /Applications/Xcode_14.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/Geometry.h 2022-08-03 21:07:18.000000000 -0500
@@ -145,9 +145,6 @@
VIMAGE_PF vImage_Error vImageRotate_ARGB16U( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, float angleInRadians, const Pixel_ARGB_16U backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageRotate_ARGB16S( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, float angleInRadians, const Pixel_ARGB_16S backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageRotate_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, float angleInRadians, const Pixel_FFFF backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
-VIMAGE_PF vImage_Error vImageRotate_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, float angleInRadians, const Pixel_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageRotate_CbCr16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, float angleInRadians, const Pixel_16F16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageRotate_ARGB16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, float angleInRadians, const Pixel_ARGB_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
/*
* vImageScale_<fmt>
@@ -182,22 +179,14 @@
* of the filter.
*
* vImageScale_<fmt>() does not work in place
- * The ARGB8888, ARGB16U, ARGB16S, ARGB16F and ARGBFFFF functions work equally well on
+ * The ARGB8888, ARGB16U, ARGB16S and ARGBFFFF functions work equally well on
* other channel orderings of 4-channel images, such as RGBA or BGRA.
*
* Acceptable flags are kvImageEdgeExtend, kvImageDoNotTile,
- * kvImageHighQualityResampling, kvImageNoFlags and, for 16F images,
- * kvImageUseFP16Accumulator (see further details below).
+ * kvImageHighQualityResampling, kvImageNoFlags.
* If no edging mode is passed, kvImageEdgeExtend is used.
- *
- * For the scaling functions operating on Planar16F, CbCr16F, and ARGB16F images,
- * the flag kvImageUseFP16Accumulator is also allowed. This will enforce all
- * internal filtering operations to use 16-bit half-precision floating-point
- * arithmetic rather than the default 32-bit single-precision arithmetic when
- * the architecture of the CPU supports it. This results in up to 2x performance
- * improvements but at the expense of a less precise result; typically 2-3 bits
- * of precision is lost.
-
+ * Developers using vImageScale_<fmt> on MacOS X.3 should pass kvImageEdgeExtend
+ * in the flags field to avoid ringing artifacts at the edges of images
*/
VIMAGE_PF vImage_Error vImageScale_Planar8( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
VIMAGE_PF vImage_Error vImageScale_Planar16S( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.10), ios(8.0), watchos(1.0), tvos(8.0));
@@ -207,9 +196,6 @@
VIMAGE_PF vImage_Error vImageScale_ARGB16U( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageScale_ARGB16S( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageScale_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
-VIMAGE_PF vImage_Error vImageScale_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageScale_CbCr16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageScale_ARGB16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
VIMAGE_PF vImage_Error
vImageScale_CbCr8(
@@ -272,9 +258,6 @@
VIMAGE_PF vImage_Error vImageAffineWarp_ARGB16U( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform *transform, const Pixel_ARGB_16U backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageAffineWarp_ARGB16S( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform *transform, const Pixel_ARGB_16S backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageAffineWarp_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform *transform, const Pixel_FFFF backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
-VIMAGE_PF vImage_Error vImageAffineWarp_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform *transform, const Pixel_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageAffineWarp_CbCr16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform *transform, const Pixel_16F16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageAffineWarp_ARGB16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform *transform, const Pixel_ARGB_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
#if VIMAGE_AFFINETRANSFORM_DOUBLE_IS_AVAILABLE
/* A single precision transformation matrix is often not enough. This one uses double precision. */
@@ -284,9 +267,6 @@
VIMAGE_PF vImage_Error vImageAffineWarpD_ARGB16U( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform_Double *transform, const Pixel_ARGB_16U backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageAffineWarpD_ARGB16S( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform_Double *transform, const Pixel_ARGB_16S backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageAffineWarpD_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform_Double *transform, const Pixel_FFFF backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(10.8), ios(6.0), watchos(1.0), tvos(6.0));
-VIMAGE_PF vImage_Error vImageAffineWarpD_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform_Double *transform, const Pixel_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageAffineWarpD_CbCr16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform_Double *transform, const Pixel_16F16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageAffineWarpD_ARGB16F( const vImage_Buffer *src, const vImage_Buffer *dest, void *tempBuffer, const vImage_AffineTransform_Double *transform, const Pixel_ARGB_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
#endif
#if VIMAGE_CGAFFINETRANSFORM_IS_AVAILABLE
@@ -330,9 +310,6 @@
VIMAGE_PF vImage_Error vImageHorizontalReflect_ARGB16U( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageHorizontalReflect_ARGB16S( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageHorizontalReflect_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
-VIMAGE_PF vImage_Error vImageHorizontalReflect_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageHorizontalReflect_CbCr16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageHorizontalReflect_ARGB16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
VIMAGE_PF vImage_Error vImageVerticalReflect_Planar8( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
VIMAGE_PF vImage_Error vImageVerticalReflect_Planar16U( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(6.0), watchos(1.0), tvos(6.0));
@@ -341,9 +318,6 @@
VIMAGE_PF vImage_Error vImageVerticalReflect_ARGB16U( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageVerticalReflect_ARGB16S( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageVerticalReflect_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
-VIMAGE_PF vImage_Error vImageVerticalReflect_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageVerticalReflect_CbCr16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
-VIMAGE_PF vImage_Error vImageVerticalReflect_ARGB16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(13.0), ios(16.0), watchos(9.0), tvos(16.0));
/*
* The Rotate90 function does simple 0, 90, 180 or 270 degree rotation according to the value of a rotation constant
@@ -382,9 +356,6 @@
VIMAGE_PF vImage_Error vImageRotate90_ARGB16U( const vImage_Buffer *src, const vImage_Buffer *dest, uint8_t rotationConstant, const Pixel_ARGB_16U backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageRotate90_ARGB16S( const vImage_Buffer *src, const vImage_Buffer *dest, uint8_t rotationConstant, const Pixel_ARGB_16S backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageRotate90_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, uint8_t rotationConstant, const Pixel_FFFF backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2,4) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
-VIMAGE_PF vImage_Error vImageRotate90_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, uint8_t rotationConstant, const Pixel_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(11.1), ios(15.0), watchos(8.0), tvos(15.0));
-VIMAGE_PF vImage_Error vImageRotate90_CbCr16F( const vImage_Buffer *src, const vImage_Buffer *dest, uint8_t rotationConstant, const Pixel_16F16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(11.1), ios(15.0), watchos(8.0), tvos(15.0));
-VIMAGE_PF vImage_Error vImageRotate90_ARGB16F( const vImage_Buffer *src, const vImage_Buffer *dest, uint8_t rotationConstant, const Pixel_ARGB_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(11.1), ios(15.0), watchos(8.0), tvos(15.0));
/*
* The Shearing functions use resampling to rescale a image and offset it to
@@ -398,26 +369,17 @@
* is done by adjusting the resampling kernel.
*
* All four channel geometry functions (i.e. those that support ARGB8888,
- * ARGB16U, ARGB16S, ARGB16F, or ARGBFFFF images) work equally well on four
- * channel images with other channel orderings such as RGBA or BGRA.
+ * ARGB16U, ARGB16S or ARGBFFFF images) work equally well on four channel
+ * images with other channel orderings such as RGBA or BGRA.
*
* These functions do not work in place.
*
* Acceptable flags are kvImageEdgeExtend, kvImageBackgroundColor,
- * kvImageDoNotTile, kvImageNoFlags and, for 16F images,
- * kvImageUseFP16Accumulator (see further details below).
+ * kvImageDoNotTile, kvImageNoFlags.
* Only one of kvImageEdgeExtend or kvImageBackgroundColor may be used.
* If none is used then the edging mode is undefined and the results may be
* unpredictable.
*
- * For the geometry functions operating on Planar16F, CbCr16F, and ARGB16F images,
- * the flag kvImageUseFP16Accumulator is also allowed. This will enforce all
- * internal filtering operations to use 16-bit half-precision floating-point
- * arithmetic rather than the default 32-bit single-precision arithmetic when
- * the architecture of the CPU supports it. This results in up to 2x performance
- * improvements but at the expense of a less precise result; typically 2-3 bits
- * of precision is lost.
- *
* The ResamplingFilter is created using vImageNewResamplingFilter or
* vImageNewResamplingFilterForFunctionUsingBuffer. The latter gives more
* precise control over where the memory is allocated and which filter function
@@ -432,9 +394,6 @@
VIMAGE_PF vImage_Error vImageHorizontalShear_ARGB16U( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float xTranslate, float shearSlope, ResamplingFilter filter, const Pixel_ARGB_16U backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageHorizontalShear_ARGB16S( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float xTranslate, float shearSlope, ResamplingFilter filter, const Pixel_ARGB_16S backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageHorizontalShear_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float xTranslate, float shearSlope, ResamplingFilter filter, const Pixel_FFFF backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
-VIMAGE_PF vImage_Error vImageHorizontalShear_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float xTranslate, float shearSlope, ResamplingFilter filter, const Pixel_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
-VIMAGE_PF vImage_Error vImageHorizontalShear_CbCr16F(const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float xTranslate, float shearSlope, ResamplingFilter filter, const Pixel_16F16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
-VIMAGE_PF vImage_Error vImageHorizontalShear_ARGB16F(const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float xTranslate, float shearSlope, ResamplingFilter filter, const Pixel_ARGB_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
VIMAGE_PF vImage_Error vImageVerticalShear_Planar8( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float yTranslate, float shearSlope, ResamplingFilter filter, Pixel_8 backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
VIMAGE_PF vImage_Error vImageVerticalShear_Planar16S( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float yTranslate, float shearSlope, ResamplingFilter filter, Pixel_16S backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.10), ios(8.0), watchos(1.0), tvos(8.0));
@@ -444,9 +403,6 @@
VIMAGE_PF vImage_Error vImageVerticalShear_ARGB16U( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float yTranslate, float shearSlope, ResamplingFilter filter, const Pixel_ARGB_16U backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageVerticalShear_ARGB16S( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float yTranslate, float shearSlope, ResamplingFilter filter, const Pixel_ARGB_16S backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageVerticalShear_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float yTranslate, float shearSlope, ResamplingFilter filter, const Pixel_FFFF backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.3), ios(5.0), watchos(1.0), tvos(5.0));
-VIMAGE_PF vImage_Error vImageVerticalShear_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float yTranslate, float shearSlope, ResamplingFilter filter, const Pixel_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
-VIMAGE_PF vImage_Error vImageVerticalShear_CbCr16F(const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float yTranslate, float shearSlope, ResamplingFilter filter, const Pixel_16F16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
-VIMAGE_PF vImage_Error vImageVerticalShear_ARGB16F(const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, float yTranslate, float shearSlope, ResamplingFilter filter, const Pixel_ARGB_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
/* Versions of shear functions that take coordinates in double precision */
VIMAGE_PF vImage_Error vImageHorizontalShearD_Planar8( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double xTranslate, double shearSlope, ResamplingFilter filter, Pixel_8 backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.8), ios(6.0), watchos(1.0), tvos(6.0));
@@ -455,9 +411,6 @@
VIMAGE_PF vImage_Error vImageHorizontalShearD_ARGB16U( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double xTranslate, double shearSlope, ResamplingFilter filter, const Pixel_ARGB_16U backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageHorizontalShearD_ARGB16S( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double xTranslate, double shearSlope, ResamplingFilter filter, const Pixel_ARGB_16S backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageHorizontalShearD_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double xTranslate, double shearSlope, ResamplingFilter filter, const Pixel_FFFF backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.8), ios(6.0), watchos(1.0), tvos(6.0));
-VIMAGE_PF vImage_Error vImageHorizontalShearD_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double xTranslate, double shearSlope, ResamplingFilter filter, const Pixel_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
-VIMAGE_PF vImage_Error vImageHorizontalShearD_CbCr16F(const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double xTranslate, double shearSlope, ResamplingFilter filter, const Pixel_16F16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
-VIMAGE_PF vImage_Error vImageHorizontalShearD_ARGB16F(const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double xTranslate, double shearSlope, ResamplingFilter filter, const Pixel_ARGB_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
VIMAGE_PF vImage_Error vImageVerticalShearD_Planar8( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double yTranslate, double shearSlope, ResamplingFilter filter, Pixel_8 backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.8), ios(6.0), watchos(1.0), tvos(6.0));
VIMAGE_PF vImage_Error vImageVerticalShearD_PlanarF( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double yTranslate, double shearSlope, ResamplingFilter filter, Pixel_F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.8), ios(6.0), watchos(1.0), tvos(6.0));
@@ -465,9 +418,6 @@
VIMAGE_PF vImage_Error vImageVerticalShearD_ARGB16U( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double yTranslate, double shearSlope, ResamplingFilter filter, const Pixel_ARGB_16U backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageVerticalShearD_ARGB16S( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double yTranslate, double shearSlope, ResamplingFilter filter, const Pixel_ARGB_16S backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.9), ios(7.0), watchos(1.0), tvos(7.0));
VIMAGE_PF vImage_Error vImageVerticalShearD_ARGBFFFF( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double yTranslate, double shearSlope, ResamplingFilter filter, const Pixel_FFFF backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(10.8), ios(6.0), watchos(1.0), tvos(6.0));
-VIMAGE_PF vImage_Error vImageVerticalShearD_Planar16F( const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double yTranslate, double shearSlope, ResamplingFilter filter, const Pixel_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
-VIMAGE_PF vImage_Error vImageVerticalShearD_CbCr16F(const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double yTranslate, double shearSlope, ResamplingFilter filter, const Pixel_16F16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
-VIMAGE_PF vImage_Error vImageVerticalShearD_ARGB16F(const vImage_Buffer *src, const vImage_Buffer *dest, vImagePixelCount srcOffsetToROI_X, vImagePixelCount srcOffsetToROI_Y, double yTranslate, double shearSlope, ResamplingFilter filter, const Pixel_ARGB_16F backColor, vImage_Flags flags ) VIMAGE_NON_NULL(1,2) API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
VIMAGE_PF vImage_Error
vImageHorizontalShear_CbCr8(
diff -ruN /Applications/Xcode_14.0.0-beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/vImage_Types.h /Applications/Xcode_14.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/vImage_Types.h
--- /Applications/Xcode_14.0.0-beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/vImage_Types.h 2022-08-05 15:54:09.000000000 -0500
+++ /Applications/Xcode_14.0.0-rc.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Headers/vImage_Types.h 2022-08-03 21:07:17.000000000 -0500
@@ -303,36 +303,6 @@
typedef int16_t Pixel_ARGB_16S[4]; /* four-channel 16-bit signed pixel */
/*!
- @typedef Pixel_16F
- @abstract A 16-bit half precision floating-point planar pixel value.
- @discussion Typically, these have range [0,1] though other values are generally allowed.
- Defined as a 16-bit integer since this is a storage format only.
- */
-typedef uint16_t Pixel_16F; /* 16-bit floating point planar pixel value */
-
-/*!
- @typedef Pixel_16F16F
- @abstract A two-channel, 16-bit floating-point per channel pixel.
- @discussion The channel order is generally given by the function that consumes the value.
- */
-typedef uint16_t Pixel_16F16F[2]; /* CbCr interleaved 16-bit floating point per channel pixel value. uint16_t[2] = { Cb, Cr } */
-
-/*!
- @typedef Pixel_ARGB_16F
- @abstract A four-channel, 16-bit floating-point per channel pixel.
- @discussion The channel order is generally given by the function that consumes the value.
- */
-typedef uint16_t Pixel_ARGB_16F[4]; /* ARGB interleaved 16-bit floating point per channel pixel value. uint16_t[2] = { Cb, Cr } */
-
-
-/*!
- @typedef Pixel_FF
- @abstract A two-channel, single precision floating-point per channel pixel.
- @discussion The channel order is generally given by the function that consumes the value.
- */
-typedef float Pixel_FF[2]; /* CbCr interleaved (floating point) pixel value. float[2] = { Cb, Cr } */
-
-/*!
@typedef ResamplingFilter
@abstract A ResamplingFilter is an opaque structure used by vImage to hold precalculated filter coefficients for a resampling filter,
such as a Lanczos or Gaussian resampling filter.
@@ -563,13 +533,6 @@
encounter precision issues with HDR content. For these cases, if you know you have HDR content,
pass kvImageHDRContent and a (typically slower) alternative method will be used for these
sources.
-
- @constant kvImageUseFP16Accumulator Use a faster and lower precision internal arithmetic, when available,
- for the functions operating on 16-bit half-precision floating-point pixels (Pixel16_F).
- This will enforce for example convolutions to be computed with 16-bit half-precision floating-point
- arithmetic internally, when architecture of the CPU supports it. The arm64e architectures supports it
- but none of the Intel architectures.
-
*/
typedef VIMAGE_OPTIONS_ENUM(vImage_Flags, uint32_t)
{
@@ -620,14 +583,9 @@
/* Pass to disable clamping is some conversions to floating point formats. Use this if the input data
may describe values outside [0,1] which should be preserved.. */
- kvImageDoNotClamp VIMAGE_ENUM_AVAILABLE_STARTING( __MAC_10_12, __IPHONE_9_3 ) = 2048,
-
- /* Use a lower precision, faster floating-point arithmetic for all internal computations when available.
- This applies to all functions operating on 16-bit half-precision floating-point pixels, Pixel_16F. */
- kvImageUseFP16Accumulator /*VIMAGE_ENUM_AVAILABLE_STARTING( __MAC_13_0, __IPHONE_16_0 )*/ = 4096,
+ kvImageDoNotClamp VIMAGE_ENUM_AVAILABLE_STARTING( __MAC_10_12, __IPHONE_9_3 ) = 2048
};
-
-
+
/*!
@class vImageConverterRef
@abstract An opaque type which contains a decription of a conversion from one CoreGraphics image format to another.
- README
- xcode13.0 Binding Status
- xcode13.1 Binding Status
- xcode13.2 Binding Status
- xcode13.3 Binding Status
- xcode13.4 Binding Status
- xcode14.0 Binding Status
- xcode14.1 Binding Status
- xcode14.2 Binding Status
- xcode14.3 Binding Status
- xcode15.0 Binding Status
- xcode15.1 Binding Status
- xcode15.3 Binding Status
- xcode15.4 Binding Status
- xcode16.0 Binding Status
- xcode16.1 Binding Status
- xcode16.2 Binding Status