안드 초보입니다 ㅠㅠ
안드 개발에서 Camera2 api로 써서 작업중인데요
아래처럼 ImageFormat.YUV_420_888 으로 뽑아서 reader.acquireNextImage() 으로 image를 뽑아서 결국 NV21 로 뽑아내는게 목적입니다만...
mImageReader_for_preview = ImageReader.newInstance(new_ww, new_hh, ImageFormat.YUV_420_888, 1);
mImageReader_for_preview.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
if (reader != null) {
Image image = null;
image = reader.acquireNextImage();
byte[] data = ImageUtils.YUV_420_888toNV21(image);
현재 아래 부분( YUV_420_888toNV21 ) 에서 퍼포먼스가 너무 떨어져서요 ㅠㅠ ;; 앱이 버벅거리거나 느려집니다 ㅠㅠ
개인적인 생각으론 c++이나 OpenCV?? JavaCV?? 를 써야하나 싶기도 한데;; 어떻게 해야 이부분의 퍼포먼스를 끌어올릴수 있는지요?;;
public static byte[] YUV_420_888toNV21(Image image) {
byte[] nv21;
ByteBuffer yBuffer = image.getPlanes()[0].getBuffer();
ByteBuffer vuBuffer = image.getPlanes()[2].getBuffer();
int ySize = yBuffer.remaining();
int vuSize = vuBuffer.remaining();
nv21 = new byte[ySize + vuSize];
yBuffer.get(nv21, 0, ySize);
vuBuffer.get(nv21, ySize, vuSize);
return nv21;
}