2013-12-09 3 views
0

Я намерен обрабатывать данные RGB через RenderScript.Функциональная подпись для функции __attribute __ (kernel) и использование «OutAllocation»

Для этого я создал Отчисления в Java и передавая их функции RS Kernel, как показано ниже:

uchar3 __attribute__((kernel)) invert(uchar3 v_in, uint32_t v_out) { 
v_in.r = ...; 
v_in.g = ...; 
v_in.b = ...; 
} 

Однако в идеале я хотел бы работать на v_out подобным образом, то есть установка значений для v_out.r, v_out.g и v_out.b. В настоящее время я не могу сделать это с uint32_t v_out.

Теперь, если я определяю выше RS ядро ​​как:

uchar3 __attribute__((kernel)) invert(uchar3 v_in, uchar3 v_out) { 
... 
} 

я получаю ниже ошибка компиляции времени: ошибка: Неожиданное ядро ​​инвертировать() параметр 'v_out' типа 'uchar3 *

Пожалуйста, предложите, как это решить.

время компиляции:

error: Unexpected kernel invert() parameter 'v_out' of type 'uchar3 *' 

ответ

1

вы должны быть определяющим это как

uchar3 __attribute__((kernel)) invert(uchar3 in); 

, что функция будет отражаться в ScriptC_.forEach_invert (Выделение в, выделение из). каждый элемент in in будет передан для инвертирования, и каждое значение, возвращаемое из инверта, будет записано в соответствующее местоположение в out.

+0

Спасибо за ваш ответ. Эта часть работает хорошо, но я все еще не могу вернуть эти «обработанные» данные в java. Мой тестовый код (для 5 элементов) выглядит так: \t 'mScript.forEach_invert (ain, aout); \t byte [] output = {0, 0, 0, 0, 0}; \t aout.copyTo (output); ' Я что-то пропустил? – Gagan

+0

Думаю, что это сработает. –

+0

Да, я получил значения обратно в Java. Было несоответствие в байтах []. – Gagan

1

Определите собственную локальную переменную uchar3 типа, а затем заполнить его до возвращения его:

uchar3 __attribute__((kernel)) invert(uchar3 in) { 
    uchar3 out; 
    out.r = ... 
    out.g = ... 
    out.b = ... 
    return out; 
} 

компилятор достаточно умен, чтобы заметить, что вы делаете, так что не будет дополнительных копий, сделанные из вывода.

+0

Спасибо за ваш вклад. Я продвигаюсь с обоими этими подходами и обновил свое обнаружение в разделе комментариев выше. – Gagan

+0

Еще раз спасибо за ответ. Я получил значения обратно в Java. Теперь просто нужно создать свой пользовательский 24-битный элемент «Элемент» для моих ain и aout allocations.В текущей реализации возвращенные данные uchar3 имеют длину 32 бит, и я теряю r-компонент моего второго пикселя и отныне. – Gagan

Смежные вопросы