簡體   English   中英

如何在預覽到Android Camera2 API的過程中獲取指向每個幀數據的指針?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM