Intereting Posts
Кордоба-платформа add android дает ошибку: «Ошибка: предоставленный путь не является проектом Android». Доступ к getString () в android.support.v4.app.FragmentPagerAdapter? Есть ли способ использовать продукты go-play в приложении на сервере бэкэнда? Как импортировать новый модуль (проект библиотеки Android) с помощью Android studio 0.3.0 Android ListView в виджетах onClick не работает Как получить программный список цветов из градиента на Android Android – общие переходы элементов с завершением активности вызова () Что мне нужно знать, чтобы мой сайт работал на мобильных устройствах в наши дни? Как я могу использовать msgid во время локализации строк Android? Parse JSON Array без ключа в Android Android Webview – полностью очистить кэш Сцена переходного фликера Как заставить просмотр перерисовываться непосредственно перед выполнением следующей строки кода Android: намерение галереи возвращает resultCode == RESULT_CANCELED NullPointerException в пользовательском адаптере getView

SetPreviewFpsRange не работает, несмотря на то, что значения находятся в пределах диапазона getPreviewFpsRange

Этот простой код:

Camera.Parameters params = currentCamera.getParameters(); params.setPreviewFpsRange( 10000, 15000 ); currentCamera.setParameters( params ); 

Не работает на моем Nexus 4 (или моей Motorola Atrix), несмотря на допустимые значения между допустимым диапазоном от 5000 до 120000.

Когда я пытаюсь использовать любые минимальные или максимальные значения, отличные от 5000 и 120000, я получаю:

 setPreviewFpsRange(const android::QCameraParameters&): error: FPS range value not supported 

Что глупо. Кроме того, я пробовал этот код на моем старшем Motorola Atrix (который показывает, что допустимый диапазон fps составляет от 10000 до 30000), и он также не работает. Что-нибудь, что можно сделать?

Из моего поиска по теме я обнаружил, что а) в этой области очень мало материала, и б) может быть, что эта функциональность просто не поддерживается некоторыми платформами. Немного странно, что текущий флагманский телефон Google, Nexus 4, не поддерживает его, хотя …

Ах ах! Поэтому в рамках поиска ответов я проверил работу моего Nexus 10 с моим приложением. Оказывается, что значения, возвращаемые функцией getSupportedFpsRange, представляют собой диапазоны, представляющие точные дубликаты, которые могут быть введены в setPreviewFpsRange, и любые другие дубликаты не поддерживаются (насколько я могу судить, так или иначе).

Я обнаружил это, потому что Nexus 10 возвращает несколько дубликатов из getSupportedFpsRange. Я дублировал возвращаемые значения getSupportedFpsRange для трех устройств.

Примеры поддерживаемых значений диапазона

LG Nexus 4:

Предварительный просмотр-FPS-диапазона значений = (5000,120000);

Motorola Atrix:

Предварительный просмотр-FPS-диапазона значений = (10000,30000);

Samsung Nexus 10:

Предварительный просмотр-FPS-диапазона значений = (15000,15000), (24000,24000), (25000,25000), (15000,30000), (30000,30000);

Вывод

Мы не можем

 params.setPreviewFpsRange( 29000, 29000 ); 

Чтобы обеспечить предварительный просмотр в 29 кадров в секунду, если устройство уже специально не поддерживает этот дубликат.

Конечно, первоначальная причина, по которой я изучала эту функциональность, заключалась в надежде на то, что в моем приложении будет воспроизводиться шелковистая гладкая камера Nexus 4. Казалось бы, это убедительно доказывает, что, по крайней мере, на Nexus 4, setPreviewFpsRange не поможет.

Время продолжения поиска. (:

Я обнаружил, что если в списке getSupportedPreviewFpsRange имеется только одна пара поддерживаемых значений (2000, 35000), которая составляет от 2 до 35 кадров в секунду, то она будет принимать любые значения между этим диапазоном.

Если список содержит больше пар, вам нужно использовать один из них

 List<int[]> fpsRange = param.getSupportedPreviewFpsRange(); if (fpsRange.size() == 1) { //fpsRange.get(0)[0] < CAMERA_PREVIEW_FPS < fpsRange.get(0)[1] param.setPreviewFpsRange(CAMERA_PREVIEW_FPS, CAMERA_PREVIEW_FPS); } else { //pick first from list to limit framerate or last to maximize framerate param.setPreviewFpsRange(fpsRange.get(0)[0], fpsRange.get(0)[1]); }