Я искал проблему, чтобы исправить проблему в течение нескольких дней, и сейчас я абсолютно уверен. Я пробовал все, и я не нахожу причины, почему приложение «Моя камера» бросает мне исключение для службы.Процесс, в котором работает служба камеры, неожиданно скончался
В данном случае. Я использую библиотеку HDR jni, которую я уже проверяю, и она отлично работает. Это не память собственной памяти, и это не проблема jni. Таким образом, проблема должна быть в моем коде:
Я просто жду на CaptureResult, чтобы вернуть мне AE_CONVERGED_STATE, чтобы проверить, если датчик уже принять правильную экспозицию, а затем я называю свой метод:
Log.performanceEnd("YUV capture");
Log.d(TAG, "[onImageAvailable] YUV capture, mBurstCount: " + mBurstCount);
Image image = imageReader.acquireNextImage();
if (mBackgroundHandler != null) {
mBackgroundHandler.post(new YuvCopy(image, mBurstCount));
}
mBurstCount++;
if (mBurstState == BURST_STATE_HDR) {
switch (mBurstCount) {
case 1:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, HDR_EXPOSURE_COMPENSATION_VALUE_HIGH);
break;
case 2:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, HDR_EXPOSURE_COMPENSATION_VALUE_LOW);
break;
case 3:
//Restore exposure compensation value
mCaptureCallback = mPhotoCaptureCallback;
mSettingsManager.setExposureCompensation(mPreviewRequestBuilder);
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
onPictureCaptured();
}
});
unlockFocus();
break;
}
if (mBurstCount != 3) {
updatePreviewSession();
}
//Finish HDR session
if (mBurstCount < YUV_BURST_LIMIT) mHdrState = STATE_PICTURE_TAKEN;
}
Вот мой метод YUV:
/**
* Transform YUV420 to NV21 readable frames
*/
private class YuvCopy implements Runnable {
private final Image mImage;
private final int mPictureIndex;
public YuvCopy(Image image, int index) {
mImage = image;
mPictureIndex = index;
}
@Override
public void run() {
if (mImage != null) {
if (mImage.getWidth() * mImage.getHeight() > 0) {
Image.Plane[] planes = mImage.getPlanes();
long startCopy = System.currentTimeMillis();
int width = mImage.getWidth();
int height = mImage.getHeight();
int ySize = width * height;
ByteBuffer yBuffer = mImage.getPlanes()[0].getBuffer();
ByteBuffer uvBuffer = mImage.getPlanes()[1].getBuffer();
ByteBuffer vuBuffer = mImage.getPlanes()[2].getBuffer();
byte[] mData = new byte[ySize + (ySize/2)];
yBuffer.get(mData, 0, ySize);
vuBuffer.get(mData, ySize, (ySize/2) - 1);
mData[mData.length - 1] = uvBuffer.get(uvBuffer.capacity() - 1);
mImage.close();
mHdrCaptureArray[mPictureIndex] = mData;
Log.i(TAG, "[YuvCopy|run] Time to Copy data: " + (System.currentTimeMillis() - startCopy) + "ms");
if (mPictureIndex == YUV_BURST_LIMIT - 1) {
startHdrProcessing();
} else {
mImage.close();
}
}
}
}
Я собираю в общей сложности три фотографии, а затем я называю метод слияния моей библиотеки JNI. Я попытался прокомментировать весь jni-код, и это все еще происходит, поэтому я думаю, что, возможно, проблема должна быть здесь, в моем методе YUV или, возможно, в вызове Burst HDR.
Наконец вот моя ошибка журнала, когда он happends:
01-01 12:30:27.531 21945-21957/com.myCamera W/AudioSystem: AudioFlinger server died!
01-01 12:30:27.532 21945-22038/com.myCamera W/AudioSystem: AudioPolicyService server died!
1-01 12:30:27.903 21945-21978/com.myCamera I/CameraManagerGlobal: Connecting to camera service
01-01 12:30:27.903 21945-21978/com.myCamera E/CameraManagerGlobal: Camera service is unavailable
01-01 12:30:27.903 21945-21978/com.myCamera W/System.err: android.hardware.camera2.CameraAccessException: Camera service is currently unavailable
01-01 12:30:29.103 21945-21945/com.myCamera W/System.err: android.hardware.camera2.CameraAccessException: Process hosting the camera service has died unexpectedly
Иногда это занимает всего 2 фотографии, а иногда и 300, но в конце концов, это все еще происходит. Кроме того, много раз все мое устройство почти мертво, и все работает отлично, поэтому мне нужно перезагрузить свой телефон.
Надеюсь, что кто-то может мне помочь, потому что я полностью отбросил все, что я пробовал, и я просто хочу умереть хахаха.
Большое вам спасибо!
У меня была очень похожая ошибка, но причина была другая. Я потратил несколько часов, чтобы найти точную причину ... И в конце концов я нашел ее после того, как прочитал некоторые первые строки, где вы начинаете объяснять «неправильную конфигурацию моих ImageReaders». В моем случае речь шла о пользовательских вспышках ... Спасибо за идею –