Android4.2 Camera子系统初探,数据流程简述

Android的Camera应用完成如下三个功能:预览,拍照和录像。

以下是Android下UVC的Camera操作流程:

一、打开

  首先当打开Camera HAL时;会通过ioctl向uvc驱动申请buffer,并通过mmap映射进用户空间。uvc驱动提供HAL的是yuv422(yuyv)格式的原始数据流。

二、预览

  apk会首先申请surface(假设没有使用overlay);Camera HAL的previewThread线程会获取当前的gralloc显存,并将《一》中的buffer memcpy至显存。

三、拍照

  Camera HAL的pictureThread线程会通过malloc申请jpeg数据所需的imgbuffer,并通过调用libjpeg库将《一》中的buffer数据压缩成jpeg格式、保存至imgbuffer;通过层层回调,将imgbuffer的jpeg数据回传给apk。最后,apk完成数据的存盘。

四、录像

  Camera HAL的previewThread线程会通过key value(CameraParameter)判断apk是需要录像了;接着,会通过层层回调、将原始的buffer(yuv422)数据传递给apk。apk通过调用MediaRecorder将原始数据编码成h264,并存盘。

  在这里需要注意:

jb/frameworks/av/media/libstagefright/CameraSouce.cpp

[cpp]  view plain copy
  1. CameraSource *CameraSource::CreateFromCamera(  
  2.     const sp<ICamera>& camera,  
  3.     const sp<ICameraRecordingProxy>& proxy,  
  4.     int32_t cameraId,  
  5.     Size videoSize,  
  6.     int32_t frameRate,  
  7.     const sp<Surface>& surface,  
  8.     bool storeMetaDataInVideoBuffers)  
  9. 中storeMetaDataInVideoBuffers:  
  10. @param storeMetaDataInVideoBuffers request to store meta  
  11.  *      data or real YUV data in video buffers. Request to  
  12.  *      store meta data in video buffers may not be honored  
  13.  *      if the source does not support this feature.  

说明,层层回调是指:

CameraService向Camera HAL注册回调函数;

Camera Native客户端又向CameraService注册回调函数;

Camera API通过JNI向Camera Native注册回调函数;

Camera apk又向Camera API注册回调函数。

(一个粗略的录制的流程应该是这样: Camera HAL 给Camera Native(Client)发回调通知数据好了,Camera Client通过回调通知CameraSource,这样新数据到来,OMXCodec调用CameraSource::read()返回,编码完成后,MPEG4Writer得到这个数据并放到文件里面去)


From

http://blog.csdn.net/tankai19880619/article/details/9075839

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值