Я работаю над DJI Mobile SDK в студии Android. Я хочу применить фильтры Opencv к прямой трансляции видео с фантомной камеры дрона. Прямая трансляция видео находится в байтовом буфере [] videoBuffer, как показано в коде.
mReceivedVideoDataCallBack = new VideoFeeder.VideoDataCallback() {
@Override
public void onReceive(byte[] videoBuffer, int size) {
if (mCodecManager != null) {
mCodecManager.sendDataToDecoder(videoBuffer, size);
}
}
};
Я думаю, что один из способов - сначала преобразовать byte [] videoBuffer в Mat в java, а затем передать адрес Mat в класс extern C.
Во-вторых, передать byte [] videoBuffer в extern C как jbyteArray, а затем преобразовать этот jbyteArray в Mat в C.
Я не знаю, какую роль играет размер int в коде.
Я столкнулся с проблемой в обоих. Любая помощь будет оценена по достоинству. Я застрял в этом дерьме больше месяца. :(




videoBuffer может содержать недопустимые байты, поэтому нам нужно использовать 'size', чтобы указать допустимую часть, что означает, что допустимые байты начинаются с videoBuffer [0] и заканчиваются последним байтом: videoBuffer [size-1]