这里主要讲述一下面向手机中照相机的应用开发。ICamera能够使应用访问手机中的照相机传感器,配置照相机的快照和录像模式,并提供多种的记录和编码的方式(图14-9)。
图14-9:ICamera的体系结构
使用ICamera 的应用可以实现取景,以类似JPEG格式编码和存储相片,以类似MPEG4格式编码和存储录像,对照相机的对比度,缩放,聚焦,白平衡等属性进行设定,监听并处理与照相机相关的各种异步事件得等,其状态机示意图如14-10所示。
图14-10:ICamera的状态机
使用ICamera时,首先通过AEECLSID_CAMERA创建接口:
ISHELL_CreateInstance(pme->a.m_pIShell,AEECLSID_CAMERA,(void **)&pme->m_pICamera);
然后注册回调函数来接收Camera的事件,
ICAMERA_RegisterNotify(pme->pICamera, CApp_CameraNotify,pme);
接下来,设定取景模式和显示区域:
ICAMERA_SetParm(pme->pICamera, CAM_PARM_PREVIEW_TYPE,CAM_PREVIEW_SNAPSHOT, 0);
ICAMERA_SetDisplaySize(pme->m_pICamera, &pme->m_sizeDisplay);
ICAMERA_SetSize(pme->m_pICamera, &pme->m_sizeFrame);
就编码方式而言,照相时可以指定JPEG方式,录像时可以指定MPEG4和AAC的音频编码
ICAMERA_SetVideoEncode(pme->m_pICamera,AEECLSID_JPEG, 0);
ICAMERA_SetVideoEncode(pme->m_pICamera,AEECLSID_MPEG4, 0);
ICAMERA_SetAudioEncode(pme->m_pICamera,AEECLSID_AAC, 0);
开始和停止取景可以调用ICAMERA_Preview()和ICamera_Stop()完成,照相和录像的中的异步事件主要包含在数据结构AEECameraNotify中:
typedef struct AEECameraNotify
{
ICamera * pCam;
int16 nCmd;
int16 nSubCmd;
int16 nStatus;
int16 nReserved;
void * pData;
uint32 dwSize;
} AEECameraNotify;
其中nStatus定义了类似CAM_STATUS_XXX的状态代码,nCmd 定义了指令代码(例如 CAM_CMD_START),nSubCmd 包含了子指令的代码(例如CAM_CMD_START, 子指令的代码包含了类似CAM_MODE_XXX等模式信息),pData 包含了与事件相关的数据,dwSize 是指这些数据的长度。 表14-3介绍了一些与取景相关的事件解释。
事件组合
|
事件解释
|
{CAM_CMD_START, CAM_MODE_PREVIEW,CAM_STATUS_START}
|
开始取景,ICamera接口对象由READY转换成PREVIEW状态
|
{CAM_CMD_START, CAM_MODE_PREVIEW,
CAM_STATUS_FRAME}
|
ICAMERA_GetFrame()可以获得当前的这帧图像
|
{CAM_CMD_START, CAM_MODE_PREVIEW,
CAM_STATUS_DONE}
|
取景结束,ICamera接口对象从PREVIEW转换成状态READY
|
{CAM_CMD_START, CAM_MODE_PREVIEW,
CAM_STATUS_ABORT, CAM_EXXX_}
|
取景时异常退出
|
表 14-3:照相机取景模式中的事件
ICamera接口对象在取景时的状态转移时序如图14-11所示。
图14-11:ICamera取景时的状态转移时序
下面是在使用ICamera的录像模式中处理帧事件的示例:
static void MyApp_CameraNotify(MyApp *pme, AEECameraNotify * pn){
switch (pn->nStatus){
case CAM_STATUS_START:
// Preview has begun...
break;
case CAM_STATUS_FRAME:
{
IBitmap * pFrame;
AEEBitmapInfo bi;
// Get the frame.
ICAMERA_GetFrame(pme->m_pICamera, &pFrame));
// Get the bitmap info.
IBITMAP_GetInfo(pFrame, &bi, sizeof(bi));
// Display the frame at (0, 0) location of the screen
IDISPLAY_BitBlt(pme, 0, 0, bi.cx, bi.cy, pFrame, 0, 0, AEE_RO_COPY);
IBITMAP_Release(pFrame);
break;
}
case CAM_STATUS_DONE:
// ICAMERA_Stop() stopprf preview operation stopped.
break;
case CAM_STATUS_ABORT:
// Preview got aborted.
break;
}
}
如果希望完成一个照相的操作,首先要设定照片的存储位置,然后执行照相操作即可。
ICAMERA_SetMediaData(pme->m_pICamera, &md);
ICAMERA_RecordSnapshot(pme->m_pICamera);
原始图像是以JPEG格式保存的,ICamera接口对象照相时的状态转移时序如图14-12所示。
图14-12:ICamera执行照相操作的状态转移时序
在录像的时候,ICamera 接口对象会捕获原始的图像帧和相关的音频数据,然后发送帧的相关事件给BREW应用,同时对帧和音频数据以MPEG4/AAC的格式进行编码。使用时,同样先要指定录像的存储位置,然后执行录像操作,录像完毕时终止录像操作。
ICAMERA_SetMediaData(pme->m_pICamera, &md);
ICAMERA_RecordMovie(pme->m_pICamera);
ICAMERA_Stop(pme->m_pICamera);
ICamera接口对象录像时的状态转移时序如图14-13所示。
图14-13:ICamera执行录像操作的状态转移时序
分享到:
相关推荐
深入brew开发,很好的参考进阶资料。对于学习C语言也很有一定的帮助。
BREW开发培训系列——高级——BREW 面向对象特点及其应用.pdf
联通博路编写的开发者进阶教程,pdf版本,转载。 共18部分: 第一部分目录如下: Brew概述 Brew技术演进 Brew3.1.5 sp01 Brew 4.0简介 Brew Mobile Platform简介 Brew 技术优势 Brew与其他技术的对比 以后各部分为...
此书简洁而深入的介绍了brew的基本原理,非常适合已经入门但是还未从整体上掌握的brew开发者。
目录:(BREW 初级开发者 教程):第1章 BREW技术特点与发展趋势第2章 BREW SDK简介 第3章 BREW开发基础第4章 BREW手机简介 第5章 ISHELL第6章 IDISPLAY使用简介 第7章 ISTATIC第8章 IMENUCTL 第9章 IImage第10章 ...
为了优化全网增值业务合作管理,促进业务健康发展,在《中国电信移动增值业务合作管理 ... 现发布《中国电信全网增值业务合作管理办法(V2.0版)》,包括总册、短信业务分册、彩信业务分册、WAP业务分册、BREW业务...
BREW开发培训系列——高级——BREW 语音呼叫业务
BREW 开发者 进阶教程(共18章)BREW 开发者 进阶教程(共18章)BREW 开发者 进阶教程(共18章)BREW 开发者 进阶教程(共18章)
BREW开发培训系列——BREW平台与演进——BREW概述、发展现状及趋势
深入研究BREW手机游戏开发BREW开发-海信(王宏兵),不仅只是介绍了brew的游戏开发。
———————————————————————————————————————————— 替换bottles 镜像源(可选) 该镜像是 Homebrew 二进制预编译包的镜像。 临时替换 export HOMEBREW_BOTTLE_DOMAIN=...
brew 手机游戏开发实例brew 手机游戏开发实例brew 手机游戏开发实例brew 手机游戏开发实例
BREW编程经验——Dialog机制的使用方式.doc
基于brew平台下短信增值业务的设计与实现,张冬梅,,在3G移动通信网络中,基于短消息业务平台提供的短消息增值业务将有着巨大的市场需求。本文通过对BREW(Binary Run Environment Wireless,无线�
高通brew初级培训+培训资料+Brew开发技术文档.doc+海信BREW开发.pdf
深入brew开发pdf与源代码,给大家分享了
BREW SDK介绍 BREW 的事件驱动机制 BREW 模块概念
� 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商结成合作伙伴,开发 既 有用又有吸引力的移动服务,并推广这些产品。 Android 进一步推进了 " 随时随地为每个人提供信息 " 这一企 业 ...
基于brew开发小程序-秒表,初学brew时写的小程序,希望对你有用