signal 11 (SIGSEGV), fault addr 98054b41

Android1.6のカメラAPIにはバグがある模様で、Xperiaでアプリからオートフォーカスを行うと3回くらいで落ちる。これはAndroid2.0でFIXされた問題らしい。
http://groups.google.co.jp/group/android-developers/browse_thread/thread/0e67abdc05fe878f/c913410296cd37fd
なんとかFIXできないか確認中。

追記:

We have fixed it in 2.0, and we are publishing a patch for manufacturers
that use 1.6. It will be up to individual manufacturers/carriers to decide
whether to make that patch available to existing users. For developers,
using setOneShotPreviewCallback will reduce the odds of the crash.

The bug/fix is as below.
diff –git a/core/jni/android_hardware_Camera.cpp
b/core/jni/android_hardware_Camera.cpp
index 9053468..d9b6e7b 100644
— a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -112,7 +112,7 @@ void JNICameraContext::notify(int32_t msgType, int32_t
ext1, int32_t ext2)
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
env->CallStaticVoidMethod(mCameraJClass, fields.post_event,
–            mCameraJObjectWeak, msgType, ext1, ext2);
+            mCameraJObjectWeak, msgType, ext1, ext2, NULL);
}

ということで、JNIでコンパイルしなおしたものを使うか、setOneShotPreviewCallbackを使うか。
どちらも現実的ではないなあ。

更に追記(ほぼ解決)

結局はCamera.setPreviewCallbackを setOneShotPreviewCallbackに差し替えて対応しました。
他のARソフトもそうしているみたい。なぜかそれで他のViewのonDrawが呼ばれなくなった(当たり前なのかな?)ので、invalidateするようにしたらうまくいきました。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です