硕士论文:基于Android手机系统的摄像头图像高动态范围增强.pdf_第1页
硕士论文:基于Android手机系统的摄像头图像高动态范围增强.pdf_第2页
硕士论文:基于Android手机系统的摄像头图像高动态范围增强.pdf_第3页
硕士论文:基于Android手机系统的摄像头图像高动态范围增强.pdf_第4页
硕士论文:基于Android手机系统的摄像头图像高动态范围增强.pdf_第5页
免费预览已结束,剩余65页可下载查看

硕士论文:基于Android手机系统的摄像头图像高动态范围增强.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘摘 要要 计算机技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规 业务进行支持。谷歌长期以来奉行的移动发展战略,通过与全球各地的手机制造商 和移动运营商结成合作伙伴, 开发既有用又有吸引力的移动服务, 并推广这些产品。 android 进一步推进了“随时随地“为每个人提供信息”这一企业目标的实现,更 像一款桌面环境为 java 的 linux 操作系统,有助于 google 实现其“随时随地为每 个人提供信息”的企业战略。 android 是一个开放性移动设备综合平台,它包括操作系统、用户界面、中间 件和一些关键的平台应用,拥有移动电话工作所需的全部软件。 android 最大特点在 于它是一个开放的体系架构,具有非常好的开发和调试环境,而且还支持各种可扩 展的用户体验,里面具有非常丰富的图形系统,对图像的处理集成了很多包、库函 数以及 api 函数。 动态范围图像的显示是图像处理、机器视觉、模式识别等学科都十分关注的问 题,属于一个交叉性的学科,对它的研究有着重要的和广泛的意义,尤其是随着数 码技术的不断发展,不论是静止图像还是视频都对图像的显示提出了较高的要求, 在这个问题中,高动态范围图像的显示是一项重要的技术。 在本课题中我们使用 debevec 算法得到一幅高动态范围图像,然后使用本文设 计的色调映射技术处理图像。该算法实现了即使在手机这种低动态范围显示设备上 也能看到高动态范围图像的显示效果,它主要解决的是静态图片的色调映射问题。 算法的流程简单,处理速度快,适用性强,不仅适用于 pc 电脑处理高动态范围图 像,还能适用于嵌入式图形图像处理设备中的色调映射过程。 关键词:android 高动态范围图像 色调映射 算法 关键词:android 高动态范围图像 色调映射 算法 abstract computing technology, wireless access technology, embedded systems increasingly have the ability to make desktop systems support conventional operations. google has long pursued a development strategy of the movement, with the global handset manufacturers and mobile operators form partnership to develop useful, attractive mobile services and to promote these products. android further promote the anytime and anywhere information for each person,the business goals, more like a desktop environment for the java-linux operating system, will help google achieve its corporate strategy of the anytime and anywhere for everyone information. android is an open and comprehensive platform for mobile devices, which includes the operating system, user interface, middleware and key applications platform, with all the required mobile phone software. most important feature of android is that it is an open system architecture, has a very good development and debugging environment, but also supports various expendable user experience, android has very rich graphics system processing of the images integrated lots of package, library functions and api functions. dynamic range image display very concerned image processing, machine vision, pattern recognition and other disciplines is a issue, which is a cross-cutting issues, its study has important and wide-ranging significance. especially with the continuous development of digital technology, whether still images or video images are displayed on raised higher requirements. in this issue, the high dynamic range image display is an important technology. in this paper we use debevec algorithms in order to get a high dynamic range image, and then use the tone mapping algorithm to process image. the algorithm even in the low-end display devices such mobile phones also can clearly see the effect of high dynamic range image, but the main solution is a static picture of the tone mapping problem. algorithm is simple, fast processing speed, applicability, not only suitable for pc computers to handle the high dynamic range image, but also for embedded graphics and video processing equipment in the process of tone mapping. keywords: android high dynamic range images tone mapping algorithm 目目 录录 摘 要 abstract 1 引 言.1 1.1 论文研究的背景与意义 1 1.2 国内外研究现状 2 1.3 论文研究的主要内容及结构安排 3 2 android 平台架构分析 5 2.1 android 平台的系统架构.5 2.2 android 应用程序的组成.6 2.2.1 activity.7 2.2.2 broadcast receiver.8 2.2.3 service9 2.2.4 content provider.9 2.2.5 intent.9 2.3 android 应用程序的开发环境10 2.4 android 平台的特征11 2.5 android 的类库12 2.6 android 比其他平台的优越性12 3 高动态范围图像显示原理与获取.15 3.1 图像动态范围变换技术以及基本数理模型15 3.2 高动态范围图像的获取17 3.3 合成 hdr 图像的 debevec 算法 .19 3.3.1 照相机成像的原理 19 3.3.2 恢复相机的响应曲线20 3.3.3 合成高动态范围图像22 3.4 色调映射技术23 4 android 的 camera 架构研究 25 4.1 android camera 结构介绍.25 4.2 camera 的接口与架构.25 4.2.1 camera 的整体框架图 .25 4.2.2 头文件 icameraclient.h 28 4.2.3 头文件 camera.h .28 4.2.4 头文件 icamera.h 29 4.2.5 头文件 icameraservice .h 30 4.2.6 头文件 camerahardwareinterface.h 31 4.3 camera 的主要实现分析.31 4.3.1 java 程序部分 .31 4.3.2 camera 的 java 本地调用部分 32 4.3.3 camera 本地库 libui.so.33 4.3.4 camera 服务 libcameraservice.so35 4.4 camera 工作过程.36 4.4.1 camera service 的启动 .36 4.4.2 client 端向 service 发送请求 .37 5 系统的设计与实现.38 5.1 系统实现的具体流程 .38 5.2 android 摄像头拍照分析与实现39 5.2.1 设定摄像头布局39 5.2.2 摄像头实现代码 39 5.3 android 摄像头高动态范围技术的实现42 5.4 色调映射技术的实现 .45 6 研究过程中的重点与难点分析.47 6.1 关于 libcameraservice.so 库文件构建的探讨 .47 6.2 关于 android 手机屏幕布局的探讨 .49 6.3 关于 shader 程序的探讨 53 6.4 关于 opengl 的帧缓冲对象和浮点纹理的探讨 57 7 结论与展望.59 7.1 主要的研究成果 .59 7.2 不足与展望 .59 致 谢.61 参考文献.62 1 1 引 言 1 引 言 1.1 论文研究的背景与意义 1.1 论文研究的背景与意义 随着移动通信的发展及互联网向移动终端的普及,网络和用户对移动终端的要 求越来越高,symbian,windows mobile,palm os 等手机平台都过于封闭,不能很 好的满足用户的需求,因此,市场迫切需要一个开放性很强的平台。经过多年的发 展,第三代数字通信(3g) 技术已经获得了广泛的接受,它为移动终端的用户带来 了更快的数据传输速率。随着 3g 网络的使用,移动终端不再仅仅是网络通讯的终 端,还将成为互联网的终端。因此,移动终端的应用软件和需要服务将会有更大的 发展空间 1。google 公司为此推出了一个专门为移动设备设计的软件平台 android。 android 是由 linux+java 构成的。 它的架构和工作原理决定了 android 是目前 为止最具有可移植性的手机操作系统。android 是开源软件,能够有效降低软件的 开发成本,从而降低手机的整体价格,最终让每个用户能够自由地获取信息。 android 提供了一个从操作系统到应用程序的完整软件栈,同时又允许人们定制差 异化,以形成自身的竞争优势,这对于手机制造商来说,具有强大的吸引力 2。 随着技术的发展,不断发展的图像生成技术给我们提供了越来越好的结构和快 速的方法。目前,图像的产生过程仍然不能保证感觉上的逼真性,即观察者从图像 所获得的感觉和映像与他置身于真实环境获得的一样,而高动态范围图像技术正是 解决这一问题的有效途径。 近些年来,高动态范围图像(high dynamic range image,hdri)在数字图像领 域里变得越来越普遍且重要了,随着硬件设备存储量的不断发展,真实场景的高动 态范围图像已经很容易获取,高动态范围图像的应用领域越来越广泛,例如:使用 图像的光照技术和增强显示,把高动态范围图像应用于真实或计算机生产的对象可 以得到逼真的效果;在图像的建模和绘制及图像核查技术中,利用高动态范围图像 可以避免由于拍摄方向和曝光量不同致使图像间存在亮度和色调的差异等因素而 影响建模、绘制效果;此外,高动态范围图像还能应用于人类视觉系统的模拟、电 影特技、运动模糊、卫星遥感图像等很多领域。 与此相应的一个矛盾是:就目前为止,绝大多数常规显示设备只能支持相对较 低动态范围的显示输出,这是由于受到硬件成本的制约,短时期内很难得到改变。 常规显示设备不能确保用户观察到真实场景图像的全部信息,也无法确保场景感官 的真实性 3-4。因此,如何使高动态范围图像在低动态范围的显示设备上得到最优化 的显示输出,即高动态范围图像的色阶重建问题,成为了一个越来越重要的研究课 题。 理想的hdr图像显示算法应该追求显示效果尽最大可能接近真实场景带给人眼 2 的视觉感受,因此,要同时兼顾可视细节信息的保持和整体明暗对比度的体现。这 两方面是互相矛盾的,算法应该自适应地达到这两方面的平衡。本课题所研究的基 于android手机摄像头与高动态范围技术相结合, 其目的与意义充分体现了android 在摄像头拍照以及对图像处理过程中的强有力的支持。android 摄像头与高动态范 围的结合是一门新生事物,随着 3g 网络和嵌入式技术的发展,手机产品成为人们 关注的热点,正是由于 android 的功能强大,性能良好,才使高动态范围技术能够 应用在手机开发及应用,这是很值得研究与探讨的一个课题。 1.2 国内外研究现状 1.2 国内外研究现状 android 一词的本义是指“机器人”,号称是一款首个为移动终端打造的真正 开放和完整的移动软件。 在国外 ,android 平台的研发队伍阵容很强大,包括 google、htc(宏达电)、 t-mobile、philips、高通、摩托罗拉、魅族、lg、三星以及包括中国移动在内的 34 家企业都将基于该平台上开发手机的新型业务, 应用之间的互联性和通用性将在 最大程度上得到保持。因 34 家企业的加盟,也在很大程度上降低新型手机的研发 成本,完全整合的“全移动功能性产品”将成为“开放手机联盟”的最终目标。这 34 家企业中并不包含全球手机第一巨头诺基亚,把持 uiq 平台的索尼爱立信,以及 凭借 iphone 风光的苹果公司、美国的运营商 at virtual void shuttercallback() = 0; virtual void rawcallback(const sp virtual void jpegcallback(const sp virtual void framecallback(const sp virtual void errorcallback(status_t error) = 0; virtual void autofocuscallback(bool focused) = 0; ; class bncameraclient: public bninterface public: virtual status_t ontransact( uint32_t code, const parcel ; 在定义中,icameraclient 类继承 iinterface,并定义了一个 camera 客户端 的接口,bncameraclient 继承了 bninterface,这是为基于 android 的基础类 binder 机制实现进程通讯而构建的。 根据 bninterface 类模版的 定 义bninterface 类 相 当 于 双 继 承 了 bninterface类 和 icameraclient 类。 icameraclient 类的主要接口部分是几个回调函数 shuttercallback、 rawcallback 和 jpegcallback 等,它们在相应动作发生的时被调用。作为 camera 的“客户端”,需要自己实现几个回调函数,让服务器程序去间接地调用它们。 4.2.3 头文件 camera.h 4.2.3 头文件 camera.h camera.h 是 camera 对外的接口头文件,它被实现 camera jni 的文件 android_hardware_camera.cpp 所调用。camera.h 最主要是定义了一个 camera 类: class camera : public bncameraclient, public ibinder: deathrecipient public: static sp connect(); camera(); void disconnect(); status_t getstatus()return mstatus; 29 status_t setpreviewdisplay(const sp status_t startpreview(); void stoppreview(); status_t autofocus(); status_t takepicture(); status_t setparameters(const string8 string8 getparameters() const; void setshuttercallback(shutter_callback cb, void *cookie); void setrawcallback(frame_callback cb, void *cookie); void setjpegcallback(frame_callback cb, void *cookie); void setframecallback(frame_callback cb, void *cookie); void seterrorcallback(error_callback cb, void *cookie); void setautofocuscallback(autofocus_callback cb, void *cookie); /icameraclient interface virtual void shuttercallback(); virtual void rawcallback(const sp virtual void jpegcallback(const sp virtual void framecallback(const sp virtual void errorcallback(status_t error); virtual void autofocuscallback(bool focused); / 从接口中可以看出 camera 类刚好实现了一个 camera 的基本操作,例如播放 (startpreview) 、停止(stoppreview) 、暂停(takepicture)等。在 camera 类 中 connect()是一个静态函数,它用于得到一个 camera 的实例。在这个类中,具有 设 置 回 调 函 数 的 几 个 函 数 : setshuttercallback 、 setrawcallback和 setjpegcallback 等,这几个函数是为了提供给上层使用的,上层利用这几个设置 回调函数,这些回调函数在相应的回调函数中调用,例如使用 setshuttercallback 设置的回调函数指针被 shuttercallback 所调用。 在定义中, camera 类双继承了 bncameraclient 和 ibinder: deathrecipient, bncameraclient 继承了 bninterface,这是为基于 android 的基 础类 binder 机制实现在进程通讯而构建的。事实上,根据 bninterface 类模版的 定 义bninterface 类 相 当 于 双 继 承 了bninterface和 icameraclient。这是 android 一种常用的定义方式。 继承了deathnotifier类之后, 当这个类作为ibinder使用的时候, 这个binder 即 died 被调用其中的 binderdied 函数。继承这个类基本上实现了一个回调函数的 功能。 4.2.4 头文件 icamera.h 4.2.4 头文件 icamera.h icamera.h 描述的内容是一个实现 camera 功能的接口,其定义如下: 30 class icamera: public iinterface public: declare_meta_interface(camera); virtual void disconnect() = 0; virtual status_t setpreviewdisplay(const sp virtual void sethasframecallback(bool installed) = 0; virtual status_t startpreview() = 0; virtual void stoppreview() = 0; virtual status_t autofocus() = 0; virtual status_t takepicture() = 0; virtual status_t setparameters(const string8 virtual string8 getparameters() const = 0; ; class bncamera: public bninterface public: virtual status_t ontransact(uint32_t code,const parcel ; 在 icamera 类中,主要定义 camera 的功能接口,这个类必须被继承才能够被 使用。值得注意的是,这些接口和 camera 类的接口有些类似,但是它们并没有直 接的关系。事实上,在 camera 类的各种实现中,一般都会通过调用 icamera 类的 实现类来完成。 4.2.5 头文件 icameraservice .h 4.2.5 头文件 icameraservice .h icameraservice.h 用于描述一个 camera 的服务,定义方式如下: class icameraservice : public iinterface public: declare_meta_interface(cameraservice); virtual sp connect(const sp ; class bncameraservice: public bninterface public: virtual status_t ontransact( uint32_t code, const parcel ; 由于具有纯虚函数, icameraservice 以及 bncameraservice 必须被继承实现 才能使用,在 icameraservice 中只定义了一个 connect()接口,它返回值的类型 是 sp,这个 icamera 是提供实现功能的接口。注意,icameraservice 只 31 有连接函数 connect(),没有断开函数,断开的功能由 icamera 接口来提供。 4.2.6 头文件 camerahardwareinterface.h 4.2.6 头文件 camerahardwareinterface.h camerahardwareinterface.h 定义的是一个 camera 底层的接口, 这个类的实现 则是最终实现 camera 的。 camerahardwareinterface 定义了 camera 硬件的接口,如下所示: class camerahardwareinterface : public virtual refbase public: virtual camerahardwareinterface() virtual sp getpreviewheap() const = 0; virtual status_t startpreview(preview_callback cb, void* user) = 0; virtual void stoppreview() = 0; virtual status_t autofocus(autofocus_callback, void* user) = 0; virtual status_t takepicture(shutter_callback,raw_callback, jpeg_callback, void* user) = 0; virtual status_t cancelpicture(bool cancel_shutter, bool cancel_raw, bool cancel_jpeg) = 0; virtual status_t setparameters(const cameraparameters virtual cameraparameters getparameters() const = 0; virtual void release() = 0; virtual status_t dump(int fd, const vector ; 使用 c 语言的方式导出符号: extern “c“ sp opencamerahardware(); 在 程 序 的 其 他 地 方 , 使 用opencamerahardware() 就 可 以 得 到 一 个 camerahardwareinterface,然后调用 camerahardwareinterface 的接口完成 camera 的功能。具体功能在下层调用硬件相关的接口来实现。 4.3 camera 的主要实现分析 4.3.1 java 程序部分 4.3 camera 的主要实现分析 4.3.1 java 程序部分 在packages/apps/camera/src/com/android/camera/ 目录的camera.java文件 中,包含了对 camera 的调用,在 camera.java 中包含了对包的引用: import android.hardware.camera.picturecallback; import android.hardware.camera.size; 在这里定义的 camera 类继承了活动 activity 类,在它的内部,包含了一个 android.hardware.camera。 public class camera extends activity implements view.onclicklistener, surfaceholder.callback android.hardware.camera mcameradevice; 32 对 camera 功能的一些调用如下所示: mcameradevice.takepicture(mshuttercallback,mrawpicturecallback, mjpegpicturecallback); mcameradevice.startpreview(); mcameradevice.stoppreview(); startpreview、 stoppreview 和 takepicture 等接口就是通过 java 本地调用 (jni) 来实现的。 frameworks/base/core/java/android/hardware/目录中的 camera.java 文件提供 了一个 java 类:camera。 public class camera 在这个类当中,大部分代码使用 jni 调用下层得到,例如: public void setparameters(parameters params) log.e(tag,“setparameters()“); /params.dump(); native_setparameters(params.flatten(); 再者,例如以下代码: public final void setpreviewdisplay(surfaceholder holder) setpreviewdisplay(holder.getsurface(); private native final void setpreviewdisplay(surface surface); 两个 setpreviewdisplay 参数不同, 后一个是本地方法, 参数为 surface 类型, 前一个通过调用后一个实现,但自己的参数以 surfaceholder 作为类型。 4.3.2 camera 的 java 本地调用部分 4.3.2 camera 的 java 本地调用部分 camera 的 java 本地调用(jni)部分在 frameworks/base/core/jni/目录的 android_hardware_camera.cpp 中的文件中实现。 android_hardware_camera.cpp 中定义了一个 jninativemethod(java 本地调 用方法)类型的数组 gmethods,如下所示: static jninativemethod cammethods = “native_setup“,“(ljava/lang/object;)v“, (void*)android_hardware_camera_native_setup , “native_release“,“()v“,(void*)android_hardware_camera_release , “setpreviewdisplay“,“(landroid/view/surface;)v“, (void *)android_hardware_camera_setpreviewdisplay , “startpreview“,“()v“,(void *)android_hardware_camera_startpreview , “stoppreview“, “()v“, (void *)android_hardware_camera_stoppreview , 33 “sethaspreviewcallback“,“(z)v“, (void*)android_hardware_camera_sethaspreviewcallback , “native_autofocus“,“()v“,(void*)android_hardware_camera_autofocus , “native_takepicture“,“()v“, (void*)android_hardware_camera_takepicture , “native_setparameters“,“(ljava/lang/string;)v“, (void*)android_hardware_camera_setparameters , “native_getparameters“,“()ljava/lang/string;“, (void*)android_hardware_camera_getparameters ; jninativemethod 的第一个成员是一个字符串, 表示了 java 本地调用方法的名 称, 这个名称是在 java 程序中调用的名称; 第二个成员也是一个字符串, 表示 java 本地调用方法的参数和返回值;第三个成员是 java 本地调用方法对应的 c 语言函 数。 register_android_hardware_camera函 数 将gmethods注 册 为 的 类 “android/media/camera“,其主要的实现如下所示: int register_android_hardware_camera(jnienv *env) /register native functions return androidruntime:registernativemethods(env, “android/hardware/camera“, cammethods, nelem(cammethods); android/hardware/camera 对应 java 的类 android.hardware.camera。 4.3.3 camera 本地库 libui.so 4.3.3 camera 本地库 libui.so frameworks/base/libs/ui/中的 camera.cpp 文件用于实现 camera.h 提供的接 口,其中一个重要的片段如下所示: const sp if(mcameraservice.get() = 0) sp sm = defaultservicemanager(); sp binder do binder = sm-getservice(string16(“media.camera“); if(binder!= 0) break; logw(“cameraservice not published,waiting.“); usleep(500000); /0.5s while(true); if(mdeathnotifier = null) mdeathnotifier = new deathnotifier(); 34 binder-linktodeath(mdeathnotifier); mcameraservice = interface_cast(binder); loge_if(mcameraservice=0,“no cameraservice! “); return mcameraservice; 其中最重要的一点是 binder = sm-getservice(string16(“media.camera“); 这个调用是用来得到一个名称为 media.camera 的服务,这个调用返回值的类型为 ibinder,根据实现将其转换成类型 icameraservice 使用。 一个函数 connect 的实现 如下所示: sp camera:connect() sp c = new camera(); const sp if(cs != 0) c-mcamera = cs-connect(c); if(c-mcamera != 0) c-mcamera-asbinder()-linktodeath(c); c-mstatus = no_error; return c; connect 通过调用 getcameraservice 得到一个 icameraservice,再通过 icameraservice 的 cs-connect(c)得到一个 icamera 类型的指针。调用 connect 将得到一个 camera 的指针,正常情况下 camera 的成员 mcamera 已经初始化完成。 一个具体的函数 startpreview 如下所示: status_t camera:startpreview() return mcamera-startpreview(); 这些操作可以直接对 mcamera 来进行,它是 icamera 类型的指针。其他一些函 数的实现也与 setdatasource 类似。 libmedia.so 中的其他一些文件与头文件的名称相同,它们是: frameworks/base/libs/ui/icameraclient.cpp frameworks/base/libs/ui/icamera.cpp frameworks/base/libs/ui/icameraservice.cpp 在此处,bncameraclient 和 bncameraservice 类虽然实现了 ontransact()函 数,但是由于还有纯虚函数没有实现,因此这个类都是不能实例化的。 icameraclient.cpp 中的 bncameraclient 在别的地方也没有实现;而 35 icameraservice.cpp 中的 bncameraservice 类在别的地方被继承并实现, 继承者实 现了 camera 服务的具体功能。 4.3.4 camera 服务 libcameraservice.so 4.3.4 camera 服务 libcameraservice.so frameworks/base/camera/libcameraservice/用于实现一个 camera 的服务, 这个服务是继承了 icameraservice 的具体实现。 在这里的 android.mk 文件中,使用宏 use_camera_stub 决定是否使用真的 camera,如果宏为真,则使用 camerahardwarestub.cpp 和 fakecamera.cpp 构造一 个假的 camera,如果为假则使用 cameraservice.cpp 构造一个实际上的 camera 服 务。 cameraservice.cpp 是继承 bncameraservice 的实现,在这个类的内部又定义 了类 client,cameraservice:client 继承了 bncamera。在运作的过程中 cameraservice:connect()函数用于得到一个 cameraservice:client,在使用过 程中,主要是通过调用这个类的接口来实现完成 camera 的功能,由于 cameraservice:client 本身继承了 bncamera 类,而 bncamera 类继承了 icamera, 因此这个类是可以被当成 icamera 来使用的。 cameraservice 和 cameraservice:client 两个类的结果如下所示: class cameraservice : public bncameraservice class client : public bncamera; wp mclient; 在cameraservice中的一个静态函数instantiate()用于初始化一个camera服 务,如下所示: void cameraservice:instantiate() defaultservicemanager()-addservice(string16(“media.camera“),new cameraservice(); 事 实 上 , cameraservice:instantiate() 这 个 函 数 注 册 了 一 个 名 称 为 “media.camera“的服务,这个服务和 camera.cpp 中调用的名称相对应。 camera 整个运作机制是:在 camera.cpp 中可以调用 icameraservice 的接口, 这时实际上调用的是 bpcameraservice, 而 bpcameraservice 又通过 binder 机制和 bncameraservice 实现两个进程的通讯。而 bpcameraservice 的实现就是这里的 cameraservice。因此,camera.cpp 虽然是在另外一个进程中运行,但是调用 icameraservice 的接口就像直接调用一样,从 connect()中可以得到一个 icamera 类型的指针,真正指针的实现实际上是 cameraservice:client。而这些 camera 功 能的具体实现,就是 cameraservice:client 所实现的了,其构造函数如下所示: cameraservice:client:client(const sp mhasframecallback = false; 构造函数中,调用 opencamerahardware()得到一个 camerahardwareinterface 类型的指针,并作为其成员 mhardware。以后对实际的 camera 的操作都通过对这个 指针进行。这是一个简单的直接调用关系。 事实上,真正的 camera 功能己通过实现 camerahardwareinterface 类来完成。 在这个库中的 camerahardwarestub.h 和 camerahardwarestub.cpp 两个文件定义了 一个模块的接口,在没有 camera 硬件的情况下使用,例如在仿真器的情况下使用 的文件就是 camerahardwarestub.cpp 和它依赖的文件 fakecamera.cpp。 camerahardwarestub 类的结构如下所示: class camerahardwarestub : public camerahardwareinterface class previewthread : public thread ; ; 在类 camerahardwarestub 当中,包含一个线程类 previewthread,这个线程用 于处理 preview,即负责刷新取景器的内容。实际的 camera 硬件接口通常可以通过 对 v4l2 捕获驱动的调用来实现, 同时还需要一个 jpeg 编码程序将从驱动中取出的 数据编码成 jpeg 文件 39。 4.4 camera 工作过程 4.4.1 camera service 的启动 4.4 camera 工作过程 4.4.1 camera service 的启动 app_main process: 进程通过 androidruntime 调用 register_jni_procs 向 jni 注册模块的 native 函数供 jvm 调用。 androidruntime:registernativemethods(env, “android/hardware/camera“, cammethods, nelem(cammethods); 其中 cammethods 的定义已经在 4.3.2 小节中给出。 mediaserver proces : 进 程 注 册 了 以 下 几 个 server: audioflinger 、 mediaplayerserver、cameraservice. int main(int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论