Hi,
Good to hear libyuv is working out for you, and thanks for the feedback.
There is a mail list, I've added, and feature requests generally go into 'issues'.
Sounds like 3 requests
1. planar RGB
2. build without jpeg
3. allow overread
1. planar rgb
For planar rgb, there is a ScalePlane you could call 3 times.
There is no planar to packed conversions. They do implement nicely in SIMD. I've only had minor need for such a function. The simpliest would be 4 planes to/from 4 bytes packed. That would be 2 functions. Would that suffice?
2. jpeg
I think that could be done with a GYP_DEFINE. file an issue?
3. overread
I think as is you could lie about the image size?
overead, and especially overwrite, are dangerous.
For some functions I achieved a similar win using row coalescing. If the bytes of the rows are contiguous, it treats the image as one row. But it wont work for scaling.
For 2 pass functions, which scaling often is, I'm able to do overread/write in temporary row buffers, and I sometimes have flexibility about doing vertical or horizontal operation first.
That could be extended to copy the image a row at a time into a temporary row buffer and then overread/write that.
But the main direction I plan to go is implement 'any' functions that can handle any width. Conversions are done this way and its been clean and easy enough to maintain.
Most low levels are written with overread/write in mind. e.g. a function does 16 at a time. If you tell it 17, it will do 32.
In the past cpus were more efficient with aligned memory instructions - e.g. movdqa. Newer cpus can use unaligned instructions and still benefit from aligned memory but do not require it.
I'll likely move toward removing aligned and unaligned versions of each function.
So you functions will only check the cpu and width.
For Neon and SSE2 most functions do 16 pixels at a time.
For AVX2 most do 32 pixels at a time.
With upcoming AVX512, I expect it'll be 64 pixels at a time. So you may want to align even more with that in mind.
For webcams and screens, sizes are naturally aligned. But if its general purpose images, then perhaps keep it 32 for now.