Предварительный просмотр камеры на Motorola Droid - PullRequest
3 голосов
/ 10 января 2010

Наше приложение отображает предварительный просмотр камеры и, кажется, работает нормально на всех телефонах, кроме Motorola Droid, где мы получаем исключение времени выполнения при установке параметров камеры:

    java.lang.RuntimeException: setParameters failed
   at android.hardware.Camera.native_setParameters(Native Method)
   at android.hardware.Camera.setParameters(Camera.java:611)
   at com.highwaynorth.andrometer.CameraPreviewSurfaceView.surfaceChanged(CameraPreviewSurfaceView.java:57)
   at android.view.SurfaceView.updateWindow(SurfaceView.java:460)
   at android.view.SurfaceView.dispatchDraw(SurfaceView.java:287)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1525)

Вот код для SurfaceChanged (), который в основном взят из APIDemos

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
   // Now that the size is known, set up the camera parameters and begin
   // the preview.
   Camera.Parameters parameters = mCamera.getParameters();
   parameters.setPreviewSize(w, h);
   parameters.setPictureFormat(PixelFormat.JPEG);
   parameters.setPreviewFormat(PixelFormat.YCbCr_422_SP);
   parameters.setPreviewFrameRate(1);
   mCamera.setParameters(parameters);
   mCamera.startPreview();

}

Кто-нибудь знает, что не так с тем, как мы устанавливаем параметры, которые будут вызывать исключение на Motorola Droid?

Ответы [ 3 ]

2 голосов
/ 10 января 2010

Я могу сказать, что ваша проблема в одной из следующих двух строк:

parameters.setPreviewFormat(PixelFormat.YCbCr_422_SP);
parameters.setPreviewFrameRate(1);

Я знаю это, потому что остальная часть этого кода - то, что я делаю в некоторых примерах камер в моей книге, и они были протестированы на DROID.

Вы можете использовать getSupportedPreviewFormats() и getSupportedPreviewFrameRates() на своем объекте Camera.Parameters, чтобы проверить, поддерживает ли данное устройство формат и частоту кадров, которые вы ищете. Обратите внимание, что эти методы являются новыми для Android 2.0, поэтому они будут работать на DROID / Milestone (и, предположительно, на Nexus One), но больше на момент написания этой статьи. Если вы ориентируетесь на более старые версии Android API, вам нужно будет использовать рефлексию или некоторые приемы загрузки классов, чтобы эти методы работали на Android 2.0 и были пропущены на более старых версиях.

0 голосов
/ 23 августа 2012

Еще одна вещь, которую вы можете захотеть исследовать:

Я испытываю эту проблему для устройств, работающих под управлением Motoblur и обновленных до 2.3 (особенно Droid2, DroidX и Atrix с Verizon).

Параметры камеры были в порядке, но в layout / capture.xml фон ViewfinderView установлен прозрачным:

<com.google.zxing.client.android.ViewfinderView
   android:id="@+id/viewfinder_view" 
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" 
   android:background="@color/transparent"
/>

Ну, похоже, что прозрачный для Motoblur на Android 2.3 не такой прозрачный ...

удаление

android:background="@color/transparent"

из видоискателя решил мою проблему.

0 голосов
/ 24 февраля 2010

Вы должны проверить, какие форматы предварительного просмотра доступны, чтобы убедиться, что вы можете работать на как можно большем количестве устройств.

Похоже, DROID поддерживает PixelFormat.YCbCr_422_I PixelFormat.YCbCr_420_SP

, который вы можете использоватьследующий метод, чтобы получить список доступных форматов. getSupportedPreviewFormats ()

Пиксельные форматы

...