<div dir="ltr"><div><div><div><div><div><div>Hi<br><br></div>Trying to add some speed-up for handling some gstreamer RGB streams, using liborc seems the right path for new plugins although it is not necessary the easiest path. Liborc does not seem to have a functional mailing list so I hope this is the right place to ask questions.<br><br></div>The goal is to implement the following code using SIMD with liborc<br><br>void AddAlphaChannel(u_int8_t *dst, u_int8_t *src, u_int32_t w, u_int32_t h)<br>{<br>        for (int row=0 ; row < h ; row++)<br>                for (int col=0; col < w ; col++) {<br>                        *dst++ = *src++;<br>                        *dst++ = *src++;<br>                        *dst++ = *src++;<br>                        *dst++ = 0xff;<br>                }<br>}<br><br></div>Obviously the source and destination are arrays with width*height pixels.<br>Trying to do this using liborc seems to be hard, at least right now. The code I tried in first go is this<br><br><div style="margin-left:40px">.function AddAlphaChannel<br>.dest 4 dst orc_uint32<br>.source 1 src orc_uint8<br>.const 1 a 255<br>.temp 1 g<br>.temp 1 r<br>.temp 2 bg<br>.temp 2 ra<br><br>loadoffb g src 1<br>loadoffb r src 2<br>mergebw bg src g<br>mergebw ra r a<br>mergewl dst bg ra<br></div><br></div>However the code is wrong since the destination array has 4 bytes per pixel and the source array only has 3 bytes per pixel. Any hints on how to use liborc on arrays where source and destinations has different number of bytes per set (per pixel).<br><br></div>Best regards<br></div>Peter MM<br></div>