2010-01-10 2 views
3

Наше приложение отображает предварительный просмотр камеры и, кажется, работает хорошо на всех телефонах для Motorola Droid, где мы получаем исключение во время выполнения, когда мы устанавливаем параметры камеры, кроме:камеры предварительного просмотра на 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?

ответ

2

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

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

Вы правы. Мы изменили его, чтобы точно соответствовать APIDemos и удалили вызов setPictureFormat(), setPreviewFormat() и setPreviewFrameRate(), и теперь он отлично работает на Droid. Спасибо за подробный ответ! –

0

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

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

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

Pixel Formats

0

Другая вещь, которую вы можете исследовать:

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

Параметры камеры были в порядке, но в макете/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" 

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

 Смежные вопросы

  • Нет связанных вопросов^_^