Вызовите ядро Renderscrip внутри функции
Я пытаюсь вызвать ядро Renderscript внутри функции в том же файле Renderscript, но я не знаю, как это сделать (и документация Google на самом деле не помогает).
Итак, я хочу назвать это ядро:
uchar __attribute__((kernel)) nextPixel(uint32_t x) {
tImgIndexB = (uint32_t) (lBlackX[rsGetElementAt_uchar(num, x)] + lX) * 426 + (lBlackY[rsGetElementAt_uchar(num, x)] + lY);
tImgIndexW = (uint32_t) (lWhiteX[rsGetElementAt_uchar(num, x)] + lX) * 426 + (lWhiteY[rsGetElementAt_uchar(num, x)] + lY);
if (tImg[tImgIndexB] == 0 && tImg[tImgIndexW] == 1) {
output = 1;
tImg[lX*426+lY] = 3;
//lX += lBlackX[rsGetElementAt_uchar(num, x)];
//lY += lBlackY[rsGetElementAt_uchar(num, x)];
} else {
output = 0;
}
return output;
}
в такую функцию:
void function() {
// call kernel 'nextPixel'
}
Заранее спасибо.
2 ответа
Это не совсем то, как RS предназначен для использования. Движок RS вызывает ваше ядро с соответствующими данными, и ваше ядро может вызывать другие функции. Тем не менее, это не совсем обычный случай, когда функция внутри вашего кода RS вызывает функцию в ядре RS.
Я получаю кадр с камеры с линией на нем (который начинается где-то у нижнего края). Мне нужно получить каждый пиксель левого и правого края линии в двух массивах (один для левого края, один для правого края), причем первый элемент массива будет пикселем у нижнего края, а последний элемент в массиве либо пиксель на левом, верхнем или правом краю.
Кадр, который я получаю от камеры, находится в YUV. Поэтому я преобразую его в двоичное изображение (линия черного цвета, фон в белом) с помощью Renderscript (это работает).
Я мог бы отправить обработанный кадр обратно в Java, установить его в растровое изображение и выполнить обнаружение строки в растровом изображении. Однако чтение и запись данных в растровое изображение происходит медленно (и мне нужно, чтобы оно было максимально быстрым), поэтому я пытался сделать все в Renderscript. Ядро, размещенное в моем первом посте, ищет следующий пиксель в строке (есть 8 возможностей, поэтому я хотел бы проверить 8 возможностей параллельно).