C programming with Arm Neon/SIMD
Budget: ₹1,500 – ₹12,500 INR
We need two relatively short functions to be written. The target platform for these is Arm64 Linux.
1. Write a "C" function to convert from YUY422 colorspace to RGB, utilizing Arm Neon SIMD for max speed, since we are processing video frames in real-time. Using SiMD shoud be at least 4x faster than not. Need someone who is experienced with C and Neon simd intrinsics. We will provide some test data to use to test the function, or you can use a website that has an online converter we will supply the url.
The basic color conversion formula is:
R = Y + 1.402 * (Cr - 128)
G = Y - 0.344 * (Cb - 128) - 0.714 * (Cr - 128)
B = Y + 1.772 * (Cb - 128)
We want the function signature to be : void convertYUYVtoRGB8888_neon (uint32_t *rgbDest, const uint16_t *yuyvSrc, int pixelsWidth, int pixelsHeight)
YUYV uses 16 bit pixels, but a color conversion requires 2 pixels, as the Y value is shared between each 2 pixels.
The resulting RGB pixels are ARGB32, with the alpha channel set to 0, so basically RGB.
2. Write an image resize/re-sample function using bi-linear interpolation. This is for a realtime image processing application and needs to be implemented using Arm Neon SIMD. We are currently using a nearest neighboor interpolation resize, which is fast but relatively poor quality. We want the function signature to be : void resample_image_neon(uint32_t srcRgbbuf, uint32_t destRgbBuf, int imgWidth, int imgHeight, float scaleX, float scaleY). it needs to be no slower than 30% of the nearest-neighboor approach if possible.
We have a 5-7 day window for needing these functions.
If this works out well, we have plenty of more work available.
Feel free to ask any questions.
1. Write a "C" function to convert from YUY422 colorspace to RGB, utilizing Arm Neon SIMD for max speed, since we are processing video frames in real-time. Using SiMD shoud be at least 4x faster than not. Need someone who is experienced with C and Neon simd intrinsics. We will provide some test data to use to test the function, or you can use a website that has an online converter we will supply the url.
The basic color conversion formula is:
R = Y + 1.402 * (Cr - 128)
G = Y - 0.344 * (Cb - 128) - 0.714 * (Cr - 128)
B = Y + 1.772 * (Cb - 128)
We want the function signature to be : void convertYUYVtoRGB8888_neon (uint32_t *rgbDest, const uint16_t *yuyvSrc, int pixelsWidth, int pixelsHeight)
YUYV uses 16 bit pixels, but a color conversion requires 2 pixels, as the Y value is shared between each 2 pixels.
The resulting RGB pixels are ARGB32, with the alpha channel set to 0, so basically RGB.
2. Write an image resize/re-sample function using bi-linear interpolation. This is for a realtime image processing application and needs to be implemented using Arm Neon SIMD. We are currently using a nearest neighboor interpolation resize, which is fast but relatively poor quality. We want the function signature to be : void resample_image_neon(uint32_t srcRgbbuf, uint32_t destRgbBuf, int imgWidth, int imgHeight, float scaleX, float scaleY). it needs to be no slower than 30% of the nearest-neighboor approach if possible.
We have a 5-7 day window for needing these functions.
If this works out well, we have plenty of more work available.
Feel free to ask any questions.