Мне нужно отменить изображение YUV с каждым байтом в LSB вместо MSB. Я прочитал Best Algorithm for Bit Reversal (from MSB->LSB to LSB->MSB) in C, но я хотел бы сделать то, что оптимизировано по ARM.Реверсирование бит LSB на MSB на ARM
int8 *image;
for(i = 0; i < size; i++) {
image[i] = reversebit8(image[i]); //Use the lookup mechanism
}
Как я контролировать формат изображения (два байта YUYV или любой перестановки), я бы ОК, чтобы реверсировать 16 бит:
int16 *image;
for(i = 0; i < size/2; i++) {
image[i] = reversebit16(image[i]);
}
Изображение идет от YUYV LSB к UYVY MSB. Или даже в 32 бит:
int32 *image;
for(i = 0; i < size/4; i++) {
image[i] = reversebit32(image[i]);
}
Изображение идет от YUYV LSB до VYUY MSB.
Вопрос: Как я могу сделать это оптимизированным способом для ARM? Неон тоже хорош.
Я думаю, что эти инструкции http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.kui0100a/armasm_cihjgdid.htm могут быть вам полезны.
Вам не нужно использовать петлю для 8-битных и 16-битных значений. Я думаю, что 'rbit', за которым следует либо' rev', либо 16-битное вращение, будет отменено * упакованное * 8-битное и 16-битное значения. Для 32 битов требуется только «rbit». –