I have a buffer filled with pixel data in pattern UY1VY2... and I want to unpack that to another buffer in pattern Y1UVY2UV... So basically if I had a vector of that data I want following operation
for(x=0; x<sizeof(in_buffer); x+=4)
out_buffer.push_back(in_buffer[x+1]+ in_buffer[x+0] + in_buffer [x+2: x+4]) ---> [Y1,U,V,Y2,U,V]
Can this kind of operation be implemented with halide? Thanks!
Sure, something like this ought to work:
out_buffer(c, x) = in_buffer(mux(c, {1, 0, c}), x);
Then in the schedule, you'd use set_bounds
and unroll
to make sure the c
loop didn't actually have to check the value of c
. See this tutorial for more details: https://halide-lang.org/tutorials/tutorial_lesson_16_rgb_generate.html