Android相机mediaserver在takepicture之后死亡 - 在模拟器中工作

时间:2010-12-10 15:54:14

标签: android

我在Archos 32 Android设备上收到此错误。我发现了这篇文章:Droid's mediaserver dies on camera.takePicture()

但是对于预览之外的“缺失部分”,它并不是非常具体。

我的代码在模拟器和至少一个其他机器人设备上运行。是否只是与archos不兼容或者我仍然会遗漏某些东西?

Archos有一个工作相机程序,所以我知道可以有一个拍照的应用程序,但我开始认为与sdk有一些不兼容。我在哪里可以下载完整的工作相机eclipse项目?我能找到的只是代码片段。

这是调试日志:

12-10 10:37:46.827: DEBUG/CameraHalUtils(16242): PPM: STOPPED PREVIEW :5691.681 ms
12-10 10:37:46.835: INFO/cat(1096): <6>video4linux video0: w 640, h 480, fmt 56595559 -> w 640, h 480
12-10 10:37:47.110: DEBUG/CameraHalUtils(16242): PPM: AFTER CAPTURE YUV IMAGE :5975.250 ms
12-10 10:37:47.131: INFO/DEBUG(16218): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
12-10 10:37:47.131: INFO/DEBUG(16218): Build fingerprint: 'archos/g8/G8A/:2.2.1/FROYO/eng..20101126.043425:user/test-keys'
12-10 10:37:47.131: INFO/DEBUG(16218): pid: 16242, tid: 16250  >>> /system/bin/mediaserver <<<
12-10 10:37:47.131: INFO/DEBUG(16218): signal 11 (SIGSEGV), fault addr 00000000
12-10 10:37:47.131: INFO/DEBUG(16218):  r0 00000000  r1 aba8ee30  r2 fefefeff  r3 00000000
12-10 10:37:47.131: INFO/DEBUG(16218):  r4 a7940a6c  r5 000119c0  r6 00010b04  r7 40506eb4
12-10 10:37:47.131: INFO/DEBUG(16218):  r8 00100000  r9 a811c319  10 40407000  fp 00012400
12-10 10:37:47.131: INFO/DEBUG(16218):  ip 00000000  sp 40506ab8  lr a790f30f  pc a790f310  cpsr 20000030
12-10 10:37:47.139: INFO/DEBUG(16218):  d0  643a64696f72646e  d1  20656c6261696c52
12-10 10:37:47.139: INFO/DEBUG(16218):  d2  0049002e00650020  d3  0065006d00610043
12-10 10:37:47.139: INFO/DEBUG(16218):  d4  7e7f7c7e7f7e7c81  d5  7b7e80827f807d7f
12-10 10:37:47.139: INFO/DEBUG(16218):  d6  2728282a29292928  d7  3f80000028282828
12-10 10:37:47.139: INFO/DEBUG(16218):  d8  000000003f800000  d9  0000000000000000
12-10 10:37:47.139: INFO/DEBUG(16218):  d10 0000000000000000  d11 0000000000000000
12-10 10:37:47.139: INFO/DEBUG(16218):  d12 0000000000000000  d13 0000000000000000
12-10 10:37:47.139: INFO/DEBUG(16218):  d14 0000000000000000  d15 0000000000000000
12-10 10:37:47.139: INFO/DEBUG(16218):  d16 3ff0000000000000  d17 3ff0000000000000
12-10 10:37:47.139: INFO/DEBUG(16218):  d18 7e37e43c8800759c  d19 0000000000000000
12-10 10:37:47.139: INFO/DEBUG(16218):  d20 0000000000000000  d21 0000000000000000
12-10 10:37:47.139: INFO/DEBUG(16218):  d22 0000000000000000  d23 0000000000000000
12-10 10:37:47.139: INFO/DEBUG(16218):  d24 0000000000000000  d25 0000000000000000
12-10 10:37:47.139: INFO/DEBUG(16218):  d26 0000000000000000  d27 0000000000000000
12-10 10:37:47.139: INFO/DEBUG(16218):  d28 0000000000000000  d29 0000000000000000
12-10 10:37:47.139: INFO/DEBUG(16218):  d30 0000000000000000  d31 0000000000000000
12-10 10:37:47.139: DEBUG/AudioHardwareAM(16242): acquire wakelock
12-10 10:37:47.139: INFO/DEBUG(16218):  scr 20000010
12-10 10:37:47.163: INFO/cat(1096): <7>Configure McBSP for 1 phase
12-10 10:37:47.163: INFO/cat(1096): <7>Configure McBSP TX FIFO threshold to 1260
12-10 10:37:47.194: INFO/DEBUG(16218):          #00  pc 0000f310  /system/lib/libcamera.so
12-10 10:37:47.202: INFO/DEBUG(16218):          #01  pc 0000d2cc  /system/lib/libcamera.so
12-10 10:37:47.202: INFO/DEBUG(16218):          #02  pc 00009790  /system/lib/libcamera.so
12-10 10:37:47.202: INFO/DEBUG(16218):          #03  pc 0001beea  /system/lib/libutils.so
12-10 10:37:47.209: INFO/DEBUG(16218):          #04  pc 0001c380  /system/lib/libutils.so
12-10 10:37:47.209: INFO/DEBUG(16218):          #05  pc 00011188  /system/lib/libc.so
12-10 10:37:47.209: INFO/DEBUG(16218):          #06  pc 00010c68  /system/lib/libc.so
12-10 10:37:47.209: INFO/DEBUG(16218): code around pc:
12-10 10:37:47.217: INFO/DEBUG(16218): a790f2f0 2b004603 2300bf14 b2db2301 d0462b00 
12-10 10:37:47.217: INFO/DEBUG(16218): a790f300 681bab13 7368f503 f0044618 4603ff0b 
12-10 10:37:47.217: INFO/DEBUG(16218): a790f310 f102681a 6812020c 47904618 46194603 
12-10 10:37:47.217: INFO/DEBUG(16218): a790f320 681aab56 6b9bab25 46114608 f7f9461a 
12-10 10:37:47.217: INFO/DEBUG(16218): a790f330 ab13ed9c f503681b 46187368 fef2f004 
12-10 10:37:47.217: INFO/DEBUG(16218): code around lr:
12-10 10:37:47.217: INFO/DEBUG(16218): a790f2ec efeaf7f9 2b004603 2300bf14 b2db2301 
12-10 10:37:47.217: INFO/DEBUG(16218): a790f2fc d0462b00 681bab13 7368f503 f0044618 
12-10 10:37:47.217: INFO/DEBUG(16218): a790f30c 4603ff0b f102681a 6812020c 47904618 
12-10 10:37:47.217: INFO/DEBUG(16218): a790f31c 46194603 681aab56 6b9bab25 46114608 
12-10 10:37:47.217: INFO/DEBUG(16218): a790f32c f7f9461a ab13ed9c f503681b 46187368 

以下是CameraHal报告的内容:

12-10 10:37:41.100: DEBUG/CameraHal(16242): opening ti camera hal
12-10 10:37:41.100: DEBUG/CameraHal(16242): 5269: createInstance() ENTER
12-10 10:37:41.131: INFO/CameraHal(16242): initDefaultParameters: Camera type is OV7675
12-10 10:37:41.131: DEBUG/CameraHal(16242): 1364: CameraCreate() ENTER
12-10 10:37:41.460: DEBUG/CameraHal(16242): 1377: CameraCreate() EXIT
12-10 10:37:41.460: DEBUG/CameraHal(16242): 378: initDefaultParameters() ENTER
12-10 10:37:41.460: DEBUG/CameraHal(16242): 3749: setParameters() ENTER
12-10 10:37:41.460: DEBUG/CameraHal(16242): PreviewFormat yuv420sp
12-10 10:37:41.460: DEBUG/CameraHal(16242): PictureFormat jpeg
12-10 10:37:41.460: DEBUG/CameraHal(16242): 350: validateSize() ENTER
12-10 10:37:41.460: DEBUG/CameraHal(16242): Validating 640, 176 and 480, 144
12-10 10:37:41.460: DEBUG/CameraHal(16242): Validating 176, 176 and 144, 144
12-10 10:37:41.460: DEBUG/CameraHal(16242): 367: validateSize() EXIT
12-10 10:37:41.460: DEBUG/CameraHal(16242): PreviewResolution by App 176 x 144
12-10 10:37:41.460: DEBUG/CameraHal(16242): 350: validateSize() ENTER
12-10 10:37:41.460: DEBUG/CameraHal(16242): Validating 640, 640 and 480, 480
12-10 10:37:41.460: DEBUG/CameraHal(16242): 367: validateSize() EXIT
12-10 10:37:41.460: DEBUG/CameraHal(16242): Picture Size by App 640 x 480
12-10 10:37:41.460: DEBUG/CameraHal(16242): FRAMERATE 30
12-10 10:37:41.460: DEBUG/CameraHal(16242): Picture Size by CamHal 640 x 480
12-10 10:37:41.460: DEBUG/CameraHal(16242): Preview Resolution by CamHal 176 x 144
12-10 10:37:41.460: DEBUG/CameraHal(16242): Zoom by App 0
12-10 10:37:41.530: DEBUG/CameraHal(16242): 4432: setParameters() EXIT
12-10 10:37:41.530: DEBUG/CameraHal(16242): 679: initDefaultParameters() EXIT
12-10 10:37:41.530: DEBUG/CameraHal(16242): 3339: ICaptureCreate() ENTER
12-10 10:37:41.530: DEBUG/CameraHal(16242): 3382: ICaptureCreate() EXIT
12-10 10:37:41.530: DEBUG/CameraHal(16242): STARTING PROC THREAD 
12-10 10:37:41.530: DEBUG/CameraHal(16242): STARTING Shutter THREAD 
12-10 10:37:41.530: DEBUG/CameraHal(16242): STARTING Raw THREAD 
12-10 10:37:41.530: DEBUG/CameraHal(16242): STARTING Snapshot THREAD 
12-10 10:37:41.530: DEBUG/CameraHal(16242): 2976: procThread() ENTER
12-10 10:37:41.530: DEBUG/CameraHal(16242): 2913: shutterThread() ENTER
12-10 10:37:41.530: DEBUG/CameraHal(16242): 2848: rawThread() ENTER
12-10 10:37:41.530: DEBUG/CameraHal(16242): 2727: snapshotThread() ENTER
12-10 10:37:41.530: DEBUG/CameraHal(16242): 843: previewThread() ENTER
12-10 10:37:41.553: DEBUG/CameraHal(16242): 4724: getParameters() ENTER
12-10 10:37:41.553: DEBUG/CameraHal(16242): 4979: getParameters() EXIT
12-10 10:37:41.561: DEBUG/CameraHal(16242): 3749: setParameters() ENTER
12-10 10:37:41.561: DEBUG/CameraHal(16242): PreviewFormat yuv420sp
12-10 10:37:41.561: DEBUG/CameraHal(16242): PictureFormat jpeg
12-10 10:37:41.561: DEBUG/CameraHal(16242): 350: validateSize() ENTER
12-10 10:37:41.561: DEBUG/CameraHal(16242): Validating 640, 176 and 480, 144
12-10 10:37:41.561: DEBUG/CameraHal(16242): Validating 176, 176 and 144, 144
12-10 10:37:41.561: DEBUG/CameraHal(16242): 367: validateSize() EXIT
12-10 10:37:41.561: DEBUG/CameraHal(16242): PreviewResolution by App 176 x 144
12-10 10:37:41.561: DEBUG/CameraHal(16242): 350: validateSize() ENTER
12-10 10:37:41.561: DEBUG/CameraHal(16242): Validating 640, 640 and 480, 480
12-10 10:37:41.561: DEBUG/CameraHal(16242): 367: validateSize() EXIT
12-10 10:37:41.561: DEBUG/CameraHal(16242): Picture Size by App 640 x 480
12-10 10:37:41.561: DEBUG/CameraHal(16242): FRAMERATE 30
12-10 10:37:41.561: DEBUG/CameraHal(16242): Picture Size by CamHal 640 x 480
12-10 10:37:41.561: DEBUG/CameraHal(16242): Preview Resolution by CamHal 176 x 144
12-10 10:37:41.561: DEBUG/CameraHal(16242): Zoom by App 0
12-10 10:37:41.631: DEBUG/CameraHal(16242): 4432: setParameters() EXIT
12-10 10:37:41.631: DEBUG/CameraHal(16242): 4724: getParameters() ENTER
12-10 10:37:41.631: DEBUG/CameraHal(16242): 4979: getParameters() EXIT
12-10 10:37:41.631: DEBUG/CameraHal(16242): CameraHal setOverlay/1/00000000/00000000
12-10 10:37:41.631: ERROR/CameraHal(16242): Trying to set overlay, but overlay is null!, line:3472
12-10 10:37:41.663: DEBUG/CameraHal(16242): CameraHal setOverlay/1/00020340/00000000
12-10 10:37:41.663: DEBUG/CameraHal(16242): 3495: setOverlay() EXIT
12-10 10:37:41.663: DEBUG/CameraHal(16242): 3502: startPreview() ENTER
12-10 10:37:41.663: DEBUG/CameraHal(16242): Receive Command: PREVIEW_START
12-10 10:37:41.663: DEBUG/CameraHal(16242): 1364: CameraCreate() ENTER
12-10 10:37:41.663: DEBUG/CameraHal(16242): 1377: CameraCreate() EXIT
12-10 10:37:41.663: DEBUG/CameraHal(16242): 1425: CameraConfigure() ENTER
12-10 10:37:41.717: INFO/CameraHal(16242): CameraConfigure PreviewFormat: w=176 h=144
12-10 10:37:41.717: DEBUG/CameraHal(16242): CameraConfigure: framerate to set = 30
12-10 10:37:41.717: DEBUG/CameraHal(16242): CameraConfigure: Old frame rate is 30/1  fps
12-10 10:37:41.772: INFO/CameraHal(16242): CameraConfigure: New frame rate is 30/1 fps
12-10 10:37:41.772: DEBUG/CameraHal(16242): 1470: CameraConfigure() EXIT
12-10 10:37:41.772: DEBUG/CameraHal(16242): 1487: CameraStart() ENTER
12-10 10:37:41.772: DEBUG/CameraHal(16242): **CaptureQBuffers: preview size=176x144
12-10 10:37:41.772: DEBUG/CameraHal(16242): mPreviewFrameSize = 0xd000 = 53248
12-10 10:37:41.772: DEBUG/CameraHal(16242): number of buffers = 6
12-10 10:37:41.772: DEBUG/CameraHal(16242): User Buffer [0].start = 0x40d89000  length = 53248
12-10 10:37:41.772: DEBUG/CameraHal(16242): User Buffer [1].start = 0x40d96000  length = 53248
12-10 10:37:41.772: DEBUG/CameraHal(16242): User Buffer [2].start = 0x40da3000  length = 53248
12-10 10:37:41.772: DEBUG/CameraHal(16242): User Buffer [3].start = 0x40db0000  length = 53248
12-10 10:37:41.772: DEBUG/CameraHal(16242): User Buffer [4].start = 0x40dbd000  length = 53248
12-10 10:37:41.780: DEBUG/CameraHal(16242): User Buffer [5].start = 0x40dca000  length = 53248
12-10 10:37:41.874: ERROR/CameraHal(16242): Initial Crop: crop_top = 0, crop_left = 0, crop_width = 639, crop_height = 478
12-10 10:37:41.874: DEBUG/CameraHal(16242): 1594: CameraStart() EXIT
12-10 10:37:41.874: DEBUG/CameraHal(16242): PREVIEW_START ACK
12-10 10:37:41.874: DEBUG/CameraHal(16242): Preview Started!
12-10 10:37:41.874: DEBUG/CameraHal(16242): 3519: startPreview() EXIT
12-10 10:37:45.663: DEBUG/CameraHal(16242): 3686: takePicture() ENTER
12-10 10:37:45.663: DEBUG/CameraHal(16242): ENTER OPTION PREVIEW_CAPTURE
12-10 10:37:45.694: DEBUG/CameraHal(16242): 1610: CameraStop() ENTER
12-10 10:37:45.694: DEBUG/CameraHal(16242): Done dequeuing from Camera!
12-10 10:37:46.827: DEBUG/CameraHal(16242): 1644: CameraStop() EXIT
12-10 10:37:46.827: DEBUG/CameraHal(16242): 2297: ICapturePerform() ENTER
12-10 10:37:46.827: DEBUG/CameraHal(16242):  PICTURE NUMBER =1
12-10 10:37:46.827: DEBUG/CameraHal(16242): Picture Size: Width = 640     Height = 480
12-10 10:37:46.881: DEBUG/CameraHal(16242): pictureFrameSize = 0x96000 = 614400
12-10 10:37:46.881: DEBUG/CameraHal(16242): Picture Buffer: Base = 0x40e25000 Offset = 0x0
12-10 10:37:46.913: DEBUG/CameraHal(16242): De-queue the next avaliable buffer

我的代码: package com.example;

import android.app.Activity; import android.hardware.Camera; import android.hardware.Camera.PictureCallback; import android.hardware.Camera.ShutterCallback; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.FrameLayout;

公共类CameraDemo扩展Activity {     private static final String TAG =“CameraDemo”;     相机相机;     预览预览;     按钮按钮;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    preview = new Preview(this);
    ((FrameLayout) findViewById(R.id.preview)).addView(preview);

    buttonClick = (Button) findViewById(R.id.buttonClick);
    buttonClick.setOnClickListener( new OnClickListener() {
        public void onClick(View v) {
            preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
        }
    });

    Log.d(TAG, "onCreate'd");
}


ShutterCallback shutterCallback = new ShutterCallback() {
    public void onShutter() {
        Log.d(TAG, "onShutter'd");
    }
};

/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {
        Log.d(TAG, "onPictureTaken - raw");
    }
};

/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {
        Log.d(TAG, "onPictureTaken - jpeg");
    }
};

}

package com.example;

import java.io.IOException; import android.content.Context; import android.hardware.Camera; import android.view.SurfaceHolder; import android.view.SurfaceView;

类预览扩展SurfaceView实现了SurfaceHolder.Callback {

SurfaceHolder mHolder;
public Camera camera;

Preview(Context context) {
    super(context);

    // Install a SurfaceHolder.Callback so we get notified when the
    // underlying surface is created and destroyed.
    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, acquire the camera and tell it where
    // to draw.
    camera = Camera.open();
    try {
        camera.setPreviewDisplay(holder);


    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    // Surface will be destroyed when we return, so stop the preview.
    // Because the CameraDevice object is not a shared resource, it's very
    // important to release it when the activity is paused.
    camera.stopPreview();
    camera = null;
}

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 = camera.getParameters();
   // parameters.setPreviewSize(w, h);   // seems to crash if this code is enabled
    camera.setParameters(parameters);
    camera.startPreview();
}

}

布局

    

<FrameLayout android:id="@+id/preview"
    android:layout_weight="1" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
</FrameLayout>

<Button android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:id="@+id/buttonClick"
    android:text="Click" android:layout_gravity="center"></Button>

1 个答案:

答案 0 :(得分:0)

我还有一个Archos32展示了与您相同的问题。你有没有找到问题的答案?我已经检查了你的代码,我的Archos32的mediaserver也在试图拍照时死亡。

我已经更新了你的代码,并且让它在媒体服务器拍照时不会死亡。我基本上以下列方式更新了Preview.java:

    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 = camera.getParameters();

        List<Size> previewSizes = parameters.getSupportedPreviewSizes();
        Size optimalPreviewSize = previewSizes.get(0);

    // parameters.setPreviewSize(w, h);   // seems to crash if this code is enabled
    parameters.setPreviewFormat(ImageFormat.JPEG);
    parameters.setPreviewSize(optimalPreviewSize.width, optimalPreviewSize.height);     

    camera.setParameters(parameters);
    camera.startPreview();
}

这很糟糕&amp;脏,因为我没有做任何特别的事情来确定用于相机预览的预览尺寸 - 我只是抓住第一个找到的 - 但我所做的更改的结果是媒体服务器不再崩溃onShutter (),现在也调用了rawCallback()和jpegCallback()。

如果需要,您可以从Google's CameraPreview API Demo获取getOptimalPreview方法,以获得拍照时使用的“最佳”预览尺寸。

让我知道这是否适合你 - 我一直在与我的爱可视公司争夺数小时试图让相机实现而不会崩溃,并且最终开始取得一些进展。