Я пытаюсь сделать то же самое.Исходя из обсуждений здесь и здесь , похоже, что людям не повезло, получив decodeByteArray()
для обработки формата NV21 с Android 2.1 / 2.2.Это определенно не работает в моем эмуляторе или на моем Droid Incredible, хотя я думаю, что это вызывает нативный код, поэтому он может работать на некоторых телефонах в зависимости от драйверов?
В качестве альтернативы, вы можете попробовать декодироватьNV21 самостоятельно на Java (см. Ссылку выше для примера), хотя это, по-видимому, слишком медленно, чтобы быть полезным в большинстве случаев.Мне не очень повезло, пытаясь заставить CameraPreview
отправлять другой формат, и я ожидаю, что это будет проблематично для попытки написания кода, переносимого на другое оборудование.Если вы написали методы декодирования NV21 в NDK, вы могли бы немного увеличить частоту кадров.
Очевидно, что есть проблемы со стабильностью из-за условий гонки при попытке обработать CameraPreview
, хотя я этого не подтвердилвыдать себя.Я думаю, вы могли бы избежать этого, а также немного повысить частоту кадров, используя буферизованный метод обратного вызова предварительного просмотра setPreviewCallbackWithBuffer()
, который был добавлен в Android 2.1 / 2.2.Это было добавлено в 2.1, но оставлено скрытым до 2.2. Чтобы использовать его в 2.1, вам нужно взломать укрытие.
Некоторые люди предлагают использовать MediaRecorder
вместо CameraPreview
.К сожалению, MediaRecorder
, по-видимому, обеспечивает еще меньше возможностей для получения кадров предварительного просмотра, чем CameraPreview
, поэтому я не могу рекомендовать этот маршрут.