我现在在做个camera的实验,但是camera切换到Record模式  应用就挂掉了,我在模拟器上试过的,也在单板上试过了,按照网上说的方法改下还是不行,应该不是driver的问题,因为在模拟器上都跑不了麻  有谁碰到过这个问题的吗~~~该怎么弄阿???
以下是我的LOG信息:m_previewFrameRateMicrosec : 50000
D/Camera  ( 2021): app passed NULL surface
D/CameraService( 1789): getCallingPid
D/CameraService( 1789): setPreviewDisplay(0x0) (pid 2021)
D/CameraService( 1789): getCallingPid
D/CameraService( 1789): setPreviewDisplay::mSurfaceLock lock success
D/CameraService( 1789): clearing old preview surface 0x17c48
D/S3C6410CameraHWInterface( 1789): S3C6410CameraHWInterface::previewEnabled
D/CameraService( 1789): setPreviewDisplay::mSurfaceLock unlock
D/CameraService( 1789): setPreviewDisplay return (result 0)
D/CameraService( 1789): getCallingPid
D/CameraService( 1789): startPreview (pid 2021)
D/CameraService( 1789): getCallingPid
D/CameraService( 1789): startCameraMode(0) (pid 2021)
D/CameraService( 1789): getCallingPid
D/CameraService( 1789): mSurface is not set yet.
D/CameraService( 1789): getCallingPid
D/CameraService( 1789): startPreviewMode (pid 2021)
D/S3C6410CameraHWInterface( 1789): S3C6410CameraHWInterface::previewEnabled
D/CameraService( 1789): mUseOverlay =false
D/S3C6410CameraHWInterface( 1789): S3C6410CameraHWInterface::startPreview start
D/S3C6410CameraHWInterface( 1789): ____m_createPmem____ [dev_name]: /dev/pmem_preview,  [buffer_size]:  0x25200, [num_of_buffers]:  1
D/S3C6410CameraHWInterface( 1789): m_createPmem preview!!!
D/S3C6410Camera( 1789): setNumOfPhysBuffer start
D/S3C6410CameraHWInterface( 1789): ########## kcoolsw : index(0) : buf_offset(0) : buf_size(152064)
D/S3C6410CameraHWInterface( 1789): ____m_createPmem____ phys_addr: 0x5ea00000,   virt_addr: 0x4044a000
D/S3C6410Camera( 1789): setPhysBuffer start
E/S3C6410Camera( 1789): int android::S3C6410Camera::setPhysBuffer(int, unsigned int, unsigned char*, unsigned int):: begin
E/S3C6410Camera( 1789): int android::S3C6410Camera::setPhysBuffer(int, unsigned int, unsigned char*, unsigned int):: end
D/S3C6410Camera( 1789): S3C6410Camera::startPreview start
D/S3C6410CameraHWInterface( 1789): ----------------------S3C6410CameraHWInterface::m_previewThreadFunc
D/S3C6410CameraHWInterface( 1789): ########## kcoolsw usleep : -160935
D/S3C6410CameraHWInterface( 1789): Before m_camera->getPreview
D/S3C6410Camera( 1789): getPreview start
D/S3C6410Camera( 1789): m_startCamera start = 0
D/S3C6410Camera( 1789): m_resetCamera start
D/S3C6410Camera( 1789): m_setCameraId start
D/S3C6410Camera( 1789): camera_mode = preview
D/S3C6410Camera( 1789): m_setPixelWidthHeight start
D/S3C6410Camera( 1789): width = 352
D/S3C6410Camera( 1789):    height = 288
D/S3C6410Camera( 1789): codec_fmt.fmt.pix.pixelformat 32315559
D/S3C6410Camera( 1789): m_setSensorMode start
E/S3C6410Camera( 1789): ================int android::S3C6410Camera::m_setCrop()::To set the crop size
E/S3C6410Camera( 1789): int android::S3C6410Camera::m_setCrop()::return
D/S3C6410Camera( 1789): before start_capturing
D/S3C6410Camera( 1789): end start_capturing
E/S3C6410Camera( 1789): int android::S3C6410Camera::getPreview(unsigned char*, unsigned int, unsigned int*)::m_readCamera(0x25200, 0x0) begin
D/S3C6410Camera( 1789): m_readCamera start
E/S3C6410Camera( 1789): int android::S3C6410Camera::m_readCamera(unsigned char*, unsigned int, unsigned int*, int)::begin
D/S3C6410Camera( 1789): fimc_poll start
E/S3C6410Camera( 1789): begin poll
E/S3C6410Camera( 1789): return from poll
D/S3C6410CameraHWInterface( 1789): ______preview_size: 0x25200, preview_index: 0
D/S3C6410CameraHWInterface( 1789): ______preview_buffer: 0x0 0x25200
D/S3C6410CameraHWInterface( 1789): size_preview=152064
D/S3C6410CameraHWInterface( 1789): offset =0
D/CameraService( 1789): getCallingPid
D/CameraService( 1789): setPreviewDisplay(0x17928) (pid 2021)
D/CameraService( 1789): getCallingPid
D/CameraService( 1789): setPreviewDisplay::mSurfaceLock lock success
D/S3C6410CameraHWInterface( 1789): S3C6410CameraHWInterface::previewEnabled
I/DEBUG   ( 1786): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   ( 1786): Build fingerprint: 'generic/generic/generic/:2.1-update1/ECLAIR/eng.android02.20100317.160523:eng/test-keys'
I/DEBUG   ( 1786): pid: 1789, tid: 2037  >>> /system/bin/mediaserver <<<
I/DEBUG   ( 1786): signal 11 (SIGSEGV), fault addr 00000000
I/DEBUG   ( 1786):  r0 00000010  r1 40806e64  r2 00000000  r3 10000000
I/DEBUG   ( 1786):  r4 00000binder: release 1789:1789 transaction 3684 in, still active
binder: send failed reply for transaction 3684 to 2021:2021
000  r5 000169c8  r6 00000001  r7 40806e64
I/DEBUG   ( 1786):  r8 00100000  r9 a9d1b8e5  10 40707000  fp 00017860
I/DEBUG   ( 1786):  ip a9d29c44  sp 40806e40  lr a96889fd  pc 00000000  cpsr 00000010
I/DEBUG   ( 1786):          #00  pc 0s3c_camif_stop_dma start
ov3640_command start
0000000  
I/DEBUG   ( 1786):          #01  pc 000089fa  /system/lib/libcamera.so
I/DEBUG   ( 1786):          #02  pc 00008a84  /system/lib/libcamera.so
I/DEBUG   ( 1786):          #03  pc 0001b522  /system/lib/libutils.so
I/DEBUG   ( 1786):          #04  pc 0001b94a  /system/lib/libutils.so
I/DEBUG   ( 1786):          #05  pc 00010000  /system/lib/libc.so
I/DEBUG   ( 1786):          #06  pc 0000fad4  /system/lib/libc.so
I/DEBUG   ( 1786):
I/DEBUG   ( 1786): code around lr:
I/DEBUG   ( 1786): a96889ec 6e2c1c38 fc4cf7ff 6eaa2010 47a01c39
I/DEBUG   ( 1786): a96889fc f7ff1c38 6fa9fcad d00c2900 a90eaf08
I/DEBUG   ( 1786): a9688a0c 6e2e1c38 fc3cf7ff 6eaa2020 47b01c39
I/DEBUG   ( 1786):
I/DEBUG   ( 1786): stack:
I/DEBUG   ( 1786):     40806e00  00000000  
I/DEBUG   ( 1786):     40806e04  afe3bdfc  
I/DEBUG   ( 1786):     40806e08  000177e0  [heap]
I/DEBUG   ( 1786):     40806e0c  a9d13ead  /system/lib/libutils.so
I/DEBUG   ( 1786):     40806e10  000183e4  [heap]
I/DEBUG   ( 1786):     40806e14  000177e0  [heap]
I/DEBUG   ( 1786):     40806e18  000167c4  [heap]
I/DEBUG   ( 1786):     40806e1c  a9d13e29  /system/lib/libutils.so
I/DEBUG   ( 1786):     40806e20  000167c4  [heap]
I/DEBUG   ( 1786):     40806e24  a9d13e83  /system/lib/libutils.so
I/DEBUG   ( 1786):     40806e28  40806e64  
I/DEBUG   ( 1786):     40806e2c  000169c8  [heap]
I/DEBUG   ( 1786):     40806e30  00000001  
I/DEBUG   ( 1786):     40806e34  a96882a7  /system/lib/libcamera.so
I/DEBUG   ( 1786):     40806e38  df002777  
I/DEBUG   ( 1786):     40806e3c  e3a070ad  
I/DEBUG   ( 1786): #01 40806e40  00025200  [heap]
I/DEBUG   ( 1786):     40806e44  00000000  
I/DEBUG   ( 1786):     40806e48  00000000  
I/DEBUG   ( 1786):     40806e4c  afe3bdfc  
I/DEBUG   ( 1786):     40806e50  000169d0  [heap]
I/DEBUG   ( 1786):     40806e54  40806e6c  
I/DEBUG   ( 1786):     40806e58  40806e70  
I/DEBUG   ( 1786):     40806e5c  40806e68  
I/DEBUG   ( 1786):     40806e60  00000000  
I/DEBUG   ( 1786):     40806e64  000167a8  [heap]
I/DEBUG   ( 1786):     40806e68  000183d4  [heap]
I/DEBUG   ( 1786):     40806e6c  00025200  [heap]
I/DEBUG   ( 1786):     40806e70  00000000  
I/DEBUG   ( 1786):     40806e74  000183d4  [heap]
I/DEBUG   ( 1786):     40806e78  000167a8  [heap]
I/DEBUG   ( 1786):     40806e7c  00000000  
I/DEBUG   ( 1786):     40806e80  00000003  
I/DEBUG   ( 1786):     40806e84  00017810  [heap]
I/DEBUG   ( 1786):     40806e88  40806eb4  
I/DEBUG   ( 1786):     40806e8c  40806eb0  
I/DEBUG   ( 1786):     40806e90  40806ea8  
I/DEBUG   ( 1786):     40806e94  a9688a89  /system/lib/libcamera.so
I/ServiceManager( 1782): service 'media.audio_flinger' died
到这后面就死了 就是运行到
  int S3C6410CameraHWInterface::m_previewThreadFunc()

     
      m_DataCb(CAMERA_MSG_PREVIEW_FRAME, buffer, m_CallbackCookie);
     
  }
就是运行到这个函数中的方法死的, 这是个函数指针,通过LOG看到它现在是个空指针,有谁碰到过这个问题的,也不知道是不是java应用层引起的
                                                                        大家帮帮忙~~~~~

解决方案 »

  1.   

    1.Camera驱动驱了几个通道?一个得话不能同时往Preview和recording送数据,除非加上特殊的处理机制2.默认情况下,Google把3gp和mp4的软件编码库关掉了,3.若m_DataCb为空,怎检查下的代码,肯定是程序有问题
      

  2.   

    1.由preview切换到Record模式的时候,其实是先将preview关了,再开一次preview,也就相当于record,不知道这算不算驱动了两个2.这个在哪看,具体在源码的哪个地方啊?3.m_DataCb为空是因为将preview关了后,对其其赋值为空的,我把这个赋值语句注释后,会出现新的错误,不能map内存,也不知怎么弄
      

  3.   

    1. record 的时候,其实是有两个线程在工作,一个是preview 一个是record,如果你preview的数据和record的数据为同一路,则处理起来比较麻烦,若为两个不同的通道(即Camera V4L2驱动了两个通道),则简单多了。2. 看下opencore下的Android.mk就知道了3. Preview关了后,m_DataCb函数指针为空,则CameraService相应的datacallback也不会被调用。4. S3C6410源码中,Camera硬件桩里的Buffer管理机制本人没怎么去看,不知道他为什么要这样设计...
      

  4.   

    hi,你好,我也遇到了和你同样的问题,不知道你的问题解决了没有,可不可以交流一下,我的QQ:1224046278
      

  5.   

    我在做相机开发,想设置其焦距
    Camera.getParameters().isZoomSupported() -->true
    Camera.getParameters().isSmoothZoomSupported() -->false这种情况下,我怎么才能实现变焦呢??