Вызовите ядро ​​Renderscrip внутри функции - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь вызвать ядро ​​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 ]

0 голосов
/ 01 марта 2019

Я получаю кадр с камеры с линией на нем (которая начинается где-то у нижнего края).Мне нужно получить каждый пиксель левого и правого края линии в двух массивах (один для левого края, один для правого края), причем первый элемент массива будет пикселем у нижнего края, а последнийэлемент в массиве - либо пиксель на левом, верхнем или правом краю.

Кадр, который я получаю с камеры, находится в YUV.Поэтому я преобразую его в двоичное изображение (строка черного цвета, фон в белый цвет) с помощью Renderscript (это работает).

Я мог бы отправить обработанный кадр обратно в Java, установить его в растровое изображение и выполнить строку-обнаружение на растровом изображении.Однако чтение и запись данных в растровое изображение происходит медленно (и мне нужно, чтобы оно было максимально быстрым), поэтому я пытался сделать все в Renderscript.Ядро, размещенное в моем первом посте, ищет следующий пиксель в строке (есть 8 возможностей, поэтому я хотел бы проверить 8 возможностей параллельно).

0 голосов
/ 01 марта 2019

Это не совсем то, как RS предназначен для использования.Движок RS вызывает ваше ядро ​​с соответствующими данными, и ваше ядро ​​может вызывать другие функции.Тем не менее, это не совсем обычный случай, когда функция внутри вашего кода RS вызывает функцию в ядре RS.

...