[英]How to get a pointer to each frame data during preview into Android Camera2 API?
我正在嘗試使用camera2 API在預覽期間獲取視頻幀數據幀。 我如何獲得指向每個幀數據的指針。 在此站點上顯示幀預覽之前,請將幀數據指針以及包含視頻數據格式的結構發送到C ++函數(JNI本機)。 這是可能的? 請給我一些建議來幫助我? 我先謝謝你
關於從Java預覽中獲取幀,可以將ImageReader
添加到捕獲中。 特別是,您將需要啟用ImageReader.OnImageAvailableListener (在此處閱讀文檔) 。 從該ImageReader中,您可以使用類似於以下代碼的原始字節:
ImageReader.OnImageAvailableListener mOnImageAvailableListener =
new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image img = null;
img = reader.acquireLatestImage();
Result rawResult = null;
try {
if (img == null) throw new NullPointerException("cannot be null");
ByteBuffer buffer = img.getPlanes()[0].getBuffer();
byte[] data = new byte[buffer.remaining()];
buffer.get(data);
Bitmap b = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
} catch (ReaderException ignored) {
} catch (NullPointerException ex) {
} finally {
mQrReader.reset();
if (img != null)
img.close();
}
}
};
您必須創建一個ImageReader
,並設置其偵聽器
mImageReader = ImageReader.newInstance(...);
mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, (...));
您可以通過以下方式添加到捕獲會話:
Surface surface = new Surface(texture);
Surface mImageSurface = mImageReader.getSurface();
mPreviewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mPreviewRequestBuilder.addTarget(mImageSurface);
mPreviewRequestBuilder.addTarget(surface);
請注意,這是偽代碼來指導您,可能尚未准備好直接粘貼並直接工作,但會為您提供如何進行的良好指導。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.