Android Camera2 getPreviewFrame

Я пытаюсь получить рамку камеры в режиме предварительного просмотра. Я запускаю образец проекта из github https://github.com/googlesamples/android-Camera2Basic

Проблема, с которой я сталкиваюсь, заключается в получении кадра в режиме предварительного просмотра.

Вот код:

private CameraCaptureSession.CaptureCallback mCaptureCallback = new CameraCaptureSession.CaptureCallback() { private void process(CaptureResult result) { switch (mState) { case STATE_PREVIEW: { //HERE, HOW CAN I RETRIEVE THE CURRENT FRAME? break; } case STATE_WAITING_LOCK: { ... break; } case STATE_WAITING_PRECAPTURE: { ... break; } case STATE_WAITING_NON_PRECAPTURE: { ... break; } } } 

Еще одна вещь, которую я пытался получить в кадре, – установить mImageReader.setOnImageAvailableListener. Я ожидал получить раму onImageAvailable callback, но onImageAvailable никогда не вызывается. OnPreviewFrame – мой собственный метод, мне нужно передать ему текущий фрейм.

  mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), ImageFormat.JPEG, /*maxImages*/2); mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, mBackgroundHandler); private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader reader) { mTextureView.onPreviewFrame(reader.acquireNextImage().getPlanes([0].getBuffer().array()); } }; 

Что я делаю неправильно? Благодарю.

OnImageAvailableListener.onImageAvailable вызов OnImageAvailableListener.onImageAvailable никогда не вызывается, когда доступен кадр предварительного просмотра, поскольку CaptureRequest который был отправлен CameraCaptureSession.setRepeatingRequest() не CameraCaptureSession.setRepeatingRequest() Surface ImageReader в качестве выходной цели.

Вы определяете, какой выход Surface s (буферов исходного байта, по существу) вы хотите, чтобы данные каждого захвата включались при отправке запроса на камеру. Поэтому, чтобы получить «кадры предварительного просмотра», чтобы вызвать onImageAvailable() вызов onImageAvailable() а затем отправить его в метод onPreviewFrame() , просто добавьте строку:

mPreviewRequestBuilder.addTarget(mImageReader.getSurface());

Эта строка может идти, например , после другой подобной строки, которая добавляет поверхность SurfaceTexture к тому же построителю запросов.

Обратите внимание, что это отправит каждый кадр предварительного просмотра вашей функции, а также «выходные кадры» из кнопки захвата. Вы можете захотеть, чтобы какой-то код в onImageAvailable() .

Intereting Posts
Несколько файлов dex определяют Lcom / google / firebase / FirebaseException Мягкая клавиатура – только цифра Как избежать «Не начата деятельность, ее текущая задача была перенесена на передний план»? Наличие служб Google (gcm) в отдельном модуле на Android Внедрение Google Analytics 7.5.0 (Play Services) в Android 4.4 и ниже происходит сбой Просмотр круглых кнопок OnListItemClick не вызывается в Listfragment Appcelerator 4 не может найти Android SDK на Mac Использование плагина Hugo Не удалось найти информацию о поставщике для <пользовательского поставщика> Синтаксический код json date в android Запустить приложение, встряхнув телефон на основе вещания, прослушивающего соответствующее намерение, если это возможно? Отслеживание выигрышей и проигрышей в игровых сервисах Google Play (Android) ScrollView не будет прокручиваться до конца моего LinearLayout Voice Matcher для сопоставления голосового пароля в Android (сравнить голос)