android4.0 camera hal 移植
来源:互联网 发布:雀神作弊软件 编辑:程序博客网 时间:2024/04/30 14:31
http://blog.csdn.net/qq69696698/article/details/7174129
转自:http://blog.csdn.net/muojie/article/details/6988297
先从Camera Hal提供给Camera Service 的接口(CameraHardwareInterface.h)开始看起。
从注释可以看出,基本的流程是没有变的。
/**
* CameraHardwareInterface.h defines the interface to the
* camera hardware abstraction layer, used for setting and getting
* parameters, live previewing, and taking pictures.
*
* It is a referenced counted interface with RefBase as its base class.
* CameraService calls openCameraHardware() to retrieve a strong pointer to the
* instance of this interface and may be called multiple times. The
* following steps describe a typical sequence:
*
* -# After CameraService calls openCameraHardware(), getParameters() and
* setParameters() are used to initialize the camera instance.
* CameraService calls getPreviewHeap() to establish access to the
* preview heap so it can be registered with SurfaceFlinger for
* efficient display updating while in preview mode.
* -# startPreview() is called. The camera instance then periodically
* sends the message CAMERA_MSG_PREVIEW_FRAME (if enabled) each time
* a new preview frame is available. If data callback code needs to use
* this memory after returning, it must copy the data.
*
* Prior to taking a picture, CameraService calls autofocus(). When auto
* focusing has completed, the camera instance sends a CAMERA_MSG_FOCUS notification,
* which informs the application whether focusing was successful. The camera instance
* only sends this message once and it is up to the application to call autoFocus()
* again if refocusing is desired.
*
* CameraService calls takePicture() to request the camera instance take a
* picture. At this point, if a shutter, postview, raw, and/or compressed callback
* is desired, the corresponding message must be enabled. As with CAMERA_MSG_PREVIEW_FRAME,
* any memory provided in a data callback must be copied if it's needed after returning.
*/
但是在具体的实现上,做了改动。一个C++的风格,一个C的风格。现在Hal层也越来越像linux了。
在froyo的Hal层,主要是去实现一个继承自CameraHardwareInterface抽象类的子类,在这个类里去实现父类的(纯)虚函数。
但是在ICS里,CameraHarwareInterface类的方法实现变了,现在是通过hw_module_t结构体获得hw_device_t的结构体,而这个结构体里包括Hal层的各方法回调。也就是froyo里的sensor架构。
看一下initialize函数:
- status_t initialize(hw_module_t *module)
- {
- LOGI("Opening camera %s", mName.string());
- int rc = module->methods->open(module, mName.string(),
- (hw_device_t **)&mDevice);
- if (rc != OK) {
- LOGE("Could not open camera %s: %d", mName.string(), rc);
- return rc;
- }
- initHalPreviewWindow();
- return rc;
- }
有了这个,也就可以摒弃froyo中的openCameraHardware()接口了。
- /** factory function to instantiate a camera hardware object */
- extern "C" sp<CameraHardwareInterface> openCameraHardware();
再看一下两个版本之间,CameraHardwareInterface类中各方法实现的变化。以startPreview为例。
froyo:
- /**
- * Start preview mode.
- */
- virtual status_t startPreview() = 0;
ICS:
- status_t startPreview()
- {
- LOGV("%s(%s)", __FUNCTION__, mName.string());
- if (mDevice->ops->start_preview)
- return mDevice->ops->start_preview(mDevice);
- return INVALID_OPERATION;
- }
越来越像linux风络了。
另外,ICS的CameraHardwareInterface又添加了一些private的成员。
data_callback函数,也多加了一个参数*metadata。
- typedef void (*data_callback)(int32_t msgType,
- const sp<IMemory> &dataPtr,
- camera_frame_metadata_t *metadata,
- void* user);
- android4.0 camera hal 移植
- android4.0 camera hal 移植
- android4.0 camera hal 移植
- android4.2.2 Camera HAL的结构
- Camera API2.0 HAL
- Android Camera porting(HAL层移植)
- Android Camera porting(HAL层移植)
- Android Camera porting(HAL层移植)
- Android4.2之Camera系统HAL调用流程
- Android4.2之Camera系统HAL调用流程
- Android4.4 Camera HAL startpreview的具体过程
- Android4.2之Camera系统HAL调用流程
- ANDROID4.0音频系统HAL初探
- Android之Camera拍照插值算法 &&Android4.2之Camera系统HAL调用流程
- android4.0移植tslib
- Android4.0之显示部分HAL
- Android4.0之显示部分HAL
- android camera HAL v3.0概述
- Divide Two Integers (只用加减法做除法,logn复杂度) 【leetcode】
- 神奇的Gamma函数
- JSP的会话跟踪技术
- Android Camera porting(HAL层移植)
- Codeforces Beta Round #27 D. Ring Road 2
- android4.0 camera hal 移植
- POJ 1000 A+B Problem
- JavaScript加强之Prototype
- 为什么要学习C语言(转载)
- python的socket基本使用
- POJ 1003 Hangover
- Android小项目之八 界面细节
- memcpy()与strcpy()的完全实现
- 基于”啪啪奇”产品体验谈视频网站移动端发展