我正在Android工作室中开发DJI移动SDK。我想对幻影无人机摄像头的视频直播应用Opencv过滤器。视频直播源位于字节[]的视频缓冲区中,如代码所示。

mReceivedVideoDataCallBack = new VideoFeeder.VideoDataCallback() {
        @Override
        public void onReceive(byte[] videoBuffer, int size) {
            if (mCodecManager != null) {
                mCodecManager.sendDataToDecoder(videoBuffer, size);
            }
        }
    };

我认为的一种方法是首先在java中将byte[]videoBuffer转换为Mat,然后将Mat地址传递给外部C类。
第二个方法是将byte[]videoBuffer作为jbyteArray传递给extern C,然后将这个jbyteArray转换为C中的Mat。
我不知道in t size在代码中的作用。
我两方面都面临问题。任何帮助都将不胜感激。一个多月来我一直在做这件事。:(

最佳答案

videoBuffer可能包含无效字节,因此需要使用“size”来指示有效部分,这意味着有效字节从videoBuffer[0]开始,以最后一个字节结尾:videoBuffer[size-1]

08-27 13:35