Здравствуйте, MarcoPolo, Вы писали:
MP>MP>params.width = (width + 15) & ~15;
MP>
Это округление до большего, кратного 16:
&~15 эквиваленто &0xfffffff0, т.е. сбросу младших 4 бит.
Скорее всего нужно для округления до границы большего блока размера 16.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Здравствуйте, MarcoPolo, Вы писали:
MP>Зачем может понадобится делать так
MP>MP>params.width = (width + 15) & ~15;
MP>
MP>в контексте обработки изображений?
Оптимизированная версия общей формулы для выравнивания ширины по заданному значению: "alidned_width = (width + align — 1) / align * align". В случае если align — степень двойки, то " / align * align" можно заменить на "& ~(align — 1)"
Здравствуйте, MarcoPolo, Вы писали:
MP>Зачем может понадобится делать так
MP>MP>params.width = (width + 15) & ~15;
MP>
MP>в контексте обработки изображений?
Это называется выравнивание
Зачем может понадобится делать так
params.width = (width + 15) & ~15;
в контексте обработки изображений?
Здравствуйте, MarcoPolo, Вы писали:
MP>Зачем может понадобится делать так
MP>MP>params.width = (width + 15) & ~15;
MP>
MP>в контексте обработки изображений?
Выглядит как округление вверх с точностью до 16 (да, шестнадцати).
Например:
16 -> 16
17 -> 32
31 -> 32
32 -> 32
Здравствуйте, MarcoPolo, Вы писали:
MP>Зачем может понадобится делать так
MP>MP>params.width = (width + 15) & ~15;
MP>
MP>в контексте обработки изображений?
Просто выравнивание. Чтобы каждая строка изображения (ее адрес) был кратен 16. Например, для обработки через SSE (хотя для AVX2 маловато, а для AVX512 тем более).
Да, в конце каждой строки остается паддинг, зато по памяти все хорошо выровнено.