Java 我想给android webrtc添加一个过滤器。例如,我想给视频帧添加一个模糊效果
在寻找将过滤器应用于webrtc的示例时,我遵循了转换视频帧的部分Java 我想给android webrtc添加一个过滤器。例如,我想给视频帧添加一个模糊效果,java,android,filter,webrtc,blur,Java,Android,Filter,Webrtc,Blur,在寻找将过滤器应用于webrtc的示例时,我遵循了转换视频帧的部分 @Override public void onFrameCaptured(VideoFrame frame) { if (this.videoEffector.needToProcessFrame()) { VideoFrame.I420Buffer originalI420Buffer = frame.getBuffer().toI420(); V
@Override
public void onFrameCaptured(VideoFrame frame) {
if (this.videoEffector.needToProcessFrame()) {
VideoFrame.I420Buffer originalI420Buffer = frame.getBuffer().toI420();
VideoFrame.I420Buffer effectedI420Buffer =
this.videoEffector.processByteBufferFrame(
originalI420Buffer, frame.getRotation(), frame.getTimestampNs());
VideoFrame effectedVideoFrame = new VideoFrame(
effectedI420Buffer, frame.getRotation(), frame.getTimestampNs());
originalI420Buffer.release();
frame.release();
this.originalObserver.onFrameCaptured(effectedVideoFrame);
} else {
this.originalObserver.onFrameCaptured(frame);
}
}
我使用onFrameCapturerd函数成功地应用了模糊过滤器。
然而,GC发生得太多了。所以相机工作得太慢了。
我去了很多地方,发现
ByteBuffer outRgbaBuffer = ByteBuffer.allocateDirect(width * height * 4).order(ByteOrder.nativeOrder());
ByteBuffer dataYBuffer = ByteBuffer.allocateDirect(strideY * height).order(ByteOrder.nativeOrder());
ByteBuffer dataUBuffer = ByteBuffer.allocateDirect(strideU * height).order(ByteOrder.nativeOrder());
ByteBuffer dataVBuffer = ByteBuffer.allocateDirect(strideV * height).order(ByteOrder.nativeOrder());
GC继续在这条线上运行。allocateDirect方法如何解决?
或者,您可以告诉我另一种将筛选器应用于webrtc的方法吗?您在这里使用的是什么?processByteBufferFrame()找到解决方案了吗?声明在方法外部,而不是在方法内部